summaryrefslogtreecommitdiff
path: root/device/lib/stm8-large
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /device/lib/stm8-large
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'device/lib/stm8-large')
-rw-r--r--device/lib/stm8-large/Makefile102
-rw-r--r--device/lib/stm8-large/Makefile.in102
-rw-r--r--device/lib/stm8-large/__assert.asm81
-rw-r--r--device/lib/stm8-large/__assert.lst88
-rw-r--r--device/lib/stm8-large/__assert.rel42
-rw-r--r--device/lib/stm8-large/__assert.sym31
-rw-r--r--device/lib/stm8-large/__mulsint2slong.lst106
-rw-r--r--device/lib/stm8-large/__mulsint2slong.rel45
-rw-r--r--device/lib/stm8-large/__mulsint2slong.s106
-rw-r--r--device/lib/stm8-large/__mulsint2slong.sym18
-rw-r--r--device/lib/stm8-large/_atof.asm310
-rw-r--r--device/lib/stm8-large/_atof.lst310
-rw-r--r--device/lib/stm8-large/_atof.rel127
-rw-r--r--device/lib/stm8-large/_atof.sym35
-rw-r--r--device/lib/stm8-large/_divschar.asm122
-rw-r--r--device/lib/stm8-large/_divschar.lst122
-rw-r--r--device/lib/stm8-large/_divschar.rel42
-rw-r--r--device/lib/stm8-large/_divschar.sym32
-rw-r--r--device/lib/stm8-large/_divsint.asm111
-rw-r--r--device/lib/stm8-large/_divsint.lst111
-rw-r--r--device/lib/stm8-large/_divsint.rel59
-rw-r--r--device/lib/stm8-large/_divsint.sym29
-rw-r--r--device/lib/stm8-large/_divslong.asm151
-rw-r--r--device/lib/stm8-large/_divslong.lst151
-rw-r--r--device/lib/stm8-large/_divslong.rel78
-rw-r--r--device/lib/stm8-large/_divslong.sym29
-rw-r--r--device/lib/stm8-large/_divslonglong.asm246
-rw-r--r--device/lib/stm8-large/_divslonglong.lst246
-rw-r--r--device/lib/stm8-large/_divslonglong.rel100
-rw-r--r--device/lib/stm8-large/_divslonglong.sym29
-rw-r--r--device/lib/stm8-large/_divulong.asm145
-rw-r--r--device/lib/stm8-large/_divulong.lst145
-rw-r--r--device/lib/stm8-large/_divulong.rel45
-rw-r--r--device/lib/stm8-large/_divulong.sym29
-rw-r--r--device/lib/stm8-large/_divulonglong.asm215
-rw-r--r--device/lib/stm8-large/_divulonglong.lst215
-rw-r--r--device/lib/stm8-large/_divulonglong.rel73
-rw-r--r--device/lib/stm8-large/_divulonglong.sym29
-rw-r--r--device/lib/stm8-large/_fs2schar.asm98
-rw-r--r--device/lib/stm8-large/_fs2schar.lst98
-rw-r--r--device/lib/stm8-large/_fs2schar.rel42
-rw-r--r--device/lib/stm8-large/_fs2schar.sym29
-rw-r--r--device/lib/stm8-large/_fs2sint.asm98
-rw-r--r--device/lib/stm8-large/_fs2sint.lst98
-rw-r--r--device/lib/stm8-large/_fs2sint.rel42
-rw-r--r--device/lib/stm8-large/_fs2sint.sym29
-rw-r--r--device/lib/stm8-large/_fs2slong.asm115
-rw-r--r--device/lib/stm8-large/_fs2slong.lst115
-rw-r--r--device/lib/stm8-large/_fs2slong.rel47
-rw-r--r--device/lib/stm8-large/_fs2slong.sym31
-rw-r--r--device/lib/stm8-large/_fs2uchar.asm80
-rw-r--r--device/lib/stm8-large/_fs2uchar.lst80
-rw-r--r--device/lib/stm8-large/_fs2uchar.rel34
-rw-r--r--device/lib/stm8-large/_fs2uchar.sym29
-rw-r--r--device/lib/stm8-large/_fs2uint.asm88
-rw-r--r--device/lib/stm8-large/_fs2uint.lst88
-rw-r--r--device/lib/stm8-large/_fs2uint.rel36
-rw-r--r--device/lib/stm8-large/_fs2uint.sym29
-rw-r--r--device/lib/stm8-large/_fs2ulong.asm126
-rw-r--r--device/lib/stm8-large/_fs2ulong.lst126
-rw-r--r--device/lib/stm8-large/_fs2ulong.rel53
-rw-r--r--device/lib/stm8-large/_fs2ulong.sym29
-rw-r--r--device/lib/stm8-large/_fsadd.asm477
-rw-r--r--device/lib/stm8-large/_fsadd.lst477
-rw-r--r--device/lib/stm8-large/_fsadd.rel223
-rw-r--r--device/lib/stm8-large/_fsadd.sym29
-rw-r--r--device/lib/stm8-large/_fsdiv.asm468
-rw-r--r--device/lib/stm8-large/_fsdiv.lst468
-rw-r--r--device/lib/stm8-large/_fsdiv.rel184
-rw-r--r--device/lib/stm8-large/_fsdiv.sym31
-rw-r--r--device/lib/stm8-large/_fseq.asm118
-rw-r--r--device/lib/stm8-large/_fseq.lst118
-rw-r--r--device/lib/stm8-large/_fseq.rel45
-rw-r--r--device/lib/stm8-large/_fseq.sym29
-rw-r--r--device/lib/stm8-large/_fslt.asm163
-rw-r--r--device/lib/stm8-large/_fslt.lst163
-rw-r--r--device/lib/stm8-large/_fslt.rel63
-rw-r--r--device/lib/stm8-large/_fslt.sym29
-rw-r--r--device/lib/stm8-large/_fsmul.asm391
-rw-r--r--device/lib/stm8-large/_fsmul.lst391
-rw-r--r--device/lib/stm8-large/_fsmul.rel158
-rw-r--r--device/lib/stm8-large/_fsmul.sym29
-rw-r--r--device/lib/stm8-large/_fsneq.asm118
-rw-r--r--device/lib/stm8-large/_fsneq.lst118
-rw-r--r--device/lib/stm8-large/_fsneq.rel45
-rw-r--r--device/lib/stm8-large/_fsneq.sym29
-rw-r--r--device/lib/stm8-large/_fssub.asm83
-rw-r--r--device/lib/stm8-large/_fssub.lst83
-rw-r--r--device/lib/stm8-large/_fssub.rel26
-rw-r--r--device/lib/stm8-large/_fssub.sym29
-rw-r--r--device/lib/stm8-large/_itoa.asm185
-rw-r--r--device/lib/stm8-large/_itoa.lst185
-rw-r--r--device/lib/stm8-large/_itoa.rel66
-rw-r--r--device/lib/stm8-large/_itoa.sym29
-rw-r--r--device/lib/stm8-large/_ltoa.asm178
-rw-r--r--device/lib/stm8-large/_ltoa.lst178
-rw-r--r--device/lib/stm8-large/_ltoa.rel68
-rw-r--r--device/lib/stm8-large/_ltoa.sym32
-rw-r--r--device/lib/stm8-large/_memchr.asm91
-rw-r--r--device/lib/stm8-large/_memchr.lst91
-rw-r--r--device/lib/stm8-large/_memchr.rel39
-rw-r--r--device/lib/stm8-large/_memchr.sym29
-rw-r--r--device/lib/stm8-large/_memcmp.asm101
-rw-r--r--device/lib/stm8-large/_memcmp.lst101
-rw-r--r--device/lib/stm8-large/_memcmp.rel37
-rw-r--r--device/lib/stm8-large/_memcmp.sym29
-rw-r--r--device/lib/stm8-large/_memmove.asm140
-rw-r--r--device/lib/stm8-large/_memmove.lst140
-rw-r--r--device/lib/stm8-large/_memmove.rel49
-rw-r--r--device/lib/stm8-large/_memmove.sym29
-rw-r--r--device/lib/stm8-large/_memset.asm83
-rw-r--r--device/lib/stm8-large/_memset.lst83
-rw-r--r--device/lib/stm8-large/_memset.rel31
-rw-r--r--device/lib/stm8-large/_memset.sym29
-rw-r--r--device/lib/stm8-large/_modschar.asm122
-rw-r--r--device/lib/stm8-large/_modschar.lst122
-rw-r--r--device/lib/stm8-large/_modschar.rel42
-rw-r--r--device/lib/stm8-large/_modschar.sym32
-rw-r--r--device/lib/stm8-large/_modsint.asm103
-rw-r--r--device/lib/stm8-large/_modsint.lst103
-rw-r--r--device/lib/stm8-large/_modsint.rel51
-rw-r--r--device/lib/stm8-large/_modsint.sym29
-rw-r--r--device/lib/stm8-large/_modslong.asm142
-rw-r--r--device/lib/stm8-large/_modslong.lst142
-rw-r--r--device/lib/stm8-large/_modslong.rel70
-rw-r--r--device/lib/stm8-large/_modslong.sym29
-rw-r--r--device/lib/stm8-large/_modslonglong.asm243
-rw-r--r--device/lib/stm8-large/_modslonglong.lst243
-rw-r--r--device/lib/stm8-large/_modslonglong.rel100
-rw-r--r--device/lib/stm8-large/_modslonglong.sym29
-rw-r--r--device/lib/stm8-large/_modulong.asm132
-rw-r--r--device/lib/stm8-large/_modulong.lst132
-rw-r--r--device/lib/stm8-large/_modulong.rel51
-rw-r--r--device/lib/stm8-large/_modulong.sym29
-rw-r--r--device/lib/stm8-large/_modulonglong.asm186
-rw-r--r--device/lib/stm8-large/_modulonglong.lst186
-rw-r--r--device/lib/stm8-large/_modulonglong.rel69
-rw-r--r--device/lib/stm8-large/_modulonglong.sym29
-rw-r--r--device/lib/stm8-large/_mulint.asm94
-rw-r--r--device/lib/stm8-large/_mulint.lst94
-rw-r--r--device/lib/stm8-large/_mulint.rel29
-rw-r--r--device/lib/stm8-large/_mulint.sym29
-rw-r--r--device/lib/stm8-large/_mullong.asm225
-rw-r--r--device/lib/stm8-large/_mullong.lst225
-rw-r--r--device/lib/stm8-large/_mullong.rel61
-rw-r--r--device/lib/stm8-large/_mullong.sym29
-rw-r--r--device/lib/stm8-large/_mullonglong.asm226
-rw-r--r--device/lib/stm8-large/_mullonglong.lst226
-rw-r--r--device/lib/stm8-large/_mullonglong.rel99
-rw-r--r--device/lib/stm8-large/_mullonglong.sym29
-rw-r--r--device/lib/stm8-large/_mulschar.asm122
-rw-r--r--device/lib/stm8-large/_mulschar.lst122
-rw-r--r--device/lib/stm8-large/_mulschar.rel42
-rw-r--r--device/lib/stm8-large/_mulschar.sym32
-rw-r--r--device/lib/stm8-large/_rlslonglong.asm102
-rw-r--r--device/lib/stm8-large/_rlslonglong.lst102
-rw-r--r--device/lib/stm8-large/_rlslonglong.rel39
-rw-r--r--device/lib/stm8-large/_rlslonglong.sym29
-rw-r--r--device/lib/stm8-large/_rlulonglong.asm199
-rw-r--r--device/lib/stm8-large/_rlulonglong.lst199
-rw-r--r--device/lib/stm8-large/_rlulonglong.rel77
-rw-r--r--device/lib/stm8-large/_rlulonglong.sym29
-rw-r--r--device/lib/stm8-large/_rrslonglong.asm211
-rw-r--r--device/lib/stm8-large/_rrslonglong.lst211
-rw-r--r--device/lib/stm8-large/_rrslonglong.rel83
-rw-r--r--device/lib/stm8-large/_rrslonglong.sym29
-rw-r--r--device/lib/stm8-large/_rrulonglong.asm201
-rw-r--r--device/lib/stm8-large/_rrulonglong.lst201
-rw-r--r--device/lib/stm8-large/_rrulonglong.rel77
-rw-r--r--device/lib/stm8-large/_rrulonglong.sym29
-rw-r--r--device/lib/stm8-large/_schar2fs.asm73
-rw-r--r--device/lib/stm8-large/_schar2fs.lst73
-rw-r--r--device/lib/stm8-large/_schar2fs.rel24
-rw-r--r--device/lib/stm8-large/_schar2fs.sym29
-rw-r--r--device/lib/stm8-large/_sint2fs.asm71
-rw-r--r--device/lib/stm8-large/_sint2fs.lst71
-rw-r--r--device/lib/stm8-large/_sint2fs.rel26
-rw-r--r--device/lib/stm8-large/_sint2fs.sym29
-rw-r--r--device/lib/stm8-large/_slong2fs.asm88
-rw-r--r--device/lib/stm8-large/_slong2fs.lst88
-rw-r--r--device/lib/stm8-large/_slong2fs.rel36
-rw-r--r--device/lib/stm8-large/_slong2fs.sym29
-rw-r--r--device/lib/stm8-large/_startup.asm61
-rw-r--r--device/lib/stm8-large/_startup.lst61
-rw-r--r--device/lib/stm8-large/_startup.rel21
-rw-r--r--device/lib/stm8-large/_startup.sym29
-rw-r--r--device/lib/stm8-large/_strcat.asm80
-rw-r--r--device/lib/stm8-large/_strcat.lst80
-rw-r--r--device/lib/stm8-large/_strcat.rel33
-rw-r--r--device/lib/stm8-large/_strcat.sym29
-rw-r--r--device/lib/stm8-large/_strchr.asm93
-rw-r--r--device/lib/stm8-large/_strchr.lst93
-rw-r--r--device/lib/stm8-large/_strchr.rel43
-rw-r--r--device/lib/stm8-large/_strchr.sym29
-rw-r--r--device/lib/stm8-large/_strcmp.asm94
-rw-r--r--device/lib/stm8-large/_strcmp.lst94
-rw-r--r--device/lib/stm8-large/_strcmp.rel33
-rw-r--r--device/lib/stm8-large/_strcmp.sym29
-rw-r--r--device/lib/stm8-large/_strcpy.asm73
-rw-r--r--device/lib/stm8-large/_strcpy.lst73
-rw-r--r--device/lib/stm8-large/_strcpy.rel25
-rw-r--r--device/lib/stm8-large/_strcpy.sym29
-rw-r--r--device/lib/stm8-large/_strcspn.asm93
-rw-r--r--device/lib/stm8-large/_strcspn.lst93
-rw-r--r--device/lib/stm8-large/_strcspn.rel34
-rw-r--r--device/lib/stm8-large/_strcspn.sym29
-rw-r--r--device/lib/stm8-large/_strlen.asm72
-rw-r--r--device/lib/stm8-large/_strlen.lst72
-rw-r--r--device/lib/stm8-large/_strlen.rel29
-rw-r--r--device/lib/stm8-large/_strlen.sym29
-rw-r--r--device/lib/stm8-large/_strncat.asm115
-rw-r--r--device/lib/stm8-large/_strncat.lst115
-rw-r--r--device/lib/stm8-large/_strncat.rel43
-rw-r--r--device/lib/stm8-large/_strncat.sym29
-rw-r--r--device/lib/stm8-large/_strncmp.asm104
-rw-r--r--device/lib/stm8-large/_strncmp.lst104
-rw-r--r--device/lib/stm8-large/_strncmp.rel39
-rw-r--r--device/lib/stm8-large/_strncmp.sym29
-rw-r--r--device/lib/stm8-large/_strncpy.asm104
-rw-r--r--device/lib/stm8-large/_strncpy.lst104
-rw-r--r--device/lib/stm8-large/_strncpy.rel41
-rw-r--r--device/lib/stm8-large/_strncpy.sym29
-rw-r--r--device/lib/stm8-large/_strpbrk.asm101
-rw-r--r--device/lib/stm8-large/_strpbrk.lst101
-rw-r--r--device/lib/stm8-large/_strpbrk.rel42
-rw-r--r--device/lib/stm8-large/_strpbrk.sym29
-rw-r--r--device/lib/stm8-large/_strrchr.asm102
-rw-r--r--device/lib/stm8-large/_strrchr.lst102
-rw-r--r--device/lib/stm8-large/_strrchr.rel51
-rw-r--r--device/lib/stm8-large/_strrchr.sym29
-rw-r--r--device/lib/stm8-large/_strspn.asm93
-rw-r--r--device/lib/stm8-large/_strspn.lst93
-rw-r--r--device/lib/stm8-large/_strspn.rel34
-rw-r--r--device/lib/stm8-large/_strspn.sym29
-rw-r--r--device/lib/stm8-large/_strstr.asm134
-rw-r--r--device/lib/stm8-large/_strstr.lst134
-rw-r--r--device/lib/stm8-large/_strstr.rel57
-rw-r--r--device/lib/stm8-large/_strstr.sym29
-rw-r--r--device/lib/stm8-large/_strtok.asm148
-rw-r--r--device/lib/stm8-large/_strtok.lst148
-rw-r--r--device/lib/stm8-large/_strtok.rel66
-rw-r--r--device/lib/stm8-large/_strtok.sym31
-rw-r--r--device/lib/stm8-large/_uchar2fs.asm69
-rw-r--r--device/lib/stm8-large/_uchar2fs.lst69
-rw-r--r--device/lib/stm8-large/_uchar2fs.rel24
-rw-r--r--device/lib/stm8-large/_uchar2fs.sym29
-rw-r--r--device/lib/stm8-large/_uint2fs.asm67
-rw-r--r--device/lib/stm8-large/_uint2fs.lst67
-rw-r--r--device/lib/stm8-large/_uint2fs.rel22
-rw-r--r--device/lib/stm8-large/_uint2fs.sym29
-rw-r--r--device/lib/stm8-large/_ulong2fs.asm152
-rw-r--r--device/lib/stm8-large/_ulong2fs.lst152
-rw-r--r--device/lib/stm8-large/_ulong2fs.rel67
-rw-r--r--device/lib/stm8-large/_ulong2fs.sym29
-rw-r--r--device/lib/stm8-large/abs.asm68
-rw-r--r--device/lib/stm8-large/abs.lst68
-rw-r--r--device/lib/stm8-large/abs.rel29
-rw-r--r--device/lib/stm8-large/abs.sym29
-rw-r--r--device/lib/stm8-large/acosf.asm113
-rw-r--r--device/lib/stm8-large/acosf.lst113
-rw-r--r--device/lib/stm8-large/acosf.rel49
-rw-r--r--device/lib/stm8-large/acosf.sym31
-rw-r--r--device/lib/stm8-large/aligned_alloc.asm65
-rw-r--r--device/lib/stm8-large/aligned_alloc.lst65
-rw-r--r--device/lib/stm8-large/aligned_alloc.rel22
-rw-r--r--device/lib/stm8-large/aligned_alloc.sym29
-rw-r--r--device/lib/stm8-large/asincosf.asm445
-rw-r--r--device/lib/stm8-large/asincosf.lst445
-rw-r--r--device/lib/stm8-large/asincosf.rel176
-rw-r--r--device/lib/stm8-large/asincosf.sym40
-rw-r--r--device/lib/stm8-large/asinf.asm113
-rw-r--r--device/lib/stm8-large/asinf.lst113
-rw-r--r--device/lib/stm8-large/asinf.rel51
-rw-r--r--device/lib/stm8-large/asinf.sym31
-rw-r--r--device/lib/stm8-large/atan2f.asm236
-rw-r--r--device/lib/stm8-large/atan2f.lst236
-rw-r--r--device/lib/stm8-large/atan2f.rel103
-rw-r--r--device/lib/stm8-large/atan2f.sym35
-rw-r--r--device/lib/stm8-large/atanf.asm340
-rw-r--r--device/lib/stm8-large/atanf.lst340
-rw-r--r--device/lib/stm8-large/atanf.rel131
-rw-r--r--device/lib/stm8-large/atanf.sym35
-rw-r--r--device/lib/stm8-large/atoi.asm145
-rw-r--r--device/lib/stm8-large/atoi.lst145
-rw-r--r--device/lib/stm8-large/atoi.rel73
-rw-r--r--device/lib/stm8-large/atoi.sym29
-rw-r--r--device/lib/stm8-large/atol.asm177
-rw-r--r--device/lib/stm8-large/atol.lst177
-rw-r--r--device/lib/stm8-large/atol.rel86
-rw-r--r--device/lib/stm8-large/atol.sym29
-rw-r--r--device/lib/stm8-large/atoll.asm51
-rw-r--r--device/lib/stm8-large/atoll.lst51
-rw-r--r--device/lib/stm8-large/atoll.rel16
-rw-r--r--device/lib/stm8-large/atoll.sym28
-rw-r--r--device/lib/stm8-large/bsearch.asm124
-rw-r--r--device/lib/stm8-large/bsearch.lst124
-rw-r--r--device/lib/stm8-large/bsearch.rel56
-rw-r--r--device/lib/stm8-large/bsearch.sym29
-rw-r--r--device/lib/stm8-large/btowc.asm76
-rw-r--r--device/lib/stm8-large/btowc.lst76
-rw-r--r--device/lib/stm8-large/btowc.rel31
-rw-r--r--device/lib/stm8-large/btowc.sym29
-rw-r--r--device/lib/stm8-large/c16rtomb.asm209
-rw-r--r--device/lib/stm8-large/c16rtomb.lst209
-rw-r--r--device/lib/stm8-large/c16rtomb.rel93
-rw-r--r--device/lib/stm8-large/c16rtomb.sym32
-rw-r--r--device/lib/stm8-large/c16stombs.asm209
-rw-r--r--device/lib/stm8-large/c16stombs.lst209
-rw-r--r--device/lib/stm8-large/c16stombs.rel91
-rw-r--r--device/lib/stm8-large/c16stombs.sym31
-rw-r--r--device/lib/stm8-large/c32rtomb.asm69
-rw-r--r--device/lib/stm8-large/c32rtomb.lst69
-rw-r--r--device/lib/stm8-large/c32rtomb.rel24
-rw-r--r--device/lib/stm8-large/c32rtomb.sym29
-rw-r--r--device/lib/stm8-large/calloc.asm103
-rw-r--r--device/lib/stm8-large/calloc.lst103
-rw-r--r--device/lib/stm8-large/calloc.rel44
-rw-r--r--device/lib/stm8-large/calloc.sym32
-rw-r--r--device/lib/stm8-large/ceilf.asm127
-rw-r--r--device/lib/stm8-large/ceilf.lst127
-rw-r--r--device/lib/stm8-large/ceilf.rel56
-rw-r--r--device/lib/stm8-large/ceilf.sym32
-rw-r--r--device/lib/stm8-large/cosf.asm79
-rw-r--r--device/lib/stm8-large/cosf.lst79
-rw-r--r--device/lib/stm8-large/cosf.rel34
-rw-r--r--device/lib/stm8-large/cosf.sym29
-rw-r--r--device/lib/stm8-large/coshf.asm68
-rw-r--r--device/lib/stm8-large/coshf.lst68
-rw-r--r--device/lib/stm8-large/coshf.rel24
-rw-r--r--device/lib/stm8-large/coshf.sym29
-rw-r--r--device/lib/stm8-large/cotf.asm116
-rw-r--r--device/lib/stm8-large/cotf.lst116
-rw-r--r--device/lib/stm8-large/cotf.rel49
-rw-r--r--device/lib/stm8-large/cotf.sym32
-rw-r--r--device/lib/stm8-large/errno.asm54
-rw-r--r--device/lib/stm8-large/errno.lst54
-rw-r--r--device/lib/stm8-large/errno.rel21
-rw-r--r--device/lib/stm8-large/errno.sym29
-rw-r--r--device/lib/stm8-large/expf.asm359
-rw-r--r--device/lib/stm8-large/expf.lst359
-rw-r--r--device/lib/stm8-large/expf.rel138
-rw-r--r--device/lib/stm8-large/expf.sym38
-rw-r--r--device/lib/stm8-large/fabsf.asm76
-rw-r--r--device/lib/stm8-large/fabsf.lst76
-rw-r--r--device/lib/stm8-large/fabsf.rel25
-rw-r--r--device/lib/stm8-large/fabsf.sym29
-rw-r--r--device/lib/stm8-large/floorf.asm128
-rw-r--r--device/lib/stm8-large/floorf.lst128
-rw-r--r--device/lib/stm8-large/floorf.rel56
-rw-r--r--device/lib/stm8-large/floorf.sym32
-rw-r--r--device/lib/stm8-large/free.asm144
-rw-r--r--device/lib/stm8-large/free.lst144
-rw-r--r--device/lib/stm8-large/free.rel52
-rw-r--r--device/lib/stm8-large/free.sym29
-rw-r--r--device/lib/stm8-large/frexpf.asm128
-rw-r--r--device/lib/stm8-large/frexpf.lst128
-rw-r--r--device/lib/stm8-large/frexpf.rel39
-rw-r--r--device/lib/stm8-large/frexpf.sym29
-rw-r--r--device/lib/stm8-large/gets.asm148
-rw-r--r--device/lib/stm8-large/gets.lst148
-rw-r--r--device/lib/stm8-large/gets.rel57
-rw-r--r--device/lib/stm8-large/gets.sym31
-rw-r--r--device/lib/stm8-large/heap.lst42
-rw-r--r--device/lib/stm8-large/heap.rel19
-rw-r--r--device/lib/stm8-large/heap.s42
-rw-r--r--device/lib/stm8-large/heap.sym18
-rw-r--r--device/lib/stm8-large/isalnum.asm83
-rw-r--r--device/lib/stm8-large/isalnum.lst83
-rw-r--r--device/lib/stm8-large/isalnum.rel36
-rw-r--r--device/lib/stm8-large/isalnum.sym29
-rw-r--r--device/lib/stm8-large/isalpha.asm82
-rw-r--r--device/lib/stm8-large/isalpha.lst82
-rw-r--r--device/lib/stm8-large/isalpha.rel37
-rw-r--r--device/lib/stm8-large/isalpha.sym29
-rw-r--r--device/lib/stm8-large/isblank.asm72
-rw-r--r--device/lib/stm8-large/isblank.lst72
-rw-r--r--device/lib/stm8-large/isblank.rel29
-rw-r--r--device/lib/stm8-large/isblank.sym29
-rw-r--r--device/lib/stm8-large/iscntrl.asm72
-rw-r--r--device/lib/stm8-large/iscntrl.lst72
-rw-r--r--device/lib/stm8-large/iscntrl.rel31
-rw-r--r--device/lib/stm8-large/iscntrl.sym29
-rw-r--r--device/lib/stm8-large/isdigit.asm73
-rw-r--r--device/lib/stm8-large/isdigit.lst73
-rw-r--r--device/lib/stm8-large/isdigit.rel33
-rw-r--r--device/lib/stm8-large/isdigit.sym29
-rw-r--r--device/lib/stm8-large/isgraph.asm73
-rw-r--r--device/lib/stm8-large/isgraph.lst73
-rw-r--r--device/lib/stm8-large/isgraph.rel33
-rw-r--r--device/lib/stm8-large/isgraph.sym29
-rw-r--r--device/lib/stm8-large/isinf.asm83
-rw-r--r--device/lib/stm8-large/isinf.lst83
-rw-r--r--device/lib/stm8-large/isinf.rel39
-rw-r--r--device/lib/stm8-large/isinf.sym29
-rw-r--r--device/lib/stm8-large/islower.asm73
-rw-r--r--device/lib/stm8-large/islower.lst73
-rw-r--r--device/lib/stm8-large/islower.rel33
-rw-r--r--device/lib/stm8-large/islower.sym29
-rw-r--r--device/lib/stm8-large/isnan.asm85
-rw-r--r--device/lib/stm8-large/isnan.lst85
-rw-r--r--device/lib/stm8-large/isnan.rel27
-rw-r--r--device/lib/stm8-large/isnan.sym29
-rw-r--r--device/lib/stm8-large/isprint.asm73
-rw-r--r--device/lib/stm8-large/isprint.lst73
-rw-r--r--device/lib/stm8-large/isprint.rel33
-rw-r--r--device/lib/stm8-large/isprint.sym29
-rw-r--r--device/lib/stm8-large/ispunct.asm89
-rw-r--r--device/lib/stm8-large/ispunct.lst89
-rw-r--r--device/lib/stm8-large/ispunct.rel40
-rw-r--r--device/lib/stm8-large/ispunct.sym32
-rw-r--r--device/lib/stm8-large/isspace.asm85
-rw-r--r--device/lib/stm8-large/isspace.lst85
-rw-r--r--device/lib/stm8-large/isspace.rel35
-rw-r--r--device/lib/stm8-large/isspace.sym29
-rw-r--r--device/lib/stm8-large/isupper.asm73
-rw-r--r--device/lib/stm8-large/isupper.lst73
-rw-r--r--device/lib/stm8-large/isupper.rel33
-rw-r--r--device/lib/stm8-large/isupper.sym29
-rw-r--r--device/lib/stm8-large/isxdigit.asm85
-rw-r--r--device/lib/stm8-large/isxdigit.lst85
-rw-r--r--device/lib/stm8-large/isxdigit.rel41
-rw-r--r--device/lib/stm8-large/isxdigit.sym29
-rw-r--r--device/lib/stm8-large/labs.asm74
-rw-r--r--device/lib/stm8-large/labs.lst74
-rw-r--r--device/lib/stm8-large/labs.rel33
-rw-r--r--device/lib/stm8-large/labs.sym29
-rw-r--r--device/lib/stm8-large/ldexpf.asm155
-rw-r--r--device/lib/stm8-large/ldexpf.lst155
-rw-r--r--device/lib/stm8-large/ldexpf.rel51
-rw-r--r--device/lib/stm8-large/ldexpf.sym29
-rw-r--r--device/lib/stm8-large/log10f.asm75
-rw-r--r--device/lib/stm8-large/log10f.lst75
-rw-r--r--device/lib/stm8-large/log10f.rel27
-rw-r--r--device/lib/stm8-large/log10f.sym31
-rw-r--r--device/lib/stm8-large/logf.asm341
-rw-r--r--device/lib/stm8-large/logf.lst341
-rw-r--r--device/lib/stm8-large/logf.rel123
-rw-r--r--device/lib/stm8-large/logf.sym37
-rw-r--r--device/lib/stm8-large/malloc.asm182
-rw-r--r--device/lib/stm8-large/malloc.lst182
-rw-r--r--device/lib/stm8-large/malloc.rel83
-rw-r--r--device/lib/stm8-large/malloc.sym32
-rw-r--r--device/lib/stm8-large/mblen.asm142
-rw-r--r--device/lib/stm8-large/mblen.lst142
-rw-r--r--device/lib/stm8-large/mblen.rel63
-rw-r--r--device/lib/stm8-large/mblen.sym29
-rw-r--r--device/lib/stm8-large/mbrlen.asm76
-rw-r--r--device/lib/stm8-large/mbrlen.lst76
-rw-r--r--device/lib/stm8-large/mbrlen.rel32
-rw-r--r--device/lib/stm8-large/mbrlen.sym31
-rw-r--r--device/lib/stm8-large/mbrtoc16.asm231
-rw-r--r--device/lib/stm8-large/mbrtoc16.lst231
-rw-r--r--device/lib/stm8-large/mbrtoc16.rel92
-rw-r--r--device/lib/stm8-large/mbrtoc16.sym32
-rw-r--r--device/lib/stm8-large/mbrtoc32.asm114
-rw-r--r--device/lib/stm8-large/mbrtoc32.lst114
-rw-r--r--device/lib/stm8-large/mbrtoc32.rel48
-rw-r--r--device/lib/stm8-large/mbrtoc32.sym31
-rw-r--r--device/lib/stm8-large/mbrtowc.asm407
-rw-r--r--device/lib/stm8-large/mbrtowc.lst407
-rw-r--r--device/lib/stm8-large/mbrtowc.rel200
-rw-r--r--device/lib/stm8-large/mbrtowc.sym32
-rw-r--r--device/lib/stm8-large/mbsinit.asm77
-rw-r--r--device/lib/stm8-large/mbsinit.lst77
-rw-r--r--device/lib/stm8-large/mbsinit.rel35
-rw-r--r--device/lib/stm8-large/mbsinit.sym29
-rw-r--r--device/lib/stm8-large/mbstoc16s.asm196
-rw-r--r--device/lib/stm8-large/mbstoc16s.lst196
-rw-r--r--device/lib/stm8-large/mbstoc16s.rel78
-rw-r--r--device/lib/stm8-large/mbstoc16s.sym29
-rw-r--r--device/lib/stm8-large/mbstowcs.asm115
-rw-r--r--device/lib/stm8-large/mbstowcs.lst115
-rw-r--r--device/lib/stm8-large/mbstowcs.rel48
-rw-r--r--device/lib/stm8-large/mbstowcs.sym29
-rw-r--r--device/lib/stm8-large/mbtowc.asm299
-rw-r--r--device/lib/stm8-large/mbtowc.lst299
-rw-r--r--device/lib/stm8-large/mbtowc.rel143
-rw-r--r--device/lib/stm8-large/mbtowc.sym29
-rw-r--r--device/lib/stm8-large/memccpy.asm100
-rw-r--r--device/lib/stm8-large/memccpy.lst100
-rw-r--r--device/lib/stm8-large/memccpy.rel39
-rw-r--r--device/lib/stm8-large/memccpy.sym29
-rw-r--r--device/lib/stm8-large/memcpy.lst91
-rw-r--r--device/lib/stm8-large/memcpy.rel39
-rw-r--r--device/lib/stm8-large/memcpy.s91
-rw-r--r--device/lib/stm8-large/memcpy.sym18
-rw-r--r--device/lib/stm8-large/modff.asm90
-rw-r--r--device/lib/stm8-large/modff.lst90
-rw-r--r--device/lib/stm8-large/modff.rel32
-rw-r--r--device/lib/stm8-large/modff.sym32
-rw-r--r--device/lib/stm8-large/powf.asm129
-rw-r--r--device/lib/stm8-large/powf.lst129
-rw-r--r--device/lib/stm8-large/powf.rel56
-rw-r--r--device/lib/stm8-large/powf.sym34
-rw-r--r--device/lib/stm8-large/printf_large.asm1426
-rw-r--r--device/lib/stm8-large/printf_large.lst1427
-rw-r--r--device/lib/stm8-large/printf_large.rel694
-rw-r--r--device/lib/stm8-large/printf_large.sym34
-rw-r--r--device/lib/stm8-large/puts.asm87
-rw-r--r--device/lib/stm8-large/puts.lst87
-rw-r--r--device/lib/stm8-large/puts.rel38
-rw-r--r--device/lib/stm8-large/puts.sym29
-rw-r--r--device/lib/stm8-large/qsort.asm176
-rw-r--r--device/lib/stm8-large/qsort.lst176
-rw-r--r--device/lib/stm8-large/qsort.rel68
-rw-r--r--device/lib/stm8-large/qsort.sym31
-rw-r--r--device/lib/stm8-large/rand.asm156
-rw-r--r--device/lib/stm8-large/rand.lst156
-rw-r--r--device/lib/stm8-large/rand.rel56
-rw-r--r--device/lib/stm8-large/rand.sym32
-rw-r--r--device/lib/stm8-large/realloc.asm313
-rw-r--r--device/lib/stm8-large/realloc.lst313
-rw-r--r--device/lib/stm8-large/realloc.rel138
-rw-r--r--device/lib/stm8-large/realloc.sym34
-rw-r--r--device/lib/stm8-large/setjmp.lst77
-rw-r--r--device/lib/stm8-large/setjmp.rel23
-rw-r--r--device/lib/stm8-large/setjmp.s77
-rw-r--r--device/lib/stm8-large/setjmp.sym17
-rw-r--r--device/lib/stm8-large/sincosf.asm412
-rw-r--r--device/lib/stm8-large/sincosf.lst412
-rw-r--r--device/lib/stm8-large/sincosf.rel161
-rw-r--r--device/lib/stm8-large/sincosf.sym37
-rw-r--r--device/lib/stm8-large/sincoshf.asm367
-rw-r--r--device/lib/stm8-large/sincoshf.lst367
-rw-r--r--device/lib/stm8-large/sincoshf.rel146
-rw-r--r--device/lib/stm8-large/sincoshf.sym35
-rw-r--r--device/lib/stm8-large/sinf.asm79
-rw-r--r--device/lib/stm8-large/sinf.lst79
-rw-r--r--device/lib/stm8-large/sinf.rel34
-rw-r--r--device/lib/stm8-large/sinf.sym29
-rw-r--r--device/lib/stm8-large/sinhf.asm68
-rw-r--r--device/lib/stm8-large/sinhf.lst68
-rw-r--r--device/lib/stm8-large/sinhf.rel24
-rw-r--r--device/lib/stm8-large/sinhf.sym29
-rw-r--r--device/lib/stm8-large/sprintf.asm127
-rw-r--r--device/lib/stm8-large/sprintf.lst127
-rw-r--r--device/lib/stm8-large/sprintf.rel45
-rw-r--r--device/lib/stm8-large/sprintf.sym32
-rw-r--r--device/lib/stm8-large/sqrtf.asm229
-rw-r--r--device/lib/stm8-large/sqrtf.lst229
-rw-r--r--device/lib/stm8-large/sqrtf.rel92
-rw-r--r--device/lib/stm8-large/sqrtf.sym38
-rw-r--r--device/lib/stm8-large/strdup.asm84
-rw-r--r--device/lib/stm8-large/strdup.lst84
-rw-r--r--device/lib/stm8-large/strdup.rel32
-rw-r--r--device/lib/stm8-large/strdup.sym32
-rw-r--r--device/lib/stm8-large/strndup.asm104
-rw-r--r--device/lib/stm8-large/strndup.lst104
-rw-r--r--device/lib/stm8-large/strndup.rel38
-rw-r--r--device/lib/stm8-large/strndup.sym32
-rw-r--r--device/lib/stm8-large/strtol.asm224
-rw-r--r--device/lib/stm8-large/strtol.lst224
-rw-r--r--device/lib/stm8-large/strtol.rel107
-rw-r--r--device/lib/stm8-large/strtol.sym31
-rw-r--r--device/lib/stm8-large/strtoul.asm402
-rw-r--r--device/lib/stm8-large/strtoul.lst402
-rw-r--r--device/lib/stm8-large/strtoul.rel198
-rw-r--r--device/lib/stm8-large/strtoul.sym35
-rw-r--r--device/lib/stm8-large/strxfrm.asm76
-rw-r--r--device/lib/stm8-large/strxfrm.lst76
-rw-r--r--device/lib/stm8-large/strxfrm.rel27
-rw-r--r--device/lib/stm8-large/strxfrm.sym31
-rw-r--r--device/lib/stm8-large/tancotf.asm408
-rw-r--r--device/lib/stm8-large/tancotf.lst408
-rw-r--r--device/lib/stm8-large/tancotf.rel158
-rw-r--r--device/lib/stm8-large/tancotf.sym38
-rw-r--r--device/lib/stm8-large/tanf.asm68
-rw-r--r--device/lib/stm8-large/tanf.lst68
-rw-r--r--device/lib/stm8-large/tanf.rel24
-rw-r--r--device/lib/stm8-large/tanf.sym29
-rw-r--r--device/lib/stm8-large/tanhf.asm296
-rw-r--r--device/lib/stm8-large/tanhf.lst296
-rw-r--r--device/lib/stm8-large/tanhf.rel112
-rw-r--r--device/lib/stm8-large/tanhf.sym35
-rw-r--r--device/lib/stm8-large/time.asm988
-rw-r--r--device/lib/stm8-large/time.lst992
-rw-r--r--device/lib/stm8-large/time.rel464
-rw-r--r--device/lib/stm8-large/time.sym65
-rw-r--r--device/lib/stm8-large/tolower.asm70
-rw-r--r--device/lib/stm8-large/tolower.lst70
-rw-r--r--device/lib/stm8-large/tolower.rel27
-rw-r--r--device/lib/stm8-large/tolower.sym29
-rw-r--r--device/lib/stm8-large/toupper.asm70
-rw-r--r--device/lib/stm8-large/toupper.lst70
-rw-r--r--device/lib/stm8-large/toupper.rel27
-rw-r--r--device/lib/stm8-large/toupper.sym29
-rw-r--r--device/lib/stm8-large/vprintf.asm112
-rw-r--r--device/lib/stm8-large/vprintf.lst112
-rw-r--r--device/lib/stm8-large/vprintf.rel40
-rw-r--r--device/lib/stm8-large/vprintf.sym32
-rw-r--r--device/lib/stm8-large/wcrtomb.asm77
-rw-r--r--device/lib/stm8-large/wcrtomb.lst77
-rw-r--r--device/lib/stm8-large/wcrtomb.rel31
-rw-r--r--device/lib/stm8-large/wcrtomb.sym31
-rw-r--r--device/lib/stm8-large/wcscmp.asm127
-rw-r--r--device/lib/stm8-large/wcscmp.lst127
-rw-r--r--device/lib/stm8-large/wcscmp.rel55
-rw-r--r--device/lib/stm8-large/wcscmp.sym29
-rw-r--r--device/lib/stm8-large/wcslen.asm88
-rw-r--r--device/lib/stm8-large/wcslen.lst88
-rw-r--r--device/lib/stm8-large/wcslen.rel35
-rw-r--r--device/lib/stm8-large/wcslen.sym29
-rw-r--r--device/lib/stm8-large/wcstombs.asm142
-rw-r--r--device/lib/stm8-large/wcstombs.lst142
-rw-r--r--device/lib/stm8-large/wcstombs.rel62
-rw-r--r--device/lib/stm8-large/wcstombs.sym29
-rw-r--r--device/lib/stm8-large/wctob.asm81
-rw-r--r--device/lib/stm8-large/wctob.lst81
-rw-r--r--device/lib/stm8-large/wctob.rel35
-rw-r--r--device/lib/stm8-large/wctob.sym29
-rw-r--r--device/lib/stm8-large/wctomb.asm235
-rw-r--r--device/lib/stm8-large/wctomb.lst235
-rw-r--r--device/lib/stm8-large/wctomb.rel85
-rw-r--r--device/lib/stm8-large/wctomb.sym29
614 files changed, 63155 insertions, 0 deletions
diff --git a/device/lib/stm8-large/Makefile b/device/lib/stm8-large/Makefile
new file mode 100644
index 0000000..98a8c1a
--- /dev/null
+++ b/device/lib/stm8-large/Makefile
@@ -0,0 +1,102 @@
+# libc/stm8-large Makefile
+
+
+srcdir = .
+top_builddir = ../../..
+
+LIB_TYPE = RANLIB
+
+SCC = $(top_builddir)/bin/sdcc -mstm8 --model-large
+SAS = $(top_builddir)/bin/sdasstm8
+
+# override PORTDIR defined by super (parent) makefile
+override PORTDIR = ../build/stm8-large
+
+include $(srcdir)/../incl.mk
+
+STM8_FLOAT = $(COMMON_FLOAT)
+
+STM8_INT = $(COMMON_INT) \
+ _mulint.c \
+ _divsint.c \
+ _modsint.c \
+ _mulschar.c \
+ _divschar.c \
+ _modschar.c
+
+STM8_LONG = $(COMMON_LONG) \
+ _divulong.c \
+ _mullong.c
+
+STM8_LONGLONG = $(COMMON_LONGLONG) \
+ _rrulonglong.c \
+ _rrslonglong.c \
+ _rlulonglong.c \
+ _rlslonglong.c \
+ _mullonglong.c \
+ _divslonglong.c \
+ _divulonglong.c \
+ _modslonglong.c \
+ _modulonglong.c
+
+STM8_SDCC = $(COMMON_SDCC) \
+ _itoa.c \
+ _ltoa.c \
+ _startup.c \
+ _strcmp.c \
+ _strcpy.c \
+ _strlen.c \
+ _memmove.c \
+ sprintf.c \
+ vprintf.c
+
+STM8SOURCES = $(addprefix ../,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC))
+STM8OBJECTS = $(patsubst %.c,%.rel,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC))
+
+OBJ = setjmp.rel __mulsint2slong.rel heap.rel memcpy.rel
+
+LIB = stm8.lib
+CC = $(SCC)
+AS = $(SAS)
+ASFLAGS = -plosgff
+
+CFLAGS = -I$(srcdir)/../../include -I. --std-c11
+
+all: $(PORTDIR)/$(LIB)
+
+$(PORTDIR)/$(LIB): $(OBJ) $(STM8OBJECTS) Makefile
+ifeq ($(LIB_TYPE), SDCCLIB)
+ rm -f $@; \
+ $(top_builddir)/bin/sdcclib -a $@ $(OBJ) $(STM8OBJECTS)
+else
+ ifeq ($(LIB_TYPE), AR)
+ $(top_builddir)/bin/sdar -rcSD $@ $(OBJ) $(STM8OBJECTS)
+ else
+ ifeq ($(LIB_TYPE), RANLIB)
+ $(top_builddir)/bin/sdar -rcD $@ $(OBJ) $(STM8OBJECTS)
+ else
+ rm -f $@
+ for i in $(basename $(OBJ) $(STM8OBJECTS)); do echo $$i >>$@; done
+ cp $(OBJ) $(STM8OBJECTS) $(PORTDIR)
+ endif
+ endif
+endif
+
+%.rel: %.c
+ $(CC) $(CFLAGS) -c $<
+
+%.rel: %.s
+ @# TODO: sdas should place it\'s output in the current dir
+ test $(srcdir) = . || cp $< .
+ -$(AS) $(ASFLAGS) $(notdir $<)
+ test $(srcdir) = . || rm $(notdir $<)
+
+%.rel: ../%.c
+ $(CC) $(CFLAGS) -c $<
+
+clean:
+ rm -f *.rel *.sym *.lst *~ $(CLEANSPEC) *.dump* *.asm *.lib
+
+distclean: clean
+ rm -f Makefile
+
diff --git a/device/lib/stm8-large/Makefile.in b/device/lib/stm8-large/Makefile.in
new file mode 100644
index 0000000..7699d37
--- /dev/null
+++ b/device/lib/stm8-large/Makefile.in
@@ -0,0 +1,102 @@
+# libc/stm8-large Makefile
+
+VPATH = @srcdir@
+srcdir = @srcdir@
+top_builddir = @top_builddir@
+
+LIB_TYPE = @LIB_TYPE@
+
+SCC = $(top_builddir)/bin/sdcc -mstm8 --model-large
+SAS = $(top_builddir)/bin/sdasstm8
+
+# override PORTDIR defined by super (parent) makefile
+override PORTDIR = ../build/stm8-large
+
+include $(srcdir)/../incl.mk
+
+STM8_FLOAT = $(COMMON_FLOAT)
+
+STM8_INT = $(COMMON_INT) \
+ _mulint.c \
+ _divsint.c \
+ _modsint.c \
+ _mulschar.c \
+ _divschar.c \
+ _modschar.c
+
+STM8_LONG = $(COMMON_LONG) \
+ _divulong.c \
+ _mullong.c
+
+STM8_LONGLONG = $(COMMON_LONGLONG) \
+ _rrulonglong.c \
+ _rrslonglong.c \
+ _rlulonglong.c \
+ _rlslonglong.c \
+ _mullonglong.c \
+ _divslonglong.c \
+ _divulonglong.c \
+ _modslonglong.c \
+ _modulonglong.c
+
+STM8_SDCC = $(COMMON_SDCC) \
+ _itoa.c \
+ _ltoa.c \
+ _startup.c \
+ _strcmp.c \
+ _strcpy.c \
+ _strlen.c \
+ _memmove.c \
+ sprintf.c \
+ vprintf.c
+
+STM8SOURCES = $(addprefix ../,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC))
+STM8OBJECTS = $(patsubst %.c,%.rel,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC))
+
+OBJ = setjmp.rel __mulsint2slong.rel heap.rel memcpy.rel
+
+LIB = stm8.lib
+CC = $(SCC)
+AS = $(SAS)
+ASFLAGS = -plosgff
+
+CFLAGS = -I$(srcdir)/../../include -I. --std-c11
+
+all: $(PORTDIR)/$(LIB)
+
+$(PORTDIR)/$(LIB): $(OBJ) $(STM8OBJECTS) Makefile
+ifeq ($(LIB_TYPE), SDCCLIB)
+ rm -f $@; \
+ $(top_builddir)/bin/sdcclib -a $@ $(OBJ) $(STM8OBJECTS)
+else
+ ifeq ($(LIB_TYPE), AR)
+ $(top_builddir)/bin/sdar -rcSD $@ $(OBJ) $(STM8OBJECTS)
+ else
+ ifeq ($(LIB_TYPE), RANLIB)
+ $(top_builddir)/bin/sdar -rcD $@ $(OBJ) $(STM8OBJECTS)
+ else
+ rm -f $@
+ for i in $(basename $(OBJ) $(STM8OBJECTS)); do echo $$i >>$@; done
+ cp $(OBJ) $(STM8OBJECTS) $(PORTDIR)
+ endif
+ endif
+endif
+
+%.rel: %.c
+ $(CC) $(CFLAGS) -c $<
+
+%.rel: %.s
+ @# TODO: sdas should place it\'s output in the current dir
+ test $(srcdir) = . || cp $< .
+ -$(AS) $(ASFLAGS) $(notdir $<)
+ test $(srcdir) = . || rm $(notdir $<)
+
+%.rel: ../%.c
+ $(CC) $(CFLAGS) -c $<
+
+clean:
+ rm -f *.rel *.sym *.lst *~ $(CLEANSPEC) *.dump* *.asm *.lib
+
+distclean: clean
+ rm -f Makefile
+
diff --git a/device/lib/stm8-large/__assert.asm b/device/lib/stm8-large/__assert.asm
new file mode 100644
index 0000000..063e261
--- /dev/null
+++ b/device/lib/stm8-large/__assert.asm
@@ -0,0 +1,81 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module __assert
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___assert
+ .globl _printf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../__assert.c: 32: void __assert(const char *expression, const char *functionname, const char *filename, unsigned int linenumber)
+; -----------------------------------------
+; function __assert
+; -----------------------------------------
+___assert:
+; ../__assert.c: 34: printf("Assert(%s) failed in function %s at line %u in file %s.\n",
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #<(___str_0 + 0)
+ push #((___str_0 + 0) >> 8)
+ callf _printf
+ addw sp, #10
+00103$:
+ jra 00103$
+; ../__assert.c: 37: }
+ retf
+ .area CODE
+ .area CONST
+ .area CONST
+___str_0:
+ .ascii "Assert(%s) failed in function %s at line %u in file %s."
+ .db 0x0a
+ .db 0x00
+ .area CODE
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/__assert.lst b/device/lib/stm8-large/__assert.lst
new file mode 100644
index 0000000..c16bbfe
--- /dev/null
+++ b/device/lib/stm8-large/__assert.lst
@@ -0,0 +1,88 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module __assert
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___assert
+ 12 .globl _printf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../__assert.c: 32: void __assert(const char *expression, const char *functionname, const char *filename, unsigned int linenumber)
+ 51 ; -----------------------------------------
+ 52 ; function __assert
+ 53 ; -----------------------------------------
+ 000000 54 ___assert:
+ 55 ; ../__assert.c: 34: printf("Assert(%s) failed in function %s at line %u in file %s.\n",
+ 000000 1E 08 [ 2] 56 ldw x, (0x08, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 1E 0C [ 2] 58 ldw x, (0x0c, sp)
+ 000005 89 [ 2] 59 pushw x
+ 000006 1E 0A [ 2] 60 ldw x, (0x0a, sp)
+ 000008 89 [ 2] 61 pushw x
+ 000009 1E 0A [ 2] 62 ldw x, (0x0a, sp)
+ 00000B 89 [ 2] 63 pushw x
+ 00000C 4Br00 [ 1] 64 push #<(___str_0 + 0)
+ 00000E 4Bs00 [ 1] 65 push #((___str_0 + 0) >> 8)
+ 000010 8Ds00r00r00 [ 5] 66 callf _printf
+ 000014 5B 0A [ 2] 67 addw sp, #10
+ 000016 68 00103$:
+ 000016 20 FE [ 2] 69 jra 00103$
+ 70 ; ../__assert.c: 37: }
+ 000018 87 [ 5] 71 retf
+ 72 .area CODE
+ 73 .area CONST
+ 74 .area CONST
+ 000000 75 ___str_0:
+ 000000 41 73 73 65 72 74 28 76 .ascii "Assert(%s) failed in function %s at line %u in file %s."
+ 25 73 29 20 66 61 69
+ 6C 65 64 20 69 6E 20
+ 66 75 6E 63 74 69 6F
+ 6E 20 25 73 20 61 74
+ 20 6C 69 6E 65 20 25
+ 75 20 69 6E 20 66 69
+ 6C 65 20 25 73 2E
+ 000037 0A 77 .db 0x0a
+ 000038 00 78 .db 0x00
+ 79 .area CODE
+ 80 .area INITIALIZER
+ 81 .area CABS (ABS)
diff --git a/device/lib/stm8-large/__assert.rel b/device/lib/stm8-large/__assert.rel
new file mode 100644
index 0000000..79822cc
--- /dev/null
+++ b/device/lib/stm8-large/__assert.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 3 global symbols
+M __assert
+O -mstm8
+S .__.ABS. Def000000
+S _printf Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 39 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 19 flags 0 addr 0
+S ___assert Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 08 89 1E 0C 89 1E 0A 89 1E 0A 89 4B
+R 00 00 00 09
+T 00 00 0D 00 00 00 4B 00 00 00 8D
+R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07
+T 00 00 11 00 00 00 5B 0A
+R 00 00 00 09 82 03 00 01
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 20 FE 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 41 73 73 65 72 74 28 25 73 29 20 66 61
+R 00 00 00 07
+T 00 00 0D 69 6C 65 64 20 69 6E 20 66 75 6E 63 74
+R 00 00 00 07
+T 00 00 1A 69 6F 6E 20 25 73 20 61 74 20 6C 69 6E
+R 00 00 00 07
+T 00 00 27 65 20 25 75 20 69 6E 20 66 69 6C 65 20
+R 00 00 00 07
+T 00 00 34 25 73 2E 0A 00
+R 00 00 00 07
diff --git a/device/lib/stm8-large/__assert.sym b/device/lib/stm8-large/__assert.sym
new file mode 100644
index 0000000..87748f4
--- /dev/null
+++ b/device/lib/stm8-large/__assert.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___assert 000000 GR
+ 7 ___str_0 000000 R
+ _printf ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 39 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 19 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/__mulsint2slong.lst b/device/lib/stm8-large/__mulsint2slong.lst
new file mode 100644
index 0000000..b18c7bc
--- /dev/null
+++ b/device/lib/stm8-large/__mulsint2slong.lst
@@ -0,0 +1,106 @@
+ 1 ;--------------------------------------------------------------------------
+ 2 ; __mulsint2slong.s
+ 3 ;
+ 4 ; Copyright (C) 2016, Philipp Klaus Krause
+ 5 ;
+ 6 ; This library is free software; you can redistribute it and/or modify it
+ 7 ; under the terms of the GNU General Public License as published by the
+ 8 ; Free Software Foundation; either version 2, or (at your option) any
+ 9 ; later version.
+ 10 ;
+ 11 ; This library is distributed in the hope that it will be useful,
+ 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 14 ; GNU General Public License for more details.
+ 15 ;
+ 16 ; You should have received a copy of the GNU General Public License
+ 17 ; along with this library; see the file COPYING. If not, write to the
+ 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ 19 ; MA 02110-1301, USA.
+ 20 ;
+ 21 ; As a special exception, if you link this library with other files,
+ 22 ; some of which are compiled with SDCC, to produce an executable,
+ 23 ; this library does not by itself cause the resulting executable to
+ 24 ; be covered by the GNU General Public License. This exception does
+ 25 ; not however invalidate any other reasons why the executable file
+ 26 ; might be covered by the GNU General Public License.
+ 27 ;--------------------------------------------------------------------------
+ 28
+ 29 .globl ___mulsint2slong
+ 30 .globl ___muluint2ulong
+ 31
+ 32 .area CODE
+ 33
+ 000000 34 ___muluint2ulong:
+ 000000 4F [ 1] 35 clr a
+ 000001 1E 06 [ 2] 36 ldw x, (6, sp)
+ 000003 20 11 [ 2] 37 jra right_nonneg
+ 38
+ 000005 39 ___mulsint2slong:
+ 40
+ 41 ; Handle signed operands
+ 000005 4F [ 1] 42 clr a
+ 000006 1E 04 [ 2] 43 ldw x, (4, sp)
+ 000008 2A 04 [ 1] 44 jrpl left_nonneg
+ 00000A 43 [ 1] 45 cpl a
+ 00000B 50 [ 2] 46 negw x
+ 00000C 1F 04 [ 2] 47 ldw (4, sp), x
+ 00000E 48 left_nonneg:
+ 00000E 1E 06 [ 2] 49 ldw x, (6, sp)
+ 000010 2A 04 [ 1] 50 jrpl right_nonneg
+ 000012 43 [ 1] 51 cpl a
+ 000013 50 [ 2] 52 negw x
+ 000014 1F 06 [ 2] 53 ldw (6, sp), x
+ 000016 54 right_nonneg:
+ 55
+ 000016 52 04 [ 2] 56 sub sp, #4
+ 000018 88 [ 1] 57 push a
+ 58
+ 59 ; Multiply lower bytes
+ 000019 7B 0A [ 1] 60 ld a, (5+5, sp)
+ 00001B 42 [ 4] 61 mul x, a
+ 00001C 1F 04 [ 2] 62 ldw (4, sp), x
+ 63
+ 64 ; Multiply upper bytes
+ 00001E 1E 08 [ 2] 65 ldw x, (5+3, sp)
+ 000020 7B 0B [ 1] 66 ld a, (5+6, sp)
+ 000022 42 [ 4] 67 mul x, a
+ 000023 1F 02 [ 2] 68 ldw (2, sp), x
+ 69
+ 70 ; Multiply middle bytes
+ 000025 7B 0B [ 1] 71 ld a, (5+6, sp)
+ 000027 27 0E [ 1] 72 jreq skip_m1
+ 000029 1E 09 [ 2] 73 ldw x, (5+4, sp)
+ 00002B 42 [ 4] 74 mul x, a
+ 00002C 72 FB 03 [ 2] 75 addw x, (3, sp)
+ 00002F 1F 03 [ 2] 76 ldw (3, sp), x
+ 000031 7B 02 [ 1] 77 ld a, (2, sp)
+ 000033 A9 00 [ 1] 78 adc a, #0
+ 000035 6B 02 [ 1] 79 ld (2, sp), a
+ 000037 80 skip_m1:
+ 81
+ 000037 7B 09 [ 1] 82 ld a, (5+4, sp)
+ 000039 27 0E [ 1] 83 jreq skip_m2
+ 00003B 1E 0B [ 2] 84 ldw x, (5+6, sp)
+ 00003D 42 [ 4] 85 mul x, a
+ 00003E 72 FB 03 [ 2] 86 addw x, (3, sp)
+ 000041 1F 03 [ 2] 87 ldw (3, sp), x
+ 000043 7B 02 [ 1] 88 ld a, (2, sp)
+ 000045 A9 00 [ 1] 89 adc a, #0
+ 000047 6B 02 [ 1] 90 ld (2, sp), a
+ 000049 91 skip_m2:
+ 92
+ 93 ; Handle signed result
+ 000049 84 [ 1] 94 pop a
+ 00004A 90 85 [ 2] 95 popw y
+ 00004C 85 [ 2] 96 popw x
+ 00004D 4D [ 1] 97 tnz a
+ 00004E 2A 07 [ 1] 98 jrpl end
+ 000050 50 [ 2] 99 negw x
+ 000051 24 02 [ 1] 100 jrnc neg_y
+ 000053 90 5C [ 1] 101 incw y
+ 000055 102 neg_y:
+ 000055 90 50 [ 2] 103 negw y
+ 000057 104 end:
+ 000057 87 [ 5] 105 retf
+ 106
diff --git a/device/lib/stm8-large/__mulsint2slong.rel b/device/lib/stm8-large/__mulsint2slong.rel
new file mode 100644
index 0000000..36cdce5
--- /dev/null
+++ b/device/lib/stm8-large/__mulsint2slong.rel
@@ -0,0 +1,45 @@
+XH3
+H 2 areas 3 global symbols
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A CODE size 58 flags 0 addr 0
+S ___muluint2ulong Def000000
+S ___mulsint2slong Def000005
+T 00 00 00
+R 00 00 00 01
+T 00 00 00 4F 1E 06 20 11
+R 00 00 00 01
+T 00 00 05
+R 00 00 00 01
+T 00 00 05 4F 1E 04 2A 04 43 50 1F 04
+R 00 00 00 01
+T 00 00 0E
+R 00 00 00 01
+T 00 00 0E 1E 06 2A 04 43 50 1F 06
+R 00 00 00 01
+T 00 00 16
+R 00 00 00 01
+T 00 00 16 52 04 88 7B 0A 42 1F 04 1E 08 7B 0B 42
+R 00 00 00 01
+T 00 00 23 1F 02 7B 0B 27 0E 1E 09 42 72 FB 03 1F
+R 00 00 00 01
+T 00 00 30 03 7B 02 A9 00 6B 02
+R 00 00 00 01
+T 00 00 37
+R 00 00 00 01
+T 00 00 37 7B 09 27 0E 1E 0B 42 72 FB 03 1F 03 7B
+R 00 00 00 01
+T 00 00 44 02 A9 00 6B 02
+R 00 00 00 01
+T 00 00 49
+R 00 00 00 01
+T 00 00 49 84 90 85 85 4D 2A 07 50 24 02 90 5C
+R 00 00 00 01
+T 00 00 55
+R 00 00 00 01
+T 00 00 55 90 50
+R 00 00 00 01
+T 00 00 57
+R 00 00 00 01
+T 00 00 57 87
+R 00 00 00 01
diff --git a/device/lib/stm8-large/__mulsint2slong.s b/device/lib/stm8-large/__mulsint2slong.s
new file mode 100644
index 0000000..7ee9065
--- /dev/null
+++ b/device/lib/stm8-large/__mulsint2slong.s
@@ -0,0 +1,106 @@
+;--------------------------------------------------------------------------
+; __mulsint2slong.s
+;
+; Copyright (C) 2016, Philipp Klaus Krause
+;
+; This library is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 2, or (at your option) any
+; later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this library; see the file COPYING. If not, write to the
+; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+; MA 02110-1301, USA.
+;
+; As a special exception, if you link this library with other files,
+; some of which are compiled with SDCC, to produce an executable,
+; this library does not by itself cause the resulting executable to
+; be covered by the GNU General Public License. This exception does
+; not however invalidate any other reasons why the executable file
+; might be covered by the GNU General Public License.
+;--------------------------------------------------------------------------
+
+.globl ___mulsint2slong
+.globl ___muluint2ulong
+
+.area CODE
+
+___muluint2ulong:
+ clr a
+ ldw x, (6, sp)
+ jra right_nonneg
+
+___mulsint2slong:
+
+ ; Handle signed operands
+ clr a
+ ldw x, (4, sp)
+ jrpl left_nonneg
+ cpl a
+ negw x
+ ldw (4, sp), x
+left_nonneg:
+ ldw x, (6, sp)
+ jrpl right_nonneg
+ cpl a
+ negw x
+ ldw (6, sp), x
+right_nonneg:
+
+ sub sp, #4
+ push a
+
+ ; Multiply lower bytes
+ ld a, (5+5, sp)
+ mul x, a
+ ldw (4, sp), x
+
+ ; Multiply upper bytes
+ ldw x, (5+3, sp)
+ ld a, (5+6, sp)
+ mul x, a
+ ldw (2, sp), x
+
+ ; Multiply middle bytes
+ ld a, (5+6, sp)
+ jreq skip_m1
+ ldw x, (5+4, sp)
+ mul x, a
+ addw x, (3, sp)
+ ldw (3, sp), x
+ ld a, (2, sp)
+ adc a, #0
+ ld (2, sp), a
+skip_m1:
+
+ ld a, (5+4, sp)
+ jreq skip_m2
+ ldw x, (5+6, sp)
+ mul x, a
+ addw x, (3, sp)
+ ldw (3, sp), x
+ ld a, (2, sp)
+ adc a, #0
+ ld (2, sp), a
+skip_m2:
+
+ ; Handle signed result
+ pop a
+ popw y
+ popw x
+ tnz a
+jrpl end
+ negw x
+jrnc neg_y
+ incw y
+neg_y:
+ negw y
+end:
+ retf
+
diff --git a/device/lib/stm8-large/__mulsint2slong.sym b/device/lib/stm8-large/__mulsint2slong.sym
new file mode 100644
index 0000000..b4a66ae
--- /dev/null
+++ b/device/lib/stm8-large/__mulsint2slong.sym
@@ -0,0 +1,18 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L
+ .__.H$L.= 000001 L | 1 ___mulsi 000005 GR | 1 ___mului 000000 GR
+ 1 end 000057 R | 1 left_non 00000E R | 1 neg_y 000055 R
+ 1 right_no 000016 R | 1 skip_m1 000037 R | 1 skip_m2 000049 R
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 CODE size 58 flags 0
+
diff --git a/device/lib/stm8-large/_atof.asm b/device/lib/stm8-large/_atof.asm
new file mode 100644
index 0000000..fc11219
--- /dev/null
+++ b/device/lib/stm8-large/_atof.asm
@@ -0,0 +1,310 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _atof
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _atoi
+ .globl _toupper
+ .globl _isspace
+ .globl _atof
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_atof.c: 33: float atof(const char * s)
+; -----------------------------------------
+; function atof
+; -----------------------------------------
+_atof:
+ sub sp, #17
+; ../_atof.c: 40: while (isspace(*s)) s++;
+ ldw y, (0x15, sp)
+ ldw (0x10, sp), y
+00101$:
+ ldw x, (0x10, sp)
+ ld a, (x)
+ clrw x
+ ld xl, a
+ pushw x
+ callf _isspace
+ addw sp, #2
+ ldw y, (0x10, sp)
+ incw y
+ tnzw x
+ jreq 00155$
+ ldw (0x10, sp), y
+ jra 00101$
+00155$:
+ ldw x, (0x10, sp)
+ ldw (0x15, sp), x
+; ../_atof.c: 43: if (*s == '-')
+ ldw x, (0x10, sp)
+ ld a, (x)
+ cp a, #0x2d
+ jrne 00107$
+; ../_atof.c: 45: sign=1;
+ ld a, #0x01
+ ld (0x05, sp), a
+; ../_atof.c: 46: s++;
+ ldw (0x15, sp), y
+ jra 00108$
+00107$:
+; ../_atof.c: 50: sign=0;
+ clr (0x05, sp)
+; ../_atof.c: 51: if (*s == '+') s++;
+ cp a, #0x2b
+ jrne 00108$
+ ldw (0x15, sp), y
+00108$:
+; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++)
+ clrw x
+ ldw (0x08, sp), x
+ ldw (0x06, sp), x
+ ldw y, (0x15, sp)
+ ldw (0x0c, sp), y
+00126$:
+ ldw x, (0x0c, sp)
+ ld a, (x)
+ ld (0x0e, sp), a
+ ld (0x0f, sp), a
+ ldw x, (0x0c, sp)
+ incw x
+ ldw (0x10, sp), x
+; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ ld a, (0x0f, sp)
+ cp a, #0x30
+ jrc 00156$
+ cp a, #0x39
+ jrugt 00156$
+; ../_atof.c: 57: value=10.0*value+(*s-'0');
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x20
+ push #0x41
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0c, sp), x
+ ldw (0x0a, sp), y
+ clrw x
+ ld a, (0x0e, sp)
+ ld xl, a
+ subw x, #0x0030
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ pushw x
+ pushw y
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++)
+ ldw y, (0x10, sp)
+ ldw (0x0c, sp), y
+ jra 00126$
+00156$:
+ ldw y, (0x0c, sp)
+ ldw (0x15, sp), y
+; ../_atof.c: 61: if (*s == '.')
+ ld a, (0x0e, sp)
+ cp a, #0x2e
+ jrne 00112$
+; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++)
+ ldw x, #0xcccd
+ ldw (0x0c, sp), x
+ ldw x, #0x3dcc
+ ldw (0x0a, sp), x
+00129$:
+ ldw x, (0x10, sp)
+ ld a, (x)
+ ld (0x0e, sp), a
+; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ ld (0x0f, sp), a
+ cp a, #0x30
+ jrc 00157$
+ ld a, (0x0f, sp)
+ cp a, #0x39
+ jrugt 00157$
+; ../_atof.c: 66: value+=(*s-'0')*fraction;
+ clrw x
+ ld a, (0x0e, sp)
+ ld xl, a
+ subw x, #0x0030
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x03, sp), x
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../_atof.c: 67: fraction*=0.1;
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ push #0xcd
+ push #0xcc
+ push #0xcc
+ push #0x3d
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0c, sp), x
+ ldw (0x0a, sp), y
+; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++)
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+ jra 00129$
+00157$:
+ ldw y, (0x10, sp)
+ ldw (0x15, sp), y
+00112$:
+; ../_atof.c: 72: if (toupper(*s)=='E')
+ ldw y, (0x15, sp)
+ ldw (0x10, sp), y
+ ldw x, y
+ ld a, (x)
+ clrw x
+ ld xl, a
+ pushw x
+ callf _toupper
+ addw sp, #2
+ cpw x, #0x0045
+ jrne 00120$
+; ../_atof.c: 74: s++;
+ ldw x, (0x10, sp)
+ incw x
+; ../_atof.c: 75: iexp=(signed char)atoi(s);
+ ldw (0x15, sp), x
+ pushw x
+ callf _atoi
+ addw sp, #2
+ ld a, xl
+; ../_atof.c: 77: while(iexp!=0)
+00116$:
+ tnz a
+ jreq 00120$
+; ../_atof.c: 79: if(iexp<0)
+ tnz a
+ jrpl 00114$
+; ../_atof.c: 81: value*=0.1;
+ push a
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0xcd
+ push #0xcc
+ push #0xcc
+ push #0x3d
+ callf ___fsmul
+ addw sp, #8
+ pop a
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../_atof.c: 82: iexp++;
+ inc a
+ jra 00116$
+00114$:
+; ../_atof.c: 86: value*=10.0;
+ push a
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x20
+ push #0x41
+ callf ___fsmul
+ addw sp, #8
+ pop a
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../_atof.c: 87: iexp--;
+ dec a
+ jra 00116$
+00120$:
+; ../_atof.c: 93: if(sign) value*=-1.0;
+ tnz (0x05, sp)
+ jreq 00122$
+ ldw y, (0x08, sp)
+ ldw x, (0x06, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+00122$:
+; ../_atof.c: 94: return (value);
+ ldw x, (0x08, sp)
+ ldw y, (0x06, sp)
+; ../_atof.c: 95: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_atof.lst b/device/lib/stm8-large/_atof.lst
new file mode 100644
index 0000000..1168cf1
--- /dev/null
+++ b/device/lib/stm8-large/_atof.lst
@@ -0,0 +1,310 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _atof
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _atoi
+ 12 .globl _toupper
+ 13 .globl _isspace
+ 14 .globl _atof
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area DATA
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../_atof.c: 33: float atof(const char * s)
+ 53 ; -----------------------------------------
+ 54 ; function atof
+ 55 ; -----------------------------------------
+ 000000 56 _atof:
+ 000000 52 11 [ 2] 57 sub sp, #17
+ 58 ; ../_atof.c: 40: while (isspace(*s)) s++;
+ 000002 16 15 [ 2] 59 ldw y, (0x15, sp)
+ 000004 17 10 [ 2] 60 ldw (0x10, sp), y
+ 000006 61 00101$:
+ 000006 1E 10 [ 2] 62 ldw x, (0x10, sp)
+ 000008 F6 [ 1] 63 ld a, (x)
+ 000009 5F [ 1] 64 clrw x
+ 00000A 97 [ 1] 65 ld xl, a
+ 00000B 89 [ 2] 66 pushw x
+ 00000C 8Ds00r00r00 [ 5] 67 callf _isspace
+ 000010 5B 02 [ 2] 68 addw sp, #2
+ 000012 16 10 [ 2] 69 ldw y, (0x10, sp)
+ 000014 90 5C [ 1] 70 incw y
+ 000016 5D [ 2] 71 tnzw x
+ 000017 27 04 [ 1] 72 jreq 00155$
+ 000019 17 10 [ 2] 73 ldw (0x10, sp), y
+ 00001B 20 E9 [ 2] 74 jra 00101$
+ 00001D 75 00155$:
+ 00001D 1E 10 [ 2] 76 ldw x, (0x10, sp)
+ 00001F 1F 15 [ 2] 77 ldw (0x15, sp), x
+ 78 ; ../_atof.c: 43: if (*s == '-')
+ 000021 1E 10 [ 2] 79 ldw x, (0x10, sp)
+ 000023 F6 [ 1] 80 ld a, (x)
+ 000024 A1 2D [ 1] 81 cp a, #0x2d
+ 000026 26 08 [ 1] 82 jrne 00107$
+ 83 ; ../_atof.c: 45: sign=1;
+ 000028 A6 01 [ 1] 84 ld a, #0x01
+ 00002A 6B 05 [ 1] 85 ld (0x05, sp), a
+ 86 ; ../_atof.c: 46: s++;
+ 00002C 17 15 [ 2] 87 ldw (0x15, sp), y
+ 00002E 20 08 [ 2] 88 jra 00108$
+ 000030 89 00107$:
+ 90 ; ../_atof.c: 50: sign=0;
+ 000030 0F 05 [ 1] 91 clr (0x05, sp)
+ 92 ; ../_atof.c: 51: if (*s == '+') s++;
+ 000032 A1 2B [ 1] 93 cp a, #0x2b
+ 000034 26 02 [ 1] 94 jrne 00108$
+ 000036 17 15 [ 2] 95 ldw (0x15, sp), y
+ 000038 96 00108$:
+ 97 ; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++)
+ 000038 5F [ 1] 98 clrw x
+ 000039 1F 08 [ 2] 99 ldw (0x08, sp), x
+ 00003B 1F 06 [ 2] 100 ldw (0x06, sp), x
+ 00003D 16 15 [ 2] 101 ldw y, (0x15, sp)
+ 00003F 17 0C [ 2] 102 ldw (0x0c, sp), y
+ 000041 103 00126$:
+ 000041 1E 0C [ 2] 104 ldw x, (0x0c, sp)
+ 000043 F6 [ 1] 105 ld a, (x)
+ 000044 6B 0E [ 1] 106 ld (0x0e, sp), a
+ 000046 6B 0F [ 1] 107 ld (0x0f, sp), a
+ 000048 1E 0C [ 2] 108 ldw x, (0x0c, sp)
+ 00004A 5C [ 1] 109 incw x
+ 00004B 1F 10 [ 2] 110 ldw (0x10, sp), x
+ 111 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ 00004D 7B 0F [ 1] 112 ld a, (0x0f, sp)
+ 00004F A1 30 [ 1] 113 cp a, #0x30
+ 000051 25 41 [ 1] 114 jrc 00156$
+ 000053 A1 39 [ 1] 115 cp a, #0x39
+ 000055 22 3D [ 1] 116 jrugt 00156$
+ 117 ; ../_atof.c: 57: value=10.0*value+(*s-'0');
+ 000057 1E 08 [ 2] 118 ldw x, (0x08, sp)
+ 000059 89 [ 2] 119 pushw x
+ 00005A 1E 08 [ 2] 120 ldw x, (0x08, sp)
+ 00005C 89 [ 2] 121 pushw x
+ 00005D 5F [ 1] 122 clrw x
+ 00005E 89 [ 2] 123 pushw x
+ 00005F 4B 20 [ 1] 124 push #0x20
+ 000061 4B 41 [ 1] 125 push #0x41
+ 000063 8Ds00r00r00 [ 5] 126 callf ___fsmul
+ 000067 5B 08 [ 2] 127 addw sp, #8
+ 000069 1F 0C [ 2] 128 ldw (0x0c, sp), x
+ 00006B 17 0A [ 2] 129 ldw (0x0a, sp), y
+ 00006D 5F [ 1] 130 clrw x
+ 00006E 7B 0E [ 1] 131 ld a, (0x0e, sp)
+ 000070 97 [ 1] 132 ld xl, a
+ 000071 1D 00 30 [ 2] 133 subw x, #0x0030
+ 000074 89 [ 2] 134 pushw x
+ 000075 8Ds00r00r00 [ 5] 135 callf ___sint2fs
+ 000079 5B 02 [ 2] 136 addw sp, #2
+ 00007B 89 [ 2] 137 pushw x
+ 00007C 90 89 [ 2] 138 pushw y
+ 00007E 1E 10 [ 2] 139 ldw x, (0x10, sp)
+ 000080 89 [ 2] 140 pushw x
+ 000081 1E 10 [ 2] 141 ldw x, (0x10, sp)
+ 000083 89 [ 2] 142 pushw x
+ 000084 8Ds00r00r00 [ 5] 143 callf ___fsadd
+ 000088 5B 08 [ 2] 144 addw sp, #8
+ 00008A 1F 08 [ 2] 145 ldw (0x08, sp), x
+ 00008C 17 06 [ 2] 146 ldw (0x06, sp), y
+ 147 ; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++)
+ 00008E 16 10 [ 2] 148 ldw y, (0x10, sp)
+ 000090 17 0C [ 2] 149 ldw (0x0c, sp), y
+ 000092 20 AD [ 2] 150 jra 00126$
+ 000094 151 00156$:
+ 000094 16 0C [ 2] 152 ldw y, (0x0c, sp)
+ 000096 17 15 [ 2] 153 ldw (0x15, sp), y
+ 154 ; ../_atof.c: 61: if (*s == '.')
+ 000098 7B 0E [ 1] 155 ld a, (0x0e, sp)
+ 00009A A1 2E [ 1] 156 cp a, #0x2e
+ 00009C 26 72 [ 1] 157 jrne 00112$
+ 158 ; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++)
+ 00009E AE CC CD [ 2] 159 ldw x, #0xcccd
+ 0000A1 1F 0C [ 2] 160 ldw (0x0c, sp), x
+ 0000A3 AE 3D CC [ 2] 161 ldw x, #0x3dcc
+ 0000A6 1F 0A [ 2] 162 ldw (0x0a, sp), x
+ 0000A8 163 00129$:
+ 0000A8 1E 10 [ 2] 164 ldw x, (0x10, sp)
+ 0000AA F6 [ 1] 165 ld a, (x)
+ 0000AB 6B 0E [ 1] 166 ld (0x0e, sp), a
+ 167 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ 0000AD 6B 0F [ 1] 168 ld (0x0f, sp), a
+ 0000AF A1 30 [ 1] 169 cp a, #0x30
+ 0000B1 25 59 [ 1] 170 jrc 00157$
+ 0000B3 7B 0F [ 1] 171 ld a, (0x0f, sp)
+ 0000B5 A1 39 [ 1] 172 cp a, #0x39
+ 0000B7 22 53 [ 1] 173 jrugt 00157$
+ 174 ; ../_atof.c: 66: value+=(*s-'0')*fraction;
+ 0000B9 5F [ 1] 175 clrw x
+ 0000BA 7B 0E [ 1] 176 ld a, (0x0e, sp)
+ 0000BC 97 [ 1] 177 ld xl, a
+ 0000BD 1D 00 30 [ 2] 178 subw x, #0x0030
+ 0000C0 89 [ 2] 179 pushw x
+ 0000C1 8Ds00r00r00 [ 5] 180 callf ___sint2fs
+ 0000C5 5B 02 [ 2] 181 addw sp, #2
+ 0000C7 1F 03 [ 2] 182 ldw (0x03, sp), x
+ 0000C9 1E 0C [ 2] 183 ldw x, (0x0c, sp)
+ 0000CB 89 [ 2] 184 pushw x
+ 0000CC 1E 0C [ 2] 185 ldw x, (0x0c, sp)
+ 0000CE 89 [ 2] 186 pushw x
+ 0000CF 1E 07 [ 2] 187 ldw x, (0x07, sp)
+ 0000D1 89 [ 2] 188 pushw x
+ 0000D2 90 89 [ 2] 189 pushw y
+ 0000D4 8Ds00r00r00 [ 5] 190 callf ___fsmul
+ 0000D8 5B 08 [ 2] 191 addw sp, #8
+ 0000DA 89 [ 2] 192 pushw x
+ 0000DB 90 89 [ 2] 193 pushw y
+ 0000DD 1E 0C [ 2] 194 ldw x, (0x0c, sp)
+ 0000DF 89 [ 2] 195 pushw x
+ 0000E0 1E 0C [ 2] 196 ldw x, (0x0c, sp)
+ 0000E2 89 [ 2] 197 pushw x
+ 0000E3 8Ds00r00r00 [ 5] 198 callf ___fsadd
+ 0000E7 5B 08 [ 2] 199 addw sp, #8
+ 0000E9 1F 08 [ 2] 200 ldw (0x08, sp), x
+ 0000EB 17 06 [ 2] 201 ldw (0x06, sp), y
+ 202 ; ../_atof.c: 67: fraction*=0.1;
+ 0000ED 1E 0C [ 2] 203 ldw x, (0x0c, sp)
+ 0000EF 89 [ 2] 204 pushw x
+ 0000F0 1E 0C [ 2] 205 ldw x, (0x0c, sp)
+ 0000F2 89 [ 2] 206 pushw x
+ 0000F3 4B CD [ 1] 207 push #0xcd
+ 0000F5 4B CC [ 1] 208 push #0xcc
+ 0000F7 4B CC [ 1] 209 push #0xcc
+ 0000F9 4B 3D [ 1] 210 push #0x3d
+ 0000FB 8Ds00r00r00 [ 5] 211 callf ___fsmul
+ 0000FF 5B 08 [ 2] 212 addw sp, #8
+ 000101 1F 0C [ 2] 213 ldw (0x0c, sp), x
+ 000103 17 0A [ 2] 214 ldw (0x0a, sp), y
+ 215 ; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++)
+ 000105 1E 10 [ 2] 216 ldw x, (0x10, sp)
+ 000107 5C [ 1] 217 incw x
+ 000108 1F 10 [ 2] 218 ldw (0x10, sp), x
+ 00010A 20 9C [ 2] 219 jra 00129$
+ 00010C 220 00157$:
+ 00010C 16 10 [ 2] 221 ldw y, (0x10, sp)
+ 00010E 17 15 [ 2] 222 ldw (0x15, sp), y
+ 000110 223 00112$:
+ 224 ; ../_atof.c: 72: if (toupper(*s)=='E')
+ 000110 16 15 [ 2] 225 ldw y, (0x15, sp)
+ 000112 17 10 [ 2] 226 ldw (0x10, sp), y
+ 000114 93 [ 1] 227 ldw x, y
+ 000115 F6 [ 1] 228 ld a, (x)
+ 000116 5F [ 1] 229 clrw x
+ 000117 97 [ 1] 230 ld xl, a
+ 000118 89 [ 2] 231 pushw x
+ 000119 8Ds00r00r00 [ 5] 232 callf _toupper
+ 00011D 5B 02 [ 2] 233 addw sp, #2
+ 00011F A3 00 45 [ 2] 234 cpw x, #0x0045
+ 000122 26 4B [ 1] 235 jrne 00120$
+ 236 ; ../_atof.c: 74: s++;
+ 000124 1E 10 [ 2] 237 ldw x, (0x10, sp)
+ 000126 5C [ 1] 238 incw x
+ 239 ; ../_atof.c: 75: iexp=(signed char)atoi(s);
+ 000127 1F 15 [ 2] 240 ldw (0x15, sp), x
+ 000129 89 [ 2] 241 pushw x
+ 00012A 8Ds00r00r00 [ 5] 242 callf _atoi
+ 00012E 5B 02 [ 2] 243 addw sp, #2
+ 000130 9F [ 1] 244 ld a, xl
+ 245 ; ../_atof.c: 77: while(iexp!=0)
+ 000131 246 00116$:
+ 000131 4D [ 1] 247 tnz a
+ 000132 27 3B [ 1] 248 jreq 00120$
+ 249 ; ../_atof.c: 79: if(iexp<0)
+ 000134 4D [ 1] 250 tnz a
+ 000135 2A 1D [ 1] 251 jrpl 00114$
+ 252 ; ../_atof.c: 81: value*=0.1;
+ 000137 88 [ 1] 253 push a
+ 000138 1E 09 [ 2] 254 ldw x, (0x09, sp)
+ 00013A 89 [ 2] 255 pushw x
+ 00013B 1E 09 [ 2] 256 ldw x, (0x09, sp)
+ 00013D 89 [ 2] 257 pushw x
+ 00013E 4B CD [ 1] 258 push #0xcd
+ 000140 4B CC [ 1] 259 push #0xcc
+ 000142 4B CC [ 1] 260 push #0xcc
+ 000144 4B 3D [ 1] 261 push #0x3d
+ 000146 8Ds00r00r00 [ 5] 262 callf ___fsmul
+ 00014A 5B 08 [ 2] 263 addw sp, #8
+ 00014C 84 [ 1] 264 pop a
+ 00014D 1F 08 [ 2] 265 ldw (0x08, sp), x
+ 00014F 17 06 [ 2] 266 ldw (0x06, sp), y
+ 267 ; ../_atof.c: 82: iexp++;
+ 000151 4C [ 1] 268 inc a
+ 000152 20 DD [ 2] 269 jra 00116$
+ 000154 270 00114$:
+ 271 ; ../_atof.c: 86: value*=10.0;
+ 000154 88 [ 1] 272 push a
+ 000155 1E 09 [ 2] 273 ldw x, (0x09, sp)
+ 000157 89 [ 2] 274 pushw x
+ 000158 1E 09 [ 2] 275 ldw x, (0x09, sp)
+ 00015A 89 [ 2] 276 pushw x
+ 00015B 5F [ 1] 277 clrw x
+ 00015C 89 [ 2] 278 pushw x
+ 00015D 4B 20 [ 1] 279 push #0x20
+ 00015F 4B 41 [ 1] 280 push #0x41
+ 000161 8Ds00r00r00 [ 5] 281 callf ___fsmul
+ 000165 5B 08 [ 2] 282 addw sp, #8
+ 000167 84 [ 1] 283 pop a
+ 000168 1F 08 [ 2] 284 ldw (0x08, sp), x
+ 00016A 17 06 [ 2] 285 ldw (0x06, sp), y
+ 286 ; ../_atof.c: 87: iexp--;
+ 00016C 4A [ 1] 287 dec a
+ 00016D 20 C2 [ 2] 288 jra 00116$
+ 00016F 289 00120$:
+ 290 ; ../_atof.c: 93: if(sign) value*=-1.0;
+ 00016F 0D 05 [ 1] 291 tnz (0x05, sp)
+ 000171 27 0B [ 1] 292 jreq 00122$
+ 000173 16 08 [ 2] 293 ldw y, (0x08, sp)
+ 000175 1E 06 [ 2] 294 ldw x, (0x06, sp)
+ 000177 58 [ 2] 295 sllw x
+ 000178 8C [ 1] 296 ccf
+ 000179 56 [ 2] 297 rrcw x
+ 00017A 17 08 [ 2] 298 ldw (0x08, sp), y
+ 00017C 1F 06 [ 2] 299 ldw (0x06, sp), x
+ 00017E 300 00122$:
+ 301 ; ../_atof.c: 94: return (value);
+ 00017E 1E 08 [ 2] 302 ldw x, (0x08, sp)
+ 000180 16 06 [ 2] 303 ldw y, (0x06, sp)
+ 304 ; ../_atof.c: 95: }
+ 000182 5B 11 [ 2] 305 addw sp, #17
+ 000184 87 [ 5] 306 retf
+ 307 .area CODE
+ 308 .area CONST
+ 309 .area INITIALIZER
+ 310 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_atof.rel b/device/lib/stm8-large/_atof.rel
new file mode 100644
index 0000000..7648469
--- /dev/null
+++ b/device/lib/stm8-large/_atof.rel
@@ -0,0 +1,127 @@
+XH3
+H B areas 8 global symbols
+M _atof
+O -mstm8
+S ___fsmul Ref000000
+S _isspace Ref000000
+S _atoi Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S ___sint2fs Ref000000
+S _toupper Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 185 flags 0 addr 0
+S _atof Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 16 15 17 10
+R 00 00 00 09
+T 00 00 06
+R 00 00 00 09
+T 00 00 06 1E 10 F6 5F 97 89 8D 00 00 00 5B 02 16
+R 00 00 00 09 82 0A 00 01
+T 00 00 13 10 90 5C 5D 27 04 17 10 20 E9
+R 00 00 00 09
+T 00 00 1D
+R 00 00 00 09
+T 00 00 1D 1E 10 1F 15 1E 10 F6 A1 2D 26 08 A6 01
+R 00 00 00 09
+T 00 00 2A 6B 05 17 15 20 08
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 0F 05 A1 2B 26 02 17 15
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 5F 1F 08 1F 06 16 15 17 0C
+R 00 00 00 09
+T 00 00 41
+R 00 00 00 09
+T 00 00 41 1E 0C F6 6B 0E 6B 0F 1E 0C 5C 1F 10 7B
+R 00 00 00 09
+T 00 00 4E 0F A1 30 25 41 A1 39 22 3D 1E 08 89 1E
+R 00 00 00 09
+T 00 00 5B 08 89 5F 89 4B 20 4B 41 8D
+R 00 00 00 09
+T 00 00 64 00 00 00 5B 08 1F 0C 17 0A 5F 7B 0E 97
+R 00 00 00 09 82 03 00 00
+T 00 00 71 1D 00 30 89 8D 00 00 00 5B 02 89 90 89
+R 00 00 00 09 82 08 00 05
+T 00 00 7E 1E 10 89 1E 10 89 8D 00 00 00 5B 08 1F
+R 00 00 00 09 82 0A 00 04
+T 00 00 8B 08 17 06 16 10 17 0C 20 AD
+R 00 00 00 09
+T 00 00 94
+R 00 00 00 09
+T 00 00 94 16 0C 17 15 7B 0E A1 2E 26 72 AE CC CD
+R 00 00 00 09
+T 00 00 A1 1F 0C AE 3D CC 1F 0A
+R 00 00 00 09
+T 00 00 A8
+R 00 00 00 09
+T 00 00 A8 1E 10 F6 6B 0E 6B 0F A1 30 25 59 7B 0F
+R 00 00 00 09
+T 00 00 B5 A1 39 22 53 5F 7B 0E 97 1D 00 30 89 8D
+R 00 00 00 09
+T 00 00 C2 00 00 00 5B 02 1F 03 1E 0C 89 1E 0C 89
+R 00 00 00 09 82 03 00 05
+T 00 00 CF 1E 07 89 90 89 8D 00 00 00 5B 08 89 90
+R 00 00 00 09 82 09 00 00
+T 00 00 DC 89 1E 0C 89 1E 0C 89 8D
+R 00 00 00 09
+T 00 00 E4 00 00 00 5B 08 1F 08 17 06 1E 0C 89 1E
+R 00 00 00 09 82 03 00 04
+T 00 00 F1 0C 89 4B CD 4B CC 4B CC 4B 3D 8D
+R 00 00 00 09
+T 00 00 FC 00 00 00 5B 08 1F 0C 17 0A 1E 10 5C 1F
+R 00 00 00 09 82 03 00 00
+T 00 01 09 10 20 9C
+R 00 00 00 09
+T 00 01 0C
+R 00 00 00 09
+T 00 01 0C 16 10 17 15
+R 00 00 00 09
+T 00 01 10
+R 00 00 00 09
+T 00 01 10 16 15 17 10 93 F6 5F 97 89 8D
+R 00 00 00 09
+T 00 01 1A 00 00 00 5B 02 A3 00 45 26 4B 1E 10 5C
+R 00 00 00 09 82 03 00 06
+T 00 01 27 1F 15 89 8D 00 00 00 5B 02 9F
+R 00 00 00 09 82 07 00 02
+T 00 01 31
+R 00 00 00 09
+T 00 01 31 4D 27 3B 4D 2A 1D 88 1E 09 89 1E 09 89
+R 00 00 00 09
+T 00 01 3E 4B CD 4B CC 4B CC 4B 3D 8D
+R 00 00 00 09
+T 00 01 47 00 00 00 5B 08 84 1F 08 17 06 4C 20 DD
+R 00 00 00 09 82 03 00 00
+T 00 01 54
+R 00 00 00 09
+T 00 01 54 88 1E 09 89 1E 09 89 5F 89 4B 20 4B 41
+R 00 00 00 09
+T 00 01 61 8D 00 00 00 5B 08 84 1F 08 17 06 4A 20
+R 00 00 00 09 82 04 00 00
+T 00 01 6E C2
+R 00 00 00 09
+T 00 01 6F
+R 00 00 00 09
+T 00 01 6F 0D 05 27 0B 16 08 1E 06 58 8C 56 17 08
+R 00 00 00 09
+T 00 01 7C 1F 06
+R 00 00 00 09
+T 00 01 7E
+R 00 00 00 09
+T 00 01 7E 1E 08 16 06 5B 11 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_atof.sym b/device/lib/stm8-large/_atof.sym
new file mode 100644
index 0000000..66f34fd
--- /dev/null
+++ b/device/lib/stm8-large/_atof.sym
@@ -0,0 +1,35 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsmul ****** GX
+ ___sint2fs ****** GX
+ 9 _atof 000000 GR
+ _atoi ****** GX
+ _isspace ****** GX
+ _toupper ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 185 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_divschar.asm b/device/lib/stm8-large/_divschar.asm
new file mode 100644
index 0000000..b3e877d
--- /dev/null
+++ b/device/lib/stm8-large/_divschar.asm
@@ -0,0 +1,122 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _divschar
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __divschar
+ .globl __divuschar
+ .globl __divsuchar
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_divschar.c: 31: _divschar (signed char x, signed char y)
+; -----------------------------------------
+; function _divschar
+; -----------------------------------------
+__divschar:
+; ../_divschar.c: 33: return ((int)x / (int)y);
+ ld a, (0x04, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld a, (0x05, sp)
+ ld yl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld yh, a
+ pushw y
+ pushw x
+ callf __divsint
+ addw sp, #4
+; ../_divschar.c: 34: }
+ retf
+; ../_divschar.c: 37: _divuschar (unsigned char x, unsigned char y)
+; -----------------------------------------
+; function _divuschar
+; -----------------------------------------
+__divuschar:
+ sub sp, #2
+; ../_divschar.c: 39: return ((int)((signed char)x) / (int)y);
+ ld a, (0x06, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld a, (0x07, sp)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+ ldw y, (0x01, sp)
+ pushw y
+ pushw x
+ callf __divsint
+; ../_divschar.c: 40: }
+ addw sp, #6
+ retf
+; ../_divschar.c: 43: _divsuchar (signed char x, signed char y)
+; -----------------------------------------
+; function _divsuchar
+; -----------------------------------------
+__divsuchar:
+; ../_divschar.c: 45: return ((int)((unsigned char)x) / (int)y);
+ ld a, (0x04, sp)
+ clrw y
+ ld yl, a
+ ld a, (0x05, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ pushw x
+ pushw y
+ callf __divsint
+ addw sp, #4
+; ../_divschar.c: 46: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divschar.lst b/device/lib/stm8-large/_divschar.lst
new file mode 100644
index 0000000..ac12991
--- /dev/null
+++ b/device/lib/stm8-large/_divschar.lst
@@ -0,0 +1,122 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _divschar
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __divschar
+ 12 .globl __divuschar
+ 13 .globl __divsuchar
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../_divschar.c: 31: _divschar (signed char x, signed char y)
+ 52 ; -----------------------------------------
+ 53 ; function _divschar
+ 54 ; -----------------------------------------
+ 000000 55 __divschar:
+ 56 ; ../_divschar.c: 33: return ((int)x / (int)y);
+ 000000 7B 04 [ 1] 57 ld a, (0x04, sp)
+ 000002 97 [ 1] 58 ld xl, a
+ 000003 49 [ 1] 59 rlc a
+ 000004 4F [ 1] 60 clr a
+ 000005 A2 00 [ 1] 61 sbc a, #0x00
+ 000007 95 [ 1] 62 ld xh, a
+ 000008 7B 05 [ 1] 63 ld a, (0x05, sp)
+ 00000A 90 97 [ 1] 64 ld yl, a
+ 00000C 49 [ 1] 65 rlc a
+ 00000D 4F [ 1] 66 clr a
+ 00000E A2 00 [ 1] 67 sbc a, #0x00
+ 000010 90 95 [ 1] 68 ld yh, a
+ 000012 90 89 [ 2] 69 pushw y
+ 000014 89 [ 2] 70 pushw x
+ 000015 8Ds00r00r00 [ 5] 71 callf __divsint
+ 000019 5B 04 [ 2] 72 addw sp, #4
+ 73 ; ../_divschar.c: 34: }
+ 00001B 87 [ 5] 74 retf
+ 75 ; ../_divschar.c: 37: _divuschar (unsigned char x, unsigned char y)
+ 76 ; -----------------------------------------
+ 77 ; function _divuschar
+ 78 ; -----------------------------------------
+ 00001C 79 __divuschar:
+ 00001C 52 02 [ 2] 80 sub sp, #2
+ 81 ; ../_divschar.c: 39: return ((int)((signed char)x) / (int)y);
+ 00001E 7B 06 [ 1] 82 ld a, (0x06, sp)
+ 000020 97 [ 1] 83 ld xl, a
+ 000021 49 [ 1] 84 rlc a
+ 000022 4F [ 1] 85 clr a
+ 000023 A2 00 [ 1] 86 sbc a, #0x00
+ 000025 95 [ 1] 87 ld xh, a
+ 000026 7B 07 [ 1] 88 ld a, (0x07, sp)
+ 000028 6B 02 [ 1] 89 ld (0x02, sp), a
+ 00002A 0F 01 [ 1] 90 clr (0x01, sp)
+ 00002C 16 01 [ 2] 91 ldw y, (0x01, sp)
+ 00002E 90 89 [ 2] 92 pushw y
+ 000030 89 [ 2] 93 pushw x
+ 000031 8Ds00r00r00 [ 5] 94 callf __divsint
+ 95 ; ../_divschar.c: 40: }
+ 000035 5B 06 [ 2] 96 addw sp, #6
+ 000037 87 [ 5] 97 retf
+ 98 ; ../_divschar.c: 43: _divsuchar (signed char x, signed char y)
+ 99 ; -----------------------------------------
+ 100 ; function _divsuchar
+ 101 ; -----------------------------------------
+ 000038 102 __divsuchar:
+ 103 ; ../_divschar.c: 45: return ((int)((unsigned char)x) / (int)y);
+ 000038 7B 04 [ 1] 104 ld a, (0x04, sp)
+ 00003A 90 5F [ 1] 105 clrw y
+ 00003C 90 97 [ 1] 106 ld yl, a
+ 00003E 7B 05 [ 1] 107 ld a, (0x05, sp)
+ 000040 97 [ 1] 108 ld xl, a
+ 000041 49 [ 1] 109 rlc a
+ 000042 4F [ 1] 110 clr a
+ 000043 A2 00 [ 1] 111 sbc a, #0x00
+ 000045 95 [ 1] 112 ld xh, a
+ 000046 89 [ 2] 113 pushw x
+ 000047 90 89 [ 2] 114 pushw y
+ 000049 8Ds00r00r00 [ 5] 115 callf __divsint
+ 00004D 5B 04 [ 2] 116 addw sp, #4
+ 117 ; ../_divschar.c: 46: }
+ 00004F 87 [ 5] 118 retf
+ 119 .area CODE
+ 120 .area CONST
+ 121 .area INITIALIZER
+ 122 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divschar.rel b/device/lib/stm8-large/_divschar.rel
new file mode 100644
index 0000000..f0658c3
--- /dev/null
+++ b/device/lib/stm8-large/_divschar.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 5 global symbols
+M _divschar
+O -mstm8
+S .__.ABS. Def000000
+S __divsint Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 50 flags 0 addr 0
+S __divsuchar Def000038
+S __divuschar Def00001C
+S __divschar Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 04 97 49 4F A2 00 95 7B 05 90 97 49
+R 00 00 00 09
+T 00 00 0D 4F A2 00 90 95 90 89 89 8D
+R 00 00 00 09
+T 00 00 16 00 00 00 5B 04 87
+R 00 00 00 09 82 03 00 01
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 52 02 7B 06 97 49 4F A2 00 95 7B 07 6B
+R 00 00 00 09
+T 00 00 29 02 0F 01 16 01 90 89 89 8D
+R 00 00 00 09
+T 00 00 32 00 00 00 5B 06 87
+R 00 00 00 09 82 03 00 01
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 7B 04 90 5F 90 97 7B 05 97 49 4F A2 00
+R 00 00 00 09
+T 00 00 45 95 89 90 89 8D 00 00 00 5B 04 87
+R 00 00 00 09 82 08 00 01
diff --git a/device/lib/stm8-large/_divschar.sym b/device/lib/stm8-large/_divschar.sym
new file mode 100644
index 0000000..4e9489b
--- /dev/null
+++ b/device/lib/stm8-large/_divschar.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __divschar 000000 GR
+ __divsint ****** GX
+ 9 __divsuchar 000038 GR
+ 9 __divuschar 00001C GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 50 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_divsint.asm b/device/lib/stm8-large/_divsint.asm
new file mode 100644
index 0000000..7794c1d
--- /dev/null
+++ b/device/lib/stm8-large/_divsint.asm
@@ -0,0 +1,111 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _divsint
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __divsint
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_divsint.c: 207: _divsint (int x, int y)
+; -----------------------------------------
+; function _divsint
+; -----------------------------------------
+__divsint:
+ sub sp, #6
+; ../_divsint.c: 211: r = (unsigned int)(x < 0 ? -x : x) / (unsigned int)(y < 0 ? -y : y);
+ tnz (0x0a, sp)
+ jrmi 00125$
+ clr (0x01, sp)
+ jra 00126$
+00125$:
+ ld a, #0x01
+ ld (0x01, sp), a
+00126$:
+ tnz (0x01, sp)
+ jreq 00106$
+ ldw x, (0x0a, sp)
+ negw x
+ .byte 0xc5
+00106$:
+ ldw x, (0x0a, sp)
+00107$:
+ ldw (0x02, sp), x
+ tnz (0x0c, sp)
+ jrmi 00128$
+ clr (0x04, sp)
+ jra 00129$
+00128$:
+ ld a, #0x01
+ ld (0x04, sp), a
+00129$:
+ tnz (0x04, sp)
+ jreq 00108$
+ ld a, (0x0d, sp)
+ neg a
+ ld (0x06, sp), a
+ clr a
+ sbc a, (0x0c, sp)
+ ld (0x05, sp), a
+ jra 00109$
+00108$:
+ ldw y, (0x0c, sp)
+ ldw (0x05, sp), y
+00109$:
+ ldw y, (0x05, sp)
+ ldw x, (0x02, sp)
+ divw x, y
+; ../_divsint.c: 212: if ((x < 0) ^ (y < 0))
+ ld a, (0x01, sp)
+ xor a, (0x04, sp)
+ jreq 00102$
+; ../_divsint.c: 213: return -r;
+ negw x
+; ../_divsint.c: 215: return r;
+00102$:
+; ../_divsint.c: 216: }
+ addw sp, #6
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divsint.lst b/device/lib/stm8-large/_divsint.lst
new file mode 100644
index 0000000..617a233
--- /dev/null
+++ b/device/lib/stm8-large/_divsint.lst
@@ -0,0 +1,111 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _divsint
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __divsint
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_divsint.c: 207: _divsint (int x, int y)
+ 50 ; -----------------------------------------
+ 51 ; function _divsint
+ 52 ; -----------------------------------------
+ 000000 53 __divsint:
+ 000000 52 06 [ 2] 54 sub sp, #6
+ 55 ; ../_divsint.c: 211: r = (unsigned int)(x < 0 ? -x : x) / (unsigned int)(y < 0 ? -y : y);
+ 000002 0D 0A [ 1] 56 tnz (0x0a, sp)
+ 000004 2B 04 [ 1] 57 jrmi 00125$
+ 000006 0F 01 [ 1] 58 clr (0x01, sp)
+ 000008 20 04 [ 2] 59 jra 00126$
+ 00000A 60 00125$:
+ 00000A A6 01 [ 1] 61 ld a, #0x01
+ 00000C 6B 01 [ 1] 62 ld (0x01, sp), a
+ 00000E 63 00126$:
+ 00000E 0D 01 [ 1] 64 tnz (0x01, sp)
+ 000010 27 04 [ 1] 65 jreq 00106$
+ 000012 1E 0A [ 2] 66 ldw x, (0x0a, sp)
+ 000014 50 [ 2] 67 negw x
+ 000015 C5 68 .byte 0xc5
+ 000016 69 00106$:
+ 000016 1E 0A [ 2] 70 ldw x, (0x0a, sp)
+ 000018 71 00107$:
+ 000018 1F 02 [ 2] 72 ldw (0x02, sp), x
+ 00001A 0D 0C [ 1] 73 tnz (0x0c, sp)
+ 00001C 2B 04 [ 1] 74 jrmi 00128$
+ 00001E 0F 04 [ 1] 75 clr (0x04, sp)
+ 000020 20 04 [ 2] 76 jra 00129$
+ 000022 77 00128$:
+ 000022 A6 01 [ 1] 78 ld a, #0x01
+ 000024 6B 04 [ 1] 79 ld (0x04, sp), a
+ 000026 80 00129$:
+ 000026 0D 04 [ 1] 81 tnz (0x04, sp)
+ 000028 27 0C [ 1] 82 jreq 00108$
+ 00002A 7B 0D [ 1] 83 ld a, (0x0d, sp)
+ 00002C 40 [ 1] 84 neg a
+ 00002D 6B 06 [ 1] 85 ld (0x06, sp), a
+ 00002F 4F [ 1] 86 clr a
+ 000030 12 0C [ 1] 87 sbc a, (0x0c, sp)
+ 000032 6B 05 [ 1] 88 ld (0x05, sp), a
+ 000034 20 04 [ 2] 89 jra 00109$
+ 000036 90 00108$:
+ 000036 16 0C [ 2] 91 ldw y, (0x0c, sp)
+ 000038 17 05 [ 2] 92 ldw (0x05, sp), y
+ 00003A 93 00109$:
+ 00003A 16 05 [ 2] 94 ldw y, (0x05, sp)
+ 00003C 1E 02 [ 2] 95 ldw x, (0x02, sp)
+ 00003E 65 [ 2] 96 divw x, y
+ 97 ; ../_divsint.c: 212: if ((x < 0) ^ (y < 0))
+ 00003F 7B 01 [ 1] 98 ld a, (0x01, sp)
+ 000041 18 04 [ 1] 99 xor a, (0x04, sp)
+ 000043 27 01 [ 1] 100 jreq 00102$
+ 101 ; ../_divsint.c: 213: return -r;
+ 000045 50 [ 2] 102 negw x
+ 103 ; ../_divsint.c: 215: return r;
+ 000046 104 00102$:
+ 105 ; ../_divsint.c: 216: }
+ 000046 5B 06 [ 2] 106 addw sp, #6
+ 000048 87 [ 5] 107 retf
+ 108 .area CODE
+ 109 .area CONST
+ 110 .area INITIALIZER
+ 111 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divsint.rel b/device/lib/stm8-large/_divsint.rel
new file mode 100644
index 0000000..a585798
--- /dev/null
+++ b/device/lib/stm8-large/_divsint.rel
@@ -0,0 +1,59 @@
+XH3
+H B areas 2 global symbols
+M _divsint
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 49 flags 0 addr 0
+S __divsint Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 0D 0A 2B 04 0F 01 20 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 0D 01 27 04 1E 0A 50 C5
+R 00 00 00 09
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 1E 0A
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 1F 02 0D 0C 2B 04 0F 04 20 04
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 A6 01 6B 04
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 0D 04 27 0C 7B 0D 40 6B 06 4F 12 0C 6B
+R 00 00 00 09
+T 00 00 33 05 20 04
+R 00 00 00 09
+T 00 00 36
+R 00 00 00 09
+T 00 00 36 16 0C 17 05
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A 16 05 1E 02 65 7B 01 18 04 27 01 50
+R 00 00 00 09
+T 00 00 46
+R 00 00 00 09
+T 00 00 46 5B 06 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_divsint.sym b/device/lib/stm8-large/_divsint.sym
new file mode 100644
index 0000000..8ca74f5
--- /dev/null
+++ b/device/lib/stm8-large/_divsint.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __divsint 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 49 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_divslong.asm b/device/lib/stm8-large/_divslong.asm
new file mode 100644
index 0000000..2b52a47
--- /dev/null
+++ b/device/lib/stm8-large/_divslong.asm
@@ -0,0 +1,151 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _divslong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __divslong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_divslong.c: 259: _divslong (long x, long y)
+; -----------------------------------------
+; function _divslong
+; -----------------------------------------
+__divslong:
+ sub sp, #10
+; ../_divslong.c: 263: r = (unsigned long)(x < 0 ? -x : x) / (unsigned long)(y < 0 ? -y : y);
+ tnz (0x0e, sp)
+ jrmi 00125$
+ clr (0x01, sp)
+ jra 00126$
+00125$:
+ ld a, #0x01
+ ld (0x01, sp), a
+00126$:
+ tnz (0x01, sp)
+ jreq 00106$
+ ldw y, (0x10, sp)
+ negw y
+ ldw x, (0x0e, sp)
+ jrnc 00128$
+ incw x
+00128$:
+ negw x
+ ldw (0x09, sp), y
+ ldw (0x07, sp), x
+ jra 00107$
+00106$:
+ ldw y, (0x10, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x0e, sp)
+ ldw (0x07, sp), y
+00107$:
+ ldw y, (0x09, sp)
+ ldw (0x04, sp), y
+ ldw y, (0x07, sp)
+ ldw (0x02, sp), y
+ tnz (0x12, sp)
+ jrmi 00129$
+ clr (0x06, sp)
+ jra 00130$
+00129$:
+ ld a, #0x01
+ ld (0x06, sp), a
+00130$:
+ tnz (0x06, sp)
+ jreq 00108$
+ ld a, (0x15, sp)
+ neg a
+ ld (0x0a, sp), a
+ clr a
+ sbc a, (0x14, sp)
+ ld (0x09, sp), a
+ clr a
+ sbc a, (0x13, sp)
+ ld (0x08, sp), a
+ clr a
+ sbc a, (0x12, sp)
+ ld (0x07, sp), a
+ jra 00109$
+00108$:
+ ldw y, (0x14, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x12, sp)
+ ldw (0x07, sp), y
+00109$:
+ ldw x, (0x09, sp)
+ ldw y, (0x07, sp)
+ pushw x
+ pushw y
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ callf __divulong
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../_divslong.c: 264: if ((x < 0) ^ (y < 0))
+ ld a, (0x01, sp)
+ xor a, (0x06, sp)
+ jreq 00102$
+; ../_divslong.c: 265: return -r;
+ ldw x, (0x09, sp)
+ negw x
+ ldw y, (0x07, sp)
+ jrnc 00133$
+ incw y
+00133$:
+ negw y
+ jra 00104$
+00102$:
+; ../_divslong.c: 267: return r;
+ ldw x, (0x09, sp)
+ ldw y, (0x07, sp)
+00104$:
+; ../_divslong.c: 268: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divslong.lst b/device/lib/stm8-large/_divslong.lst
new file mode 100644
index 0000000..6bf3fd5
--- /dev/null
+++ b/device/lib/stm8-large/_divslong.lst
@@ -0,0 +1,151 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _divslong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __divslong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_divslong.c: 259: _divslong (long x, long y)
+ 50 ; -----------------------------------------
+ 51 ; function _divslong
+ 52 ; -----------------------------------------
+ 000000 53 __divslong:
+ 000000 52 0A [ 2] 54 sub sp, #10
+ 55 ; ../_divslong.c: 263: r = (unsigned long)(x < 0 ? -x : x) / (unsigned long)(y < 0 ? -y : y);
+ 000002 0D 0E [ 1] 56 tnz (0x0e, sp)
+ 000004 2B 04 [ 1] 57 jrmi 00125$
+ 000006 0F 01 [ 1] 58 clr (0x01, sp)
+ 000008 20 04 [ 2] 59 jra 00126$
+ 00000A 60 00125$:
+ 00000A A6 01 [ 1] 61 ld a, #0x01
+ 00000C 6B 01 [ 1] 62 ld (0x01, sp), a
+ 00000E 63 00126$:
+ 00000E 0D 01 [ 1] 64 tnz (0x01, sp)
+ 000010 27 10 [ 1] 65 jreq 00106$
+ 000012 16 10 [ 2] 66 ldw y, (0x10, sp)
+ 000014 90 50 [ 2] 67 negw y
+ 000016 1E 0E [ 2] 68 ldw x, (0x0e, sp)
+ 000018 24 01 [ 1] 69 jrnc 00128$
+ 00001A 5C [ 1] 70 incw x
+ 00001B 71 00128$:
+ 00001B 50 [ 2] 72 negw x
+ 00001C 17 09 [ 2] 73 ldw (0x09, sp), y
+ 00001E 1F 07 [ 2] 74 ldw (0x07, sp), x
+ 000020 20 08 [ 2] 75 jra 00107$
+ 000022 76 00106$:
+ 000022 16 10 [ 2] 77 ldw y, (0x10, sp)
+ 000024 17 09 [ 2] 78 ldw (0x09, sp), y
+ 000026 16 0E [ 2] 79 ldw y, (0x0e, sp)
+ 000028 17 07 [ 2] 80 ldw (0x07, sp), y
+ 00002A 81 00107$:
+ 00002A 16 09 [ 2] 82 ldw y, (0x09, sp)
+ 00002C 17 04 [ 2] 83 ldw (0x04, sp), y
+ 00002E 16 07 [ 2] 84 ldw y, (0x07, sp)
+ 000030 17 02 [ 2] 85 ldw (0x02, sp), y
+ 000032 0D 12 [ 1] 86 tnz (0x12, sp)
+ 000034 2B 04 [ 1] 87 jrmi 00129$
+ 000036 0F 06 [ 1] 88 clr (0x06, sp)
+ 000038 20 04 [ 2] 89 jra 00130$
+ 00003A 90 00129$:
+ 00003A A6 01 [ 1] 91 ld a, #0x01
+ 00003C 6B 06 [ 1] 92 ld (0x06, sp), a
+ 00003E 93 00130$:
+ 00003E 0D 06 [ 1] 94 tnz (0x06, sp)
+ 000040 27 16 [ 1] 95 jreq 00108$
+ 000042 7B 15 [ 1] 96 ld a, (0x15, sp)
+ 000044 40 [ 1] 97 neg a
+ 000045 6B 0A [ 1] 98 ld (0x0a, sp), a
+ 000047 4F [ 1] 99 clr a
+ 000048 12 14 [ 1] 100 sbc a, (0x14, sp)
+ 00004A 6B 09 [ 1] 101 ld (0x09, sp), a
+ 00004C 4F [ 1] 102 clr a
+ 00004D 12 13 [ 1] 103 sbc a, (0x13, sp)
+ 00004F 6B 08 [ 1] 104 ld (0x08, sp), a
+ 000051 4F [ 1] 105 clr a
+ 000052 12 12 [ 1] 106 sbc a, (0x12, sp)
+ 000054 6B 07 [ 1] 107 ld (0x07, sp), a
+ 000056 20 08 [ 2] 108 jra 00109$
+ 000058 109 00108$:
+ 000058 16 14 [ 2] 110 ldw y, (0x14, sp)
+ 00005A 17 09 [ 2] 111 ldw (0x09, sp), y
+ 00005C 16 12 [ 2] 112 ldw y, (0x12, sp)
+ 00005E 17 07 [ 2] 113 ldw (0x07, sp), y
+ 000060 114 00109$:
+ 000060 1E 09 [ 2] 115 ldw x, (0x09, sp)
+ 000062 16 07 [ 2] 116 ldw y, (0x07, sp)
+ 000064 89 [ 2] 117 pushw x
+ 000065 90 89 [ 2] 118 pushw y
+ 000067 1E 08 [ 2] 119 ldw x, (0x08, sp)
+ 000069 89 [ 2] 120 pushw x
+ 00006A 1E 08 [ 2] 121 ldw x, (0x08, sp)
+ 00006C 89 [ 2] 122 pushw x
+ 00006D 8Ds00r00r00 [ 5] 123 callf __divulong
+ 000071 5B 08 [ 2] 124 addw sp, #8
+ 000073 1F 09 [ 2] 125 ldw (0x09, sp), x
+ 000075 17 07 [ 2] 126 ldw (0x07, sp), y
+ 127 ; ../_divslong.c: 264: if ((x < 0) ^ (y < 0))
+ 000077 7B 01 [ 1] 128 ld a, (0x01, sp)
+ 000079 18 06 [ 1] 129 xor a, (0x06, sp)
+ 00007B 27 0D [ 1] 130 jreq 00102$
+ 131 ; ../_divslong.c: 265: return -r;
+ 00007D 1E 09 [ 2] 132 ldw x, (0x09, sp)
+ 00007F 50 [ 2] 133 negw x
+ 000080 16 07 [ 2] 134 ldw y, (0x07, sp)
+ 000082 24 02 [ 1] 135 jrnc 00133$
+ 000084 90 5C [ 1] 136 incw y
+ 000086 137 00133$:
+ 000086 90 50 [ 2] 138 negw y
+ 000088 20 04 [ 2] 139 jra 00104$
+ 00008A 140 00102$:
+ 141 ; ../_divslong.c: 267: return r;
+ 00008A 1E 09 [ 2] 142 ldw x, (0x09, sp)
+ 00008C 16 07 [ 2] 143 ldw y, (0x07, sp)
+ 00008E 144 00104$:
+ 145 ; ../_divslong.c: 268: }
+ 00008E 5B 0A [ 2] 146 addw sp, #10
+ 000090 87 [ 5] 147 retf
+ 148 .area CODE
+ 149 .area CONST
+ 150 .area INITIALIZER
+ 151 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divslong.rel b/device/lib/stm8-large/_divslong.rel
new file mode 100644
index 0000000..e637b14
--- /dev/null
+++ b/device/lib/stm8-large/_divslong.rel
@@ -0,0 +1,78 @@
+XH3
+H B areas 3 global symbols
+M _divslong
+O -mstm8
+S .__.ABS. Def000000
+S __divulong Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 91 flags 0 addr 0
+S __divslong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 0D 0E 2B 04 0F 01 20 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 0D 01 27 10 16 10 90 50 1E 0E 24 01 5C
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 50 17 09 1F 07 20 08
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 16 10 17 09 16 0E 17 07
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 16 09 17 04 16 07 17 02 0D 12 2B 04 0F
+R 00 00 00 09
+T 00 00 37 06 20 04
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A A6 01 6B 06
+R 00 00 00 09
+T 00 00 3E
+R 00 00 00 09
+T 00 00 3E 0D 06 27 16 7B 15 40 6B 0A 4F 12 14 6B
+R 00 00 00 09
+T 00 00 4B 09 4F 12 13 6B 08 4F 12 12 6B 07 20 08
+R 00 00 00 09
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 16 14 17 09 16 12 17 07
+R 00 00 00 09
+T 00 00 60
+R 00 00 00 09
+T 00 00 60 1E 09 16 07 89 90 89 1E 08 89 1E 08 89
+R 00 00 00 09
+T 00 00 6D 8D 00 00 00 5B 08 1F 09 17 07 7B 01 18
+R 00 00 00 09 82 04 00 01
+T 00 00 7A 06 27 0D 1E 09 50 16 07 24 02 90 5C
+R 00 00 00 09
+T 00 00 86
+R 00 00 00 09
+T 00 00 86 90 50 20 04
+R 00 00 00 09
+T 00 00 8A
+R 00 00 00 09
+T 00 00 8A 1E 09 16 07
+R 00 00 00 09
+T 00 00 8E
+R 00 00 00 09
+T 00 00 8E 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_divslong.sym b/device/lib/stm8-large/_divslong.sym
new file mode 100644
index 0000000..9f64b7c
--- /dev/null
+++ b/device/lib/stm8-large/_divslong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __divslong 000000 GR
+ __divulong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 91 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_divslonglong.asm b/device/lib/stm8-large/_divslonglong.asm
new file mode 100644
index 0000000..ce626c6
--- /dev/null
+++ b/device/lib/stm8-large/_divslonglong.asm
@@ -0,0 +1,246 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _divslonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __divslonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_divslonglong.c: 36: _divslonglong (long long numerator, long long denominator)
+; -----------------------------------------
+; function _divslonglong
+; -----------------------------------------
+__divslonglong:
+ sub sp, #17
+; ../_divslonglong.c: 38: bool numeratorneg = (numerator < 0);
+ tnz (0x17, sp)
+ jrmi 00124$
+ clr (0x11, sp)
+ jra 00125$
+00124$:
+ ld a, #0x01
+ ld (0x11, sp), a
+00125$:
+; ../_divslonglong.c: 39: bool denominatorneg = (denominator < 0);
+ tnz (0x1f, sp)
+ jrmi 00126$
+ clr a
+ .byte 0xc5
+00126$:
+ ld a, #0x01
+00127$:
+; ../_divslonglong.c: 42: if (numeratorneg)
+ tnz (0x11, sp)
+ jreq 00102$
+; ../_divslonglong.c: 43: numerator = -numerator;
+ push a
+ ld a, (0x1f, sp)
+ neg a
+ ld (0x11, sp), a
+ clr a
+ sbc a, (0x1e, sp)
+ ld (0x10, sp), a
+ clr a
+ sbc a, (0x1d, sp)
+ ld (0x0f, sp), a
+ clr a
+ sbc a, (0x1c, sp)
+ ld (0x0e, sp), a
+ clr a
+ sbc a, (0x1b, sp)
+ ld (0x0d, sp), a
+ clr a
+ sbc a, (0x1a, sp)
+ ld (0x0c, sp), a
+ ldw x, (0x18, sp)
+ jrnc 00129$
+ incw x
+00129$:
+ negw x
+ pop a
+ ldw (0x17, sp), x
+ ldw y, (0x0f, sp)
+ ldw (0x1d, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x1b, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x19, sp), y
+00102$:
+; ../_divslonglong.c: 44: if (denominatorneg)
+ tnz a
+ jreq 00104$
+; ../_divslonglong.c: 45: denominator = -denominator;
+ push a
+ ld a, (0x27, sp)
+ neg a
+ ld (0x11, sp), a
+ clr a
+ sbc a, (0x26, sp)
+ ld (0x10, sp), a
+ clr a
+ sbc a, (0x25, sp)
+ ld (0x0f, sp), a
+ clr a
+ sbc a, (0x24, sp)
+ ld (0x0e, sp), a
+ clr a
+ sbc a, (0x23, sp)
+ ld (0x0d, sp), a
+ clr a
+ sbc a, (0x22, sp)
+ ld (0x0c, sp), a
+ ldw x, (0x20, sp)
+ jrnc 00131$
+ incw x
+00131$:
+ negw x
+ pop a
+ ldw (0x1f, sp), x
+ ldw y, (0x0f, sp)
+ ldw (0x25, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x23, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x21, sp), y
+00104$:
+; ../_divslonglong.c: 47: d = (unsigned long long)numerator / (unsigned long long)denominator;
+ ldw y, (0x1d, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x1b, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x19, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x17, sp)
+ ldw (0x01, sp), y
+ ldw y, (0x25, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x23, sp)
+ ldw (0x0d, sp), y
+ ldw y, (0x21, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x1f, sp)
+ push a
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ pushw y
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, sp
+ addw x, #26
+ pushw x
+ callf __divulonglong
+ addw sp, #18
+ pop a
+ ldw y, (0x0f, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x09, sp)
+ ldw (0x01, sp), y
+; ../_divslonglong.c: 49: return ((numeratorneg ^ denominatorneg) ? -d : d);
+ xor a, (0x11, sp)
+ ld (0x11, sp), a
+ jreq 00107$
+ ld a, (0x08, sp)
+ neg a
+ ld (0x11, sp), a
+ clr a
+ sbc a, (0x07, sp)
+ ld (0x10, sp), a
+ clr a
+ sbc a, (0x06, sp)
+ ld (0x0f, sp), a
+ clr a
+ sbc a, (0x05, sp)
+ ld (0x0e, sp), a
+ clr a
+ sbc a, (0x04, sp)
+ ld (0x0d, sp), a
+ clr a
+ sbc a, (0x03, sp)
+ ld (0x0c, sp), a
+ clr a
+ sbc a, (0x02, sp)
+ ld (0x0b, sp), a
+ clr a
+ sbc a, (0x01, sp)
+ ld (0x0a, sp), a
+ jra 00108$
+00107$:
+ ldw y, (0x07, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x0e, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x0c, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0a, sp), y
+00108$:
+ ldw x, (0x15, sp)
+ ldw y, (0x10, sp)
+ ldw (#6, x), y
+ ldw y, (0x0e, sp)
+ ldw (#4, x), y
+ ldw y, (0x0c, sp)
+ ldw (#2, x), y
+ ldw y, (0x0a, sp)
+ ldw (x), y
+; ../_divslonglong.c: 50: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divslonglong.lst b/device/lib/stm8-large/_divslonglong.lst
new file mode 100644
index 0000000..b9a3211
--- /dev/null
+++ b/device/lib/stm8-large/_divslonglong.lst
@@ -0,0 +1,246 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _divslonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __divslonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_divslonglong.c: 36: _divslonglong (long long numerator, long long denominator)
+ 50 ; -----------------------------------------
+ 51 ; function _divslonglong
+ 52 ; -----------------------------------------
+ 000000 53 __divslonglong:
+ 000000 52 11 [ 2] 54 sub sp, #17
+ 55 ; ../_divslonglong.c: 38: bool numeratorneg = (numerator < 0);
+ 000002 0D 17 [ 1] 56 tnz (0x17, sp)
+ 000004 2B 04 [ 1] 57 jrmi 00124$
+ 000006 0F 11 [ 1] 58 clr (0x11, sp)
+ 000008 20 04 [ 2] 59 jra 00125$
+ 00000A 60 00124$:
+ 00000A A6 01 [ 1] 61 ld a, #0x01
+ 00000C 6B 11 [ 1] 62 ld (0x11, sp), a
+ 00000E 63 00125$:
+ 64 ; ../_divslonglong.c: 39: bool denominatorneg = (denominator < 0);
+ 00000E 0D 1F [ 1] 65 tnz (0x1f, sp)
+ 000010 2B 02 [ 1] 66 jrmi 00126$
+ 000012 4F [ 1] 67 clr a
+ 000013 C5 68 .byte 0xc5
+ 000014 69 00126$:
+ 000014 A6 01 [ 1] 70 ld a, #0x01
+ 000016 71 00127$:
+ 72 ; ../_divslonglong.c: 42: if (numeratorneg)
+ 000016 0D 11 [ 1] 73 tnz (0x11, sp)
+ 000018 27 34 [ 1] 74 jreq 00102$
+ 75 ; ../_divslonglong.c: 43: numerator = -numerator;
+ 00001A 88 [ 1] 76 push a
+ 00001B 7B 1F [ 1] 77 ld a, (0x1f, sp)
+ 00001D 40 [ 1] 78 neg a
+ 00001E 6B 11 [ 1] 79 ld (0x11, sp), a
+ 000020 4F [ 1] 80 clr a
+ 000021 12 1E [ 1] 81 sbc a, (0x1e, sp)
+ 000023 6B 10 [ 1] 82 ld (0x10, sp), a
+ 000025 4F [ 1] 83 clr a
+ 000026 12 1D [ 1] 84 sbc a, (0x1d, sp)
+ 000028 6B 0F [ 1] 85 ld (0x0f, sp), a
+ 00002A 4F [ 1] 86 clr a
+ 00002B 12 1C [ 1] 87 sbc a, (0x1c, sp)
+ 00002D 6B 0E [ 1] 88 ld (0x0e, sp), a
+ 00002F 4F [ 1] 89 clr a
+ 000030 12 1B [ 1] 90 sbc a, (0x1b, sp)
+ 000032 6B 0D [ 1] 91 ld (0x0d, sp), a
+ 000034 4F [ 1] 92 clr a
+ 000035 12 1A [ 1] 93 sbc a, (0x1a, sp)
+ 000037 6B 0C [ 1] 94 ld (0x0c, sp), a
+ 000039 1E 18 [ 2] 95 ldw x, (0x18, sp)
+ 00003B 24 01 [ 1] 96 jrnc 00129$
+ 00003D 5C [ 1] 97 incw x
+ 00003E 98 00129$:
+ 00003E 50 [ 2] 99 negw x
+ 00003F 84 [ 1] 100 pop a
+ 000040 1F 17 [ 2] 101 ldw (0x17, sp), x
+ 000042 16 0F [ 2] 102 ldw y, (0x0f, sp)
+ 000044 17 1D [ 2] 103 ldw (0x1d, sp), y
+ 000046 16 0D [ 2] 104 ldw y, (0x0d, sp)
+ 000048 17 1B [ 2] 105 ldw (0x1b, sp), y
+ 00004A 16 0B [ 2] 106 ldw y, (0x0b, sp)
+ 00004C 17 19 [ 2] 107 ldw (0x19, sp), y
+ 00004E 108 00102$:
+ 109 ; ../_divslonglong.c: 44: if (denominatorneg)
+ 00004E 4D [ 1] 110 tnz a
+ 00004F 27 34 [ 1] 111 jreq 00104$
+ 112 ; ../_divslonglong.c: 45: denominator = -denominator;
+ 000051 88 [ 1] 113 push a
+ 000052 7B 27 [ 1] 114 ld a, (0x27, sp)
+ 000054 40 [ 1] 115 neg a
+ 000055 6B 11 [ 1] 116 ld (0x11, sp), a
+ 000057 4F [ 1] 117 clr a
+ 000058 12 26 [ 1] 118 sbc a, (0x26, sp)
+ 00005A 6B 10 [ 1] 119 ld (0x10, sp), a
+ 00005C 4F [ 1] 120 clr a
+ 00005D 12 25 [ 1] 121 sbc a, (0x25, sp)
+ 00005F 6B 0F [ 1] 122 ld (0x0f, sp), a
+ 000061 4F [ 1] 123 clr a
+ 000062 12 24 [ 1] 124 sbc a, (0x24, sp)
+ 000064 6B 0E [ 1] 125 ld (0x0e, sp), a
+ 000066 4F [ 1] 126 clr a
+ 000067 12 23 [ 1] 127 sbc a, (0x23, sp)
+ 000069 6B 0D [ 1] 128 ld (0x0d, sp), a
+ 00006B 4F [ 1] 129 clr a
+ 00006C 12 22 [ 1] 130 sbc a, (0x22, sp)
+ 00006E 6B 0C [ 1] 131 ld (0x0c, sp), a
+ 000070 1E 20 [ 2] 132 ldw x, (0x20, sp)
+ 000072 24 01 [ 1] 133 jrnc 00131$
+ 000074 5C [ 1] 134 incw x
+ 000075 135 00131$:
+ 000075 50 [ 2] 136 negw x
+ 000076 84 [ 1] 137 pop a
+ 000077 1F 1F [ 2] 138 ldw (0x1f, sp), x
+ 000079 16 0F [ 2] 139 ldw y, (0x0f, sp)
+ 00007B 17 25 [ 2] 140 ldw (0x25, sp), y
+ 00007D 16 0D [ 2] 141 ldw y, (0x0d, sp)
+ 00007F 17 23 [ 2] 142 ldw (0x23, sp), y
+ 000081 16 0B [ 2] 143 ldw y, (0x0b, sp)
+ 000083 17 21 [ 2] 144 ldw (0x21, sp), y
+ 000085 145 00104$:
+ 146 ; ../_divslonglong.c: 47: d = (unsigned long long)numerator / (unsigned long long)denominator;
+ 000085 16 1D [ 2] 147 ldw y, (0x1d, sp)
+ 000087 17 07 [ 2] 148 ldw (0x07, sp), y
+ 000089 16 1B [ 2] 149 ldw y, (0x1b, sp)
+ 00008B 17 05 [ 2] 150 ldw (0x05, sp), y
+ 00008D 16 19 [ 2] 151 ldw y, (0x19, sp)
+ 00008F 17 03 [ 2] 152 ldw (0x03, sp), y
+ 000091 16 17 [ 2] 153 ldw y, (0x17, sp)
+ 000093 17 01 [ 2] 154 ldw (0x01, sp), y
+ 000095 16 25 [ 2] 155 ldw y, (0x25, sp)
+ 000097 17 0F [ 2] 156 ldw (0x0f, sp), y
+ 000099 16 23 [ 2] 157 ldw y, (0x23, sp)
+ 00009B 17 0D [ 2] 158 ldw (0x0d, sp), y
+ 00009D 16 21 [ 2] 159 ldw y, (0x21, sp)
+ 00009F 17 0B [ 2] 160 ldw (0x0b, sp), y
+ 0000A1 16 1F [ 2] 161 ldw y, (0x1f, sp)
+ 0000A3 88 [ 1] 162 push a
+ 0000A4 1E 10 [ 2] 163 ldw x, (0x10, sp)
+ 0000A6 89 [ 2] 164 pushw x
+ 0000A7 1E 10 [ 2] 165 ldw x, (0x10, sp)
+ 0000A9 89 [ 2] 166 pushw x
+ 0000AA 1E 10 [ 2] 167 ldw x, (0x10, sp)
+ 0000AC 89 [ 2] 168 pushw x
+ 0000AD 90 89 [ 2] 169 pushw y
+ 0000AF 1E 10 [ 2] 170 ldw x, (0x10, sp)
+ 0000B1 89 [ 2] 171 pushw x
+ 0000B2 1E 10 [ 2] 172 ldw x, (0x10, sp)
+ 0000B4 89 [ 2] 173 pushw x
+ 0000B5 1E 10 [ 2] 174 ldw x, (0x10, sp)
+ 0000B7 89 [ 2] 175 pushw x
+ 0000B8 1E 10 [ 2] 176 ldw x, (0x10, sp)
+ 0000BA 89 [ 2] 177 pushw x
+ 0000BB 96 [ 1] 178 ldw x, sp
+ 0000BC 1C 00 1A [ 2] 179 addw x, #26
+ 0000BF 89 [ 2] 180 pushw x
+ 0000C0 8Ds00r00r00 [ 5] 181 callf __divulonglong
+ 0000C4 5B 12 [ 2] 182 addw sp, #18
+ 0000C6 84 [ 1] 183 pop a
+ 0000C7 16 0F [ 2] 184 ldw y, (0x0f, sp)
+ 0000C9 17 07 [ 2] 185 ldw (0x07, sp), y
+ 0000CB 16 0D [ 2] 186 ldw y, (0x0d, sp)
+ 0000CD 17 05 [ 2] 187 ldw (0x05, sp), y
+ 0000CF 16 0B [ 2] 188 ldw y, (0x0b, sp)
+ 0000D1 17 03 [ 2] 189 ldw (0x03, sp), y
+ 0000D3 16 09 [ 2] 190 ldw y, (0x09, sp)
+ 0000D5 17 01 [ 2] 191 ldw (0x01, sp), y
+ 192 ; ../_divslonglong.c: 49: return ((numeratorneg ^ denominatorneg) ? -d : d);
+ 0000D7 18 11 [ 1] 193 xor a, (0x11, sp)
+ 0000D9 6B 11 [ 1] 194 ld (0x11, sp), a
+ 0000DB 27 2A [ 1] 195 jreq 00107$
+ 0000DD 7B 08 [ 1] 196 ld a, (0x08, sp)
+ 0000DF 40 [ 1] 197 neg a
+ 0000E0 6B 11 [ 1] 198 ld (0x11, sp), a
+ 0000E2 4F [ 1] 199 clr a
+ 0000E3 12 07 [ 1] 200 sbc a, (0x07, sp)
+ 0000E5 6B 10 [ 1] 201 ld (0x10, sp), a
+ 0000E7 4F [ 1] 202 clr a
+ 0000E8 12 06 [ 1] 203 sbc a, (0x06, sp)
+ 0000EA 6B 0F [ 1] 204 ld (0x0f, sp), a
+ 0000EC 4F [ 1] 205 clr a
+ 0000ED 12 05 [ 1] 206 sbc a, (0x05, sp)
+ 0000EF 6B 0E [ 1] 207 ld (0x0e, sp), a
+ 0000F1 4F [ 1] 208 clr a
+ 0000F2 12 04 [ 1] 209 sbc a, (0x04, sp)
+ 0000F4 6B 0D [ 1] 210 ld (0x0d, sp), a
+ 0000F6 4F [ 1] 211 clr a
+ 0000F7 12 03 [ 1] 212 sbc a, (0x03, sp)
+ 0000F9 6B 0C [ 1] 213 ld (0x0c, sp), a
+ 0000FB 4F [ 1] 214 clr a
+ 0000FC 12 02 [ 1] 215 sbc a, (0x02, sp)
+ 0000FE 6B 0B [ 1] 216 ld (0x0b, sp), a
+ 000100 4F [ 1] 217 clr a
+ 000101 12 01 [ 1] 218 sbc a, (0x01, sp)
+ 000103 6B 0A [ 1] 219 ld (0x0a, sp), a
+ 000105 20 10 [ 2] 220 jra 00108$
+ 000107 221 00107$:
+ 000107 16 07 [ 2] 222 ldw y, (0x07, sp)
+ 000109 17 10 [ 2] 223 ldw (0x10, sp), y
+ 00010B 16 05 [ 2] 224 ldw y, (0x05, sp)
+ 00010D 17 0E [ 2] 225 ldw (0x0e, sp), y
+ 00010F 16 03 [ 2] 226 ldw y, (0x03, sp)
+ 000111 17 0C [ 2] 227 ldw (0x0c, sp), y
+ 000113 16 01 [ 2] 228 ldw y, (0x01, sp)
+ 000115 17 0A [ 2] 229 ldw (0x0a, sp), y
+ 000117 230 00108$:
+ 000117 1E 15 [ 2] 231 ldw x, (0x15, sp)
+ 000119 16 10 [ 2] 232 ldw y, (0x10, sp)
+ 00011B EF 06 [ 2] 233 ldw (#6, x), y
+ 00011D 16 0E [ 2] 234 ldw y, (0x0e, sp)
+ 00011F EF 04 [ 2] 235 ldw (#4, x), y
+ 000121 16 0C [ 2] 236 ldw y, (0x0c, sp)
+ 000123 EF 02 [ 2] 237 ldw (#2, x), y
+ 000125 16 0A [ 2] 238 ldw y, (0x0a, sp)
+ 000127 FF [ 2] 239 ldw (x), y
+ 240 ; ../_divslonglong.c: 50: }
+ 000128 5B 11 [ 2] 241 addw sp, #17
+ 00012A 87 [ 5] 242 retf
+ 243 .area CODE
+ 244 .area CONST
+ 245 .area INITIALIZER
+ 246 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divslonglong.rel b/device/lib/stm8-large/_divslonglong.rel
new file mode 100644
index 0000000..fd75b5e
--- /dev/null
+++ b/device/lib/stm8-large/_divslonglong.rel
@@ -0,0 +1,100 @@
+XH3
+H B areas 3 global symbols
+M _divslonglong
+O -mstm8
+S __divulonglong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 12B flags 0 addr 0
+S __divslonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 0D 17 2B 04 0F 11 20 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 11
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 0D 1F 2B 02 4F C5
+R 00 00 00 09
+T 00 00 14
+R 00 00 00 09
+T 00 00 14 A6 01
+R 00 00 00 09
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 0D 11 27 34 88 7B 1F 40 6B 11 4F 12 1E
+R 00 00 00 09
+T 00 00 23 6B 10 4F 12 1D 6B 0F 4F 12 1C 6B 0E 4F
+R 00 00 00 09
+T 00 00 30 12 1B 6B 0D 4F 12 1A 6B 0C 1E 18 24 01
+R 00 00 00 09
+T 00 00 3D 5C
+R 00 00 00 09
+T 00 00 3E
+R 00 00 00 09
+T 00 00 3E 50 84 1F 17 16 0F 17 1D 16 0D 17 1B 16
+R 00 00 00 09
+T 00 00 4B 0B 17 19
+R 00 00 00 09
+T 00 00 4E
+R 00 00 00 09
+T 00 00 4E 4D 27 34 88 7B 27 40 6B 11 4F 12 26 6B
+R 00 00 00 09
+T 00 00 5B 10 4F 12 25 6B 0F 4F 12 24 6B 0E 4F 12
+R 00 00 00 09
+T 00 00 68 23 6B 0D 4F 12 22 6B 0C 1E 20 24 01 5C
+R 00 00 00 09
+T 00 00 75
+R 00 00 00 09
+T 00 00 75 50 84 1F 1F 16 0F 17 25 16 0D 17 23 16
+R 00 00 00 09
+T 00 00 82 0B 17 21
+R 00 00 00 09
+T 00 00 85
+R 00 00 00 09
+T 00 00 85 16 1D 17 07 16 1B 17 05 16 19 17 03 16
+R 00 00 00 09
+T 00 00 92 17 17 01 16 25 17 0F 16 23 17 0D 16 21
+R 00 00 00 09
+T 00 00 9F 17 0B 16 1F 88 1E 10 89 1E 10 89 1E 10
+R 00 00 00 09
+T 00 00 AC 89 90 89 1E 10 89 1E 10 89 1E 10 89 1E
+R 00 00 00 09
+T 00 00 B9 10 89 96 1C 00 1A 89 8D
+R 00 00 00 09
+T 00 00 C1 00 00 00 5B 12 84 16 0F 17 07 16 0D 17
+R 00 00 00 09 82 03 00 00
+T 00 00 CE 05 16 0B 17 03 16 09 17 01 18 11 6B 11
+R 00 00 00 09
+T 00 00 DB 27 2A 7B 08 40 6B 11 4F 12 07 6B 10 4F
+R 00 00 00 09
+T 00 00 E8 12 06 6B 0F 4F 12 05 6B 0E 4F 12 04 6B
+R 00 00 00 09
+T 00 00 F5 0D 4F 12 03 6B 0C 4F 12 02 6B 0B 4F 12
+R 00 00 00 09
+T 00 01 02 01 6B 0A 20 10
+R 00 00 00 09
+T 00 01 07
+R 00 00 00 09
+T 00 01 07 16 07 17 10 16 05 17 0E 16 03 17 0C 16
+R 00 00 00 09
+T 00 01 14 01 17 0A
+R 00 00 00 09
+T 00 01 17
+R 00 00 00 09
+T 00 01 17 1E 15 16 10 EF 06 16 0E EF 04 16 0C EF
+R 00 00 00 09
+T 00 01 24 02 16 0A FF 5B 11 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_divslonglong.sym b/device/lib/stm8-large/_divslonglong.sym
new file mode 100644
index 0000000..afd02f1
--- /dev/null
+++ b/device/lib/stm8-large/_divslonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __divslonglong 000000 GR
+ __divulonglong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 12B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_divulong.asm b/device/lib/stm8-large/_divulong.asm
new file mode 100644
index 0000000..777c970
--- /dev/null
+++ b/device/lib/stm8-large/_divulong.asm
@@ -0,0 +1,145 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _divulong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __divulong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_divulong.c: 331: _divulong (unsigned long x, unsigned long y)
+; -----------------------------------------
+; function _divulong
+; -----------------------------------------
+__divulong:
+ sub sp, #8
+; ../_divulong.c: 333: unsigned long reste = 0L;
+ clrw x
+ ldw (0x07, sp), x
+ clrw y
+; ../_divulong.c: 334: unsigned char count = 32;
+ ld a, #0x20
+; ../_divulong.c: 337: do
+00105$:
+; ../_divulong.c: 340: c = MSB_SET(x);
+ push a
+ ld a, (0x0d, sp)
+ sll a
+ clr a
+ rlc a
+ ld (0x05, sp), a
+ pop a
+; ../_divulong.c: 341: x <<= 1;
+ sll (0x0f, sp)
+ rlc (0x0e, sp)
+ rlc (0x0d, sp)
+ rlc (0x0c, sp)
+; ../_divulong.c: 342: reste <<= 1;
+ sll (0x08, sp)
+ rlc (0x07, sp)
+ rlcw y
+; ../_divulong.c: 343: if (c)
+ tnz (0x04, sp)
+ jreq 00102$
+; ../_divulong.c: 344: reste |= 1L;
+ push a
+ ldw x, (0x08, sp)
+ srlw x
+ scf
+ rlcw x
+ pop a
+ ldw (0x07, sp), x
+00102$:
+; ../_divulong.c: 346: if (reste >= y)
+ ldw x, (0x07, sp)
+ cpw x, (0x12, sp)
+ push a
+ ld a, yl
+ sbc a, (0x12, sp)
+ ld a, yh
+ sbc a, (0x11, sp)
+ pop a
+ jrc 00106$
+; ../_divulong.c: 348: reste -= y;
+ ldw x, (0x07, sp)
+ subw x, (0x12, sp)
+ push a
+ ld a, yl
+ sbc a, (0x12, sp)
+ rlwa y
+ sbc a, (0x11, sp)
+ ld yh, a
+ pop a
+ ldw (0x07, sp), x
+; ../_divulong.c: 350: x |= 1L;
+ push a
+ ld a, (0x10, sp)
+ or a, #0x01
+ ld (0x05, sp), a
+ ld a, (0x0f, sp)
+ ld (0x04, sp), a
+ ld a, (0x0e, sp)
+ ld (0x03, sp), a
+ ld a, (0x0d, sp)
+ ld (0x02, sp), a
+ pop a
+ ldw x, (0x03, sp)
+ ldw (0x0e, sp), x
+ ldw x, (0x01, sp)
+ ldw (0x0c, sp), x
+00106$:
+; ../_divulong.c: 353: while (--count);
+ dec a
+ ld xl, a
+ tnz a
+ exg a, xl
+ jrne 00105$
+; ../_divulong.c: 354: return x;
+ ldw x, (0x0e, sp)
+ ldw y, (0x0c, sp)
+; ../_divulong.c: 355: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divulong.lst b/device/lib/stm8-large/_divulong.lst
new file mode 100644
index 0000000..5fe1f9f
--- /dev/null
+++ b/device/lib/stm8-large/_divulong.lst
@@ -0,0 +1,145 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _divulong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __divulong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_divulong.c: 331: _divulong (unsigned long x, unsigned long y)
+ 50 ; -----------------------------------------
+ 51 ; function _divulong
+ 52 ; -----------------------------------------
+ 000000 53 __divulong:
+ 000000 52 08 [ 2] 54 sub sp, #8
+ 55 ; ../_divulong.c: 333: unsigned long reste = 0L;
+ 000002 5F [ 1] 56 clrw x
+ 000003 1F 07 [ 2] 57 ldw (0x07, sp), x
+ 000005 90 5F [ 1] 58 clrw y
+ 59 ; ../_divulong.c: 334: unsigned char count = 32;
+ 000007 A6 20 [ 1] 60 ld a, #0x20
+ 61 ; ../_divulong.c: 337: do
+ 000009 62 00105$:
+ 63 ; ../_divulong.c: 340: c = MSB_SET(x);
+ 000009 88 [ 1] 64 push a
+ 00000A 7B 0D [ 1] 65 ld a, (0x0d, sp)
+ 00000C 48 [ 1] 66 sll a
+ 00000D 4F [ 1] 67 clr a
+ 00000E 49 [ 1] 68 rlc a
+ 00000F 6B 05 [ 1] 69 ld (0x05, sp), a
+ 000011 84 [ 1] 70 pop a
+ 71 ; ../_divulong.c: 341: x <<= 1;
+ 000012 08 0F [ 1] 72 sll (0x0f, sp)
+ 000014 09 0E [ 1] 73 rlc (0x0e, sp)
+ 000016 09 0D [ 1] 74 rlc (0x0d, sp)
+ 000018 09 0C [ 1] 75 rlc (0x0c, sp)
+ 76 ; ../_divulong.c: 342: reste <<= 1;
+ 00001A 08 08 [ 1] 77 sll (0x08, sp)
+ 00001C 09 07 [ 1] 78 rlc (0x07, sp)
+ 00001E 90 59 [ 2] 79 rlcw y
+ 80 ; ../_divulong.c: 343: if (c)
+ 000020 0D 04 [ 1] 81 tnz (0x04, sp)
+ 000022 27 09 [ 1] 82 jreq 00102$
+ 83 ; ../_divulong.c: 344: reste |= 1L;
+ 000024 88 [ 1] 84 push a
+ 000025 1E 08 [ 2] 85 ldw x, (0x08, sp)
+ 000027 54 [ 2] 86 srlw x
+ 000028 99 [ 1] 87 scf
+ 000029 59 [ 2] 88 rlcw x
+ 00002A 84 [ 1] 89 pop a
+ 00002B 1F 07 [ 2] 90 ldw (0x07, sp), x
+ 00002D 91 00102$:
+ 92 ; ../_divulong.c: 346: if (reste >= y)
+ 00002D 1E 07 [ 2] 93 ldw x, (0x07, sp)
+ 00002F 13 12 [ 2] 94 cpw x, (0x12, sp)
+ 000031 88 [ 1] 95 push a
+ 000032 90 9F [ 1] 96 ld a, yl
+ 000034 12 12 [ 1] 97 sbc a, (0x12, sp)
+ 000036 90 9E [ 1] 98 ld a, yh
+ 000038 12 11 [ 1] 99 sbc a, (0x11, sp)
+ 00003A 84 [ 1] 100 pop a
+ 00003B 25 2F [ 1] 101 jrc 00106$
+ 102 ; ../_divulong.c: 348: reste -= y;
+ 00003D 1E 07 [ 2] 103 ldw x, (0x07, sp)
+ 00003F 72 F0 12 [ 2] 104 subw x, (0x12, sp)
+ 000042 88 [ 1] 105 push a
+ 000043 90 9F [ 1] 106 ld a, yl
+ 000045 12 12 [ 1] 107 sbc a, (0x12, sp)
+ 000047 90 02 [ 1] 108 rlwa y
+ 000049 12 11 [ 1] 109 sbc a, (0x11, sp)
+ 00004B 90 95 [ 1] 110 ld yh, a
+ 00004D 84 [ 1] 111 pop a
+ 00004E 1F 07 [ 2] 112 ldw (0x07, sp), x
+ 113 ; ../_divulong.c: 350: x |= 1L;
+ 000050 88 [ 1] 114 push a
+ 000051 7B 10 [ 1] 115 ld a, (0x10, sp)
+ 000053 AA 01 [ 1] 116 or a, #0x01
+ 000055 6B 05 [ 1] 117 ld (0x05, sp), a
+ 000057 7B 0F [ 1] 118 ld a, (0x0f, sp)
+ 000059 6B 04 [ 1] 119 ld (0x04, sp), a
+ 00005B 7B 0E [ 1] 120 ld a, (0x0e, sp)
+ 00005D 6B 03 [ 1] 121 ld (0x03, sp), a
+ 00005F 7B 0D [ 1] 122 ld a, (0x0d, sp)
+ 000061 6B 02 [ 1] 123 ld (0x02, sp), a
+ 000063 84 [ 1] 124 pop a
+ 000064 1E 03 [ 2] 125 ldw x, (0x03, sp)
+ 000066 1F 0E [ 2] 126 ldw (0x0e, sp), x
+ 000068 1E 01 [ 2] 127 ldw x, (0x01, sp)
+ 00006A 1F 0C [ 2] 128 ldw (0x0c, sp), x
+ 00006C 129 00106$:
+ 130 ; ../_divulong.c: 353: while (--count);
+ 00006C 4A [ 1] 131 dec a
+ 00006D 97 [ 1] 132 ld xl, a
+ 00006E 4D [ 1] 133 tnz a
+ 00006F 41 [ 1] 134 exg a, xl
+ 000070 26 97 [ 1] 135 jrne 00105$
+ 136 ; ../_divulong.c: 354: return x;
+ 000072 1E 0E [ 2] 137 ldw x, (0x0e, sp)
+ 000074 16 0C [ 2] 138 ldw y, (0x0c, sp)
+ 139 ; ../_divulong.c: 355: }
+ 000076 5B 08 [ 2] 140 addw sp, #8
+ 000078 87 [ 5] 141 retf
+ 142 .area CODE
+ 143 .area CONST
+ 144 .area INITIALIZER
+ 145 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divulong.rel b/device/lib/stm8-large/_divulong.rel
new file mode 100644
index 0000000..1de606d
--- /dev/null
+++ b/device/lib/stm8-large/_divulong.rel
@@ -0,0 +1,45 @@
+XH3
+H B areas 2 global symbols
+M _divulong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 79 flags 0 addr 0
+S __divulong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 5F 1F 07 90 5F A6 20
+R 00 00 00 09
+T 00 00 09
+R 00 00 00 09
+T 00 00 09 88 7B 0D 48 4F 49 6B 05 84 08 0F 09 0E
+R 00 00 00 09
+T 00 00 16 09 0D 09 0C 08 08 09 07 90 59 0D 04 27
+R 00 00 00 09
+T 00 00 23 09 88 1E 08 54 99 59 84 1F 07
+R 00 00 00 09
+T 00 00 2D
+R 00 00 00 09
+T 00 00 2D 1E 07 13 12 88 90 9F 12 12 90 9E 12 11
+R 00 00 00 09
+T 00 00 3A 84 25 2F 1E 07 72 F0 12 88 90 9F 12 12
+R 00 00 00 09
+T 00 00 47 90 02 12 11 90 95 84 1F 07 88 7B 10 AA
+R 00 00 00 09
+T 00 00 54 01 6B 05 7B 0F 6B 04 7B 0E 6B 03 7B 0D
+R 00 00 00 09
+T 00 00 61 6B 02 84 1E 03 1F 0E 1E 01 1F 0C
+R 00 00 00 09
+T 00 00 6C
+R 00 00 00 09
+T 00 00 6C 4A 97 4D 41 26 97 1E 0E 16 0C 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_divulong.sym b/device/lib/stm8-large/_divulong.sym
new file mode 100644
index 0000000..c596c87
--- /dev/null
+++ b/device/lib/stm8-large/_divulong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __divulong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 79 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_divulonglong.asm b/device/lib/stm8-large/_divulonglong.asm
new file mode 100644
index 0000000..2eb7fff
--- /dev/null
+++ b/device/lib/stm8-large/_divulonglong.asm
@@ -0,0 +1,215 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _divulonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __divulonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_divulonglong.c: 39: _divulonglong (unsigned long long x, unsigned long long y)
+; -----------------------------------------
+; function _divulonglong
+; -----------------------------------------
+__divulonglong:
+ sub sp, #17
+; ../_divulonglong.c: 41: unsigned long long reste = 0L;
+ clrw x
+ ldw (0x10, sp), x
+ ldw (0x0e, sp), x
+ ldw (0x0c, sp), x
+ ldw (0x0a, sp), x
+; ../_divulonglong.c: 42: unsigned char count = 64;
+ ld a, #0x40
+ ld (0x01, sp), a
+; ../_divulonglong.c: 45: do
+00105$:
+; ../_divulonglong.c: 48: c = MSB_SET(x);
+ ld a, (0x17, sp)
+ sll a
+ clr a
+ rlc a
+; ../_divulonglong.c: 49: x <<= 1;
+ sll (0x1e, sp)
+ rlc (0x1d, sp)
+ rlc (0x1c, sp)
+ rlc (0x1b, sp)
+ rlc (0x1a, sp)
+ rlc (0x19, sp)
+ rlc (0x18, sp)
+ rlc (0x17, sp)
+; ../_divulonglong.c: 50: reste <<= 1;
+ sll (0x11, sp)
+ rlc (0x10, sp)
+ rlc (0x0f, sp)
+ rlc (0x0e, sp)
+ rlc (0x0d, sp)
+ rlc (0x0c, sp)
+ rlc (0x0b, sp)
+ rlc (0x0a, sp)
+; ../_divulonglong.c: 51: if (c)
+ tnz a
+ jreq 00102$
+; ../_divulonglong.c: 52: reste |= 1L;
+ ld a, (0x11, sp)
+ or a, #0x01
+ ld (0x09, sp), a
+ ld a, (0x10, sp)
+ ld (0x08, sp), a
+ ld a, (0x0f, sp)
+ ld (0x07, sp), a
+ ld a, (0x0e, sp)
+ exg a, xl
+ ld a, (0x0d, sp)
+ exg a, xl
+ rlwa x
+ ld a, (0x0c, sp)
+ rrwa x
+ exg a, yl
+ ld a, (0x0b, sp)
+ exg a, yl
+ rlwa y
+ ld a, (0x0a, sp)
+ rrwa y
+ ld (0x0e, sp), a
+ ldw (0x0c, sp), x
+ ldw (0x0a, sp), y
+ ldw y, (0x08, sp)
+ ldw (0x10, sp), y
+ ld a, (0x07, sp)
+ ld (0x0f, sp), a
+00102$:
+; ../_divulonglong.c: 54: if (reste >= y)
+ ldw x, (0x10, sp)
+ cpw x, (0x25, sp)
+ ld a, (0x0f, sp)
+ sbc a, (0x24, sp)
+ ld a, (0x0e, sp)
+ sbc a, (0x23, sp)
+ ld a, (0x0d, sp)
+ sbc a, (0x22, sp)
+ ld a, (0x0c, sp)
+ sbc a, (0x21, sp)
+ ld a, (0x0b, sp)
+ sbc a, (0x20, sp)
+ ld a, (0x0a, sp)
+ sbc a, (0x1f, sp)
+ jrc 00106$
+; ../_divulonglong.c: 56: reste -= y;
+ ldw x, (0x10, sp)
+ subw x, (0x25, sp)
+ ldw (0x08, sp), x
+ ld a, (0x0f, sp)
+ sbc a, (0x24, sp)
+ ld (0x07, sp), a
+ ld a, (0x0e, sp)
+ sbc a, (0x23, sp)
+ ld (0x06, sp), a
+ ld a, (0x0d, sp)
+ sbc a, (0x22, sp)
+ ld (0x05, sp), a
+ ld a, (0x0c, sp)
+ sbc a, (0x21, sp)
+ ld (0x04, sp), a
+ ld a, (0x0b, sp)
+ sbc a, (0x20, sp)
+ ld (0x03, sp), a
+ ld a, (0x0a, sp)
+ sbc a, (0x1f, sp)
+ ld (0x02, sp), a
+ ldw y, (0x08, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x06, sp)
+ ldw (0x0e, sp), y
+ ldw y, (0x04, sp)
+ ldw (0x0c, sp), y
+ ldw y, (0x02, sp)
+ ldw (0x0a, sp), y
+; ../_divulonglong.c: 58: x |= 1L;
+ ld a, (0x1e, sp)
+ or a, #0x01
+ ld (0x09, sp), a
+ ld a, (0x1d, sp)
+ ld (0x08, sp), a
+ ld a, (0x1c, sp)
+ ld (0x07, sp), a
+ ld a, (0x1b, sp)
+ ld (0x06, sp), a
+ ld a, (0x1a, sp)
+ ld (0x05, sp), a
+ ld a, (0x19, sp)
+ ld (0x04, sp), a
+ ld a, (0x18, sp)
+ ld (0x03, sp), a
+ ld a, (0x17, sp)
+ ld (0x02, sp), a
+ ldw y, (0x08, sp)
+ ldw (0x1d, sp), y
+ ldw y, (0x06, sp)
+ ldw (0x1b, sp), y
+ ldw y, (0x04, sp)
+ ldw (0x19, sp), y
+ ldw y, (0x02, sp)
+ ldw (0x17, sp), y
+00106$:
+; ../_divulonglong.c: 61: while (--count);
+ dec (0x01, sp)
+ jreq 00132$
+ jpf 00105$
+00132$:
+; ../_divulonglong.c: 62: return x;
+ ldw x, (0x15, sp)
+ ldw y, (0x1d, sp)
+ ldw (#6, x), y
+ ldw y, (0x1b, sp)
+ ldw (#4, x), y
+ ldw y, (0x19, sp)
+ ldw (#2, x), y
+ ldw y, (0x17, sp)
+ ldw (x), y
+; ../_divulonglong.c: 63: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divulonglong.lst b/device/lib/stm8-large/_divulonglong.lst
new file mode 100644
index 0000000..8fc2da8
--- /dev/null
+++ b/device/lib/stm8-large/_divulonglong.lst
@@ -0,0 +1,215 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _divulonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __divulonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_divulonglong.c: 39: _divulonglong (unsigned long long x, unsigned long long y)
+ 50 ; -----------------------------------------
+ 51 ; function _divulonglong
+ 52 ; -----------------------------------------
+ 000000 53 __divulonglong:
+ 000000 52 11 [ 2] 54 sub sp, #17
+ 55 ; ../_divulonglong.c: 41: unsigned long long reste = 0L;
+ 000002 5F [ 1] 56 clrw x
+ 000003 1F 10 [ 2] 57 ldw (0x10, sp), x
+ 000005 1F 0E [ 2] 58 ldw (0x0e, sp), x
+ 000007 1F 0C [ 2] 59 ldw (0x0c, sp), x
+ 000009 1F 0A [ 2] 60 ldw (0x0a, sp), x
+ 61 ; ../_divulonglong.c: 42: unsigned char count = 64;
+ 00000B A6 40 [ 1] 62 ld a, #0x40
+ 00000D 6B 01 [ 1] 63 ld (0x01, sp), a
+ 64 ; ../_divulonglong.c: 45: do
+ 00000F 65 00105$:
+ 66 ; ../_divulonglong.c: 48: c = MSB_SET(x);
+ 00000F 7B 17 [ 1] 67 ld a, (0x17, sp)
+ 000011 48 [ 1] 68 sll a
+ 000012 4F [ 1] 69 clr a
+ 000013 49 [ 1] 70 rlc a
+ 71 ; ../_divulonglong.c: 49: x <<= 1;
+ 000014 08 1E [ 1] 72 sll (0x1e, sp)
+ 000016 09 1D [ 1] 73 rlc (0x1d, sp)
+ 000018 09 1C [ 1] 74 rlc (0x1c, sp)
+ 00001A 09 1B [ 1] 75 rlc (0x1b, sp)
+ 00001C 09 1A [ 1] 76 rlc (0x1a, sp)
+ 00001E 09 19 [ 1] 77 rlc (0x19, sp)
+ 000020 09 18 [ 1] 78 rlc (0x18, sp)
+ 000022 09 17 [ 1] 79 rlc (0x17, sp)
+ 80 ; ../_divulonglong.c: 50: reste <<= 1;
+ 000024 08 11 [ 1] 81 sll (0x11, sp)
+ 000026 09 10 [ 1] 82 rlc (0x10, sp)
+ 000028 09 0F [ 1] 83 rlc (0x0f, sp)
+ 00002A 09 0E [ 1] 84 rlc (0x0e, sp)
+ 00002C 09 0D [ 1] 85 rlc (0x0d, sp)
+ 00002E 09 0C [ 1] 86 rlc (0x0c, sp)
+ 000030 09 0B [ 1] 87 rlc (0x0b, sp)
+ 000032 09 0A [ 1] 88 rlc (0x0a, sp)
+ 89 ; ../_divulonglong.c: 51: if (c)
+ 000034 4D [ 1] 90 tnz a
+ 000035 27 30 [ 1] 91 jreq 00102$
+ 92 ; ../_divulonglong.c: 52: reste |= 1L;
+ 000037 7B 11 [ 1] 93 ld a, (0x11, sp)
+ 000039 AA 01 [ 1] 94 or a, #0x01
+ 00003B 6B 09 [ 1] 95 ld (0x09, sp), a
+ 00003D 7B 10 [ 1] 96 ld a, (0x10, sp)
+ 00003F 6B 08 [ 1] 97 ld (0x08, sp), a
+ 000041 7B 0F [ 1] 98 ld a, (0x0f, sp)
+ 000043 6B 07 [ 1] 99 ld (0x07, sp), a
+ 000045 7B 0E [ 1] 100 ld a, (0x0e, sp)
+ 000047 41 [ 1] 101 exg a, xl
+ 000048 7B 0D [ 1] 102 ld a, (0x0d, sp)
+ 00004A 41 [ 1] 103 exg a, xl
+ 00004B 02 [ 1] 104 rlwa x
+ 00004C 7B 0C [ 1] 105 ld a, (0x0c, sp)
+ 00004E 01 [ 1] 106 rrwa x
+ 00004F 61 [ 1] 107 exg a, yl
+ 000050 7B 0B [ 1] 108 ld a, (0x0b, sp)
+ 000052 61 [ 1] 109 exg a, yl
+ 000053 90 02 [ 1] 110 rlwa y
+ 000055 7B 0A [ 1] 111 ld a, (0x0a, sp)
+ 000057 90 01 [ 1] 112 rrwa y
+ 000059 6B 0E [ 1] 113 ld (0x0e, sp), a
+ 00005B 1F 0C [ 2] 114 ldw (0x0c, sp), x
+ 00005D 17 0A [ 2] 115 ldw (0x0a, sp), y
+ 00005F 16 08 [ 2] 116 ldw y, (0x08, sp)
+ 000061 17 10 [ 2] 117 ldw (0x10, sp), y
+ 000063 7B 07 [ 1] 118 ld a, (0x07, sp)
+ 000065 6B 0F [ 1] 119 ld (0x0f, sp), a
+ 000067 120 00102$:
+ 121 ; ../_divulonglong.c: 54: if (reste >= y)
+ 000067 1E 10 [ 2] 122 ldw x, (0x10, sp)
+ 000069 13 25 [ 2] 123 cpw x, (0x25, sp)
+ 00006B 7B 0F [ 1] 124 ld a, (0x0f, sp)
+ 00006D 12 24 [ 1] 125 sbc a, (0x24, sp)
+ 00006F 7B 0E [ 1] 126 ld a, (0x0e, sp)
+ 000071 12 23 [ 1] 127 sbc a, (0x23, sp)
+ 000073 7B 0D [ 1] 128 ld a, (0x0d, sp)
+ 000075 12 22 [ 1] 129 sbc a, (0x22, sp)
+ 000077 7B 0C [ 1] 130 ld a, (0x0c, sp)
+ 000079 12 21 [ 1] 131 sbc a, (0x21, sp)
+ 00007B 7B 0B [ 1] 132 ld a, (0x0b, sp)
+ 00007D 12 20 [ 1] 133 sbc a, (0x20, sp)
+ 00007F 7B 0A [ 1] 134 ld a, (0x0a, sp)
+ 000081 12 1F [ 1] 135 sbc a, (0x1f, sp)
+ 000083 25 6D [ 1] 136 jrc 00106$
+ 137 ; ../_divulonglong.c: 56: reste -= y;
+ 000085 1E 10 [ 2] 138 ldw x, (0x10, sp)
+ 000087 72 F0 25 [ 2] 139 subw x, (0x25, sp)
+ 00008A 1F 08 [ 2] 140 ldw (0x08, sp), x
+ 00008C 7B 0F [ 1] 141 ld a, (0x0f, sp)
+ 00008E 12 24 [ 1] 142 sbc a, (0x24, sp)
+ 000090 6B 07 [ 1] 143 ld (0x07, sp), a
+ 000092 7B 0E [ 1] 144 ld a, (0x0e, sp)
+ 000094 12 23 [ 1] 145 sbc a, (0x23, sp)
+ 000096 6B 06 [ 1] 146 ld (0x06, sp), a
+ 000098 7B 0D [ 1] 147 ld a, (0x0d, sp)
+ 00009A 12 22 [ 1] 148 sbc a, (0x22, sp)
+ 00009C 6B 05 [ 1] 149 ld (0x05, sp), a
+ 00009E 7B 0C [ 1] 150 ld a, (0x0c, sp)
+ 0000A0 12 21 [ 1] 151 sbc a, (0x21, sp)
+ 0000A2 6B 04 [ 1] 152 ld (0x04, sp), a
+ 0000A4 7B 0B [ 1] 153 ld a, (0x0b, sp)
+ 0000A6 12 20 [ 1] 154 sbc a, (0x20, sp)
+ 0000A8 6B 03 [ 1] 155 ld (0x03, sp), a
+ 0000AA 7B 0A [ 1] 156 ld a, (0x0a, sp)
+ 0000AC 12 1F [ 1] 157 sbc a, (0x1f, sp)
+ 0000AE 6B 02 [ 1] 158 ld (0x02, sp), a
+ 0000B0 16 08 [ 2] 159 ldw y, (0x08, sp)
+ 0000B2 17 10 [ 2] 160 ldw (0x10, sp), y
+ 0000B4 16 06 [ 2] 161 ldw y, (0x06, sp)
+ 0000B6 17 0E [ 2] 162 ldw (0x0e, sp), y
+ 0000B8 16 04 [ 2] 163 ldw y, (0x04, sp)
+ 0000BA 17 0C [ 2] 164 ldw (0x0c, sp), y
+ 0000BC 16 02 [ 2] 165 ldw y, (0x02, sp)
+ 0000BE 17 0A [ 2] 166 ldw (0x0a, sp), y
+ 167 ; ../_divulonglong.c: 58: x |= 1L;
+ 0000C0 7B 1E [ 1] 168 ld a, (0x1e, sp)
+ 0000C2 AA 01 [ 1] 169 or a, #0x01
+ 0000C4 6B 09 [ 1] 170 ld (0x09, sp), a
+ 0000C6 7B 1D [ 1] 171 ld a, (0x1d, sp)
+ 0000C8 6B 08 [ 1] 172 ld (0x08, sp), a
+ 0000CA 7B 1C [ 1] 173 ld a, (0x1c, sp)
+ 0000CC 6B 07 [ 1] 174 ld (0x07, sp), a
+ 0000CE 7B 1B [ 1] 175 ld a, (0x1b, sp)
+ 0000D0 6B 06 [ 1] 176 ld (0x06, sp), a
+ 0000D2 7B 1A [ 1] 177 ld a, (0x1a, sp)
+ 0000D4 6B 05 [ 1] 178 ld (0x05, sp), a
+ 0000D6 7B 19 [ 1] 179 ld a, (0x19, sp)
+ 0000D8 6B 04 [ 1] 180 ld (0x04, sp), a
+ 0000DA 7B 18 [ 1] 181 ld a, (0x18, sp)
+ 0000DC 6B 03 [ 1] 182 ld (0x03, sp), a
+ 0000DE 7B 17 [ 1] 183 ld a, (0x17, sp)
+ 0000E0 6B 02 [ 1] 184 ld (0x02, sp), a
+ 0000E2 16 08 [ 2] 185 ldw y, (0x08, sp)
+ 0000E4 17 1D [ 2] 186 ldw (0x1d, sp), y
+ 0000E6 16 06 [ 2] 187 ldw y, (0x06, sp)
+ 0000E8 17 1B [ 2] 188 ldw (0x1b, sp), y
+ 0000EA 16 04 [ 2] 189 ldw y, (0x04, sp)
+ 0000EC 17 19 [ 2] 190 ldw (0x19, sp), y
+ 0000EE 16 02 [ 2] 191 ldw y, (0x02, sp)
+ 0000F0 17 17 [ 2] 192 ldw (0x17, sp), y
+ 0000F2 193 00106$:
+ 194 ; ../_divulonglong.c: 61: while (--count);
+ 0000F2 0A 01 [ 1] 195 dec (0x01, sp)
+ 0000F4 27 04 [ 1] 196 jreq 00132$
+ 0000F6 ACs00r00r0F [ 2] 197 jpf 00105$
+ 0000FA 198 00132$:
+ 199 ; ../_divulonglong.c: 62: return x;
+ 0000FA 1E 15 [ 2] 200 ldw x, (0x15, sp)
+ 0000FC 16 1D [ 2] 201 ldw y, (0x1d, sp)
+ 0000FE EF 06 [ 2] 202 ldw (#6, x), y
+ 000100 16 1B [ 2] 203 ldw y, (0x1b, sp)
+ 000102 EF 04 [ 2] 204 ldw (#4, x), y
+ 000104 16 19 [ 2] 205 ldw y, (0x19, sp)
+ 000106 EF 02 [ 2] 206 ldw (#2, x), y
+ 000108 16 17 [ 2] 207 ldw y, (0x17, sp)
+ 00010A FF [ 2] 208 ldw (x), y
+ 209 ; ../_divulonglong.c: 63: }
+ 00010B 5B 11 [ 2] 210 addw sp, #17
+ 00010D 87 [ 5] 211 retf
+ 212 .area CODE
+ 213 .area CONST
+ 214 .area INITIALIZER
+ 215 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_divulonglong.rel b/device/lib/stm8-large/_divulonglong.rel
new file mode 100644
index 0000000..cc72625
--- /dev/null
+++ b/device/lib/stm8-large/_divulonglong.rel
@@ -0,0 +1,73 @@
+XH3
+H B areas 2 global symbols
+M _divulonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 10E flags 0 addr 0
+S __divulonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 5F 1F 10 1F 0E 1F 0C 1F 0A A6 40
+R 00 00 00 09
+T 00 00 0D 6B 01
+R 00 00 00 09
+T 00 00 0F
+R 00 00 00 09
+T 00 00 0F 7B 17 48 4F 49 08 1E 09 1D 09 1C 09 1B
+R 00 00 00 09
+T 00 00 1C 09 1A 09 19 09 18 09 17 08 11 09 10 09
+R 00 00 00 09
+T 00 00 29 0F 09 0E 09 0D 09 0C 09 0B 09 0A 4D 27
+R 00 00 00 09
+T 00 00 36 30 7B 11 AA 01 6B 09 7B 10 6B 08 7B 0F
+R 00 00 00 09
+T 00 00 43 6B 07 7B 0E 41 7B 0D 41 02 7B 0C 01 61
+R 00 00 00 09
+T 00 00 50 7B 0B 61 90 02 7B 0A 90 01 6B 0E 1F 0C
+R 00 00 00 09
+T 00 00 5D 17 0A 16 08 17 10 7B 07 6B 0F
+R 00 00 00 09
+T 00 00 67
+R 00 00 00 09
+T 00 00 67 1E 10 13 25 7B 0F 12 24 7B 0E 12 23 7B
+R 00 00 00 09
+T 00 00 74 0D 12 22 7B 0C 12 21 7B 0B 12 20 7B 0A
+R 00 00 00 09
+T 00 00 81 12 1F 25 6D 1E 10 72 F0 25 1F 08 7B 0F
+R 00 00 00 09
+T 00 00 8E 12 24 6B 07 7B 0E 12 23 6B 06 7B 0D 12
+R 00 00 00 09
+T 00 00 9B 22 6B 05 7B 0C 12 21 6B 04 7B 0B 12 20
+R 00 00 00 09
+T 00 00 A8 6B 03 7B 0A 12 1F 6B 02 16 08 17 10 16
+R 00 00 00 09
+T 00 00 B5 06 17 0E 16 04 17 0C 16 02 17 0A 7B 1E
+R 00 00 00 09
+T 00 00 C2 AA 01 6B 09 7B 1D 6B 08 7B 1C 6B 07 7B
+R 00 00 00 09
+T 00 00 CF 1B 6B 06 7B 1A 6B 05 7B 19 6B 04 7B 18
+R 00 00 00 09
+T 00 00 DC 6B 03 7B 17 6B 02 16 08 17 1D 16 06 17
+R 00 00 00 09
+T 00 00 E9 1B 16 04 17 19 16 02 17 17
+R 00 00 00 09
+T 00 00 F2
+R 00 00 00 09
+T 00 00 F2 0A 01 27 04 AC 00 00 0F
+R 00 00 00 09 80 08 00 09
+T 00 00 FA
+R 00 00 00 09
+T 00 00 FA 1E 15 16 1D EF 06 16 1B EF 04 16 19 EF
+R 00 00 00 09
+T 00 01 07 02 16 17 FF 5B 11 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_divulonglong.sym b/device/lib/stm8-large/_divulonglong.sym
new file mode 100644
index 0000000..2663dfe
--- /dev/null
+++ b/device/lib/stm8-large/_divulonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __divulonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 10E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fs2schar.asm b/device/lib/stm8-large/_fs2schar.asm
new file mode 100644
index 0000000..1e1086c
--- /dev/null
+++ b/device/lib/stm8-large/_fs2schar.asm
@@ -0,0 +1,98 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fs2schar
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fs2slong
+ .globl ___fs2schar
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fs2schar.c: 87: signed char __fs2schar (float f)
+; -----------------------------------------
+; function __fs2schar
+; -----------------------------------------
+___fs2schar:
+ sub sp, #4
+; ../_fs2schar.c: 89: signed long sl=__fs2slong(f);
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fs2slong
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../_fs2schar.c: 90: if (sl>=SCHAR_MAX)
+ ldw x, (0x03, sp)
+ cpw x, #0x007f
+ ld a, (0x02, sp)
+ sbc a, #0x00
+ ld a, (0x01, sp)
+ sbc a, #0x00
+ jrslt 00102$
+; ../_fs2schar.c: 91: return SCHAR_MAX;
+ ld a, #0x7f
+ jra 00105$
+00102$:
+; ../_fs2schar.c: 92: if (sl<=SCHAR_MIN)
+ ldw x, #0xff80
+ cpw x, (0x03, sp)
+ ld a, #0xff
+ sbc a, (0x02, sp)
+ ld a, #0xff
+ sbc a, (0x01, sp)
+ jrslt 00104$
+; ../_fs2schar.c: 93: return -SCHAR_MIN;
+ ld a, #0x80
+ jra 00105$
+00104$:
+; ../_fs2schar.c: 94: return sl;
+ ld a, (0x04, sp)
+00105$:
+; ../_fs2schar.c: 95: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2schar.lst b/device/lib/stm8-large/_fs2schar.lst
new file mode 100644
index 0000000..389d29a
--- /dev/null
+++ b/device/lib/stm8-large/_fs2schar.lst
@@ -0,0 +1,98 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fs2schar
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fs2slong
+ 12 .globl ___fs2schar
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_fs2schar.c: 87: signed char __fs2schar (float f)
+ 51 ; -----------------------------------------
+ 52 ; function __fs2schar
+ 53 ; -----------------------------------------
+ 000000 54 ___fs2schar:
+ 000000 52 04 [ 2] 55 sub sp, #4
+ 56 ; ../_fs2schar.c: 89: signed long sl=__fs2slong(f);
+ 000002 1E 0A [ 2] 57 ldw x, (0x0a, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 0A [ 2] 59 ldw x, (0x0a, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf ___fs2slong
+ 00000C 5B 04 [ 2] 62 addw sp, #4
+ 00000E 1F 03 [ 2] 63 ldw (0x03, sp), x
+ 000010 17 01 [ 2] 64 ldw (0x01, sp), y
+ 65 ; ../_fs2schar.c: 90: if (sl>=SCHAR_MAX)
+ 000012 1E 03 [ 2] 66 ldw x, (0x03, sp)
+ 000014 A3 00 7F [ 2] 67 cpw x, #0x007f
+ 000017 7B 02 [ 1] 68 ld a, (0x02, sp)
+ 000019 A2 00 [ 1] 69 sbc a, #0x00
+ 00001B 7B 01 [ 1] 70 ld a, (0x01, sp)
+ 00001D A2 00 [ 1] 71 sbc a, #0x00
+ 00001F 2F 04 [ 1] 72 jrslt 00102$
+ 73 ; ../_fs2schar.c: 91: return SCHAR_MAX;
+ 000021 A6 7F [ 1] 74 ld a, #0x7f
+ 000023 20 15 [ 2] 75 jra 00105$
+ 000025 76 00102$:
+ 77 ; ../_fs2schar.c: 92: if (sl<=SCHAR_MIN)
+ 000025 AE FF 80 [ 2] 78 ldw x, #0xff80
+ 000028 13 03 [ 2] 79 cpw x, (0x03, sp)
+ 00002A A6 FF [ 1] 80 ld a, #0xff
+ 00002C 12 02 [ 1] 81 sbc a, (0x02, sp)
+ 00002E A6 FF [ 1] 82 ld a, #0xff
+ 000030 12 01 [ 1] 83 sbc a, (0x01, sp)
+ 000032 2F 04 [ 1] 84 jrslt 00104$
+ 85 ; ../_fs2schar.c: 93: return -SCHAR_MIN;
+ 000034 A6 80 [ 1] 86 ld a, #0x80
+ 000036 20 02 [ 2] 87 jra 00105$
+ 000038 88 00104$:
+ 89 ; ../_fs2schar.c: 94: return sl;
+ 000038 7B 04 [ 1] 90 ld a, (0x04, sp)
+ 00003A 91 00105$:
+ 92 ; ../_fs2schar.c: 95: }
+ 00003A 5B 04 [ 2] 93 addw sp, #4
+ 00003C 87 [ 5] 94 retf
+ 95 .area CODE
+ 96 .area CONST
+ 97 .area INITIALIZER
+ 98 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2schar.rel b/device/lib/stm8-large/_fs2schar.rel
new file mode 100644
index 0000000..fa61413
--- /dev/null
+++ b/device/lib/stm8-large/_fs2schar.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 3 global symbols
+M _fs2schar
+O -mstm8
+S ___fs2slong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3D flags 0 addr 0
+S ___fs2schar Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 A3
+R 00 00 00 09 82 03 00 00
+T 00 00 15 00 7F 7B 02 A2 00 7B 01 A2 00 2F 04 A6
+R 00 00 00 09
+T 00 00 22 7F 20 15
+R 00 00 00 09
+T 00 00 25
+R 00 00 00 09
+T 00 00 25 AE FF 80 13 03 A6 FF 12 02 A6 FF 12 01
+R 00 00 00 09
+T 00 00 32 2F 04 A6 80 20 02
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 7B 04
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fs2schar.sym b/device/lib/stm8-large/_fs2schar.sym
new file mode 100644
index 0000000..c6e56f4
--- /dev/null
+++ b/device/lib/stm8-large/_fs2schar.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fs2schar 000000 GR
+ ___fs2slong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fs2sint.asm b/device/lib/stm8-large/_fs2sint.asm
new file mode 100644
index 0000000..d913eab
--- /dev/null
+++ b/device/lib/stm8-large/_fs2sint.asm
@@ -0,0 +1,98 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fs2sint
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fs2slong
+ .globl ___fs2sint
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fs2sint.c: 81: signed int __fs2sint (float f)
+; -----------------------------------------
+; function __fs2sint
+; -----------------------------------------
+___fs2sint:
+ sub sp, #4
+; ../_fs2sint.c: 83: signed long sl=__fs2slong(f);
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fs2slong
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../_fs2sint.c: 84: if (sl>=INT_MAX)
+ ldw x, (0x03, sp)
+ cpw x, #0x7fff
+ ld a, (0x02, sp)
+ sbc a, #0x00
+ ld a, (0x01, sp)
+ sbc a, #0x00
+ jrslt 00102$
+; ../_fs2sint.c: 85: return INT_MAX;
+ ldw x, #0x7fff
+ jra 00105$
+00102$:
+; ../_fs2sint.c: 86: if (sl<=INT_MIN)
+ ldw x, #0x8000
+ cpw x, (0x03, sp)
+ ld a, #0xff
+ sbc a, (0x02, sp)
+ ld a, #0xff
+ sbc a, (0x01, sp)
+ jrslt 00104$
+; ../_fs2sint.c: 87: return -INT_MIN;
+ ldw x, #0x8000
+; ../_fs2sint.c: 88: return sl;
+ .byte 0xc5
+00104$:
+ ldw x, (0x03, sp)
+00105$:
+; ../_fs2sint.c: 89: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2sint.lst b/device/lib/stm8-large/_fs2sint.lst
new file mode 100644
index 0000000..7bc52a0
--- /dev/null
+++ b/device/lib/stm8-large/_fs2sint.lst
@@ -0,0 +1,98 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fs2sint
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fs2slong
+ 12 .globl ___fs2sint
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_fs2sint.c: 81: signed int __fs2sint (float f)
+ 51 ; -----------------------------------------
+ 52 ; function __fs2sint
+ 53 ; -----------------------------------------
+ 000000 54 ___fs2sint:
+ 000000 52 04 [ 2] 55 sub sp, #4
+ 56 ; ../_fs2sint.c: 83: signed long sl=__fs2slong(f);
+ 000002 1E 0A [ 2] 57 ldw x, (0x0a, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 0A [ 2] 59 ldw x, (0x0a, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf ___fs2slong
+ 00000C 5B 04 [ 2] 62 addw sp, #4
+ 00000E 1F 03 [ 2] 63 ldw (0x03, sp), x
+ 000010 17 01 [ 2] 64 ldw (0x01, sp), y
+ 65 ; ../_fs2sint.c: 84: if (sl>=INT_MAX)
+ 000012 1E 03 [ 2] 66 ldw x, (0x03, sp)
+ 000014 A3 7F FF [ 2] 67 cpw x, #0x7fff
+ 000017 7B 02 [ 1] 68 ld a, (0x02, sp)
+ 000019 A2 00 [ 1] 69 sbc a, #0x00
+ 00001B 7B 01 [ 1] 70 ld a, (0x01, sp)
+ 00001D A2 00 [ 1] 71 sbc a, #0x00
+ 00001F 2F 05 [ 1] 72 jrslt 00102$
+ 73 ; ../_fs2sint.c: 85: return INT_MAX;
+ 000021 AE 7F FF [ 2] 74 ldw x, #0x7fff
+ 000024 20 15 [ 2] 75 jra 00105$
+ 000026 76 00102$:
+ 77 ; ../_fs2sint.c: 86: if (sl<=INT_MIN)
+ 000026 AE 80 00 [ 2] 78 ldw x, #0x8000
+ 000029 13 03 [ 2] 79 cpw x, (0x03, sp)
+ 00002B A6 FF [ 1] 80 ld a, #0xff
+ 00002D 12 02 [ 1] 81 sbc a, (0x02, sp)
+ 00002F A6 FF [ 1] 82 ld a, #0xff
+ 000031 12 01 [ 1] 83 sbc a, (0x01, sp)
+ 000033 2F 04 [ 1] 84 jrslt 00104$
+ 85 ; ../_fs2sint.c: 87: return -INT_MIN;
+ 000035 AE 80 00 [ 2] 86 ldw x, #0x8000
+ 87 ; ../_fs2sint.c: 88: return sl;
+ 000038 C5 88 .byte 0xc5
+ 000039 89 00104$:
+ 000039 1E 03 [ 2] 90 ldw x, (0x03, sp)
+ 00003B 91 00105$:
+ 92 ; ../_fs2sint.c: 89: }
+ 00003B 5B 04 [ 2] 93 addw sp, #4
+ 00003D 87 [ 5] 94 retf
+ 95 .area CODE
+ 96 .area CONST
+ 97 .area INITIALIZER
+ 98 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2sint.rel b/device/lib/stm8-large/_fs2sint.rel
new file mode 100644
index 0000000..f8d6b3d
--- /dev/null
+++ b/device/lib/stm8-large/_fs2sint.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 3 global symbols
+M _fs2sint
+O -mstm8
+S ___fs2slong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3E flags 0 addr 0
+S ___fs2sint Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 A3
+R 00 00 00 09 82 03 00 00
+T 00 00 15 7F FF 7B 02 A2 00 7B 01 A2 00 2F 05 AE
+R 00 00 00 09
+T 00 00 22 7F FF 20 15
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 AE 80 00 13 03 A6 FF 12 02 A6 FF 12 01
+R 00 00 00 09
+T 00 00 33 2F 04 AE 80 00 C5
+R 00 00 00 09
+T 00 00 39
+R 00 00 00 09
+T 00 00 39 1E 03
+R 00 00 00 09
+T 00 00 3B
+R 00 00 00 09
+T 00 00 3B 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fs2sint.sym b/device/lib/stm8-large/_fs2sint.sym
new file mode 100644
index 0000000..e02a249
--- /dev/null
+++ b/device/lib/stm8-large/_fs2sint.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fs2sint 000000 GR
+ ___fs2slong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fs2slong.asm b/device/lib/stm8-large/_fs2slong.asm
new file mode 100644
index 0000000..700094a
--- /dev/null
+++ b/device/lib/stm8-large/_fs2slong.asm
@@ -0,0 +1,115 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fs2slong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fs2ulong
+ .globl ___fs2slong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fs2slong.c: 108: signed long __fs2slong (float f)
+; -----------------------------------------
+; function __fs2slong
+; -----------------------------------------
+___fs2slong:
+ sub sp, #4
+; ../_fs2slong.c: 111: if (!f)
+ ldw x, (0x0a, sp)
+ jrne 00102$
+ ldw x, (0x08, sp)
+ sllw x
+ jrne 00102$
+; ../_fs2slong.c: 112: return 0;
+ clrw x
+ clrw y
+ jra 00106$
+00102$:
+; ../_fs2slong.c: 114: if (f<0) {
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00104$
+; ../_fs2slong.c: 115: return -__fs2ulong(-f);
+ ldw y, (0x0a, sp)
+ ldw x, (0x08, sp)
+ sllw x
+ ccf
+ rrcw x
+ pushw y
+ pushw x
+ callf ___fs2ulong
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+ ldw x, (0x03, sp)
+ negw x
+ ldw y, (0x01, sp)
+ jrnc 00121$
+ incw y
+00121$:
+ negw y
+ jra 00106$
+00104$:
+; ../_fs2slong.c: 117: return __fs2ulong(f);
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fs2ulong
+ addw sp, #4
+00106$:
+; ../_fs2slong.c: 119: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2slong.lst b/device/lib/stm8-large/_fs2slong.lst
new file mode 100644
index 0000000..6429a35
--- /dev/null
+++ b/device/lib/stm8-large/_fs2slong.lst
@@ -0,0 +1,115 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fs2slong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fs2ulong
+ 12 .globl ___fs2slong
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_fs2slong.c: 108: signed long __fs2slong (float f)
+ 51 ; -----------------------------------------
+ 52 ; function __fs2slong
+ 53 ; -----------------------------------------
+ 000000 54 ___fs2slong:
+ 000000 52 04 [ 2] 55 sub sp, #4
+ 56 ; ../_fs2slong.c: 111: if (!f)
+ 000002 1E 0A [ 2] 57 ldw x, (0x0a, sp)
+ 000004 26 0A [ 1] 58 jrne 00102$
+ 000006 1E 08 [ 2] 59 ldw x, (0x08, sp)
+ 000008 58 [ 2] 60 sllw x
+ 000009 26 05 [ 1] 61 jrne 00102$
+ 62 ; ../_fs2slong.c: 112: return 0;
+ 00000B 5F [ 1] 63 clrw x
+ 00000C 90 5F [ 1] 64 clrw y
+ 00000E 20 40 [ 2] 65 jra 00106$
+ 000010 66 00102$:
+ 67 ; ../_fs2slong.c: 114: if (f<0) {
+ 000010 5F [ 1] 68 clrw x
+ 000011 89 [ 2] 69 pushw x
+ 000012 5F [ 1] 70 clrw x
+ 000013 89 [ 2] 71 pushw x
+ 000014 1E 0E [ 2] 72 ldw x, (0x0e, sp)
+ 000016 89 [ 2] 73 pushw x
+ 000017 1E 0E [ 2] 74 ldw x, (0x0e, sp)
+ 000019 89 [ 2] 75 pushw x
+ 00001A 8Ds00r00r00 [ 5] 76 callf ___fslt
+ 00001E 5B 08 [ 2] 77 addw sp, #8
+ 000020 4D [ 1] 78 tnz a
+ 000021 27 21 [ 1] 79 jreq 00104$
+ 80 ; ../_fs2slong.c: 115: return -__fs2ulong(-f);
+ 000023 16 0A [ 2] 81 ldw y, (0x0a, sp)
+ 000025 1E 08 [ 2] 82 ldw x, (0x08, sp)
+ 000027 58 [ 2] 83 sllw x
+ 000028 8C [ 1] 84 ccf
+ 000029 56 [ 2] 85 rrcw x
+ 00002A 90 89 [ 2] 86 pushw y
+ 00002C 89 [ 2] 87 pushw x
+ 00002D 8Ds00r00r00 [ 5] 88 callf ___fs2ulong
+ 000031 5B 04 [ 2] 89 addw sp, #4
+ 000033 1F 03 [ 2] 90 ldw (0x03, sp), x
+ 000035 17 01 [ 2] 91 ldw (0x01, sp), y
+ 000037 1E 03 [ 2] 92 ldw x, (0x03, sp)
+ 000039 50 [ 2] 93 negw x
+ 00003A 16 01 [ 2] 94 ldw y, (0x01, sp)
+ 00003C 24 02 [ 1] 95 jrnc 00121$
+ 00003E 90 5C [ 1] 96 incw y
+ 000040 97 00121$:
+ 000040 90 50 [ 2] 98 negw y
+ 000042 20 0C [ 2] 99 jra 00106$
+ 000044 100 00104$:
+ 101 ; ../_fs2slong.c: 117: return __fs2ulong(f);
+ 000044 1E 0A [ 2] 102 ldw x, (0x0a, sp)
+ 000046 89 [ 2] 103 pushw x
+ 000047 1E 0A [ 2] 104 ldw x, (0x0a, sp)
+ 000049 89 [ 2] 105 pushw x
+ 00004A 8Ds00r00r00 [ 5] 106 callf ___fs2ulong
+ 00004E 5B 04 [ 2] 107 addw sp, #4
+ 000050 108 00106$:
+ 109 ; ../_fs2slong.c: 119: }
+ 000050 5B 04 [ 2] 110 addw sp, #4
+ 000052 87 [ 5] 111 retf
+ 112 .area CODE
+ 113 .area CONST
+ 114 .area INITIALIZER
+ 115 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2slong.rel b/device/lib/stm8-large/_fs2slong.rel
new file mode 100644
index 0000000..e712949
--- /dev/null
+++ b/device/lib/stm8-large/_fs2slong.rel
@@ -0,0 +1,47 @@
+XH3
+H B areas 4 global symbols
+M _fs2slong
+O -mstm8
+S ___fs2ulong Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 53 flags 0 addr 0
+S ___fs2slong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 1E 0A 26 0A 1E 08 58 26 05 5F 90
+R 00 00 00 09
+T 00 00 0D 5F 20 40
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 5F 89 5F 89 1E 0E 89 1E 0E 89 8D
+R 00 00 00 09
+T 00 00 1B 00 00 00 5B 08 4D 27 21 16 0A 1E 08 58
+R 00 00 00 09 82 03 00 01
+T 00 00 28 8C 56 90 89 89 8D 00 00 00 5B 04 1F 03
+R 00 00 00 09 82 09 00 00
+T 00 00 35 17 01 1E 03 50 16 01 24 02 90 5C
+R 00 00 00 09
+T 00 00 40
+R 00 00 00 09
+T 00 00 40 90 50 20 0C
+R 00 00 00 09
+T 00 00 44
+R 00 00 00 09
+T 00 00 44 1E 0A 89 1E 0A 89 8D 00 00 00 5B 04
+R 00 00 00 09 82 0A 00 00
+T 00 00 50
+R 00 00 00 09
+T 00 00 50 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fs2slong.sym b/device/lib/stm8-large/_fs2slong.sym
new file mode 100644
index 0000000..748a8f6
--- /dev/null
+++ b/device/lib/stm8-large/_fs2slong.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fs2slong 000000 GR
+ ___fs2ulong ****** GX
+ ___fslt ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 53 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fs2uchar.asm b/device/lib/stm8-large/_fs2uchar.asm
new file mode 100644
index 0000000..0f02ef4
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uchar.asm
@@ -0,0 +1,80 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fs2uchar
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fs2ulong
+ .globl ___fs2uchar
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fs2uchar.c: 51: unsigned char __fs2uchar (float f)
+; -----------------------------------------
+; function __fs2uchar
+; -----------------------------------------
+___fs2uchar:
+; ../_fs2uchar.c: 53: unsigned long ul=__fs2ulong(f);
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ callf ___fs2ulong
+ addw sp, #4
+; ../_fs2uchar.c: 54: if (ul>=UCHAR_MAX) return UCHAR_MAX;
+ cpw x, #0x00ff
+ ld a, yl
+ sbc a, #0x00
+ ld a, yh
+ sbc a, #0x00
+ jrc 00102$
+ ld a, #0xff
+; ../_fs2uchar.c: 55: return ul;
+ .byte 0x21
+00102$:
+ ld a, xl
+00103$:
+; ../_fs2uchar.c: 56: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2uchar.lst b/device/lib/stm8-large/_fs2uchar.lst
new file mode 100644
index 0000000..617fa25
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uchar.lst
@@ -0,0 +1,80 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fs2uchar
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fs2ulong
+ 12 .globl ___fs2uchar
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_fs2uchar.c: 51: unsigned char __fs2uchar (float f)
+ 51 ; -----------------------------------------
+ 52 ; function __fs2uchar
+ 53 ; -----------------------------------------
+ 000000 54 ___fs2uchar:
+ 55 ; ../_fs2uchar.c: 53: unsigned long ul=__fs2ulong(f);
+ 000000 1E 06 [ 2] 56 ldw x, (0x06, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 1E 06 [ 2] 58 ldw x, (0x06, sp)
+ 000005 89 [ 2] 59 pushw x
+ 000006 8Ds00r00r00 [ 5] 60 callf ___fs2ulong
+ 00000A 5B 04 [ 2] 61 addw sp, #4
+ 62 ; ../_fs2uchar.c: 54: if (ul>=UCHAR_MAX) return UCHAR_MAX;
+ 00000C A3 00 FF [ 2] 63 cpw x, #0x00ff
+ 00000F 90 9F [ 1] 64 ld a, yl
+ 000011 A2 00 [ 1] 65 sbc a, #0x00
+ 000013 90 9E [ 1] 66 ld a, yh
+ 000015 A2 00 [ 1] 67 sbc a, #0x00
+ 000017 25 03 [ 1] 68 jrc 00102$
+ 000019 A6 FF [ 1] 69 ld a, #0xff
+ 70 ; ../_fs2uchar.c: 55: return ul;
+ 00001B 21 71 .byte 0x21
+ 00001C 72 00102$:
+ 00001C 9F [ 1] 73 ld a, xl
+ 00001D 74 00103$:
+ 75 ; ../_fs2uchar.c: 56: }
+ 00001D 87 [ 5] 76 retf
+ 77 .area CODE
+ 78 .area CONST
+ 79 .area INITIALIZER
+ 80 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2uchar.rel b/device/lib/stm8-large/_fs2uchar.rel
new file mode 100644
index 0000000..8bd5d7e
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uchar.rel
@@ -0,0 +1,34 @@
+XH3
+H B areas 3 global symbols
+M _fs2uchar
+O -mstm8
+S ___fs2ulong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1E flags 0 addr 0
+S ___fs2uchar Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 06 89 1E 06 89 8D 00 00 00 5B 04 A3
+R 00 00 00 09 82 0A 00 00
+T 00 00 0D 00 FF 90 9F A2 00 90 9E A2 00 25 03 A6
+R 00 00 00 09
+T 00 00 1A FF 21
+R 00 00 00 09
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 9F
+R 00 00 00 09
+T 00 00 1D
+R 00 00 00 09
+T 00 00 1D 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fs2uchar.sym b/device/lib/stm8-large/_fs2uchar.sym
new file mode 100644
index 0000000..049af41
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uchar.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fs2uchar 000000 GR
+ ___fs2ulong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fs2uint.asm b/device/lib/stm8-large/_fs2uint.asm
new file mode 100644
index 0000000..9c52df8
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uint.asm
@@ -0,0 +1,88 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fs2uint
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fs2ulong
+ .globl ___fs2uint
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fs2uint.c: 54: unsigned int __fs2uint (float f)
+; -----------------------------------------
+; function __fs2uint
+; -----------------------------------------
+___fs2uint:
+ sub sp, #4
+; ../_fs2uint.c: 56: unsigned long ul=__fs2ulong(f);
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fs2ulong
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../_fs2uint.c: 57: if (ul>=UINT_MAX) return UINT_MAX;
+ ld a, (0x04, sp)
+ cp a, #0xff
+ ld a, (0x03, sp)
+ sbc a, #0xff
+ ld a, (0x02, sp)
+ sbc a, #0x00
+ ld a, (0x01, sp)
+ sbc a, #0x00
+ jrc 00102$
+ clrw x
+ decw x
+; ../_fs2uint.c: 58: return ul;
+ .byte 0xc5
+00102$:
+ ldw x, (0x03, sp)
+00103$:
+; ../_fs2uint.c: 59: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2uint.lst b/device/lib/stm8-large/_fs2uint.lst
new file mode 100644
index 0000000..5e52511
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uint.lst
@@ -0,0 +1,88 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fs2uint
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fs2ulong
+ 12 .globl ___fs2uint
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_fs2uint.c: 54: unsigned int __fs2uint (float f)
+ 51 ; -----------------------------------------
+ 52 ; function __fs2uint
+ 53 ; -----------------------------------------
+ 000000 54 ___fs2uint:
+ 000000 52 04 [ 2] 55 sub sp, #4
+ 56 ; ../_fs2uint.c: 56: unsigned long ul=__fs2ulong(f);
+ 000002 1E 0A [ 2] 57 ldw x, (0x0a, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 0A [ 2] 59 ldw x, (0x0a, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf ___fs2ulong
+ 00000C 5B 04 [ 2] 62 addw sp, #4
+ 00000E 1F 03 [ 2] 63 ldw (0x03, sp), x
+ 000010 17 01 [ 2] 64 ldw (0x01, sp), y
+ 65 ; ../_fs2uint.c: 57: if (ul>=UINT_MAX) return UINT_MAX;
+ 000012 7B 04 [ 1] 66 ld a, (0x04, sp)
+ 000014 A1 FF [ 1] 67 cp a, #0xff
+ 000016 7B 03 [ 1] 68 ld a, (0x03, sp)
+ 000018 A2 FF [ 1] 69 sbc a, #0xff
+ 00001A 7B 02 [ 1] 70 ld a, (0x02, sp)
+ 00001C A2 00 [ 1] 71 sbc a, #0x00
+ 00001E 7B 01 [ 1] 72 ld a, (0x01, sp)
+ 000020 A2 00 [ 1] 73 sbc a, #0x00
+ 000022 25 03 [ 1] 74 jrc 00102$
+ 000024 5F [ 1] 75 clrw x
+ 000025 5A [ 2] 76 decw x
+ 77 ; ../_fs2uint.c: 58: return ul;
+ 000026 C5 78 .byte 0xc5
+ 000027 79 00102$:
+ 000027 1E 03 [ 2] 80 ldw x, (0x03, sp)
+ 000029 81 00103$:
+ 82 ; ../_fs2uint.c: 59: }
+ 000029 5B 04 [ 2] 83 addw sp, #4
+ 00002B 87 [ 5] 84 retf
+ 85 .area CODE
+ 86 .area CONST
+ 87 .area INITIALIZER
+ 88 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2uint.rel b/device/lib/stm8-large/_fs2uint.rel
new file mode 100644
index 0000000..33e00ad
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uint.rel
@@ -0,0 +1,36 @@
+XH3
+H B areas 3 global symbols
+M _fs2uint
+O -mstm8
+S ___fs2ulong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2C flags 0 addr 0
+S ___fs2uint Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 1F 03 17 01 7B 04 A1 FF
+R 00 00 00 09 82 03 00 00
+T 00 00 16 7B 03 A2 FF 7B 02 A2 00 7B 01 A2 00 25
+R 00 00 00 09
+T 00 00 23 03 5F 5A C5
+R 00 00 00 09
+T 00 00 27
+R 00 00 00 09
+T 00 00 27 1E 03
+R 00 00 00 09
+T 00 00 29
+R 00 00 00 09
+T 00 00 29 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fs2uint.sym b/device/lib/stm8-large/_fs2uint.sym
new file mode 100644
index 0000000..637797a
--- /dev/null
+++ b/device/lib/stm8-large/_fs2uint.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fs2uint 000000 GR
+ ___fs2ulong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fs2ulong.asm b/device/lib/stm8-large/_fs2ulong.asm
new file mode 100644
index 0000000..ea59dfe
--- /dev/null
+++ b/device/lib/stm8-large/_fs2ulong.asm
@@ -0,0 +1,126 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fs2ulong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fs2ulong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fs2ulong.c: 103: __fs2ulong (float a1)
+; -----------------------------------------
+; function __fs2ulong
+; -----------------------------------------
+___fs2ulong:
+ sub sp, #14
+; ../_fs2ulong.c: 109: fl1.f = a1;
+ ldw y, (0x14, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x12, sp)
+ ldw (0x01, sp), y
+; ../_fs2ulong.c: 111: if (!fl1.l || SIGN(fl1.l))
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+ tnzw x
+ jrne 00111$
+ tnzw y
+ jreq 00101$
+00111$:
+ ld a, (0x04, sp)
+ ld a, (0x03, sp)
+ ldw y, (0x01, sp)
+ jrpl 00102$
+00101$:
+; ../_fs2ulong.c: 112: return (0);
+ clrw x
+ clrw y
+ jra 00104$
+00102$:
+; ../_fs2ulong.c: 114: exp = EXP (fl1.l) - EXCESS - 24;
+ ldw x, (0x01, sp)
+ ld a, #0x80
+ div x, a
+ clr a
+ ld xh, a
+ subw x, #0x0096
+ ldw (0x05, sp), x
+; ../_fs2ulong.c: 115: l = MANT (fl1.l);
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ ld a, xl
+ and a, #0x7f
+ ld xl, a
+ clr a
+ rrwa x
+ or a, #0x80
+ ld xl, a
+ ldw (0x09, sp), y
+ ldw (0x07, sp), x
+; ../_fs2ulong.c: 117: l >>= -exp;
+ ld a, (0x06, sp)
+ neg a
+ ldw y, (0x09, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x07, sp)
+ tnz a
+ jreq 00114$
+00113$:
+ sraw x
+ rrc (0x0d, sp)
+ rrc (0x0e, sp)
+ dec a
+ jrne 00113$
+00114$:
+ ldw (0x07, sp), x
+ ldw y, (0x0d, sp)
+; ../_fs2ulong.c: 119: return l;
+ ldw (0x09, sp), y
+ ldw x, y
+ ldw y, (0x07, sp)
+00104$:
+; ../_fs2ulong.c: 120: }
+ addw sp, #14
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2ulong.lst b/device/lib/stm8-large/_fs2ulong.lst
new file mode 100644
index 0000000..744266f
--- /dev/null
+++ b/device/lib/stm8-large/_fs2ulong.lst
@@ -0,0 +1,126 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fs2ulong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fs2ulong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fs2ulong.c: 103: __fs2ulong (float a1)
+ 50 ; -----------------------------------------
+ 51 ; function __fs2ulong
+ 52 ; -----------------------------------------
+ 000000 53 ___fs2ulong:
+ 000000 52 0E [ 2] 54 sub sp, #14
+ 55 ; ../_fs2ulong.c: 109: fl1.f = a1;
+ 000002 16 14 [ 2] 56 ldw y, (0x14, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 12 [ 2] 58 ldw y, (0x12, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../_fs2ulong.c: 111: if (!fl1.l || SIGN(fl1.l))
+ 00000A 1E 03 [ 2] 61 ldw x, (0x03, sp)
+ 00000C 16 01 [ 2] 62 ldw y, (0x01, sp)
+ 00000E 5D [ 2] 63 tnzw x
+ 00000F 26 04 [ 1] 64 jrne 00111$
+ 000011 90 5D [ 2] 65 tnzw y
+ 000013 27 08 [ 1] 66 jreq 00101$
+ 000015 67 00111$:
+ 000015 7B 04 [ 1] 68 ld a, (0x04, sp)
+ 000017 7B 03 [ 1] 69 ld a, (0x03, sp)
+ 000019 16 01 [ 2] 70 ldw y, (0x01, sp)
+ 00001B 2A 05 [ 1] 71 jrpl 00102$
+ 00001D 72 00101$:
+ 73 ; ../_fs2ulong.c: 112: return (0);
+ 00001D 5F [ 1] 74 clrw x
+ 00001E 90 5F [ 1] 75 clrw y
+ 000020 20 3A [ 2] 76 jra 00104$
+ 000022 77 00102$:
+ 78 ; ../_fs2ulong.c: 114: exp = EXP (fl1.l) - EXCESS - 24;
+ 000022 1E 01 [ 2] 79 ldw x, (0x01, sp)
+ 000024 A6 80 [ 1] 80 ld a, #0x80
+ 000026 62 [ 2] 81 div x, a
+ 000027 4F [ 1] 82 clr a
+ 000028 95 [ 1] 83 ld xh, a
+ 000029 1D 00 96 [ 2] 84 subw x, #0x0096
+ 00002C 1F 05 [ 2] 85 ldw (0x05, sp), x
+ 86 ; ../_fs2ulong.c: 115: l = MANT (fl1.l);
+ 00002E 16 03 [ 2] 87 ldw y, (0x03, sp)
+ 000030 1E 01 [ 2] 88 ldw x, (0x01, sp)
+ 000032 9F [ 1] 89 ld a, xl
+ 000033 A4 7F [ 1] 90 and a, #0x7f
+ 000035 97 [ 1] 91 ld xl, a
+ 000036 4F [ 1] 92 clr a
+ 000037 01 [ 1] 93 rrwa x
+ 000038 AA 80 [ 1] 94 or a, #0x80
+ 00003A 97 [ 1] 95 ld xl, a
+ 00003B 17 09 [ 2] 96 ldw (0x09, sp), y
+ 00003D 1F 07 [ 2] 97 ldw (0x07, sp), x
+ 98 ; ../_fs2ulong.c: 117: l >>= -exp;
+ 00003F 7B 06 [ 1] 99 ld a, (0x06, sp)
+ 000041 40 [ 1] 100 neg a
+ 000042 16 09 [ 2] 101 ldw y, (0x09, sp)
+ 000044 17 0D [ 2] 102 ldw (0x0d, sp), y
+ 000046 1E 07 [ 2] 103 ldw x, (0x07, sp)
+ 000048 4D [ 1] 104 tnz a
+ 000049 27 08 [ 1] 105 jreq 00114$
+ 00004B 106 00113$:
+ 00004B 57 [ 2] 107 sraw x
+ 00004C 06 0D [ 1] 108 rrc (0x0d, sp)
+ 00004E 06 0E [ 1] 109 rrc (0x0e, sp)
+ 000050 4A [ 1] 110 dec a
+ 000051 26 F8 [ 1] 111 jrne 00113$
+ 000053 112 00114$:
+ 000053 1F 07 [ 2] 113 ldw (0x07, sp), x
+ 000055 16 0D [ 2] 114 ldw y, (0x0d, sp)
+ 115 ; ../_fs2ulong.c: 119: return l;
+ 000057 17 09 [ 2] 116 ldw (0x09, sp), y
+ 000059 93 [ 1] 117 ldw x, y
+ 00005A 16 07 [ 2] 118 ldw y, (0x07, sp)
+ 00005C 119 00104$:
+ 120 ; ../_fs2ulong.c: 120: }
+ 00005C 5B 0E [ 2] 121 addw sp, #14
+ 00005E 87 [ 5] 122 retf
+ 123 .area CODE
+ 124 .area CONST
+ 125 .area INITIALIZER
+ 126 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fs2ulong.rel b/device/lib/stm8-large/_fs2ulong.rel
new file mode 100644
index 0000000..6b726b3
--- /dev/null
+++ b/device/lib/stm8-large/_fs2ulong.rel
@@ -0,0 +1,53 @@
+XH3
+H B areas 2 global symbols
+M _fs2ulong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 5F flags 0 addr 0
+S ___fs2ulong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0E 16 14 17 03 16 12 17 01 1E 03 16
+R 00 00 00 09
+T 00 00 0D 01 5D 26 04 90 5D 27 08
+R 00 00 00 09
+T 00 00 15
+R 00 00 00 09
+T 00 00 15 7B 04 7B 03 16 01 2A 05
+R 00 00 00 09
+T 00 00 1D
+R 00 00 00 09
+T 00 00 1D 5F 90 5F 20 3A
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 1E 01 A6 80 62 4F 95 1D 00 96 1F 05 16
+R 00 00 00 09
+T 00 00 2F 03 1E 01 9F A4 7F 97 4F 01 AA 80 97 17
+R 00 00 00 09
+T 00 00 3C 09 1F 07 7B 06 40 16 09 17 0D 1E 07 4D
+R 00 00 00 09
+T 00 00 49 27 08
+R 00 00 00 09
+T 00 00 4B
+R 00 00 00 09
+T 00 00 4B 57 06 0D 06 0E 4A 26 F8
+R 00 00 00 09
+T 00 00 53
+R 00 00 00 09
+T 00 00 53 1F 07 16 0D 17 09 93 16 07
+R 00 00 00 09
+T 00 00 5C
+R 00 00 00 09
+T 00 00 5C 5B 0E 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fs2ulong.sym b/device/lib/stm8-large/_fs2ulong.sym
new file mode 100644
index 0000000..a19a514
--- /dev/null
+++ b/device/lib/stm8-large/_fs2ulong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fs2ulong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 5F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fsadd.asm b/device/lib/stm8-large/_fsadd.asm
new file mode 100644
index 0000000..fc1f1fa
--- /dev/null
+++ b/device/lib/stm8-large/_fsadd.asm
@@ -0,0 +1,477 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fsadd
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fsadd
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fsadd.c: 170: float __fsadd (float a1, float a2)
+; -----------------------------------------
+; function __fsadd
+; -----------------------------------------
+___fsadd:
+ sub sp, #22
+; ../_fsadd.c: 178: pfl2 = (long _AUTOMEM *)&a2;
+ ldw x, sp
+ addw x, #30
+; ../_fsadd.c: 179: exp2 = EXP (*pfl2);
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x11, sp), y
+ ldw x, (x)
+ ldw (0x0f, sp), x
+ ldw y, (0x11, sp)
+ ldw (0x15, sp), y
+ ldw y, (0x0f, sp)
+ ldw (0x13, sp), y
+ ldw x, y
+ ld a, #0x80
+ div x, a
+ clr a
+ ld xh, a
+ ldw (0x01, sp), x
+; ../_fsadd.c: 180: mant2 = MANT (*pfl2) << 4;
+ ldw y, (0x11, sp)
+ ld a, (0x10, sp)
+ and a, #0x7f
+ ld xh, a
+ clr a
+ ld xl, a
+ sllw x
+ scf
+ rrcw x
+ swapw x
+ ld a, #0x04
+00240$:
+ sllw y
+ rlcw x
+ dec a
+ jrne 00240$
+ ldw (0x05, sp), y
+ ldw (0x03, sp), x
+; ../_fsadd.c: 181: if (SIGN (*pfl2))
+ tnz (0x13, sp)
+ jrpl 00102$
+; ../_fsadd.c: 182: mant2 = -mant2;
+ ldw y, (0x05, sp)
+ negw y
+ ldw x, (0x03, sp)
+ jrnc 00243$
+ incw x
+00243$:
+ negw x
+ ldw (0x05, sp), y
+ ldw (0x03, sp), x
+00102$:
+; ../_fsadd.c: 184: if (!*pfl2)
+ ldw x, (0x11, sp)
+ jrne 00104$
+ ldw x, (0x0f, sp)
+ jrne 00104$
+; ../_fsadd.c: 185: return (a1);
+ ldw x, (0x1c, sp)
+ ldw y, (0x1a, sp)
+ jpf 00137$
+00104$:
+; ../_fsadd.c: 187: pfl1 = (long _AUTOMEM *)&a1;
+ ldw x, sp
+ addw x, #26
+; ../_fsadd.c: 188: exp1 = EXP (*pfl1);
+ ldw (0x07, sp), x
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x0b, sp), y
+ ldw x, (x)
+ ldw (0x09, sp), x
+ ldw y, (0x0b, sp)
+ ldw (0x15, sp), y
+ ldw y, (0x09, sp)
+ ldw (0x13, sp), y
+ ldw x, y
+ ld a, #0x80
+ div x, a
+ clr a
+ ld xh, a
+ ldw (0x0d, sp), x
+; ../_fsadd.c: 189: mant1 = MANT (*pfl1) << 4;
+ ldw y, (0x0b, sp)
+ ld a, (0x0a, sp)
+ and a, #0x7f
+ ld xh, a
+ clr a
+ ld xl, a
+ sllw x
+ scf
+ rrcw x
+ swapw x
+ ld a, #0x04
+00246$:
+ sllw y
+ rlcw x
+ dec a
+ jrne 00246$
+ ldw (0x11, sp), y
+ ldw (0x0f, sp), x
+; ../_fsadd.c: 190: if (SIGN(*pfl1))
+ tnz (0x13, sp)
+ jrpl 00108$
+; ../_fsadd.c: 191: if (*pfl1 & 0x80000000)
+ tnz (0x09, sp)
+ jrpl 00108$
+; ../_fsadd.c: 192: mant1 = -mant1;
+ ld a, (0x12, sp)
+ neg a
+ ld (0x16, sp), a
+ clr a
+ sbc a, (0x11, sp)
+ ld (0x15, sp), a
+ clr a
+ sbc a, (0x10, sp)
+ ld (0x14, sp), a
+ clr a
+ sbc a, (0x0f, sp)
+ ld (0x0f, sp), a
+ ldw y, (0x15, sp)
+ ldw (0x11, sp), y
+ ld a, (0x14, sp)
+ ld (0x10, sp), a
+00108$:
+; ../_fsadd.c: 194: if (!*pfl1)
+ ldw x, (0x0b, sp)
+ jrne 00110$
+ ldw x, (0x09, sp)
+ jrne 00110$
+; ../_fsadd.c: 195: return (a2);
+ ldw x, (0x20, sp)
+ ldw y, (0x1e, sp)
+ jpf 00137$
+00110$:
+; ../_fsadd.c: 197: expd = exp1 - exp2;
+ ldw x, (0x0d, sp)
+ subw x, (0x01, sp)
+; ../_fsadd.c: 198: if (expd > 25)
+ ldw (0x15, sp), x
+ cpw x, #0x0019
+ jrsle 00112$
+; ../_fsadd.c: 199: return (a1);
+ ldw x, (0x1c, sp)
+ ldw y, (0x1a, sp)
+ jpf 00137$
+00112$:
+; ../_fsadd.c: 200: if (expd < -25)
+ ldw x, (0x15, sp)
+ cpw x, #0xffe7
+ jrsge 00114$
+; ../_fsadd.c: 201: return (a2);
+ ldw x, (0x20, sp)
+ ldw y, (0x1e, sp)
+ jpf 00137$
+00114$:
+; ../_fsadd.c: 203: if (expd < 0)
+ tnz (0x15, sp)
+ jrpl 00116$
+; ../_fsadd.c: 205: expd = -expd;
+ ldw x, (0x15, sp)
+ negw x
+; ../_fsadd.c: 206: exp1 += expd;
+ ldw (0x15, sp), x
+ addw x, (0x0d, sp)
+ ldw (0x0d, sp), x
+; ../_fsadd.c: 207: mant1 >>= expd;
+ ldw x, (0x11, sp)
+ ldw y, (0x0f, sp)
+ ld a, (0x16, sp)
+ jreq 00256$
+00255$:
+ sraw y
+ rrcw x
+ dec a
+ jrne 00255$
+00256$:
+ ldw (0x11, sp), x
+ ldw (0x0f, sp), y
+ jra 00117$
+00116$:
+; ../_fsadd.c: 211: mant2 >>= expd;
+ ldw x, (0x05, sp)
+ ldw y, (0x03, sp)
+ ld a, (0x16, sp)
+ jreq 00258$
+00257$:
+ sraw y
+ rrcw x
+ dec a
+ jrne 00257$
+00258$:
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+00117$:
+; ../_fsadd.c: 213: mant1 += mant2;
+ ldw y, (0x11, sp)
+ addw y, (0x05, sp)
+ ldw x, (0x0f, sp)
+ jrnc 00259$
+ incw x
+00259$:
+ addw x, (0x03, sp)
+ ldw (0x13, sp), y
+ ldw (0x11, sp), x
+; ../_fsadd.c: 215: sign = false;
+ clr (0x10, sp)
+; ../_fsadd.c: 217: if (mant1 < 0)
+ tnz (0x11, sp)
+ jrpl 00121$
+; ../_fsadd.c: 219: mant1 = -mant1;
+ ldw y, (0x13, sp)
+ negw y
+ ldw x, (0x11, sp)
+ jrnc 00261$
+ incw x
+00261$:
+ negw x
+ ldw (0x13, sp), y
+ ldw (0x11, sp), x
+; ../_fsadd.c: 220: sign = true;
+ ld a, #0x01
+ ld (0x10, sp), a
+ jra 00154$
+00121$:
+; ../_fsadd.c: 222: else if (!mant1)
+ ldw x, (0x13, sp)
+ jrne 00154$
+; ../_fsadd.c: 223: return (0);
+ ldw x, (0x11, sp)
+ jrne 00154$
+ clrw y
+ jpf 00137$
+; ../_fsadd.c: 226: while (mant1 < (HIDDEN<<4)) {
+00154$:
+ ldw y, (0x0d, sp)
+ ldw (0x15, sp), y
+00123$:
+ ldw x, (0x11, sp)
+ cpw x, #0x0800
+ jrnc 00157$
+; ../_fsadd.c: 227: mant1 <<= 1;
+ sll (0x14, sp)
+ rlc (0x13, sp)
+ rlc (0x12, sp)
+ rlc (0x11, sp)
+; ../_fsadd.c: 228: exp1--;
+ ldw x, (0x15, sp)
+ decw x
+ ldw (0x15, sp), x
+ jra 00123$
+; ../_fsadd.c: 232: while (mant1 & 0xf0000000) {
+00157$:
+00128$:
+ ld a, (0x11, sp)
+ bcp a, #0xf0
+ jreq 00163$
+; ../_fsadd.c: 233: if (mant1&1)
+ ld a, (0x14, sp)
+ srl a
+ jrnc 00127$
+; ../_fsadd.c: 234: mant1 += 2;
+ ldw x, (0x13, sp)
+ addw x, #0x0002
+ ldw y, (0x11, sp)
+ jrnc 00267$
+ incw y
+00267$:
+ ldw (0x13, sp), x
+ ldw (0x11, sp), y
+00127$:
+; ../_fsadd.c: 235: mant1 >>= 1;
+ sra (0x11, sp)
+ rrc (0x12, sp)
+ rrc (0x13, sp)
+ rrc (0x14, sp)
+; ../_fsadd.c: 236: exp1++;
+ ldw x, (0x15, sp)
+ incw x
+ ldw (0x15, sp), x
+ jra 00128$
+00163$:
+ ldw y, (0x15, sp)
+ ldw (0x0a, sp), y
+; ../_fsadd.c: 240: mant1 &= ~(HIDDEN<<4);
+ ldw y, (0x13, sp)
+ ldw (0x0e, sp), y
+ ld a, (0x12, sp)
+ ld (0x0d, sp), a
+ ld a, (0x11, sp)
+ and a, #0xf7
+ ld (0x0c, sp), a
+ ldw y, (0x0e, sp)
+ ldw (0x13, sp), y
+ ldw y, (0x0c, sp)
+ ldw (0x11, sp), y
+; ../_fsadd.c: 243: if (exp1 >= 0x100)
+ ldw x, (0x15, sp)
+ cpw x, #0x0100
+ jrslt 00135$
+; ../_fsadd.c: 244: *pfl1 = (sign ? (SIGNBIT | __INFINITY) : __INFINITY);
+ tnz (0x10, sp)
+ jreq 00139$
+ clrw x
+ ldw (0x15, sp), x
+ ldw x, #0xff80
+ ldw (0x13, sp), x
+ jra 00140$
+00139$:
+ clrw x
+ ldw (0x15, sp), x
+ ldw x, #0x7f80
+ ldw (0x13, sp), x
+00140$:
+ ldw x, (0x07, sp)
+ ldw y, (0x15, sp)
+ ldw (0x2, x), y
+ ldw y, (0x13, sp)
+ ldw (x), y
+ jpf 00136$
+00135$:
+; ../_fsadd.c: 245: else if (exp1 < 0)
+ tnz (0x15, sp)
+ jrpl 00132$
+; ../_fsadd.c: 246: *pfl1 = 0;
+ ldw x, (0x07, sp)
+ clr (0x3, x)
+ clr (0x2, x)
+ clr (0x1, x)
+ clr (x)
+ jpf 00136$
+00132$:
+; ../_fsadd.c: 248: *pfl1 = PACK (sign ? SIGNBIT : 0 , exp1, mant1>>4);
+ tnz (0x10, sp)
+ jreq 00141$
+ clrw x
+ ldw (0x05, sp), x
+ ldw x, #0x8000
+ ldw (0x03, sp), x
+ jra 00142$
+00141$:
+ clrw x
+ ldw (0x05, sp), x
+ ldw (0x03, sp), x
+00142$:
+ ldw y, (0x0a, sp)
+ ldw (0x0f, sp), y
+ ld a, (0x0f, sp)
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld (0x0e, sp), a
+ ld (0x0d, sp), a
+ ldw y, (0x0f, sp)
+ ldw (0x0d, sp), y
+ clrw x
+ ldw (0x0f, sp), x
+ ld a, #0x07
+00273$:
+ sll (0x0e, sp)
+ rlc (0x0d, sp)
+ dec a
+ jrne 00273$
+ ld a, (0x06, sp)
+ or a, (0x10, sp)
+ ld (0x0c, sp), a
+ ld a, (0x05, sp)
+ or a, (0x0f, sp)
+ ld (0x0b, sp), a
+ ld a, (0x04, sp)
+ or a, (0x0e, sp)
+ ld (0x0a, sp), a
+ ld a, (0x03, sp)
+ or a, (0x0d, sp)
+ ld (0x09, sp), a
+ ldw y, (0x11, sp)
+ ldw (0x03, sp), y
+ ldw x, (0x13, sp)
+ sra (0x03, sp)
+ rrc (0x04, sp)
+ rrcw x
+ sra (0x03, sp)
+ rrc (0x04, sp)
+ rrcw x
+ sra (0x03, sp)
+ rrc (0x04, sp)
+ rrcw x
+ sra (0x03, sp)
+ rrc (0x04, sp)
+ rrcw x
+ ldw (0x05, sp), x
+ ldw (0x15, sp), x
+ ldw y, (0x03, sp)
+ ldw (0x13, sp), y
+ ld a, (0x0c, sp)
+ or a, (0x16, sp)
+ ld (0x12, sp), a
+ ld a, (0x0b, sp)
+ or a, (0x15, sp)
+ ld (0x11, sp), a
+ ld a, (0x0a, sp)
+ or a, (0x14, sp)
+ ld (0x10, sp), a
+ ld a, (0x09, sp)
+ or a, (0x13, sp)
+ ld (0x0f, sp), a
+ ldw x, (0x07, sp)
+ ldw y, (0x11, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0f, sp)
+ ldw (x), y
+00136$:
+; ../_fsadd.c: 249: return (a1);
+ ldw x, (0x1c, sp)
+ ldw y, (0x1a, sp)
+00137$:
+; ../_fsadd.c: 250: }
+ addw sp, #22
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsadd.lst b/device/lib/stm8-large/_fsadd.lst
new file mode 100644
index 0000000..ea9557c
--- /dev/null
+++ b/device/lib/stm8-large/_fsadd.lst
@@ -0,0 +1,477 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fsadd
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fsadd
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fsadd.c: 170: float __fsadd (float a1, float a2)
+ 50 ; -----------------------------------------
+ 51 ; function __fsadd
+ 52 ; -----------------------------------------
+ 000000 53 ___fsadd:
+ 000000 52 16 [ 2] 54 sub sp, #22
+ 55 ; ../_fsadd.c: 178: pfl2 = (long _AUTOMEM *)&a2;
+ 000002 96 [ 1] 56 ldw x, sp
+ 000003 1C 00 1E [ 2] 57 addw x, #30
+ 58 ; ../_fsadd.c: 179: exp2 = EXP (*pfl2);
+ 000006 90 93 [ 1] 59 ldw y, x
+ 000008 90 EE 02 [ 2] 60 ldw y, (0x2, y)
+ 00000B 17 11 [ 2] 61 ldw (0x11, sp), y
+ 00000D FE [ 2] 62 ldw x, (x)
+ 00000E 1F 0F [ 2] 63 ldw (0x0f, sp), x
+ 000010 16 11 [ 2] 64 ldw y, (0x11, sp)
+ 000012 17 15 [ 2] 65 ldw (0x15, sp), y
+ 000014 16 0F [ 2] 66 ldw y, (0x0f, sp)
+ 000016 17 13 [ 2] 67 ldw (0x13, sp), y
+ 000018 93 [ 1] 68 ldw x, y
+ 000019 A6 80 [ 1] 69 ld a, #0x80
+ 00001B 62 [ 2] 70 div x, a
+ 00001C 4F [ 1] 71 clr a
+ 00001D 95 [ 1] 72 ld xh, a
+ 00001E 1F 01 [ 2] 73 ldw (0x01, sp), x
+ 74 ; ../_fsadd.c: 180: mant2 = MANT (*pfl2) << 4;
+ 000020 16 11 [ 2] 75 ldw y, (0x11, sp)
+ 000022 7B 10 [ 1] 76 ld a, (0x10, sp)
+ 000024 A4 7F [ 1] 77 and a, #0x7f
+ 000026 95 [ 1] 78 ld xh, a
+ 000027 4F [ 1] 79 clr a
+ 000028 97 [ 1] 80 ld xl, a
+ 000029 58 [ 2] 81 sllw x
+ 00002A 99 [ 1] 82 scf
+ 00002B 56 [ 2] 83 rrcw x
+ 00002C 5E [ 1] 84 swapw x
+ 00002D A6 04 [ 1] 85 ld a, #0x04
+ 00002F 86 00240$:
+ 00002F 90 58 [ 2] 87 sllw y
+ 000031 59 [ 2] 88 rlcw x
+ 000032 4A [ 1] 89 dec a
+ 000033 26 FA [ 1] 90 jrne 00240$
+ 000035 17 05 [ 2] 91 ldw (0x05, sp), y
+ 000037 1F 03 [ 2] 92 ldw (0x03, sp), x
+ 93 ; ../_fsadd.c: 181: if (SIGN (*pfl2))
+ 000039 0D 13 [ 1] 94 tnz (0x13, sp)
+ 00003B 2A 0E [ 1] 95 jrpl 00102$
+ 96 ; ../_fsadd.c: 182: mant2 = -mant2;
+ 00003D 16 05 [ 2] 97 ldw y, (0x05, sp)
+ 00003F 90 50 [ 2] 98 negw y
+ 000041 1E 03 [ 2] 99 ldw x, (0x03, sp)
+ 000043 24 01 [ 1] 100 jrnc 00243$
+ 000045 5C [ 1] 101 incw x
+ 000046 102 00243$:
+ 000046 50 [ 2] 103 negw x
+ 000047 17 05 [ 2] 104 ldw (0x05, sp), y
+ 000049 1F 03 [ 2] 105 ldw (0x03, sp), x
+ 00004B 106 00102$:
+ 107 ; ../_fsadd.c: 184: if (!*pfl2)
+ 00004B 1E 11 [ 2] 108 ldw x, (0x11, sp)
+ 00004D 26 0C [ 1] 109 jrne 00104$
+ 00004F 1E 0F [ 2] 110 ldw x, (0x0f, sp)
+ 000051 26 08 [ 1] 111 jrne 00104$
+ 112 ; ../_fsadd.c: 185: return (a1);
+ 000053 1E 1C [ 2] 113 ldw x, (0x1c, sp)
+ 000055 16 1A [ 2] 114 ldw y, (0x1a, sp)
+ 000057 ACs00r02r80 [ 2] 115 jpf 00137$
+ 00005B 116 00104$:
+ 117 ; ../_fsadd.c: 187: pfl1 = (long _AUTOMEM *)&a1;
+ 00005B 96 [ 1] 118 ldw x, sp
+ 00005C 1C 00 1A [ 2] 119 addw x, #26
+ 120 ; ../_fsadd.c: 188: exp1 = EXP (*pfl1);
+ 00005F 1F 07 [ 2] 121 ldw (0x07, sp), x
+ 000061 90 93 [ 1] 122 ldw y, x
+ 000063 90 EE 02 [ 2] 123 ldw y, (0x2, y)
+ 000066 17 0B [ 2] 124 ldw (0x0b, sp), y
+ 000068 FE [ 2] 125 ldw x, (x)
+ 000069 1F 09 [ 2] 126 ldw (0x09, sp), x
+ 00006B 16 0B [ 2] 127 ldw y, (0x0b, sp)
+ 00006D 17 15 [ 2] 128 ldw (0x15, sp), y
+ 00006F 16 09 [ 2] 129 ldw y, (0x09, sp)
+ 000071 17 13 [ 2] 130 ldw (0x13, sp), y
+ 000073 93 [ 1] 131 ldw x, y
+ 000074 A6 80 [ 1] 132 ld a, #0x80
+ 000076 62 [ 2] 133 div x, a
+ 000077 4F [ 1] 134 clr a
+ 000078 95 [ 1] 135 ld xh, a
+ 000079 1F 0D [ 2] 136 ldw (0x0d, sp), x
+ 137 ; ../_fsadd.c: 189: mant1 = MANT (*pfl1) << 4;
+ 00007B 16 0B [ 2] 138 ldw y, (0x0b, sp)
+ 00007D 7B 0A [ 1] 139 ld a, (0x0a, sp)
+ 00007F A4 7F [ 1] 140 and a, #0x7f
+ 000081 95 [ 1] 141 ld xh, a
+ 000082 4F [ 1] 142 clr a
+ 000083 97 [ 1] 143 ld xl, a
+ 000084 58 [ 2] 144 sllw x
+ 000085 99 [ 1] 145 scf
+ 000086 56 [ 2] 146 rrcw x
+ 000087 5E [ 1] 147 swapw x
+ 000088 A6 04 [ 1] 148 ld a, #0x04
+ 00008A 149 00246$:
+ 00008A 90 58 [ 2] 150 sllw y
+ 00008C 59 [ 2] 151 rlcw x
+ 00008D 4A [ 1] 152 dec a
+ 00008E 26 FA [ 1] 153 jrne 00246$
+ 000090 17 11 [ 2] 154 ldw (0x11, sp), y
+ 000092 1F 0F [ 2] 155 ldw (0x0f, sp), x
+ 156 ; ../_fsadd.c: 190: if (SIGN(*pfl1))
+ 000094 0D 13 [ 1] 157 tnz (0x13, sp)
+ 000096 2A 20 [ 1] 158 jrpl 00108$
+ 159 ; ../_fsadd.c: 191: if (*pfl1 & 0x80000000)
+ 000098 0D 09 [ 1] 160 tnz (0x09, sp)
+ 00009A 2A 1C [ 1] 161 jrpl 00108$
+ 162 ; ../_fsadd.c: 192: mant1 = -mant1;
+ 00009C 7B 12 [ 1] 163 ld a, (0x12, sp)
+ 00009E 40 [ 1] 164 neg a
+ 00009F 6B 16 [ 1] 165 ld (0x16, sp), a
+ 0000A1 4F [ 1] 166 clr a
+ 0000A2 12 11 [ 1] 167 sbc a, (0x11, sp)
+ 0000A4 6B 15 [ 1] 168 ld (0x15, sp), a
+ 0000A6 4F [ 1] 169 clr a
+ 0000A7 12 10 [ 1] 170 sbc a, (0x10, sp)
+ 0000A9 6B 14 [ 1] 171 ld (0x14, sp), a
+ 0000AB 4F [ 1] 172 clr a
+ 0000AC 12 0F [ 1] 173 sbc a, (0x0f, sp)
+ 0000AE 6B 0F [ 1] 174 ld (0x0f, sp), a
+ 0000B0 16 15 [ 2] 175 ldw y, (0x15, sp)
+ 0000B2 17 11 [ 2] 176 ldw (0x11, sp), y
+ 0000B4 7B 14 [ 1] 177 ld a, (0x14, sp)
+ 0000B6 6B 10 [ 1] 178 ld (0x10, sp), a
+ 0000B8 179 00108$:
+ 180 ; ../_fsadd.c: 194: if (!*pfl1)
+ 0000B8 1E 0B [ 2] 181 ldw x, (0x0b, sp)
+ 0000BA 26 0C [ 1] 182 jrne 00110$
+ 0000BC 1E 09 [ 2] 183 ldw x, (0x09, sp)
+ 0000BE 26 08 [ 1] 184 jrne 00110$
+ 185 ; ../_fsadd.c: 195: return (a2);
+ 0000C0 1E 20 [ 2] 186 ldw x, (0x20, sp)
+ 0000C2 16 1E [ 2] 187 ldw y, (0x1e, sp)
+ 0000C4 ACs00r02r80 [ 2] 188 jpf 00137$
+ 0000C8 189 00110$:
+ 190 ; ../_fsadd.c: 197: expd = exp1 - exp2;
+ 0000C8 1E 0D [ 2] 191 ldw x, (0x0d, sp)
+ 0000CA 72 F0 01 [ 2] 192 subw x, (0x01, sp)
+ 193 ; ../_fsadd.c: 198: if (expd > 25)
+ 0000CD 1F 15 [ 2] 194 ldw (0x15, sp), x
+ 0000CF A3 00 19 [ 2] 195 cpw x, #0x0019
+ 0000D2 2D 08 [ 1] 196 jrsle 00112$
+ 197 ; ../_fsadd.c: 199: return (a1);
+ 0000D4 1E 1C [ 2] 198 ldw x, (0x1c, sp)
+ 0000D6 16 1A [ 2] 199 ldw y, (0x1a, sp)
+ 0000D8 ACs00r02r80 [ 2] 200 jpf 00137$
+ 0000DC 201 00112$:
+ 202 ; ../_fsadd.c: 200: if (expd < -25)
+ 0000DC 1E 15 [ 2] 203 ldw x, (0x15, sp)
+ 0000DE A3 FF E7 [ 2] 204 cpw x, #0xffe7
+ 0000E1 2E 08 [ 1] 205 jrsge 00114$
+ 206 ; ../_fsadd.c: 201: return (a2);
+ 0000E3 1E 20 [ 2] 207 ldw x, (0x20, sp)
+ 0000E5 16 1E [ 2] 208 ldw y, (0x1e, sp)
+ 0000E7 ACs00r02r80 [ 2] 209 jpf 00137$
+ 0000EB 210 00114$:
+ 211 ; ../_fsadd.c: 203: if (expd < 0)
+ 0000EB 0D 15 [ 1] 212 tnz (0x15, sp)
+ 0000ED 2A 1E [ 1] 213 jrpl 00116$
+ 214 ; ../_fsadd.c: 205: expd = -expd;
+ 0000EF 1E 15 [ 2] 215 ldw x, (0x15, sp)
+ 0000F1 50 [ 2] 216 negw x
+ 217 ; ../_fsadd.c: 206: exp1 += expd;
+ 0000F2 1F 15 [ 2] 218 ldw (0x15, sp), x
+ 0000F4 72 FB 0D [ 2] 219 addw x, (0x0d, sp)
+ 0000F7 1F 0D [ 2] 220 ldw (0x0d, sp), x
+ 221 ; ../_fsadd.c: 207: mant1 >>= expd;
+ 0000F9 1E 11 [ 2] 222 ldw x, (0x11, sp)
+ 0000FB 16 0F [ 2] 223 ldw y, (0x0f, sp)
+ 0000FD 7B 16 [ 1] 224 ld a, (0x16, sp)
+ 0000FF 27 06 [ 1] 225 jreq 00256$
+ 000101 226 00255$:
+ 000101 90 57 [ 2] 227 sraw y
+ 000103 56 [ 2] 228 rrcw x
+ 000104 4A [ 1] 229 dec a
+ 000105 26 FA [ 1] 230 jrne 00255$
+ 000107 231 00256$:
+ 000107 1F 11 [ 2] 232 ldw (0x11, sp), x
+ 000109 17 0F [ 2] 233 ldw (0x0f, sp), y
+ 00010B 20 12 [ 2] 234 jra 00117$
+ 00010D 235 00116$:
+ 236 ; ../_fsadd.c: 211: mant2 >>= expd;
+ 00010D 1E 05 [ 2] 237 ldw x, (0x05, sp)
+ 00010F 16 03 [ 2] 238 ldw y, (0x03, sp)
+ 000111 7B 16 [ 1] 239 ld a, (0x16, sp)
+ 000113 27 06 [ 1] 240 jreq 00258$
+ 000115 241 00257$:
+ 000115 90 57 [ 2] 242 sraw y
+ 000117 56 [ 2] 243 rrcw x
+ 000118 4A [ 1] 244 dec a
+ 000119 26 FA [ 1] 245 jrne 00257$
+ 00011B 246 00258$:
+ 00011B 1F 05 [ 2] 247 ldw (0x05, sp), x
+ 00011D 17 03 [ 2] 248 ldw (0x03, sp), y
+ 00011F 249 00117$:
+ 250 ; ../_fsadd.c: 213: mant1 += mant2;
+ 00011F 16 11 [ 2] 251 ldw y, (0x11, sp)
+ 000121 72 F9 05 [ 2] 252 addw y, (0x05, sp)
+ 000124 1E 0F [ 2] 253 ldw x, (0x0f, sp)
+ 000126 24 01 [ 1] 254 jrnc 00259$
+ 000128 5C [ 1] 255 incw x
+ 000129 256 00259$:
+ 000129 72 FB 03 [ 2] 257 addw x, (0x03, sp)
+ 00012C 17 13 [ 2] 258 ldw (0x13, sp), y
+ 00012E 1F 11 [ 2] 259 ldw (0x11, sp), x
+ 260 ; ../_fsadd.c: 215: sign = false;
+ 000130 0F 10 [ 1] 261 clr (0x10, sp)
+ 262 ; ../_fsadd.c: 217: if (mant1 < 0)
+ 000132 0D 11 [ 1] 263 tnz (0x11, sp)
+ 000134 2A 14 [ 1] 264 jrpl 00121$
+ 265 ; ../_fsadd.c: 219: mant1 = -mant1;
+ 000136 16 13 [ 2] 266 ldw y, (0x13, sp)
+ 000138 90 50 [ 2] 267 negw y
+ 00013A 1E 11 [ 2] 268 ldw x, (0x11, sp)
+ 00013C 24 01 [ 1] 269 jrnc 00261$
+ 00013E 5C [ 1] 270 incw x
+ 00013F 271 00261$:
+ 00013F 50 [ 2] 272 negw x
+ 000140 17 13 [ 2] 273 ldw (0x13, sp), y
+ 000142 1F 11 [ 2] 274 ldw (0x11, sp), x
+ 275 ; ../_fsadd.c: 220: sign = true;
+ 000144 A6 01 [ 1] 276 ld a, #0x01
+ 000146 6B 10 [ 1] 277 ld (0x10, sp), a
+ 000148 20 0E [ 2] 278 jra 00154$
+ 00014A 279 00121$:
+ 280 ; ../_fsadd.c: 222: else if (!mant1)
+ 00014A 1E 13 [ 2] 281 ldw x, (0x13, sp)
+ 00014C 26 0A [ 1] 282 jrne 00154$
+ 283 ; ../_fsadd.c: 223: return (0);
+ 00014E 1E 11 [ 2] 284 ldw x, (0x11, sp)
+ 000150 26 06 [ 1] 285 jrne 00154$
+ 000152 90 5F [ 1] 286 clrw y
+ 000154 ACs00r02r80 [ 2] 287 jpf 00137$
+ 288 ; ../_fsadd.c: 226: while (mant1 < (HIDDEN<<4)) {
+ 000158 289 00154$:
+ 000158 16 0D [ 2] 290 ldw y, (0x0d, sp)
+ 00015A 17 15 [ 2] 291 ldw (0x15, sp), y
+ 00015C 292 00123$:
+ 00015C 1E 11 [ 2] 293 ldw x, (0x11, sp)
+ 00015E A3 08 00 [ 2] 294 cpw x, #0x0800
+ 000161 24 0F [ 1] 295 jrnc 00157$
+ 296 ; ../_fsadd.c: 227: mant1 <<= 1;
+ 000163 08 14 [ 1] 297 sll (0x14, sp)
+ 000165 09 13 [ 1] 298 rlc (0x13, sp)
+ 000167 09 12 [ 1] 299 rlc (0x12, sp)
+ 000169 09 11 [ 1] 300 rlc (0x11, sp)
+ 301 ; ../_fsadd.c: 228: exp1--;
+ 00016B 1E 15 [ 2] 302 ldw x, (0x15, sp)
+ 00016D 5A [ 2] 303 decw x
+ 00016E 1F 15 [ 2] 304 ldw (0x15, sp), x
+ 000170 20 EA [ 2] 305 jra 00123$
+ 306 ; ../_fsadd.c: 232: while (mant1 & 0xf0000000) {
+ 000172 307 00157$:
+ 000172 308 00128$:
+ 000172 7B 11 [ 1] 309 ld a, (0x11, sp)
+ 000174 A5 F0 [ 1] 310 bcp a, #0xf0
+ 000176 27 23 [ 1] 311 jreq 00163$
+ 312 ; ../_fsadd.c: 233: if (mant1&1)
+ 000178 7B 14 [ 1] 313 ld a, (0x14, sp)
+ 00017A 44 [ 1] 314 srl a
+ 00017B 24 0F [ 1] 315 jrnc 00127$
+ 316 ; ../_fsadd.c: 234: mant1 += 2;
+ 00017D 1E 13 [ 2] 317 ldw x, (0x13, sp)
+ 00017F 1C 00 02 [ 2] 318 addw x, #0x0002
+ 000182 16 11 [ 2] 319 ldw y, (0x11, sp)
+ 000184 24 02 [ 1] 320 jrnc 00267$
+ 000186 90 5C [ 1] 321 incw y
+ 000188 322 00267$:
+ 000188 1F 13 [ 2] 323 ldw (0x13, sp), x
+ 00018A 17 11 [ 2] 324 ldw (0x11, sp), y
+ 00018C 325 00127$:
+ 326 ; ../_fsadd.c: 235: mant1 >>= 1;
+ 00018C 07 11 [ 1] 327 sra (0x11, sp)
+ 00018E 06 12 [ 1] 328 rrc (0x12, sp)
+ 000190 06 13 [ 1] 329 rrc (0x13, sp)
+ 000192 06 14 [ 1] 330 rrc (0x14, sp)
+ 331 ; ../_fsadd.c: 236: exp1++;
+ 000194 1E 15 [ 2] 332 ldw x, (0x15, sp)
+ 000196 5C [ 1] 333 incw x
+ 000197 1F 15 [ 2] 334 ldw (0x15, sp), x
+ 000199 20 D7 [ 2] 335 jra 00128$
+ 00019B 336 00163$:
+ 00019B 16 15 [ 2] 337 ldw y, (0x15, sp)
+ 00019D 17 0A [ 2] 338 ldw (0x0a, sp), y
+ 339 ; ../_fsadd.c: 240: mant1 &= ~(HIDDEN<<4);
+ 00019F 16 13 [ 2] 340 ldw y, (0x13, sp)
+ 0001A1 17 0E [ 2] 341 ldw (0x0e, sp), y
+ 0001A3 7B 12 [ 1] 342 ld a, (0x12, sp)
+ 0001A5 6B 0D [ 1] 343 ld (0x0d, sp), a
+ 0001A7 7B 11 [ 1] 344 ld a, (0x11, sp)
+ 0001A9 A4 F7 [ 1] 345 and a, #0xf7
+ 0001AB 6B 0C [ 1] 346 ld (0x0c, sp), a
+ 0001AD 16 0E [ 2] 347 ldw y, (0x0e, sp)
+ 0001AF 17 13 [ 2] 348 ldw (0x13, sp), y
+ 0001B1 16 0C [ 2] 349 ldw y, (0x0c, sp)
+ 0001B3 17 11 [ 2] 350 ldw (0x11, sp), y
+ 351 ; ../_fsadd.c: 243: if (exp1 >= 0x100)
+ 0001B5 1E 15 [ 2] 352 ldw x, (0x15, sp)
+ 0001B7 A3 01 00 [ 2] 353 cpw x, #0x0100
+ 0001BA 2F 23 [ 1] 354 jrslt 00135$
+ 355 ; ../_fsadd.c: 244: *pfl1 = (sign ? (SIGNBIT | __INFINITY) : __INFINITY);
+ 0001BC 0D 10 [ 1] 356 tnz (0x10, sp)
+ 0001BE 27 0A [ 1] 357 jreq 00139$
+ 0001C0 5F [ 1] 358 clrw x
+ 0001C1 1F 15 [ 2] 359 ldw (0x15, sp), x
+ 0001C3 AE FF 80 [ 2] 360 ldw x, #0xff80
+ 0001C6 1F 13 [ 2] 361 ldw (0x13, sp), x
+ 0001C8 20 08 [ 2] 362 jra 00140$
+ 0001CA 363 00139$:
+ 0001CA 5F [ 1] 364 clrw x
+ 0001CB 1F 15 [ 2] 365 ldw (0x15, sp), x
+ 0001CD AE 7F 80 [ 2] 366 ldw x, #0x7f80
+ 0001D0 1F 13 [ 2] 367 ldw (0x13, sp), x
+ 0001D2 368 00140$:
+ 0001D2 1E 07 [ 2] 369 ldw x, (0x07, sp)
+ 0001D4 16 15 [ 2] 370 ldw y, (0x15, sp)
+ 0001D6 EF 02 [ 2] 371 ldw (0x2, x), y
+ 0001D8 16 13 [ 2] 372 ldw y, (0x13, sp)
+ 0001DA FF [ 2] 373 ldw (x), y
+ 0001DB ACs00r02r7C [ 2] 374 jpf 00136$
+ 0001DF 375 00135$:
+ 376 ; ../_fsadd.c: 245: else if (exp1 < 0)
+ 0001DF 0D 15 [ 1] 377 tnz (0x15, sp)
+ 0001E1 2A 0D [ 1] 378 jrpl 00132$
+ 379 ; ../_fsadd.c: 246: *pfl1 = 0;
+ 0001E3 1E 07 [ 2] 380 ldw x, (0x07, sp)
+ 0001E5 6F 03 [ 1] 381 clr (0x3, x)
+ 0001E7 6F 02 [ 1] 382 clr (0x2, x)
+ 0001E9 6F 01 [ 1] 383 clr (0x1, x)
+ 0001EB 7F [ 1] 384 clr (x)
+ 0001EC ACs00r02r7C [ 2] 385 jpf 00136$
+ 0001F0 386 00132$:
+ 387 ; ../_fsadd.c: 248: *pfl1 = PACK (sign ? SIGNBIT : 0 , exp1, mant1>>4);
+ 0001F0 0D 10 [ 1] 388 tnz (0x10, sp)
+ 0001F2 27 0A [ 1] 389 jreq 00141$
+ 0001F4 5F [ 1] 390 clrw x
+ 0001F5 1F 05 [ 2] 391 ldw (0x05, sp), x
+ 0001F7 AE 80 00 [ 2] 392 ldw x, #0x8000
+ 0001FA 1F 03 [ 2] 393 ldw (0x03, sp), x
+ 0001FC 20 05 [ 2] 394 jra 00142$
+ 0001FE 395 00141$:
+ 0001FE 5F [ 1] 396 clrw x
+ 0001FF 1F 05 [ 2] 397 ldw (0x05, sp), x
+ 000201 1F 03 [ 2] 398 ldw (0x03, sp), x
+ 000203 399 00142$:
+ 000203 16 0A [ 2] 400 ldw y, (0x0a, sp)
+ 000205 17 0F [ 2] 401 ldw (0x0f, sp), y
+ 000207 7B 0F [ 1] 402 ld a, (0x0f, sp)
+ 000209 49 [ 1] 403 rlc a
+ 00020A 4F [ 1] 404 clr a
+ 00020B A2 00 [ 1] 405 sbc a, #0x00
+ 00020D 6B 0E [ 1] 406 ld (0x0e, sp), a
+ 00020F 6B 0D [ 1] 407 ld (0x0d, sp), a
+ 000211 16 0F [ 2] 408 ldw y, (0x0f, sp)
+ 000213 17 0D [ 2] 409 ldw (0x0d, sp), y
+ 000215 5F [ 1] 410 clrw x
+ 000216 1F 0F [ 2] 411 ldw (0x0f, sp), x
+ 000218 A6 07 [ 1] 412 ld a, #0x07
+ 00021A 413 00273$:
+ 00021A 08 0E [ 1] 414 sll (0x0e, sp)
+ 00021C 09 0D [ 1] 415 rlc (0x0d, sp)
+ 00021E 4A [ 1] 416 dec a
+ 00021F 26 F9 [ 1] 417 jrne 00273$
+ 000221 7B 06 [ 1] 418 ld a, (0x06, sp)
+ 000223 1A 10 [ 1] 419 or a, (0x10, sp)
+ 000225 6B 0C [ 1] 420 ld (0x0c, sp), a
+ 000227 7B 05 [ 1] 421 ld a, (0x05, sp)
+ 000229 1A 0F [ 1] 422 or a, (0x0f, sp)
+ 00022B 6B 0B [ 1] 423 ld (0x0b, sp), a
+ 00022D 7B 04 [ 1] 424 ld a, (0x04, sp)
+ 00022F 1A 0E [ 1] 425 or a, (0x0e, sp)
+ 000231 6B 0A [ 1] 426 ld (0x0a, sp), a
+ 000233 7B 03 [ 1] 427 ld a, (0x03, sp)
+ 000235 1A 0D [ 1] 428 or a, (0x0d, sp)
+ 000237 6B 09 [ 1] 429 ld (0x09, sp), a
+ 000239 16 11 [ 2] 430 ldw y, (0x11, sp)
+ 00023B 17 03 [ 2] 431 ldw (0x03, sp), y
+ 00023D 1E 13 [ 2] 432 ldw x, (0x13, sp)
+ 00023F 07 03 [ 1] 433 sra (0x03, sp)
+ 000241 06 04 [ 1] 434 rrc (0x04, sp)
+ 000243 56 [ 2] 435 rrcw x
+ 000244 07 03 [ 1] 436 sra (0x03, sp)
+ 000246 06 04 [ 1] 437 rrc (0x04, sp)
+ 000248 56 [ 2] 438 rrcw x
+ 000249 07 03 [ 1] 439 sra (0x03, sp)
+ 00024B 06 04 [ 1] 440 rrc (0x04, sp)
+ 00024D 56 [ 2] 441 rrcw x
+ 00024E 07 03 [ 1] 442 sra (0x03, sp)
+ 000250 06 04 [ 1] 443 rrc (0x04, sp)
+ 000252 56 [ 2] 444 rrcw x
+ 000253 1F 05 [ 2] 445 ldw (0x05, sp), x
+ 000255 1F 15 [ 2] 446 ldw (0x15, sp), x
+ 000257 16 03 [ 2] 447 ldw y, (0x03, sp)
+ 000259 17 13 [ 2] 448 ldw (0x13, sp), y
+ 00025B 7B 0C [ 1] 449 ld a, (0x0c, sp)
+ 00025D 1A 16 [ 1] 450 or a, (0x16, sp)
+ 00025F 6B 12 [ 1] 451 ld (0x12, sp), a
+ 000261 7B 0B [ 1] 452 ld a, (0x0b, sp)
+ 000263 1A 15 [ 1] 453 or a, (0x15, sp)
+ 000265 6B 11 [ 1] 454 ld (0x11, sp), a
+ 000267 7B 0A [ 1] 455 ld a, (0x0a, sp)
+ 000269 1A 14 [ 1] 456 or a, (0x14, sp)
+ 00026B 6B 10 [ 1] 457 ld (0x10, sp), a
+ 00026D 7B 09 [ 1] 458 ld a, (0x09, sp)
+ 00026F 1A 13 [ 1] 459 or a, (0x13, sp)
+ 000271 6B 0F [ 1] 460 ld (0x0f, sp), a
+ 000273 1E 07 [ 2] 461 ldw x, (0x07, sp)
+ 000275 16 11 [ 2] 462 ldw y, (0x11, sp)
+ 000277 EF 02 [ 2] 463 ldw (0x2, x), y
+ 000279 16 0F [ 2] 464 ldw y, (0x0f, sp)
+ 00027B FF [ 2] 465 ldw (x), y
+ 00027C 466 00136$:
+ 467 ; ../_fsadd.c: 249: return (a1);
+ 00027C 1E 1C [ 2] 468 ldw x, (0x1c, sp)
+ 00027E 16 1A [ 2] 469 ldw y, (0x1a, sp)
+ 000280 470 00137$:
+ 471 ; ../_fsadd.c: 250: }
+ 000280 5B 16 [ 2] 472 addw sp, #22
+ 000282 87 [ 5] 473 retf
+ 474 .area CODE
+ 475 .area CONST
+ 476 .area INITIALIZER
+ 477 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsadd.rel b/device/lib/stm8-large/_fsadd.rel
new file mode 100644
index 0000000..881e79a
--- /dev/null
+++ b/device/lib/stm8-large/_fsadd.rel
@@ -0,0 +1,223 @@
+XH3
+H B areas 2 global symbols
+M _fsadd
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 283 flags 0 addr 0
+S ___fsadd Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 16 96 1C 00 1E 90 93 90 EE 02 17 11
+R 00 00 00 09
+T 00 00 0D FE 1F 0F 16 11 17 15 16 0F 17 13 93 A6
+R 00 00 00 09
+T 00 00 1A 80 62 4F 95 1F 01 16 11 7B 10 A4 7F 95
+R 00 00 00 09
+T 00 00 27 4F 97 58 99 56 5E A6 04
+R 00 00 00 09
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F 90 58 59 4A 26 FA 17 05 1F 03 0D 13 2A
+R 00 00 00 09
+T 00 00 3C 0E 16 05 90 50 1E 03 24 01 5C
+R 00 00 00 09
+T 00 00 46
+R 00 00 00 09
+T 00 00 46 50 17 05 1F 03
+R 00 00 00 09
+T 00 00 4B
+R 00 00 00 09
+T 00 00 4B 1E 11 26 0C 1E 0F 26 08 1E 1C 16 1A AC
+R 00 00 00 09
+T 00 00 58 00 02 80
+R 00 00 00 09 80 03 00 09
+T 00 00 5B
+R 00 00 00 09
+T 00 00 5B 96 1C 00 1A 1F 07 90 93 90 EE 02 17 0B
+R 00 00 00 09
+T 00 00 68 FE 1F 09 16 0B 17 15 16 09 17 13 93 A6
+R 00 00 00 09
+T 00 00 75 80 62 4F 95 1F 0D 16 0B 7B 0A A4 7F 95
+R 00 00 00 09
+T 00 00 82 4F 97 58 99 56 5E A6 04
+R 00 00 00 09
+T 00 00 8A
+R 00 00 00 09
+T 00 00 8A 90 58 59 4A 26 FA 17 11 1F 0F 0D 13 2A
+R 00 00 00 09
+T 00 00 97 20 0D 09 2A 1C 7B 12 40 6B 16 4F 12 11
+R 00 00 00 09
+T 00 00 A4 6B 15 4F 12 10 6B 14 4F 12 0F 6B 0F 16
+R 00 00 00 09
+T 00 00 B1 15 17 11 7B 14 6B 10
+R 00 00 00 09
+T 00 00 B8
+R 00 00 00 09
+T 00 00 B8 1E 0B 26 0C 1E 09 26 08 1E 20 16 1E AC
+R 00 00 00 09
+T 00 00 C5 00 02 80
+R 00 00 00 09 80 03 00 09
+T 00 00 C8
+R 00 00 00 09
+T 00 00 C8 1E 0D 72 F0 01 1F 15 A3 00 19 2D 08 1E
+R 00 00 00 09
+T 00 00 D5 1C 16 1A AC 00 02 80
+R 00 00 00 09 80 07 00 09
+T 00 00 DC
+R 00 00 00 09
+T 00 00 DC 1E 15 A3 FF E7 2E 08 1E 20 16 1E AC
+R 00 00 00 09
+T 00 00 E8 00 02 80
+R 00 00 00 09 80 03 00 09
+T 00 00 EB
+R 00 00 00 09
+T 00 00 EB 0D 15 2A 1E 1E 15 50 1F 15 72 FB 0D 1F
+R 00 00 00 09
+T 00 00 F8 0D 1E 11 16 0F 7B 16 27 06
+R 00 00 00 09
+T 00 01 01
+R 00 00 00 09
+T 00 01 01 90 57 56 4A 26 FA
+R 00 00 00 09
+T 00 01 07
+R 00 00 00 09
+T 00 01 07 1F 11 17 0F 20 12
+R 00 00 00 09
+T 00 01 0D
+R 00 00 00 09
+T 00 01 0D 1E 05 16 03 7B 16 27 06
+R 00 00 00 09
+T 00 01 15
+R 00 00 00 09
+T 00 01 15 90 57 56 4A 26 FA
+R 00 00 00 09
+T 00 01 1B
+R 00 00 00 09
+T 00 01 1B 1F 05 17 03
+R 00 00 00 09
+T 00 01 1F
+R 00 00 00 09
+T 00 01 1F 16 11 72 F9 05 1E 0F 24 01 5C
+R 00 00 00 09
+T 00 01 29
+R 00 00 00 09
+T 00 01 29 72 FB 03 17 13 1F 11 0F 10 0D 11 2A 14
+R 00 00 00 09
+T 00 01 36 16 13 90 50 1E 11 24 01 5C
+R 00 00 00 09
+T 00 01 3F
+R 00 00 00 09
+T 00 01 3F 50 17 13 1F 11 A6 01 6B 10 20 0E
+R 00 00 00 09
+T 00 01 4A
+R 00 00 00 09
+T 00 01 4A 1E 13 26 0A 1E 11 26 06 90 5F AC
+R 00 00 00 09
+T 00 01 55 00 02 80
+R 00 00 00 09 80 03 00 09
+T 00 01 58
+R 00 00 00 09
+T 00 01 58 16 0D 17 15
+R 00 00 00 09
+T 00 01 5C
+R 00 00 00 09
+T 00 01 5C 1E 11 A3 08 00 24 0F 08 14 09 13 09 12
+R 00 00 00 09
+T 00 01 69 09 11 1E 15 5A 1F 15 20 EA
+R 00 00 00 09
+T 00 01 72
+R 00 00 00 09
+T 00 01 72
+R 00 00 00 09
+T 00 01 72 7B 11 A5 F0 27 23 7B 14 44 24 0F 1E 13
+R 00 00 00 09
+T 00 01 7F 1C 00 02 16 11 24 02 90 5C
+R 00 00 00 09
+T 00 01 88
+R 00 00 00 09
+T 00 01 88 1F 13 17 11
+R 00 00 00 09
+T 00 01 8C
+R 00 00 00 09
+T 00 01 8C 07 11 06 12 06 13 06 14 1E 15 5C 1F 15
+R 00 00 00 09
+T 00 01 99 20 D7
+R 00 00 00 09
+T 00 01 9B
+R 00 00 00 09
+T 00 01 9B 16 15 17 0A 16 13 17 0E 7B 12 6B 0D 7B
+R 00 00 00 09
+T 00 01 A8 11 A4 F7 6B 0C 16 0E 17 13 16 0C 17 11
+R 00 00 00 09
+T 00 01 B5 1E 15 A3 01 00 2F 23 0D 10 27 0A 5F 1F
+R 00 00 00 09
+T 00 01 C2 15 AE FF 80 1F 13 20 08
+R 00 00 00 09
+T 00 01 CA
+R 00 00 00 09
+T 00 01 CA 5F 1F 15 AE 7F 80 1F 13
+R 00 00 00 09
+T 00 01 D2
+R 00 00 00 09
+T 00 01 D2 1E 07 16 15 EF 02 16 13 FF AC
+R 00 00 00 09
+T 00 01 DC 00 02 7C
+R 00 00 00 09 80 03 00 09
+T 00 01 DF
+R 00 00 00 09
+T 00 01 DF 0D 15 2A 0D 1E 07 6F 03 6F 02 6F 01 7F
+R 00 00 00 09
+T 00 01 EC AC 00 02 7C
+R 00 00 00 09 80 04 00 09
+T 00 01 F0
+R 00 00 00 09
+T 00 01 F0 0D 10 27 0A 5F 1F 05 AE 80 00 1F 03 20
+R 00 00 00 09
+T 00 01 FD 05
+R 00 00 00 09
+T 00 01 FE
+R 00 00 00 09
+T 00 01 FE 5F 1F 05 1F 03
+R 00 00 00 09
+T 00 02 03
+R 00 00 00 09
+T 00 02 03 16 0A 17 0F 7B 0F 49 4F A2 00 6B 0E 6B
+R 00 00 00 09
+T 00 02 10 0D 16 0F 17 0D 5F 1F 0F A6 07
+R 00 00 00 09
+T 00 02 1A
+R 00 00 00 09
+T 00 02 1A 08 0E 09 0D 4A 26 F9 7B 06 1A 10 6B 0C
+R 00 00 00 09
+T 00 02 27 7B 05 1A 0F 6B 0B 7B 04 1A 0E 6B 0A 7B
+R 00 00 00 09
+T 00 02 34 03 1A 0D 6B 09 16 11 17 03 1E 13 07 03
+R 00 00 00 09
+T 00 02 41 06 04 56 07 03 06 04 56 07 03 06 04 56
+R 00 00 00 09
+T 00 02 4E 07 03 06 04 56 1F 05 1F 15 16 03 17 13
+R 00 00 00 09
+T 00 02 5B 7B 0C 1A 16 6B 12 7B 0B 1A 15 6B 11 7B
+R 00 00 00 09
+T 00 02 68 0A 1A 14 6B 10 7B 09 1A 13 6B 0F 1E 07
+R 00 00 00 09
+T 00 02 75 16 11 EF 02 16 0F FF
+R 00 00 00 09
+T 00 02 7C
+R 00 00 00 09
+T 00 02 7C 1E 1C 16 1A
+R 00 00 00 09
+T 00 02 80
+R 00 00 00 09
+T 00 02 80 5B 16 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fsadd.sym b/device/lib/stm8-large/_fsadd.sym
new file mode 100644
index 0000000..6ca5e69
--- /dev/null
+++ b/device/lib/stm8-large/_fsadd.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fsadd 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 283 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fsdiv.asm b/device/lib/stm8-large/_fsdiv.asm
new file mode 100644
index 0000000..4aec8ef
--- /dev/null
+++ b/device/lib/stm8-large/_fsdiv.asm
@@ -0,0 +1,468 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fsdiv
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fsdiv
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fsdiv.c: 274: static float __fsdiv_org (float a1, float a2)
+; -----------------------------------------
+; function __fsdiv_org
+; -----------------------------------------
+___fsdiv_org:
+ sub sp, #34
+; ../_fsdiv.c: 283: fl1.f = a1;
+ ldw y, (0x28, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x26, sp)
+ ldw (0x01, sp), y
+; ../_fsdiv.c: 284: fl2.f = a2;
+ ldw y, (0x2c, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x2a, sp)
+ ldw (0x05, sp), y
+; ../_fsdiv.c: 287: exp = EXP (fl1.l) ;
+ ldw x, (0x01, sp)
+ ld a, #0x80
+ div x, a
+ clr a
+ ld xh, a
+ ldw (0x0d, sp), x
+; ../_fsdiv.c: 288: exp -= EXP (fl2.l);
+ ldw x, (0x05, sp)
+ ld a, #0x80
+ div x, a
+ ld a, xl
+ ld (0x16, sp), a
+ clr (0x15, sp)
+ ldw x, (0x0d, sp)
+ subw x, (0x15, sp)
+; ../_fsdiv.c: 289: exp += EXCESS;
+ ldw (0x0d, sp), x
+ addw x, #0x007e
+ ldw (0x15, sp), x
+ ldw (0x0d, sp), x
+; ../_fsdiv.c: 292: sign = SIGN (fl1.l) ^ SIGN (fl2.l);
+ ldw x, (0x01, sp)
+ sllw x
+ clr a
+ rlc a
+ ld (0x16, sp), a
+ ldw x, (0x05, sp)
+ sllw x
+ clr a
+ rlc a
+ xor a, (0x16, sp)
+ ld (0x12, sp), a
+; ../_fsdiv.c: 295: if (!fl2.l)
+ ldw y, (0x07, sp)
+ ldw (0x15, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x13, sp), y
+ ldw x, (0x15, sp)
+ jrne 00102$
+; ../_fsdiv.c: 297: fl2.l = 0x7FC00000;
+ ldw x, (0x13, sp)
+ jrne 00102$
+ ldw (0x07, sp), x
+ ldw x, #0x7fc0
+ ldw (0x05, sp), x
+; ../_fsdiv.c: 298: return (fl2.f);
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+ jpf 00118$
+00102$:
+; ../_fsdiv.c: 302: if (!fl1.l)
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+ tnzw x
+ jrne 00104$
+ tnzw y
+ jrne 00104$
+; ../_fsdiv.c: 303: return (0);
+ clrw x
+ clrw y
+ jpf 00118$
+00104$:
+; ../_fsdiv.c: 306: mant1 = MANT (fl1.l);
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ ld a, xl
+ and a, #0x7f
+ ld xl, a
+ clr a
+ rrwa x
+ or a, #0x80
+ ld xl, a
+ ldw (0x21, sp), y
+ ldw (0x1f, sp), x
+; ../_fsdiv.c: 307: mant2 = MANT (fl2.l);
+ ldw y, (0x07, sp)
+ ldw x, (0x05, sp)
+ ld a, xl
+ and a, #0x7f
+ ld xl, a
+ clr a
+ rrwa x
+ or a, #0x80
+ ld xl, a
+ ldw (0x0b, sp), y
+ ldw (0x09, sp), x
+; ../_fsdiv.c: 310: if (mant1 < mant2)
+ ldw x, (0x21, sp)
+ cpw x, (0x0b, sp)
+ ld a, (0x20, sp)
+ sbc a, (0x0a, sp)
+ ld a, (0x1f, sp)
+ sbc a, (0x09, sp)
+ jrsge 00106$
+; ../_fsdiv.c: 312: mant1 <<= 1;
+ sll (0x22, sp)
+ rlc (0x21, sp)
+ rlc (0x20, sp)
+ rlc (0x1f, sp)
+; ../_fsdiv.c: 313: exp--;
+ ldw x, (0x0d, sp)
+ decw x
+ ldw (0x0d, sp), x
+00106$:
+; ../_fsdiv.c: 317: mask = 0x1000000;
+ clrw x
+ ldw (0x1d, sp), x
+ ldw x, #0x0100
+ ldw (0x1b, sp), x
+; ../_fsdiv.c: 318: result = 0;
+ clrw x
+ ldw (0x19, sp), x
+ ldw (0x17, sp), x
+; ../_fsdiv.c: 319: while (mask)
+00109$:
+ ldw x, (0x1d, sp)
+ jrne 00179$
+ ldw x, (0x1b, sp)
+ jreq 00111$
+00179$:
+; ../_fsdiv.c: 321: if (mant1 >= mant2)
+ ldw x, (0x21, sp)
+ cpw x, (0x0b, sp)
+ ld a, (0x20, sp)
+ sbc a, (0x0a, sp)
+ ld a, (0x1f, sp)
+ sbc a, (0x09, sp)
+ jrslt 00108$
+; ../_fsdiv.c: 323: result |= mask;
+ ldw x, (0x19, sp)
+ ldw y, (0x17, sp)
+ ld a, xl
+ or a, (0x1e, sp)
+ rlwa x
+ or a, (0x1d, sp)
+ ld xh, a
+ ld a, yl
+ or a, (0x1c, sp)
+ rlwa y
+ or a, (0x1b, sp)
+ ld yh, a
+ ldw (0x19, sp), x
+ ldw (0x17, sp), y
+; ../_fsdiv.c: 324: mant1 -= mant2;
+ ldw y, (0x21, sp)
+ subw y, (0x0b, sp)
+ ld a, (0x20, sp)
+ sbc a, (0x0a, sp)
+ ld xl, a
+ ld a, (0x1f, sp)
+ sbc a, (0x09, sp)
+ ld xh, a
+ ldw (0x21, sp), y
+ ldw (0x1f, sp), x
+00108$:
+; ../_fsdiv.c: 326: mant1 <<= 1;
+ sll (0x22, sp)
+ rlc (0x21, sp)
+ rlc (0x20, sp)
+ rlc (0x1f, sp)
+; ../_fsdiv.c: 327: mask >>= 1;
+ srl (0x1b, sp)
+ rrc (0x1c, sp)
+ rrc (0x1d, sp)
+ rrc (0x1e, sp)
+ jra 00109$
+00111$:
+; ../_fsdiv.c: 331: result += 1;
+ ldw x, (0x19, sp)
+ addw x, #0x0001
+ ldw y, (0x17, sp)
+ jrnc 00181$
+ incw y
+00181$:
+ ldw (0x19, sp), x
+ ldw (0x17, sp), y
+; ../_fsdiv.c: 334: exp++;
+ ldw x, (0x0d, sp)
+ incw x
+ ldw (0x0d, sp), x
+; ../_fsdiv.c: 335: result >>= 1;
+ sra (0x17, sp)
+ rrc (0x18, sp)
+ rrc (0x19, sp)
+ rrc (0x1a, sp)
+; ../_fsdiv.c: 337: result &= ~HIDDEN;
+ ldw y, (0x19, sp)
+ ld a, (0x18, sp)
+ and a, #0x7f
+ ld xl, a
+ ld a, (0x17, sp)
+ ld xh, a
+ ldw (0x19, sp), y
+ ldw (0x17, sp), x
+; ../_fsdiv.c: 340: if (exp >= 0x100)
+ ldw x, (0x0d, sp)
+ cpw x, #0x0100
+ jrslt 00116$
+; ../_fsdiv.c: 341: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY;
+ tnz (0x12, sp)
+ jreq 00120$
+ clrw x
+ ldw (0x15, sp), x
+ clr (0x14, sp)
+ ld a, #0x80
+ jra 00121$
+00120$:
+ clrw x
+ ldw (0x15, sp), x
+ clr (0x14, sp)
+ clr a
+00121$:
+ or a, #0x7f
+ ld yh, a
+ ld a, (0x16, sp)
+ ld xl, a
+ ld a, (0x15, sp)
+ ld xh, a
+ ld a, (0x14, sp)
+ or a, #0x80
+ ld yl, a
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+ jra 00117$
+00116$:
+; ../_fsdiv.c: 342: else if (exp < 0)
+ tnz (0x0d, sp)
+ jrpl 00113$
+; ../_fsdiv.c: 343: fl1.l = 0;
+ clrw x
+ ldw (0x03, sp), x
+ ldw (0x01, sp), x
+ jra 00117$
+00113$:
+; ../_fsdiv.c: 345: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result);
+ tnz (0x12, sp)
+ jreq 00122$
+ clrw x
+ ldw (0x15, sp), x
+ ldw x, #0x8000
+ ldw (0x13, sp), x
+ jra 00123$
+00122$:
+ clrw x
+ ldw (0x15, sp), x
+ ldw (0x13, sp), x
+00123$:
+ ldw y, (0x0d, sp)
+ clrw x
+ tnzw y
+ jrpl 00186$
+ decw x
+00186$:
+ clrw x
+ ld a, #0x07
+00187$:
+ sllw y
+ dec a
+ jrne 00187$
+ ld a, xl
+ or a, (0x16, sp)
+ ld (0x12, sp), a
+ ld a, xh
+ or a, (0x15, sp)
+ ld (0x11, sp), a
+ ld a, yl
+ or a, (0x14, sp)
+ ld (0x10, sp), a
+ ld a, yh
+ or a, (0x13, sp)
+ ldw y, (0x19, sp)
+ ldw (0x15, sp), y
+ ldw y, (0x17, sp)
+ pushw y
+ or a, (1, sp)
+ popw y
+ ld yh, a
+ ld a, (0x12, sp)
+ or a, (0x16, sp)
+ ld xl, a
+ ld a, (0x11, sp)
+ or a, (0x15, sp)
+ ld xh, a
+ pushw y
+ ld a, (0x12, sp)
+ or a, (2, sp)
+ popw y
+ ld yl, a
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+00117$:
+; ../_fsdiv.c: 346: return (fl1.f);
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+00118$:
+; ../_fsdiv.c: 347: }
+ addw sp, #34
+ retf
+; ../_fsdiv.c: 349: float __fsdiv (float a1, float a2)
+; -----------------------------------------
+; function __fsdiv
+; -----------------------------------------
+___fsdiv:
+ sub sp, #6
+; ../_fsdiv.c: 352: unsigned long *p = (unsigned long *) &f;
+ ldw x, sp
+ incw x
+ ldw (0x05, sp), x
+; ../_fsdiv.c: 354: if (a2 == 0.0f && a1 > 0.0f)
+ ldw x, (0x10, sp)
+ jrne 00110$
+ ldw x, (0x0e, sp)
+ sllw x
+ jrne 00110$
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00110$
+; ../_fsdiv.c: 355: *p = 0x7f800000; // inf
+ ldw x, (0x05, sp)
+ clr (0x3, x)
+ clr (0x2, x)
+ ldw y, #0x7f80
+ ldw (x), y
+ jra 00111$
+00110$:
+; ../_fsdiv.c: 356: else if (a2 == 0.0f && a1 < 0.0f)
+ ldw x, (0x10, sp)
+ jrne 00106$
+ ldw x, (0x0e, sp)
+ sllw x
+ jrne 00106$
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00106$
+; ../_fsdiv.c: 357: *p = 0xff800000; // -inf
+ ldw x, (0x05, sp)
+ clr (0x3, x)
+ clr (0x2, x)
+ ldw y, #0xff80
+ ldw (x), y
+ jra 00111$
+00106$:
+; ../_fsdiv.c: 358: else if (a2 == 0.0f && a1 == 0.0f)
+ ldw x, (0x10, sp)
+ jrne 00102$
+ ldw x, (0x0e, sp)
+ sllw x
+ jrne 00102$
+ ldw x, (0x0c, sp)
+ jrne 00102$
+ ldw x, (0x0a, sp)
+ sllw x
+ jrne 00102$
+; ../_fsdiv.c: 359: *p = 0xffc00000; // nan
+ ldw x, (0x05, sp)
+ clr (0x3, x)
+ clr (0x2, x)
+ ldw y, #0xffc0
+ ldw (x), y
+ jra 00111$
+00102$:
+; ../_fsdiv.c: 361: f = __fsdiv_org (a1, a2);
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ callf ___fsdiv_org
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+00111$:
+; ../_fsdiv.c: 363: return f;
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+; ../_fsdiv.c: 364: }
+ addw sp, #6
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsdiv.lst b/device/lib/stm8-large/_fsdiv.lst
new file mode 100644
index 0000000..2b9847e
--- /dev/null
+++ b/device/lib/stm8-large/_fsdiv.lst
@@ -0,0 +1,468 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fsdiv
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fsdiv
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fsdiv.c: 274: static float __fsdiv_org (float a1, float a2)
+ 50 ; -----------------------------------------
+ 51 ; function __fsdiv_org
+ 52 ; -----------------------------------------
+ 000000 53 ___fsdiv_org:
+ 000000 52 22 [ 2] 54 sub sp, #34
+ 55 ; ../_fsdiv.c: 283: fl1.f = a1;
+ 000002 16 28 [ 2] 56 ldw y, (0x28, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 26 [ 2] 58 ldw y, (0x26, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../_fsdiv.c: 284: fl2.f = a2;
+ 00000A 16 2C [ 2] 61 ldw y, (0x2c, sp)
+ 00000C 17 07 [ 2] 62 ldw (0x07, sp), y
+ 00000E 16 2A [ 2] 63 ldw y, (0x2a, sp)
+ 000010 17 05 [ 2] 64 ldw (0x05, sp), y
+ 65 ; ../_fsdiv.c: 287: exp = EXP (fl1.l) ;
+ 000012 1E 01 [ 2] 66 ldw x, (0x01, sp)
+ 000014 A6 80 [ 1] 67 ld a, #0x80
+ 000016 62 [ 2] 68 div x, a
+ 000017 4F [ 1] 69 clr a
+ 000018 95 [ 1] 70 ld xh, a
+ 000019 1F 0D [ 2] 71 ldw (0x0d, sp), x
+ 72 ; ../_fsdiv.c: 288: exp -= EXP (fl2.l);
+ 00001B 1E 05 [ 2] 73 ldw x, (0x05, sp)
+ 00001D A6 80 [ 1] 74 ld a, #0x80
+ 00001F 62 [ 2] 75 div x, a
+ 000020 9F [ 1] 76 ld a, xl
+ 000021 6B 16 [ 1] 77 ld (0x16, sp), a
+ 000023 0F 15 [ 1] 78 clr (0x15, sp)
+ 000025 1E 0D [ 2] 79 ldw x, (0x0d, sp)
+ 000027 72 F0 15 [ 2] 80 subw x, (0x15, sp)
+ 81 ; ../_fsdiv.c: 289: exp += EXCESS;
+ 00002A 1F 0D [ 2] 82 ldw (0x0d, sp), x
+ 00002C 1C 00 7E [ 2] 83 addw x, #0x007e
+ 00002F 1F 15 [ 2] 84 ldw (0x15, sp), x
+ 000031 1F 0D [ 2] 85 ldw (0x0d, sp), x
+ 86 ; ../_fsdiv.c: 292: sign = SIGN (fl1.l) ^ SIGN (fl2.l);
+ 000033 1E 01 [ 2] 87 ldw x, (0x01, sp)
+ 000035 58 [ 2] 88 sllw x
+ 000036 4F [ 1] 89 clr a
+ 000037 49 [ 1] 90 rlc a
+ 000038 6B 16 [ 1] 91 ld (0x16, sp), a
+ 00003A 1E 05 [ 2] 92 ldw x, (0x05, sp)
+ 00003C 58 [ 2] 93 sllw x
+ 00003D 4F [ 1] 94 clr a
+ 00003E 49 [ 1] 95 rlc a
+ 00003F 18 16 [ 1] 96 xor a, (0x16, sp)
+ 000041 6B 12 [ 1] 97 ld (0x12, sp), a
+ 98 ; ../_fsdiv.c: 295: if (!fl2.l)
+ 000043 16 07 [ 2] 99 ldw y, (0x07, sp)
+ 000045 17 15 [ 2] 100 ldw (0x15, sp), y
+ 000047 16 05 [ 2] 101 ldw y, (0x05, sp)
+ 000049 17 13 [ 2] 102 ldw (0x13, sp), y
+ 00004B 1E 15 [ 2] 103 ldw x, (0x15, sp)
+ 00004D 26 13 [ 1] 104 jrne 00102$
+ 105 ; ../_fsdiv.c: 297: fl2.l = 0x7FC00000;
+ 00004F 1E 13 [ 2] 106 ldw x, (0x13, sp)
+ 000051 26 0F [ 1] 107 jrne 00102$
+ 000053 1F 07 [ 2] 108 ldw (0x07, sp), x
+ 000055 AE 7F C0 [ 2] 109 ldw x, #0x7fc0
+ 000058 1F 05 [ 2] 110 ldw (0x05, sp), x
+ 111 ; ../_fsdiv.c: 298: return (fl2.f);
+ 00005A 1E 07 [ 2] 112 ldw x, (0x07, sp)
+ 00005C 16 05 [ 2] 113 ldw y, (0x05, sp)
+ 00005E ACs00r01rD8 [ 2] 114 jpf 00118$
+ 000062 115 00102$:
+ 116 ; ../_fsdiv.c: 302: if (!fl1.l)
+ 000062 1E 03 [ 2] 117 ldw x, (0x03, sp)
+ 000064 16 01 [ 2] 118 ldw y, (0x01, sp)
+ 000066 5D [ 2] 119 tnzw x
+ 000067 26 0B [ 1] 120 jrne 00104$
+ 000069 90 5D [ 2] 121 tnzw y
+ 00006B 26 07 [ 1] 122 jrne 00104$
+ 123 ; ../_fsdiv.c: 303: return (0);
+ 00006D 5F [ 1] 124 clrw x
+ 00006E 90 5F [ 1] 125 clrw y
+ 000070 ACs00r01rD8 [ 2] 126 jpf 00118$
+ 000074 127 00104$:
+ 128 ; ../_fsdiv.c: 306: mant1 = MANT (fl1.l);
+ 000074 16 03 [ 2] 129 ldw y, (0x03, sp)
+ 000076 1E 01 [ 2] 130 ldw x, (0x01, sp)
+ 000078 9F [ 1] 131 ld a, xl
+ 000079 A4 7F [ 1] 132 and a, #0x7f
+ 00007B 97 [ 1] 133 ld xl, a
+ 00007C 4F [ 1] 134 clr a
+ 00007D 01 [ 1] 135 rrwa x
+ 00007E AA 80 [ 1] 136 or a, #0x80
+ 000080 97 [ 1] 137 ld xl, a
+ 000081 17 21 [ 2] 138 ldw (0x21, sp), y
+ 000083 1F 1F [ 2] 139 ldw (0x1f, sp), x
+ 140 ; ../_fsdiv.c: 307: mant2 = MANT (fl2.l);
+ 000085 16 07 [ 2] 141 ldw y, (0x07, sp)
+ 000087 1E 05 [ 2] 142 ldw x, (0x05, sp)
+ 000089 9F [ 1] 143 ld a, xl
+ 00008A A4 7F [ 1] 144 and a, #0x7f
+ 00008C 97 [ 1] 145 ld xl, a
+ 00008D 4F [ 1] 146 clr a
+ 00008E 01 [ 1] 147 rrwa x
+ 00008F AA 80 [ 1] 148 or a, #0x80
+ 000091 97 [ 1] 149 ld xl, a
+ 000092 17 0B [ 2] 150 ldw (0x0b, sp), y
+ 000094 1F 09 [ 2] 151 ldw (0x09, sp), x
+ 152 ; ../_fsdiv.c: 310: if (mant1 < mant2)
+ 000096 1E 21 [ 2] 153 ldw x, (0x21, sp)
+ 000098 13 0B [ 2] 154 cpw x, (0x0b, sp)
+ 00009A 7B 20 [ 1] 155 ld a, (0x20, sp)
+ 00009C 12 0A [ 1] 156 sbc a, (0x0a, sp)
+ 00009E 7B 1F [ 1] 157 ld a, (0x1f, sp)
+ 0000A0 12 09 [ 1] 158 sbc a, (0x09, sp)
+ 0000A2 2E 0D [ 1] 159 jrsge 00106$
+ 160 ; ../_fsdiv.c: 312: mant1 <<= 1;
+ 0000A4 08 22 [ 1] 161 sll (0x22, sp)
+ 0000A6 09 21 [ 1] 162 rlc (0x21, sp)
+ 0000A8 09 20 [ 1] 163 rlc (0x20, sp)
+ 0000AA 09 1F [ 1] 164 rlc (0x1f, sp)
+ 165 ; ../_fsdiv.c: 313: exp--;
+ 0000AC 1E 0D [ 2] 166 ldw x, (0x0d, sp)
+ 0000AE 5A [ 2] 167 decw x
+ 0000AF 1F 0D [ 2] 168 ldw (0x0d, sp), x
+ 0000B1 169 00106$:
+ 170 ; ../_fsdiv.c: 317: mask = 0x1000000;
+ 0000B1 5F [ 1] 171 clrw x
+ 0000B2 1F 1D [ 2] 172 ldw (0x1d, sp), x
+ 0000B4 AE 01 00 [ 2] 173 ldw x, #0x0100
+ 0000B7 1F 1B [ 2] 174 ldw (0x1b, sp), x
+ 175 ; ../_fsdiv.c: 318: result = 0;
+ 0000B9 5F [ 1] 176 clrw x
+ 0000BA 1F 19 [ 2] 177 ldw (0x19, sp), x
+ 0000BC 1F 17 [ 2] 178 ldw (0x17, sp), x
+ 179 ; ../_fsdiv.c: 319: while (mask)
+ 0000BE 180 00109$:
+ 0000BE 1E 1D [ 2] 181 ldw x, (0x1d, sp)
+ 0000C0 26 04 [ 1] 182 jrne 00179$
+ 0000C2 1E 1B [ 2] 183 ldw x, (0x1b, sp)
+ 0000C4 27 4C [ 1] 184 jreq 00111$
+ 0000C6 185 00179$:
+ 186 ; ../_fsdiv.c: 321: if (mant1 >= mant2)
+ 0000C6 1E 21 [ 2] 187 ldw x, (0x21, sp)
+ 0000C8 13 0B [ 2] 188 cpw x, (0x0b, sp)
+ 0000CA 7B 20 [ 1] 189 ld a, (0x20, sp)
+ 0000CC 12 0A [ 1] 190 sbc a, (0x0a, sp)
+ 0000CE 7B 1F [ 1] 191 ld a, (0x1f, sp)
+ 0000D0 12 09 [ 1] 192 sbc a, (0x09, sp)
+ 0000D2 2F 2C [ 1] 193 jrslt 00108$
+ 194 ; ../_fsdiv.c: 323: result |= mask;
+ 0000D4 1E 19 [ 2] 195 ldw x, (0x19, sp)
+ 0000D6 16 17 [ 2] 196 ldw y, (0x17, sp)
+ 0000D8 9F [ 1] 197 ld a, xl
+ 0000D9 1A 1E [ 1] 198 or a, (0x1e, sp)
+ 0000DB 02 [ 1] 199 rlwa x
+ 0000DC 1A 1D [ 1] 200 or a, (0x1d, sp)
+ 0000DE 95 [ 1] 201 ld xh, a
+ 0000DF 90 9F [ 1] 202 ld a, yl
+ 0000E1 1A 1C [ 1] 203 or a, (0x1c, sp)
+ 0000E3 90 02 [ 1] 204 rlwa y
+ 0000E5 1A 1B [ 1] 205 or a, (0x1b, sp)
+ 0000E7 90 95 [ 1] 206 ld yh, a
+ 0000E9 1F 19 [ 2] 207 ldw (0x19, sp), x
+ 0000EB 17 17 [ 2] 208 ldw (0x17, sp), y
+ 209 ; ../_fsdiv.c: 324: mant1 -= mant2;
+ 0000ED 16 21 [ 2] 210 ldw y, (0x21, sp)
+ 0000EF 72 F2 0B [ 2] 211 subw y, (0x0b, sp)
+ 0000F2 7B 20 [ 1] 212 ld a, (0x20, sp)
+ 0000F4 12 0A [ 1] 213 sbc a, (0x0a, sp)
+ 0000F6 97 [ 1] 214 ld xl, a
+ 0000F7 7B 1F [ 1] 215 ld a, (0x1f, sp)
+ 0000F9 12 09 [ 1] 216 sbc a, (0x09, sp)
+ 0000FB 95 [ 1] 217 ld xh, a
+ 0000FC 17 21 [ 2] 218 ldw (0x21, sp), y
+ 0000FE 1F 1F [ 2] 219 ldw (0x1f, sp), x
+ 000100 220 00108$:
+ 221 ; ../_fsdiv.c: 326: mant1 <<= 1;
+ 000100 08 22 [ 1] 222 sll (0x22, sp)
+ 000102 09 21 [ 1] 223 rlc (0x21, sp)
+ 000104 09 20 [ 1] 224 rlc (0x20, sp)
+ 000106 09 1F [ 1] 225 rlc (0x1f, sp)
+ 226 ; ../_fsdiv.c: 327: mask >>= 1;
+ 000108 04 1B [ 1] 227 srl (0x1b, sp)
+ 00010A 06 1C [ 1] 228 rrc (0x1c, sp)
+ 00010C 06 1D [ 1] 229 rrc (0x1d, sp)
+ 00010E 06 1E [ 1] 230 rrc (0x1e, sp)
+ 000110 20 AC [ 2] 231 jra 00109$
+ 000112 232 00111$:
+ 233 ; ../_fsdiv.c: 331: result += 1;
+ 000112 1E 19 [ 2] 234 ldw x, (0x19, sp)
+ 000114 1C 00 01 [ 2] 235 addw x, #0x0001
+ 000117 16 17 [ 2] 236 ldw y, (0x17, sp)
+ 000119 24 02 [ 1] 237 jrnc 00181$
+ 00011B 90 5C [ 1] 238 incw y
+ 00011D 239 00181$:
+ 00011D 1F 19 [ 2] 240 ldw (0x19, sp), x
+ 00011F 17 17 [ 2] 241 ldw (0x17, sp), y
+ 242 ; ../_fsdiv.c: 334: exp++;
+ 000121 1E 0D [ 2] 243 ldw x, (0x0d, sp)
+ 000123 5C [ 1] 244 incw x
+ 000124 1F 0D [ 2] 245 ldw (0x0d, sp), x
+ 246 ; ../_fsdiv.c: 335: result >>= 1;
+ 000126 07 17 [ 1] 247 sra (0x17, sp)
+ 000128 06 18 [ 1] 248 rrc (0x18, sp)
+ 00012A 06 19 [ 1] 249 rrc (0x19, sp)
+ 00012C 06 1A [ 1] 250 rrc (0x1a, sp)
+ 251 ; ../_fsdiv.c: 337: result &= ~HIDDEN;
+ 00012E 16 19 [ 2] 252 ldw y, (0x19, sp)
+ 000130 7B 18 [ 1] 253 ld a, (0x18, sp)
+ 000132 A4 7F [ 1] 254 and a, #0x7f
+ 000134 97 [ 1] 255 ld xl, a
+ 000135 7B 17 [ 1] 256 ld a, (0x17, sp)
+ 000137 95 [ 1] 257 ld xh, a
+ 000138 17 19 [ 2] 258 ldw (0x19, sp), y
+ 00013A 1F 17 [ 2] 259 ldw (0x17, sp), x
+ 260 ; ../_fsdiv.c: 340: if (exp >= 0x100)
+ 00013C 1E 0D [ 2] 261 ldw x, (0x0d, sp)
+ 00013E A3 01 00 [ 2] 262 cpw x, #0x0100
+ 000141 2F 29 [ 1] 263 jrslt 00116$
+ 264 ; ../_fsdiv.c: 341: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY;
+ 000143 0D 12 [ 1] 265 tnz (0x12, sp)
+ 000145 27 09 [ 1] 266 jreq 00120$
+ 000147 5F [ 1] 267 clrw x
+ 000148 1F 15 [ 2] 268 ldw (0x15, sp), x
+ 00014A 0F 14 [ 1] 269 clr (0x14, sp)
+ 00014C A6 80 [ 1] 270 ld a, #0x80
+ 00014E 20 06 [ 2] 271 jra 00121$
+ 000150 272 00120$:
+ 000150 5F [ 1] 273 clrw x
+ 000151 1F 15 [ 2] 274 ldw (0x15, sp), x
+ 000153 0F 14 [ 1] 275 clr (0x14, sp)
+ 000155 4F [ 1] 276 clr a
+ 000156 277 00121$:
+ 000156 AA 7F [ 1] 278 or a, #0x7f
+ 000158 90 95 [ 1] 279 ld yh, a
+ 00015A 7B 16 [ 1] 280 ld a, (0x16, sp)
+ 00015C 97 [ 1] 281 ld xl, a
+ 00015D 7B 15 [ 1] 282 ld a, (0x15, sp)
+ 00015F 95 [ 1] 283 ld xh, a
+ 000160 7B 14 [ 1] 284 ld a, (0x14, sp)
+ 000162 AA 80 [ 1] 285 or a, #0x80
+ 000164 90 97 [ 1] 286 ld yl, a
+ 000166 1F 03 [ 2] 287 ldw (0x03, sp), x
+ 000168 17 01 [ 2] 288 ldw (0x01, sp), y
+ 00016A 20 68 [ 2] 289 jra 00117$
+ 00016C 290 00116$:
+ 291 ; ../_fsdiv.c: 342: else if (exp < 0)
+ 00016C 0D 0D [ 1] 292 tnz (0x0d, sp)
+ 00016E 2A 07 [ 1] 293 jrpl 00113$
+ 294 ; ../_fsdiv.c: 343: fl1.l = 0;
+ 000170 5F [ 1] 295 clrw x
+ 000171 1F 03 [ 2] 296 ldw (0x03, sp), x
+ 000173 1F 01 [ 2] 297 ldw (0x01, sp), x
+ 000175 20 5D [ 2] 298 jra 00117$
+ 000177 299 00113$:
+ 300 ; ../_fsdiv.c: 345: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result);
+ 000177 0D 12 [ 1] 301 tnz (0x12, sp)
+ 000179 27 0A [ 1] 302 jreq 00122$
+ 00017B 5F [ 1] 303 clrw x
+ 00017C 1F 15 [ 2] 304 ldw (0x15, sp), x
+ 00017E AE 80 00 [ 2] 305 ldw x, #0x8000
+ 000181 1F 13 [ 2] 306 ldw (0x13, sp), x
+ 000183 20 05 [ 2] 307 jra 00123$
+ 000185 308 00122$:
+ 000185 5F [ 1] 309 clrw x
+ 000186 1F 15 [ 2] 310 ldw (0x15, sp), x
+ 000188 1F 13 [ 2] 311 ldw (0x13, sp), x
+ 00018A 312 00123$:
+ 00018A 16 0D [ 2] 313 ldw y, (0x0d, sp)
+ 00018C 5F [ 1] 314 clrw x
+ 00018D 90 5D [ 2] 315 tnzw y
+ 00018F 2A 01 [ 1] 316 jrpl 00186$
+ 000191 5A [ 2] 317 decw x
+ 000192 318 00186$:
+ 000192 5F [ 1] 319 clrw x
+ 000193 A6 07 [ 1] 320 ld a, #0x07
+ 000195 321 00187$:
+ 000195 90 58 [ 2] 322 sllw y
+ 000197 4A [ 1] 323 dec a
+ 000198 26 FB [ 1] 324 jrne 00187$
+ 00019A 9F [ 1] 325 ld a, xl
+ 00019B 1A 16 [ 1] 326 or a, (0x16, sp)
+ 00019D 6B 12 [ 1] 327 ld (0x12, sp), a
+ 00019F 9E [ 1] 328 ld a, xh
+ 0001A0 1A 15 [ 1] 329 or a, (0x15, sp)
+ 0001A2 6B 11 [ 1] 330 ld (0x11, sp), a
+ 0001A4 90 9F [ 1] 331 ld a, yl
+ 0001A6 1A 14 [ 1] 332 or a, (0x14, sp)
+ 0001A8 6B 10 [ 1] 333 ld (0x10, sp), a
+ 0001AA 90 9E [ 1] 334 ld a, yh
+ 0001AC 1A 13 [ 1] 335 or a, (0x13, sp)
+ 0001AE 16 19 [ 2] 336 ldw y, (0x19, sp)
+ 0001B0 17 15 [ 2] 337 ldw (0x15, sp), y
+ 0001B2 16 17 [ 2] 338 ldw y, (0x17, sp)
+ 0001B4 90 89 [ 2] 339 pushw y
+ 0001B6 1A 01 [ 1] 340 or a, (1, sp)
+ 0001B8 90 85 [ 2] 341 popw y
+ 0001BA 90 95 [ 1] 342 ld yh, a
+ 0001BC 7B 12 [ 1] 343 ld a, (0x12, sp)
+ 0001BE 1A 16 [ 1] 344 or a, (0x16, sp)
+ 0001C0 97 [ 1] 345 ld xl, a
+ 0001C1 7B 11 [ 1] 346 ld a, (0x11, sp)
+ 0001C3 1A 15 [ 1] 347 or a, (0x15, sp)
+ 0001C5 95 [ 1] 348 ld xh, a
+ 0001C6 90 89 [ 2] 349 pushw y
+ 0001C8 7B 12 [ 1] 350 ld a, (0x12, sp)
+ 0001CA 1A 02 [ 1] 351 or a, (2, sp)
+ 0001CC 90 85 [ 2] 352 popw y
+ 0001CE 90 97 [ 1] 353 ld yl, a
+ 0001D0 1F 03 [ 2] 354 ldw (0x03, sp), x
+ 0001D2 17 01 [ 2] 355 ldw (0x01, sp), y
+ 0001D4 356 00117$:
+ 357 ; ../_fsdiv.c: 346: return (fl1.f);
+ 0001D4 1E 03 [ 2] 358 ldw x, (0x03, sp)
+ 0001D6 16 01 [ 2] 359 ldw y, (0x01, sp)
+ 0001D8 360 00118$:
+ 361 ; ../_fsdiv.c: 347: }
+ 0001D8 5B 22 [ 2] 362 addw sp, #34
+ 0001DA 87 [ 5] 363 retf
+ 364 ; ../_fsdiv.c: 349: float __fsdiv (float a1, float a2)
+ 365 ; -----------------------------------------
+ 366 ; function __fsdiv
+ 367 ; -----------------------------------------
+ 0001DB 368 ___fsdiv:
+ 0001DB 52 06 [ 2] 369 sub sp, #6
+ 370 ; ../_fsdiv.c: 352: unsigned long *p = (unsigned long *) &f;
+ 0001DD 96 [ 1] 371 ldw x, sp
+ 0001DE 5C [ 1] 372 incw x
+ 0001DF 1F 05 [ 2] 373 ldw (0x05, sp), x
+ 374 ; ../_fsdiv.c: 354: if (a2 == 0.0f && a1 > 0.0f)
+ 0001E1 1E 10 [ 2] 375 ldw x, (0x10, sp)
+ 0001E3 26 25 [ 1] 376 jrne 00110$
+ 0001E5 1E 0E [ 2] 377 ldw x, (0x0e, sp)
+ 0001E7 58 [ 2] 378 sllw x
+ 0001E8 26 20 [ 1] 379 jrne 00110$
+ 0001EA 1E 0C [ 2] 380 ldw x, (0x0c, sp)
+ 0001EC 89 [ 2] 381 pushw x
+ 0001ED 1E 0C [ 2] 382 ldw x, (0x0c, sp)
+ 0001EF 89 [ 2] 383 pushw x
+ 0001F0 5F [ 1] 384 clrw x
+ 0001F1 89 [ 2] 385 pushw x
+ 0001F2 5F [ 1] 386 clrw x
+ 0001F3 89 [ 2] 387 pushw x
+ 0001F4 8Ds00r00r00 [ 5] 388 callf ___fslt
+ 0001F8 5B 08 [ 2] 389 addw sp, #8
+ 0001FA 4D [ 1] 390 tnz a
+ 0001FB 27 0D [ 1] 391 jreq 00110$
+ 392 ; ../_fsdiv.c: 355: *p = 0x7f800000; // inf
+ 0001FD 1E 05 [ 2] 393 ldw x, (0x05, sp)
+ 0001FF 6F 03 [ 1] 394 clr (0x3, x)
+ 000201 6F 02 [ 1] 395 clr (0x2, x)
+ 000203 90 AE 7F 80 [ 2] 396 ldw y, #0x7f80
+ 000207 FF [ 2] 397 ldw (x), y
+ 000208 20 5E [ 2] 398 jra 00111$
+ 00020A 399 00110$:
+ 400 ; ../_fsdiv.c: 356: else if (a2 == 0.0f && a1 < 0.0f)
+ 00020A 1E 10 [ 2] 401 ldw x, (0x10, sp)
+ 00020C 26 25 [ 1] 402 jrne 00106$
+ 00020E 1E 0E [ 2] 403 ldw x, (0x0e, sp)
+ 000210 58 [ 2] 404 sllw x
+ 000211 26 20 [ 1] 405 jrne 00106$
+ 000213 5F [ 1] 406 clrw x
+ 000214 89 [ 2] 407 pushw x
+ 000215 5F [ 1] 408 clrw x
+ 000216 89 [ 2] 409 pushw x
+ 000217 1E 10 [ 2] 410 ldw x, (0x10, sp)
+ 000219 89 [ 2] 411 pushw x
+ 00021A 1E 10 [ 2] 412 ldw x, (0x10, sp)
+ 00021C 89 [ 2] 413 pushw x
+ 00021D 8Ds00r00r00 [ 5] 414 callf ___fslt
+ 000221 5B 08 [ 2] 415 addw sp, #8
+ 000223 4D [ 1] 416 tnz a
+ 000224 27 0D [ 1] 417 jreq 00106$
+ 418 ; ../_fsdiv.c: 357: *p = 0xff800000; // -inf
+ 000226 1E 05 [ 2] 419 ldw x, (0x05, sp)
+ 000228 6F 03 [ 1] 420 clr (0x3, x)
+ 00022A 6F 02 [ 1] 421 clr (0x2, x)
+ 00022C 90 AE FF 80 [ 2] 422 ldw y, #0xff80
+ 000230 FF [ 2] 423 ldw (x), y
+ 000231 20 35 [ 2] 424 jra 00111$
+ 000233 425 00106$:
+ 426 ; ../_fsdiv.c: 358: else if (a2 == 0.0f && a1 == 0.0f)
+ 000233 1E 10 [ 2] 427 ldw x, (0x10, sp)
+ 000235 26 1B [ 1] 428 jrne 00102$
+ 000237 1E 0E [ 2] 429 ldw x, (0x0e, sp)
+ 000239 58 [ 2] 430 sllw x
+ 00023A 26 16 [ 1] 431 jrne 00102$
+ 00023C 1E 0C [ 2] 432 ldw x, (0x0c, sp)
+ 00023E 26 12 [ 1] 433 jrne 00102$
+ 000240 1E 0A [ 2] 434 ldw x, (0x0a, sp)
+ 000242 58 [ 2] 435 sllw x
+ 000243 26 0D [ 1] 436 jrne 00102$
+ 437 ; ../_fsdiv.c: 359: *p = 0xffc00000; // nan
+ 000245 1E 05 [ 2] 438 ldw x, (0x05, sp)
+ 000247 6F 03 [ 1] 439 clr (0x3, x)
+ 000249 6F 02 [ 1] 440 clr (0x2, x)
+ 00024B 90 AE FF C0 [ 2] 441 ldw y, #0xffc0
+ 00024F FF [ 2] 442 ldw (x), y
+ 000250 20 16 [ 2] 443 jra 00111$
+ 000252 444 00102$:
+ 445 ; ../_fsdiv.c: 361: f = __fsdiv_org (a1, a2);
+ 000252 1E 10 [ 2] 446 ldw x, (0x10, sp)
+ 000254 89 [ 2] 447 pushw x
+ 000255 1E 10 [ 2] 448 ldw x, (0x10, sp)
+ 000257 89 [ 2] 449 pushw x
+ 000258 1E 10 [ 2] 450 ldw x, (0x10, sp)
+ 00025A 89 [ 2] 451 pushw x
+ 00025B 1E 10 [ 2] 452 ldw x, (0x10, sp)
+ 00025D 89 [ 2] 453 pushw x
+ 00025E 8Ds00r00r00 [ 5] 454 callf ___fsdiv_org
+ 000262 5B 08 [ 2] 455 addw sp, #8
+ 000264 1F 03 [ 2] 456 ldw (0x03, sp), x
+ 000266 17 01 [ 2] 457 ldw (0x01, sp), y
+ 000268 458 00111$:
+ 459 ; ../_fsdiv.c: 363: return f;
+ 000268 1E 03 [ 2] 460 ldw x, (0x03, sp)
+ 00026A 16 01 [ 2] 461 ldw y, (0x01, sp)
+ 462 ; ../_fsdiv.c: 364: }
+ 00026C 5B 06 [ 2] 463 addw sp, #6
+ 00026E 87 [ 5] 464 retf
+ 465 .area CODE
+ 466 .area CONST
+ 467 .area INITIALIZER
+ 468 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsdiv.rel b/device/lib/stm8-large/_fsdiv.rel
new file mode 100644
index 0000000..8f33887
--- /dev/null
+++ b/device/lib/stm8-large/_fsdiv.rel
@@ -0,0 +1,184 @@
+XH3
+H B areas 3 global symbols
+M _fsdiv
+O -mstm8
+S ___fslt Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 26F flags 0 addr 0
+S ___fsdiv Def0001DB
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 22 16 28 17 03 16 26 17 01 16 2C 17
+R 00 00 00 09
+T 00 00 0D 07 16 2A 17 05 1E 01 A6 80 62 4F 95 1F
+R 00 00 00 09
+T 00 00 1A 0D 1E 05 A6 80 62 9F 6B 16 0F 15 1E 0D
+R 00 00 00 09
+T 00 00 27 72 F0 15 1F 0D 1C 00 7E 1F 15 1F 0D 1E
+R 00 00 00 09
+T 00 00 34 01 58 4F 49 6B 16 1E 05 58 4F 49 18 16
+R 00 00 00 09
+T 00 00 41 6B 12 16 07 17 15 16 05 17 13 1E 15 26
+R 00 00 00 09
+T 00 00 4E 13 1E 13 26 0F 1F 07 AE 7F C0 1F 05 1E
+R 00 00 00 09
+T 00 00 5B 07 16 05 AC 00 01 D8
+R 00 00 00 09 80 07 00 09
+T 00 00 62
+R 00 00 00 09
+T 00 00 62 1E 03 16 01 5D 26 0B 90 5D 26 07 5F 90
+R 00 00 00 09
+T 00 00 6F 5F AC 00 01 D8
+R 00 00 00 09 80 05 00 09
+T 00 00 74
+R 00 00 00 09
+T 00 00 74 16 03 1E 01 9F A4 7F 97 4F 01 AA 80 97
+R 00 00 00 09
+T 00 00 81 17 21 1F 1F 16 07 1E 05 9F A4 7F 97 4F
+R 00 00 00 09
+T 00 00 8E 01 AA 80 97 17 0B 1F 09 1E 21 13 0B 7B
+R 00 00 00 09
+T 00 00 9B 20 12 0A 7B 1F 12 09 2E 0D 08 22 09 21
+R 00 00 00 09
+T 00 00 A8 09 20 09 1F 1E 0D 5A 1F 0D
+R 00 00 00 09
+T 00 00 B1
+R 00 00 00 09
+T 00 00 B1 5F 1F 1D AE 01 00 1F 1B 5F 1F 19 1F 17
+R 00 00 00 09
+T 00 00 BE
+R 00 00 00 09
+T 00 00 BE 1E 1D 26 04 1E 1B 27 4C
+R 00 00 00 09
+T 00 00 C6
+R 00 00 00 09
+T 00 00 C6 1E 21 13 0B 7B 20 12 0A 7B 1F 12 09 2F
+R 00 00 00 09
+T 00 00 D3 2C 1E 19 16 17 9F 1A 1E 02 1A 1D 95 90
+R 00 00 00 09
+T 00 00 E0 9F 1A 1C 90 02 1A 1B 90 95 1F 19 17 17
+R 00 00 00 09
+T 00 00 ED 16 21 72 F2 0B 7B 20 12 0A 97 7B 1F 12
+R 00 00 00 09
+T 00 00 FA 09 95 17 21 1F 1F
+R 00 00 00 09
+T 00 01 00
+R 00 00 00 09
+T 00 01 00 08 22 09 21 09 20 09 1F 04 1B 06 1C 06
+R 00 00 00 09
+T 00 01 0D 1D 06 1E 20 AC
+R 00 00 00 09
+T 00 01 12
+R 00 00 00 09
+T 00 01 12 1E 19 1C 00 01 16 17 24 02 90 5C
+R 00 00 00 09
+T 00 01 1D
+R 00 00 00 09
+T 00 01 1D 1F 19 17 17 1E 0D 5C 1F 0D 07 17 06 18
+R 00 00 00 09
+T 00 01 2A 06 19 06 1A 16 19 7B 18 A4 7F 97 7B 17
+R 00 00 00 09
+T 00 01 37 95 17 19 1F 17 1E 0D A3 01 00 2F 29 0D
+R 00 00 00 09
+T 00 01 44 12 27 09 5F 1F 15 0F 14 A6 80 20 06
+R 00 00 00 09
+T 00 01 50
+R 00 00 00 09
+T 00 01 50 5F 1F 15 0F 14 4F
+R 00 00 00 09
+T 00 01 56
+R 00 00 00 09
+T 00 01 56 AA 7F 90 95 7B 16 97 7B 15 95 7B 14 AA
+R 00 00 00 09
+T 00 01 63 80 90 97 1F 03 17 01 20 68
+R 00 00 00 09
+T 00 01 6C
+R 00 00 00 09
+T 00 01 6C 0D 0D 2A 07 5F 1F 03 1F 01 20 5D
+R 00 00 00 09
+T 00 01 77
+R 00 00 00 09
+T 00 01 77 0D 12 27 0A 5F 1F 15 AE 80 00 1F 13 20
+R 00 00 00 09
+T 00 01 84 05
+R 00 00 00 09
+T 00 01 85
+R 00 00 00 09
+T 00 01 85 5F 1F 15 1F 13
+R 00 00 00 09
+T 00 01 8A
+R 00 00 00 09
+T 00 01 8A 16 0D 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 01 92
+R 00 00 00 09
+T 00 01 92 5F A6 07
+R 00 00 00 09
+T 00 01 95
+R 00 00 00 09
+T 00 01 95 90 58 4A 26 FB 9F 1A 16 6B 12 9E 1A 15
+R 00 00 00 09
+T 00 01 A2 6B 11 90 9F 1A 14 6B 10 90 9E 1A 13 16
+R 00 00 00 09
+T 00 01 AF 19 17 15 16 17 90 89 1A 01 90 85 90 95
+R 00 00 00 09
+T 00 01 BC 7B 12 1A 16 97 7B 11 1A 15 95 90 89 7B
+R 00 00 00 09
+T 00 01 C9 12 1A 02 90 85 90 97 1F 03 17 01
+R 00 00 00 09
+T 00 01 D4
+R 00 00 00 09
+T 00 01 D4 1E 03 16 01
+R 00 00 00 09
+T 00 01 D8
+R 00 00 00 09
+T 00 01 D8 5B 22 87
+R 00 00 00 09
+T 00 01 DB
+R 00 00 00 09
+T 00 01 DB 52 06 96 5C 1F 05 1E 10 26 25 1E 0E 58
+R 00 00 00 09
+T 00 01 E8 26 20 1E 0C 89 1E 0C 89 5F 89 5F 89 8D
+R 00 00 00 09
+T 00 01 F5 00 00 00 5B 08 4D 27 0D 1E 05 6F 03 6F
+R 00 00 00 09 82 03 00 00
+T 00 02 02 02 90 AE 7F 80 FF 20 5E
+R 00 00 00 09
+T 00 02 0A
+R 00 00 00 09
+T 00 02 0A 1E 10 26 25 1E 0E 58 26 20 5F 89 5F 89
+R 00 00 00 09
+T 00 02 17 1E 10 89 1E 10 89 8D 00 00 00 5B 08 4D
+R 00 00 00 09 82 0A 00 00
+T 00 02 24 27 0D 1E 05 6F 03 6F 02 90 AE FF 80 FF
+R 00 00 00 09
+T 00 02 31 20 35
+R 00 00 00 09
+T 00 02 33
+R 00 00 00 09
+T 00 02 33 1E 10 26 1B 1E 0E 58 26 16 1E 0C 26 12
+R 00 00 00 09
+T 00 02 40 1E 0A 58 26 0D 1E 05 6F 03 6F 02 90 AE
+R 00 00 00 09
+T 00 02 4D FF C0 FF 20 16
+R 00 00 00 09
+T 00 02 52
+R 00 00 00 09
+T 00 02 52 1E 10 89 1E 10 89 1E 10 89 1E 10 89 8D
+R 00 00 00 09
+T 00 02 5F 00 00 00 5B 08 1F 03 17 01
+R 00 00 00 09 80 03 00 09
+T 00 02 68
+R 00 00 00 09
+T 00 02 68 1E 03 16 01 5B 06 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fsdiv.sym b/device/lib/stm8-large/_fsdiv.sym
new file mode 100644
index 0000000..c727008
--- /dev/null
+++ b/device/lib/stm8-large/_fsdiv.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fsdiv 0001DB GR
+ 9 ___fsdiv_org 000000 R
+ ___fslt ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 26F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fseq.asm b/device/lib/stm8-large/_fseq.asm
new file mode 100644
index 0000000..859ddf6
--- /dev/null
+++ b/device/lib/stm8-large/_fseq.asm
@@ -0,0 +1,118 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fseq
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fseq
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fseq.c: 83: __fseq (float a1, float a2)
+; -----------------------------------------
+; function __fseq
+; -----------------------------------------
+___fseq:
+ sub sp, #16
+; ../_fseq.c: 87: fl1.f = a1;
+ ldw y, (0x16, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x14, sp)
+ ldw (0x01, sp), y
+; ../_fseq.c: 88: fl2.f = a2;
+ ldw y, (0x1a, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x18, sp)
+ ldw (0x05, sp), y
+; ../_fseq.c: 90: if (fl1.l == fl2.l)
+ ldw y, (0x03, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x07, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x05, sp)
+ ldw x, (0x0b, sp)
+ cpw x, (0x0f, sp)
+ jrne 00102$
+ ldw x, y
+ cpw x, (0x09, sp)
+ jrne 00102$
+; ../_fseq.c: 91: return (1);
+ ld a, #0x01
+ jra 00105$
+00102$:
+; ../_fseq.c: 92: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0)
+ ldw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+ ld a, xl
+ or a, (0x10, sp)
+ rlwa x
+ or a, (0x0f, sp)
+ ld xh, a
+ ld a, yl
+ or a, (0x0e, sp)
+ rlwa y
+ or a, (0x0d, sp)
+ and a, #0x7f
+ ld yh, a
+ tnzw x
+ jrne 00104$
+ tnzw y
+ jrne 00104$
+; ../_fseq.c: 93: return (1);
+ ld a, #0x01
+; ../_fseq.c: 94: return (0);
+ .byte 0x21
+00104$:
+ clr a
+00105$:
+; ../_fseq.c: 95: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fseq.lst b/device/lib/stm8-large/_fseq.lst
new file mode 100644
index 0000000..4bdfe91
--- /dev/null
+++ b/device/lib/stm8-large/_fseq.lst
@@ -0,0 +1,118 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fseq
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fseq
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fseq.c: 83: __fseq (float a1, float a2)
+ 50 ; -----------------------------------------
+ 51 ; function __fseq
+ 52 ; -----------------------------------------
+ 000000 53 ___fseq:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_fseq.c: 87: fl1.f = a1;
+ 000002 16 16 [ 2] 56 ldw y, (0x16, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 14 [ 2] 58 ldw y, (0x14, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../_fseq.c: 88: fl2.f = a2;
+ 00000A 16 1A [ 2] 61 ldw y, (0x1a, sp)
+ 00000C 17 07 [ 2] 62 ldw (0x07, sp), y
+ 00000E 16 18 [ 2] 63 ldw y, (0x18, sp)
+ 000010 17 05 [ 2] 64 ldw (0x05, sp), y
+ 65 ; ../_fseq.c: 90: if (fl1.l == fl2.l)
+ 000012 16 03 [ 2] 66 ldw y, (0x03, sp)
+ 000014 17 0B [ 2] 67 ldw (0x0b, sp), y
+ 000016 16 01 [ 2] 68 ldw y, (0x01, sp)
+ 000018 17 09 [ 2] 69 ldw (0x09, sp), y
+ 00001A 16 07 [ 2] 70 ldw y, (0x07, sp)
+ 00001C 17 0F [ 2] 71 ldw (0x0f, sp), y
+ 00001E 16 05 [ 2] 72 ldw y, (0x05, sp)
+ 000020 1E 0B [ 2] 73 ldw x, (0x0b, sp)
+ 000022 13 0F [ 2] 74 cpw x, (0x0f, sp)
+ 000024 26 09 [ 1] 75 jrne 00102$
+ 000026 93 [ 1] 76 ldw x, y
+ 000027 13 09 [ 2] 77 cpw x, (0x09, sp)
+ 000029 26 04 [ 1] 78 jrne 00102$
+ 79 ; ../_fseq.c: 91: return (1);
+ 00002B A6 01 [ 1] 80 ld a, #0x01
+ 00002D 20 2A [ 2] 81 jra 00105$
+ 00002F 82 00102$:
+ 83 ; ../_fseq.c: 92: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0)
+ 00002F 16 03 [ 2] 84 ldw y, (0x03, sp)
+ 000031 17 0F [ 2] 85 ldw (0x0f, sp), y
+ 000033 16 01 [ 2] 86 ldw y, (0x01, sp)
+ 000035 17 0D [ 2] 87 ldw (0x0d, sp), y
+ 000037 1E 07 [ 2] 88 ldw x, (0x07, sp)
+ 000039 16 05 [ 2] 89 ldw y, (0x05, sp)
+ 00003B 9F [ 1] 90 ld a, xl
+ 00003C 1A 10 [ 1] 91 or a, (0x10, sp)
+ 00003E 02 [ 1] 92 rlwa x
+ 00003F 1A 0F [ 1] 93 or a, (0x0f, sp)
+ 000041 95 [ 1] 94 ld xh, a
+ 000042 90 9F [ 1] 95 ld a, yl
+ 000044 1A 0E [ 1] 96 or a, (0x0e, sp)
+ 000046 90 02 [ 1] 97 rlwa y
+ 000048 1A 0D [ 1] 98 or a, (0x0d, sp)
+ 00004A A4 7F [ 1] 99 and a, #0x7f
+ 00004C 90 95 [ 1] 100 ld yh, a
+ 00004E 5D [ 2] 101 tnzw x
+ 00004F 26 07 [ 1] 102 jrne 00104$
+ 000051 90 5D [ 2] 103 tnzw y
+ 000053 26 03 [ 1] 104 jrne 00104$
+ 105 ; ../_fseq.c: 93: return (1);
+ 000055 A6 01 [ 1] 106 ld a, #0x01
+ 107 ; ../_fseq.c: 94: return (0);
+ 000057 21 108 .byte 0x21
+ 000058 109 00104$:
+ 000058 4F [ 1] 110 clr a
+ 000059 111 00105$:
+ 112 ; ../_fseq.c: 95: }
+ 000059 5B 10 [ 2] 113 addw sp, #16
+ 00005B 87 [ 5] 114 retf
+ 115 .area CODE
+ 116 .area CONST
+ 117 .area INITIALIZER
+ 118 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fseq.rel b/device/lib/stm8-large/_fseq.rel
new file mode 100644
index 0000000..7dc0a1c
--- /dev/null
+++ b/device/lib/stm8-large/_fseq.rel
@@ -0,0 +1,45 @@
+XH3
+H B areas 2 global symbols
+M _fseq
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 5C flags 0 addr 0
+S ___fseq Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 16 16 17 03 16 14 17 01 16 1A 17
+R 00 00 00 09
+T 00 00 0D 07 16 18 17 05 16 03 17 0B 16 01 17 09
+R 00 00 00 09
+T 00 00 1A 16 07 17 0F 16 05 1E 0B 13 0F 26 09 93
+R 00 00 00 09
+T 00 00 27 13 09 26 04 A6 01 20 2A
+R 00 00 00 09
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F 16 03 17 0F 16 01 17 0D 1E 07 16 05 9F
+R 00 00 00 09
+T 00 00 3C 1A 10 02 1A 0F 95 90 9F 1A 0E 90 02 1A
+R 00 00 00 09
+T 00 00 49 0D A4 7F 90 95 5D 26 07 90 5D 26 03 A6
+R 00 00 00 09
+T 00 00 56 01 21
+R 00 00 00 09
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 4F
+R 00 00 00 09
+T 00 00 59
+R 00 00 00 09
+T 00 00 59 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fseq.sym b/device/lib/stm8-large/_fseq.sym
new file mode 100644
index 0000000..1a8dd70
--- /dev/null
+++ b/device/lib/stm8-large/_fseq.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fseq 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 5C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fslt.asm b/device/lib/stm8-large/_fslt.asm
new file mode 100644
index 0000000..91d462f
--- /dev/null
+++ b/device/lib/stm8-large/_fslt.asm
@@ -0,0 +1,163 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fslt
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fslt
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fslt.c: 108: char __fslt (float a1, float a2)
+; -----------------------------------------
+; function __fslt
+; -----------------------------------------
+___fslt:
+ sub sp, #16
+; ../_fslt.c: 112: fl1.f = a1;
+ ldw y, (0x16, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x14, sp)
+ ldw (0x01, sp), y
+; ../_fslt.c: 113: fl2.f = a2;
+ ldw y, (0x1a, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x18, sp)
+ ldw (0x05, sp), y
+; ../_fslt.c: 115: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0)
+ ldw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+ ld a, xl
+ or a, (0x10, sp)
+ ld (0x0c, sp), a
+ ld a, xh
+ or a, (0x0f, sp)
+ ld (0x0b, sp), a
+ ld a, yl
+ or a, (0x0e, sp)
+ ld (0x0a, sp), a
+ ld a, yh
+ or a, (0x0d, sp)
+ and a, #0x7f
+ ld (0x0d, sp), a
+ ldw y, (0x0b, sp)
+ ldw (0x0f, sp), y
+ ld a, (0x0a, sp)
+ ld (0x0e, sp), a
+ ldw x, (0x0f, sp)
+ jrne 00102$
+ ldw x, (0x0d, sp)
+ jrne 00102$
+; ../_fslt.c: 116: return (0);
+ clr a
+ jra 00110$
+00102$:
+; ../_fslt.c: 118: if (fl1.l<0 && fl2.l<0) {
+ ldw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0d, sp), y
+ tnz (0x0d, sp)
+ jrpl 00106$
+ ldw y, (0x07, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x0d, sp), y
+ tnz (0x0d, sp)
+ jrpl 00106$
+; ../_fslt.c: 119: if (fl2.l < fl1.l)
+ ldw y, (0x07, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x0b, sp)
+ cpw x, (0x0f, sp)
+ ld a, (0x0a, sp)
+ sbc a, (0x0e, sp)
+ ld a, (0x09, sp)
+ sbc a, (0x0d, sp)
+ jrsge 00104$
+; ../_fslt.c: 120: return (1);
+ ld a, #0x01
+ jra 00110$
+00104$:
+; ../_fslt.c: 121: return (0);
+ clr a
+ jra 00110$
+00106$:
+; ../_fslt.c: 124: if (fl1.l < fl2.l)
+ ldw y, (0x03, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x07, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x0b, sp)
+ cpw x, (0x0f, sp)
+ ld a, (0x0a, sp)
+ sbc a, (0x0e, sp)
+ ld a, (0x09, sp)
+ sbc a, (0x0d, sp)
+ jrsge 00109$
+; ../_fslt.c: 125: return (1);
+ ld a, #0x01
+; ../_fslt.c: 126: return (0);
+ .byte 0x21
+00109$:
+ clr a
+00110$:
+; ../_fslt.c: 127: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fslt.lst b/device/lib/stm8-large/_fslt.lst
new file mode 100644
index 0000000..b41efd2
--- /dev/null
+++ b/device/lib/stm8-large/_fslt.lst
@@ -0,0 +1,163 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fslt
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fslt
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fslt.c: 108: char __fslt (float a1, float a2)
+ 50 ; -----------------------------------------
+ 51 ; function __fslt
+ 52 ; -----------------------------------------
+ 000000 53 ___fslt:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_fslt.c: 112: fl1.f = a1;
+ 000002 16 16 [ 2] 56 ldw y, (0x16, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 14 [ 2] 58 ldw y, (0x14, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../_fslt.c: 113: fl2.f = a2;
+ 00000A 16 1A [ 2] 61 ldw y, (0x1a, sp)
+ 00000C 17 07 [ 2] 62 ldw (0x07, sp), y
+ 00000E 16 18 [ 2] 63 ldw y, (0x18, sp)
+ 000010 17 05 [ 2] 64 ldw (0x05, sp), y
+ 65 ; ../_fslt.c: 115: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0)
+ 000012 16 03 [ 2] 66 ldw y, (0x03, sp)
+ 000014 17 0F [ 2] 67 ldw (0x0f, sp), y
+ 000016 16 01 [ 2] 68 ldw y, (0x01, sp)
+ 000018 17 0D [ 2] 69 ldw (0x0d, sp), y
+ 00001A 1E 07 [ 2] 70 ldw x, (0x07, sp)
+ 00001C 16 05 [ 2] 71 ldw y, (0x05, sp)
+ 00001E 9F [ 1] 72 ld a, xl
+ 00001F 1A 10 [ 1] 73 or a, (0x10, sp)
+ 000021 6B 0C [ 1] 74 ld (0x0c, sp), a
+ 000023 9E [ 1] 75 ld a, xh
+ 000024 1A 0F [ 1] 76 or a, (0x0f, sp)
+ 000026 6B 0B [ 1] 77 ld (0x0b, sp), a
+ 000028 90 9F [ 1] 78 ld a, yl
+ 00002A 1A 0E [ 1] 79 or a, (0x0e, sp)
+ 00002C 6B 0A [ 1] 80 ld (0x0a, sp), a
+ 00002E 90 9E [ 1] 81 ld a, yh
+ 000030 1A 0D [ 1] 82 or a, (0x0d, sp)
+ 000032 A4 7F [ 1] 83 and a, #0x7f
+ 000034 6B 0D [ 1] 84 ld (0x0d, sp), a
+ 000036 16 0B [ 2] 85 ldw y, (0x0b, sp)
+ 000038 17 0F [ 2] 86 ldw (0x0f, sp), y
+ 00003A 7B 0A [ 1] 87 ld a, (0x0a, sp)
+ 00003C 6B 0E [ 1] 88 ld (0x0e, sp), a
+ 00003E 1E 0F [ 2] 89 ldw x, (0x0f, sp)
+ 000040 26 07 [ 1] 90 jrne 00102$
+ 000042 1E 0D [ 2] 91 ldw x, (0x0d, sp)
+ 000044 26 03 [ 1] 92 jrne 00102$
+ 93 ; ../_fslt.c: 116: return (0);
+ 000046 4F [ 1] 94 clr a
+ 000047 20 5F [ 2] 95 jra 00110$
+ 000049 96 00102$:
+ 97 ; ../_fslt.c: 118: if (fl1.l<0 && fl2.l<0) {
+ 000049 16 03 [ 2] 98 ldw y, (0x03, sp)
+ 00004B 17 0F [ 2] 99 ldw (0x0f, sp), y
+ 00004D 16 01 [ 2] 100 ldw y, (0x01, sp)
+ 00004F 17 0D [ 2] 101 ldw (0x0d, sp), y
+ 000051 0D 0D [ 1] 102 tnz (0x0d, sp)
+ 000053 2A 31 [ 1] 103 jrpl 00106$
+ 000055 16 07 [ 2] 104 ldw y, (0x07, sp)
+ 000057 17 0F [ 2] 105 ldw (0x0f, sp), y
+ 000059 16 05 [ 2] 106 ldw y, (0x05, sp)
+ 00005B 17 0D [ 2] 107 ldw (0x0d, sp), y
+ 00005D 0D 0D [ 1] 108 tnz (0x0d, sp)
+ 00005F 2A 25 [ 1] 109 jrpl 00106$
+ 110 ; ../_fslt.c: 119: if (fl2.l < fl1.l)
+ 000061 16 07 [ 2] 111 ldw y, (0x07, sp)
+ 000063 17 0B [ 2] 112 ldw (0x0b, sp), y
+ 000065 16 05 [ 2] 113 ldw y, (0x05, sp)
+ 000067 17 09 [ 2] 114 ldw (0x09, sp), y
+ 000069 16 03 [ 2] 115 ldw y, (0x03, sp)
+ 00006B 17 0F [ 2] 116 ldw (0x0f, sp), y
+ 00006D 16 01 [ 2] 117 ldw y, (0x01, sp)
+ 00006F 17 0D [ 2] 118 ldw (0x0d, sp), y
+ 000071 1E 0B [ 2] 119 ldw x, (0x0b, sp)
+ 000073 13 0F [ 2] 120 cpw x, (0x0f, sp)
+ 000075 7B 0A [ 1] 121 ld a, (0x0a, sp)
+ 000077 12 0E [ 1] 122 sbc a, (0x0e, sp)
+ 000079 7B 09 [ 1] 123 ld a, (0x09, sp)
+ 00007B 12 0D [ 1] 124 sbc a, (0x0d, sp)
+ 00007D 2E 04 [ 1] 125 jrsge 00104$
+ 126 ; ../_fslt.c: 120: return (1);
+ 00007F A6 01 [ 1] 127 ld a, #0x01
+ 000081 20 25 [ 2] 128 jra 00110$
+ 000083 129 00104$:
+ 130 ; ../_fslt.c: 121: return (0);
+ 000083 4F [ 1] 131 clr a
+ 000084 20 22 [ 2] 132 jra 00110$
+ 000086 133 00106$:
+ 134 ; ../_fslt.c: 124: if (fl1.l < fl2.l)
+ 000086 16 03 [ 2] 135 ldw y, (0x03, sp)
+ 000088 17 0B [ 2] 136 ldw (0x0b, sp), y
+ 00008A 16 01 [ 2] 137 ldw y, (0x01, sp)
+ 00008C 17 09 [ 2] 138 ldw (0x09, sp), y
+ 00008E 16 07 [ 2] 139 ldw y, (0x07, sp)
+ 000090 17 0F [ 2] 140 ldw (0x0f, sp), y
+ 000092 16 05 [ 2] 141 ldw y, (0x05, sp)
+ 000094 17 0D [ 2] 142 ldw (0x0d, sp), y
+ 000096 1E 0B [ 2] 143 ldw x, (0x0b, sp)
+ 000098 13 0F [ 2] 144 cpw x, (0x0f, sp)
+ 00009A 7B 0A [ 1] 145 ld a, (0x0a, sp)
+ 00009C 12 0E [ 1] 146 sbc a, (0x0e, sp)
+ 00009E 7B 09 [ 1] 147 ld a, (0x09, sp)
+ 0000A0 12 0D [ 1] 148 sbc a, (0x0d, sp)
+ 0000A2 2E 03 [ 1] 149 jrsge 00109$
+ 150 ; ../_fslt.c: 125: return (1);
+ 0000A4 A6 01 [ 1] 151 ld a, #0x01
+ 152 ; ../_fslt.c: 126: return (0);
+ 0000A6 21 153 .byte 0x21
+ 0000A7 154 00109$:
+ 0000A7 4F [ 1] 155 clr a
+ 0000A8 156 00110$:
+ 157 ; ../_fslt.c: 127: }
+ 0000A8 5B 10 [ 2] 158 addw sp, #16
+ 0000AA 87 [ 5] 159 retf
+ 160 .area CODE
+ 161 .area CONST
+ 162 .area INITIALIZER
+ 163 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fslt.rel b/device/lib/stm8-large/_fslt.rel
new file mode 100644
index 0000000..2be6a9a
--- /dev/null
+++ b/device/lib/stm8-large/_fslt.rel
@@ -0,0 +1,63 @@
+XH3
+H B areas 2 global symbols
+M _fslt
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size AB flags 0 addr 0
+S ___fslt Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 16 16 17 03 16 14 17 01 16 1A 17
+R 00 00 00 09
+T 00 00 0D 07 16 18 17 05 16 03 17 0F 16 01 17 0D
+R 00 00 00 09
+T 00 00 1A 1E 07 16 05 9F 1A 10 6B 0C 9E 1A 0F 6B
+R 00 00 00 09
+T 00 00 27 0B 90 9F 1A 0E 6B 0A 90 9E 1A 0D A4 7F
+R 00 00 00 09
+T 00 00 34 6B 0D 16 0B 17 0F 7B 0A 6B 0E 1E 0F 26
+R 00 00 00 09
+T 00 00 41 07 1E 0D 26 03 4F 20 5F
+R 00 00 00 09
+T 00 00 49
+R 00 00 00 09
+T 00 00 49 16 03 17 0F 16 01 17 0D 0D 0D 2A 31 16
+R 00 00 00 09
+T 00 00 56 07 17 0F 16 05 17 0D 0D 0D 2A 25 16 07
+R 00 00 00 09
+T 00 00 63 17 0B 16 05 17 09 16 03 17 0F 16 01 17
+R 00 00 00 09
+T 00 00 70 0D 1E 0B 13 0F 7B 0A 12 0E 7B 09 12 0D
+R 00 00 00 09
+T 00 00 7D 2E 04 A6 01 20 25
+R 00 00 00 09
+T 00 00 83
+R 00 00 00 09
+T 00 00 83 4F 20 22
+R 00 00 00 09
+T 00 00 86
+R 00 00 00 09
+T 00 00 86 16 03 17 0B 16 01 17 09 16 07 17 0F 16
+R 00 00 00 09
+T 00 00 93 05 17 0D 1E 0B 13 0F 7B 0A 12 0E 7B 09
+R 00 00 00 09
+T 00 00 A0 12 0D 2E 03 A6 01 21
+R 00 00 00 09
+T 00 00 A7
+R 00 00 00 09
+T 00 00 A7 4F
+R 00 00 00 09
+T 00 00 A8
+R 00 00 00 09
+T 00 00 A8 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fslt.sym b/device/lib/stm8-large/_fslt.sym
new file mode 100644
index 0000000..b090281
--- /dev/null
+++ b/device/lib/stm8-large/_fslt.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fslt 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size AB flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fsmul.asm b/device/lib/stm8-large/_fsmul.asm
new file mode 100644
index 0000000..3676fd1
--- /dev/null
+++ b/device/lib/stm8-large/_fsmul.asm
@@ -0,0 +1,391 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fsmul
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fsmul
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fsmul.c: 241: float __fsmul (float a1, float a2) {
+; -----------------------------------------
+; function __fsmul
+; -----------------------------------------
+___fsmul:
+ sub sp, #21
+; ../_fsmul.c: 247: fl1.f = a1;
+ ldw y, (0x1b, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x19, sp)
+ ldw (0x01, sp), y
+; ../_fsmul.c: 248: fl2.f = a2;
+ ldw y, (0x1f, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x1d, sp)
+ ldw (0x05, sp), y
+; ../_fsmul.c: 250: if (!fl1.l || !fl2.l)
+ ldw y, (0x03, sp)
+ ldw (0x14, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x12, sp), y
+ ldw x, (0x14, sp)
+ jrne 00149$
+ ldw x, (0x12, sp)
+ jreq 00101$
+00149$:
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+ tnzw x
+ jrne 00102$
+ tnzw y
+ jrne 00102$
+00101$:
+; ../_fsmul.c: 251: return (0);
+ clrw x
+ clrw y
+ jpf 00113$
+00102$:
+; ../_fsmul.c: 254: sign = SIGN (fl1.l) ^ SIGN (fl2.l);
+ ldw x, (0x01, sp)
+ sllw x
+ clr a
+ rlc a
+ ld (0x15, sp), a
+ ldw x, (0x05, sp)
+ sllw x
+ clr a
+ rlc a
+ xor a, (0x15, sp)
+ ld (0x0d, sp), a
+; ../_fsmul.c: 255: exp = EXP (fl1.l) - EXCESS;
+ ldw x, (0x01, sp)
+ ld a, #0x80
+ div x, a
+ clr a
+ ld xh, a
+ subw x, #0x007e
+ ldw (0x14, sp), x
+; ../_fsmul.c: 256: exp += EXP (fl2.l);
+ ldw x, (0x05, sp)
+ ld a, #0x80
+ div x, a
+ clr a
+ ld xh, a
+ addw x, (0x14, sp)
+ ldw (0x0e, sp), x
+; ../_fsmul.c: 258: fl1.l = MANT (fl1.l);
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ ld a, xl
+ and a, #0x7f
+ ld xl, a
+ clr a
+ rrwa x
+ or a, #0x80
+ ld xl, a
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../_fsmul.c: 259: fl2.l = MANT (fl2.l);
+ ldw y, (0x07, sp)
+ ldw x, (0x05, sp)
+ ld a, xl
+ and a, #0x7f
+ ld xl, a
+ clr a
+ rrwa x
+ or a, #0x80
+ ld xl, a
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+; ../_fsmul.c: 262: result = (unsigned long)((unsigned short)(fl1.l >> 8)) * (unsigned short)(fl2.l >> 8);
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ ld a, xl
+ rlwa y
+ ld (0x11, sp), a
+ rrwa y
+ ld (0x10, sp), a
+ ldw x, (0x07, sp)
+ ldw (0x14, sp), x
+ ldw x, (0x05, sp)
+ ld a, (0x14, sp)
+ ld (0x15, sp), a
+ ldw (0x13, sp), x
+ clr (0x12, sp)
+ ld a, (0x15, sp)
+ rlwa x
+ ld a, (0x14, sp)
+ rrwa x
+ ld xl, a
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___muluint2ulong
+ addw sp, #4
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../_fsmul.c: 263: result += ((unsigned long)((unsigned short)(fl1.l & 0xff)) * (unsigned short)(fl2.l >> 8)) >> 8;
+ ldw y, (0x03, sp)
+ clr a
+ ld yh, a
+ ldw x, (0x07, sp)
+ ldw (0x14, sp), x
+ ldw x, (0x05, sp)
+ ld a, (0x14, sp)
+ ld (0x15, sp), a
+ ldw (0x13, sp), x
+ clr (0x12, sp)
+ ld a, (0x15, sp)
+ rlwa x
+ ld a, (0x14, sp)
+ rrwa x
+ ld xl, a
+ pushw x
+ pushw y
+ callf ___muluint2ulong
+ addw sp, #4
+ ld a, xh
+ ld (0x15, sp), a
+ ldw (0x13, sp), y
+ clr (0x12, sp)
+ ldw x, (0x0b, sp)
+ addw x, (0x14, sp)
+ ldw y, (0x09, sp)
+ jrnc 00152$
+ incw y
+00152$:
+ addw y, (0x12, sp)
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../_fsmul.c: 264: result += ((unsigned long)((unsigned short)(fl2.l & 0xff)) * (unsigned short)(fl1.l >> 8)) >> 8;
+ ldw y, (0x07, sp)
+ clr a
+ ld yh, a
+ ldw x, (0x03, sp)
+ ldw (0x14, sp), x
+ ldw x, (0x01, sp)
+ ld a, (0x14, sp)
+ ld (0x15, sp), a
+ ldw (0x13, sp), x
+ clr (0x12, sp)
+ ld a, (0x15, sp)
+ rlwa x
+ ld a, (0x14, sp)
+ rrwa x
+ ld xl, a
+ pushw x
+ pushw y
+ callf ___muluint2ulong
+ addw sp, #4
+ ld a, xh
+ ld (0x15, sp), a
+ ldw (0x13, sp), y
+ clr (0x12, sp)
+ ldw x, (0x0b, sp)
+ addw x, (0x14, sp)
+ ldw y, (0x09, sp)
+ jrnc 00153$
+ incw y
+00153$:
+ addw y, (0x12, sp)
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../_fsmul.c: 267: result += 0x40;
+ ldw x, (0x0b, sp)
+ addw x, #0x0040
+ ldw y, (0x09, sp)
+ jrnc 00154$
+ incw y
+00154$:
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../_fsmul.c: 269: if (result & SIGNBIT)
+ tnz (0x09, sp)
+ jrpl 00105$
+; ../_fsmul.c: 272: result += 0x40;
+ ldw x, (0x0b, sp)
+ addw x, #0x0040
+ ldw y, (0x09, sp)
+ jrnc 00156$
+ incw y
+00156$:
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../_fsmul.c: 273: result >>= 8;
+ ldw y, (0x0a, sp)
+ ld a, (0x09, sp)
+ ld xl, a
+ clr a
+ ld xh, a
+ ldw (0x0b, sp), y
+ ldw (0x09, sp), x
+ jra 00106$
+00105$:
+; ../_fsmul.c: 277: result >>= 7;
+ ldw x, (0x0b, sp)
+ ldw y, (0x09, sp)
+ clr a
+ rrwa y
+ rrwa x
+ sll a
+ rlcw x
+ rlcw y
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../_fsmul.c: 278: exp--;
+ ldw x, (0x0e, sp)
+ decw x
+ ldw (0x0e, sp), x
+00106$:
+; ../_fsmul.c: 281: result &= ~HIDDEN;
+ ldw y, (0x0b, sp)
+ ld a, (0x0a, sp)
+ and a, #0x7f
+ ld xl, a
+ ld a, (0x09, sp)
+ ld xh, a
+ ldw (0x0b, sp), y
+ ldw (0x09, sp), x
+; ../_fsmul.c: 284: if (exp >= 0x100)
+ ldw x, (0x0e, sp)
+ cpw x, #0x0100
+ jrslt 00111$
+; ../_fsmul.c: 285: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY;
+ tnz (0x0d, sp)
+ jreq 00115$
+ clrw x
+ ldw (0x14, sp), x
+ clr (0x13, sp)
+ ld a, #0x80
+ jra 00116$
+00115$:
+ clrw x
+ ldw (0x14, sp), x
+ clr (0x13, sp)
+ clr a
+00116$:
+ or a, #0x7f
+ ld yh, a
+ ld a, (0x15, sp)
+ ld xl, a
+ ld a, (0x14, sp)
+ ld xh, a
+ ld a, (0x13, sp)
+ or a, #0x80
+ ld yl, a
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+ jra 00112$
+00111$:
+; ../_fsmul.c: 286: else if (exp < 0)
+ tnz (0x0e, sp)
+ jrpl 00108$
+; ../_fsmul.c: 287: fl1.l = 0;
+ clrw x
+ ldw (0x03, sp), x
+ ldw (0x01, sp), x
+ jra 00112$
+00108$:
+; ../_fsmul.c: 289: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result);
+ tnz (0x0d, sp)
+ jreq 00117$
+ clrw x
+ ldw (0x14, sp), x
+ ldw x, #0x8000
+ ldw (0x12, sp), x
+ jra 00118$
+00117$:
+ clrw x
+ ldw (0x14, sp), x
+ ldw (0x12, sp), x
+00118$:
+ ldw y, (0x0e, sp)
+ clrw x
+ tnzw y
+ jrpl 00161$
+ decw x
+00161$:
+ ld a, yl
+ clrw x
+ push a
+ ld a, #0x07
+00162$:
+ sll (1, sp)
+ rlwa y
+ rlc a
+ rrwa y
+ dec a
+ jrne 00162$
+ pop a
+ or a, (0x13, sp)
+ ld yl, a
+ ld a, xl
+ or a, (0x15, sp)
+ rlwa x
+ or a, (0x14, sp)
+ ld xh, a
+ ld a, yh
+ or a, (0x12, sp)
+ or a, (0x09, sp)
+ ld yh, a
+ ld a, xl
+ or a, (0x0c, sp)
+ rlwa x
+ or a, (0x0b, sp)
+ ld xh, a
+ ld a, yl
+ or a, (0x0a, sp)
+ ld yl, a
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+00112$:
+; ../_fsmul.c: 290: return (fl1.f);
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+00113$:
+; ../_fsmul.c: 291: }
+ addw sp, #21
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsmul.lst b/device/lib/stm8-large/_fsmul.lst
new file mode 100644
index 0000000..5bcfd52
--- /dev/null
+++ b/device/lib/stm8-large/_fsmul.lst
@@ -0,0 +1,391 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fsmul
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fsmul
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fsmul.c: 241: float __fsmul (float a1, float a2) {
+ 50 ; -----------------------------------------
+ 51 ; function __fsmul
+ 52 ; -----------------------------------------
+ 000000 53 ___fsmul:
+ 000000 52 15 [ 2] 54 sub sp, #21
+ 55 ; ../_fsmul.c: 247: fl1.f = a1;
+ 000002 16 1B [ 2] 56 ldw y, (0x1b, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 19 [ 2] 58 ldw y, (0x19, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../_fsmul.c: 248: fl2.f = a2;
+ 00000A 16 1F [ 2] 61 ldw y, (0x1f, sp)
+ 00000C 17 07 [ 2] 62 ldw (0x07, sp), y
+ 00000E 16 1D [ 2] 63 ldw y, (0x1d, sp)
+ 000010 17 05 [ 2] 64 ldw (0x05, sp), y
+ 65 ; ../_fsmul.c: 250: if (!fl1.l || !fl2.l)
+ 000012 16 03 [ 2] 66 ldw y, (0x03, sp)
+ 000014 17 14 [ 2] 67 ldw (0x14, sp), y
+ 000016 16 01 [ 2] 68 ldw y, (0x01, sp)
+ 000018 17 12 [ 2] 69 ldw (0x12, sp), y
+ 00001A 1E 14 [ 2] 70 ldw x, (0x14, sp)
+ 00001C 26 04 [ 1] 71 jrne 00149$
+ 00001E 1E 12 [ 2] 72 ldw x, (0x12, sp)
+ 000020 27 0B [ 1] 73 jreq 00101$
+ 000022 74 00149$:
+ 000022 1E 07 [ 2] 75 ldw x, (0x07, sp)
+ 000024 16 05 [ 2] 76 ldw y, (0x05, sp)
+ 000026 5D [ 2] 77 tnzw x
+ 000027 26 0B [ 1] 78 jrne 00102$
+ 000029 90 5D [ 2] 79 tnzw y
+ 00002B 26 07 [ 1] 80 jrne 00102$
+ 00002D 81 00101$:
+ 82 ; ../_fsmul.c: 251: return (0);
+ 00002D 5F [ 1] 83 clrw x
+ 00002E 90 5F [ 1] 84 clrw y
+ 000030 ACs00r02r07 [ 2] 85 jpf 00113$
+ 000034 86 00102$:
+ 87 ; ../_fsmul.c: 254: sign = SIGN (fl1.l) ^ SIGN (fl2.l);
+ 000034 1E 01 [ 2] 88 ldw x, (0x01, sp)
+ 000036 58 [ 2] 89 sllw x
+ 000037 4F [ 1] 90 clr a
+ 000038 49 [ 1] 91 rlc a
+ 000039 6B 15 [ 1] 92 ld (0x15, sp), a
+ 00003B 1E 05 [ 2] 93 ldw x, (0x05, sp)
+ 00003D 58 [ 2] 94 sllw x
+ 00003E 4F [ 1] 95 clr a
+ 00003F 49 [ 1] 96 rlc a
+ 000040 18 15 [ 1] 97 xor a, (0x15, sp)
+ 000042 6B 0D [ 1] 98 ld (0x0d, sp), a
+ 99 ; ../_fsmul.c: 255: exp = EXP (fl1.l) - EXCESS;
+ 000044 1E 01 [ 2] 100 ldw x, (0x01, sp)
+ 000046 A6 80 [ 1] 101 ld a, #0x80
+ 000048 62 [ 2] 102 div x, a
+ 000049 4F [ 1] 103 clr a
+ 00004A 95 [ 1] 104 ld xh, a
+ 00004B 1D 00 7E [ 2] 105 subw x, #0x007e
+ 00004E 1F 14 [ 2] 106 ldw (0x14, sp), x
+ 107 ; ../_fsmul.c: 256: exp += EXP (fl2.l);
+ 000050 1E 05 [ 2] 108 ldw x, (0x05, sp)
+ 000052 A6 80 [ 1] 109 ld a, #0x80
+ 000054 62 [ 2] 110 div x, a
+ 000055 4F [ 1] 111 clr a
+ 000056 95 [ 1] 112 ld xh, a
+ 000057 72 FB 14 [ 2] 113 addw x, (0x14, sp)
+ 00005A 1F 0E [ 2] 114 ldw (0x0e, sp), x
+ 115 ; ../_fsmul.c: 258: fl1.l = MANT (fl1.l);
+ 00005C 16 03 [ 2] 116 ldw y, (0x03, sp)
+ 00005E 1E 01 [ 2] 117 ldw x, (0x01, sp)
+ 000060 9F [ 1] 118 ld a, xl
+ 000061 A4 7F [ 1] 119 and a, #0x7f
+ 000063 97 [ 1] 120 ld xl, a
+ 000064 4F [ 1] 121 clr a
+ 000065 01 [ 1] 122 rrwa x
+ 000066 AA 80 [ 1] 123 or a, #0x80
+ 000068 97 [ 1] 124 ld xl, a
+ 000069 17 03 [ 2] 125 ldw (0x03, sp), y
+ 00006B 1F 01 [ 2] 126 ldw (0x01, sp), x
+ 127 ; ../_fsmul.c: 259: fl2.l = MANT (fl2.l);
+ 00006D 16 07 [ 2] 128 ldw y, (0x07, sp)
+ 00006F 1E 05 [ 2] 129 ldw x, (0x05, sp)
+ 000071 9F [ 1] 130 ld a, xl
+ 000072 A4 7F [ 1] 131 and a, #0x7f
+ 000074 97 [ 1] 132 ld xl, a
+ 000075 4F [ 1] 133 clr a
+ 000076 01 [ 1] 134 rrwa x
+ 000077 AA 80 [ 1] 135 or a, #0x80
+ 000079 97 [ 1] 136 ld xl, a
+ 00007A 17 07 [ 2] 137 ldw (0x07, sp), y
+ 00007C 1F 05 [ 2] 138 ldw (0x05, sp), x
+ 139 ; ../_fsmul.c: 262: result = (unsigned long)((unsigned short)(fl1.l >> 8)) * (unsigned short)(fl2.l >> 8);
+ 00007E 16 03 [ 2] 140 ldw y, (0x03, sp)
+ 000080 1E 01 [ 2] 141 ldw x, (0x01, sp)
+ 000082 9F [ 1] 142 ld a, xl
+ 000083 90 02 [ 1] 143 rlwa y
+ 000085 6B 11 [ 1] 144 ld (0x11, sp), a
+ 000087 90 01 [ 1] 145 rrwa y
+ 000089 6B 10 [ 1] 146 ld (0x10, sp), a
+ 00008B 1E 07 [ 2] 147 ldw x, (0x07, sp)
+ 00008D 1F 14 [ 2] 148 ldw (0x14, sp), x
+ 00008F 1E 05 [ 2] 149 ldw x, (0x05, sp)
+ 000091 7B 14 [ 1] 150 ld a, (0x14, sp)
+ 000093 6B 15 [ 1] 151 ld (0x15, sp), a
+ 000095 1F 13 [ 2] 152 ldw (0x13, sp), x
+ 000097 0F 12 [ 1] 153 clr (0x12, sp)
+ 000099 7B 15 [ 1] 154 ld a, (0x15, sp)
+ 00009B 02 [ 1] 155 rlwa x
+ 00009C 7B 14 [ 1] 156 ld a, (0x14, sp)
+ 00009E 01 [ 1] 157 rrwa x
+ 00009F 97 [ 1] 158 ld xl, a
+ 0000A0 89 [ 2] 159 pushw x
+ 0000A1 1E 12 [ 2] 160 ldw x, (0x12, sp)
+ 0000A3 89 [ 2] 161 pushw x
+ 0000A4 8Ds00r00r00 [ 5] 162 callf ___muluint2ulong
+ 0000A8 5B 04 [ 2] 163 addw sp, #4
+ 0000AA 1F 0B [ 2] 164 ldw (0x0b, sp), x
+ 0000AC 17 09 [ 2] 165 ldw (0x09, sp), y
+ 166 ; ../_fsmul.c: 263: result += ((unsigned long)((unsigned short)(fl1.l & 0xff)) * (unsigned short)(fl2.l >> 8)) >> 8;
+ 0000AE 16 03 [ 2] 167 ldw y, (0x03, sp)
+ 0000B0 4F [ 1] 168 clr a
+ 0000B1 90 95 [ 1] 169 ld yh, a
+ 0000B3 1E 07 [ 2] 170 ldw x, (0x07, sp)
+ 0000B5 1F 14 [ 2] 171 ldw (0x14, sp), x
+ 0000B7 1E 05 [ 2] 172 ldw x, (0x05, sp)
+ 0000B9 7B 14 [ 1] 173 ld a, (0x14, sp)
+ 0000BB 6B 15 [ 1] 174 ld (0x15, sp), a
+ 0000BD 1F 13 [ 2] 175 ldw (0x13, sp), x
+ 0000BF 0F 12 [ 1] 176 clr (0x12, sp)
+ 0000C1 7B 15 [ 1] 177 ld a, (0x15, sp)
+ 0000C3 02 [ 1] 178 rlwa x
+ 0000C4 7B 14 [ 1] 179 ld a, (0x14, sp)
+ 0000C6 01 [ 1] 180 rrwa x
+ 0000C7 97 [ 1] 181 ld xl, a
+ 0000C8 89 [ 2] 182 pushw x
+ 0000C9 90 89 [ 2] 183 pushw y
+ 0000CB 8Ds00r00r00 [ 5] 184 callf ___muluint2ulong
+ 0000CF 5B 04 [ 2] 185 addw sp, #4
+ 0000D1 9E [ 1] 186 ld a, xh
+ 0000D2 6B 15 [ 1] 187 ld (0x15, sp), a
+ 0000D4 17 13 [ 2] 188 ldw (0x13, sp), y
+ 0000D6 0F 12 [ 1] 189 clr (0x12, sp)
+ 0000D8 1E 0B [ 2] 190 ldw x, (0x0b, sp)
+ 0000DA 72 FB 14 [ 2] 191 addw x, (0x14, sp)
+ 0000DD 16 09 [ 2] 192 ldw y, (0x09, sp)
+ 0000DF 24 02 [ 1] 193 jrnc 00152$
+ 0000E1 90 5C [ 1] 194 incw y
+ 0000E3 195 00152$:
+ 0000E3 72 F9 12 [ 2] 196 addw y, (0x12, sp)
+ 0000E6 1F 0B [ 2] 197 ldw (0x0b, sp), x
+ 0000E8 17 09 [ 2] 198 ldw (0x09, sp), y
+ 199 ; ../_fsmul.c: 264: result += ((unsigned long)((unsigned short)(fl2.l & 0xff)) * (unsigned short)(fl1.l >> 8)) >> 8;
+ 0000EA 16 07 [ 2] 200 ldw y, (0x07, sp)
+ 0000EC 4F [ 1] 201 clr a
+ 0000ED 90 95 [ 1] 202 ld yh, a
+ 0000EF 1E 03 [ 2] 203 ldw x, (0x03, sp)
+ 0000F1 1F 14 [ 2] 204 ldw (0x14, sp), x
+ 0000F3 1E 01 [ 2] 205 ldw x, (0x01, sp)
+ 0000F5 7B 14 [ 1] 206 ld a, (0x14, sp)
+ 0000F7 6B 15 [ 1] 207 ld (0x15, sp), a
+ 0000F9 1F 13 [ 2] 208 ldw (0x13, sp), x
+ 0000FB 0F 12 [ 1] 209 clr (0x12, sp)
+ 0000FD 7B 15 [ 1] 210 ld a, (0x15, sp)
+ 0000FF 02 [ 1] 211 rlwa x
+ 000100 7B 14 [ 1] 212 ld a, (0x14, sp)
+ 000102 01 [ 1] 213 rrwa x
+ 000103 97 [ 1] 214 ld xl, a
+ 000104 89 [ 2] 215 pushw x
+ 000105 90 89 [ 2] 216 pushw y
+ 000107 8Ds00r00r00 [ 5] 217 callf ___muluint2ulong
+ 00010B 5B 04 [ 2] 218 addw sp, #4
+ 00010D 9E [ 1] 219 ld a, xh
+ 00010E 6B 15 [ 1] 220 ld (0x15, sp), a
+ 000110 17 13 [ 2] 221 ldw (0x13, sp), y
+ 000112 0F 12 [ 1] 222 clr (0x12, sp)
+ 000114 1E 0B [ 2] 223 ldw x, (0x0b, sp)
+ 000116 72 FB 14 [ 2] 224 addw x, (0x14, sp)
+ 000119 16 09 [ 2] 225 ldw y, (0x09, sp)
+ 00011B 24 02 [ 1] 226 jrnc 00153$
+ 00011D 90 5C [ 1] 227 incw y
+ 00011F 228 00153$:
+ 00011F 72 F9 12 [ 2] 229 addw y, (0x12, sp)
+ 000122 1F 0B [ 2] 230 ldw (0x0b, sp), x
+ 000124 17 09 [ 2] 231 ldw (0x09, sp), y
+ 232 ; ../_fsmul.c: 267: result += 0x40;
+ 000126 1E 0B [ 2] 233 ldw x, (0x0b, sp)
+ 000128 1C 00 40 [ 2] 234 addw x, #0x0040
+ 00012B 16 09 [ 2] 235 ldw y, (0x09, sp)
+ 00012D 24 02 [ 1] 236 jrnc 00154$
+ 00012F 90 5C [ 1] 237 incw y
+ 000131 238 00154$:
+ 000131 1F 0B [ 2] 239 ldw (0x0b, sp), x
+ 000133 17 09 [ 2] 240 ldw (0x09, sp), y
+ 241 ; ../_fsmul.c: 269: if (result & SIGNBIT)
+ 000135 0D 09 [ 1] 242 tnz (0x09, sp)
+ 000137 2A 1C [ 1] 243 jrpl 00105$
+ 244 ; ../_fsmul.c: 272: result += 0x40;
+ 000139 1E 0B [ 2] 245 ldw x, (0x0b, sp)
+ 00013B 1C 00 40 [ 2] 246 addw x, #0x0040
+ 00013E 16 09 [ 2] 247 ldw y, (0x09, sp)
+ 000140 24 02 [ 1] 248 jrnc 00156$
+ 000142 90 5C [ 1] 249 incw y
+ 000144 250 00156$:
+ 000144 1F 0B [ 2] 251 ldw (0x0b, sp), x
+ 000146 17 09 [ 2] 252 ldw (0x09, sp), y
+ 253 ; ../_fsmul.c: 273: result >>= 8;
+ 000148 16 0A [ 2] 254 ldw y, (0x0a, sp)
+ 00014A 7B 09 [ 1] 255 ld a, (0x09, sp)
+ 00014C 97 [ 1] 256 ld xl, a
+ 00014D 4F [ 1] 257 clr a
+ 00014E 95 [ 1] 258 ld xh, a
+ 00014F 17 0B [ 2] 259 ldw (0x0b, sp), y
+ 000151 1F 09 [ 2] 260 ldw (0x09, sp), x
+ 000153 20 15 [ 2] 261 jra 00106$
+ 000155 262 00105$:
+ 263 ; ../_fsmul.c: 277: result >>= 7;
+ 000155 1E 0B [ 2] 264 ldw x, (0x0b, sp)
+ 000157 16 09 [ 2] 265 ldw y, (0x09, sp)
+ 000159 4F [ 1] 266 clr a
+ 00015A 90 01 [ 1] 267 rrwa y
+ 00015C 01 [ 1] 268 rrwa x
+ 00015D 48 [ 1] 269 sll a
+ 00015E 59 [ 2] 270 rlcw x
+ 00015F 90 59 [ 2] 271 rlcw y
+ 000161 1F 0B [ 2] 272 ldw (0x0b, sp), x
+ 000163 17 09 [ 2] 273 ldw (0x09, sp), y
+ 274 ; ../_fsmul.c: 278: exp--;
+ 000165 1E 0E [ 2] 275 ldw x, (0x0e, sp)
+ 000167 5A [ 2] 276 decw x
+ 000168 1F 0E [ 2] 277 ldw (0x0e, sp), x
+ 00016A 278 00106$:
+ 279 ; ../_fsmul.c: 281: result &= ~HIDDEN;
+ 00016A 16 0B [ 2] 280 ldw y, (0x0b, sp)
+ 00016C 7B 0A [ 1] 281 ld a, (0x0a, sp)
+ 00016E A4 7F [ 1] 282 and a, #0x7f
+ 000170 97 [ 1] 283 ld xl, a
+ 000171 7B 09 [ 1] 284 ld a, (0x09, sp)
+ 000173 95 [ 1] 285 ld xh, a
+ 000174 17 0B [ 2] 286 ldw (0x0b, sp), y
+ 000176 1F 09 [ 2] 287 ldw (0x09, sp), x
+ 288 ; ../_fsmul.c: 284: if (exp >= 0x100)
+ 000178 1E 0E [ 2] 289 ldw x, (0x0e, sp)
+ 00017A A3 01 00 [ 2] 290 cpw x, #0x0100
+ 00017D 2F 29 [ 1] 291 jrslt 00111$
+ 292 ; ../_fsmul.c: 285: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY;
+ 00017F 0D 0D [ 1] 293 tnz (0x0d, sp)
+ 000181 27 09 [ 1] 294 jreq 00115$
+ 000183 5F [ 1] 295 clrw x
+ 000184 1F 14 [ 2] 296 ldw (0x14, sp), x
+ 000186 0F 13 [ 1] 297 clr (0x13, sp)
+ 000188 A6 80 [ 1] 298 ld a, #0x80
+ 00018A 20 06 [ 2] 299 jra 00116$
+ 00018C 300 00115$:
+ 00018C 5F [ 1] 301 clrw x
+ 00018D 1F 14 [ 2] 302 ldw (0x14, sp), x
+ 00018F 0F 13 [ 1] 303 clr (0x13, sp)
+ 000191 4F [ 1] 304 clr a
+ 000192 305 00116$:
+ 000192 AA 7F [ 1] 306 or a, #0x7f
+ 000194 90 95 [ 1] 307 ld yh, a
+ 000196 7B 15 [ 1] 308 ld a, (0x15, sp)
+ 000198 97 [ 1] 309 ld xl, a
+ 000199 7B 14 [ 1] 310 ld a, (0x14, sp)
+ 00019B 95 [ 1] 311 ld xh, a
+ 00019C 7B 13 [ 1] 312 ld a, (0x13, sp)
+ 00019E AA 80 [ 1] 313 or a, #0x80
+ 0001A0 90 97 [ 1] 314 ld yl, a
+ 0001A2 1F 03 [ 2] 315 ldw (0x03, sp), x
+ 0001A4 17 01 [ 2] 316 ldw (0x01, sp), y
+ 0001A6 20 5B [ 2] 317 jra 00112$
+ 0001A8 318 00111$:
+ 319 ; ../_fsmul.c: 286: else if (exp < 0)
+ 0001A8 0D 0E [ 1] 320 tnz (0x0e, sp)
+ 0001AA 2A 07 [ 1] 321 jrpl 00108$
+ 322 ; ../_fsmul.c: 287: fl1.l = 0;
+ 0001AC 5F [ 1] 323 clrw x
+ 0001AD 1F 03 [ 2] 324 ldw (0x03, sp), x
+ 0001AF 1F 01 [ 2] 325 ldw (0x01, sp), x
+ 0001B1 20 50 [ 2] 326 jra 00112$
+ 0001B3 327 00108$:
+ 328 ; ../_fsmul.c: 289: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result);
+ 0001B3 0D 0D [ 1] 329 tnz (0x0d, sp)
+ 0001B5 27 0A [ 1] 330 jreq 00117$
+ 0001B7 5F [ 1] 331 clrw x
+ 0001B8 1F 14 [ 2] 332 ldw (0x14, sp), x
+ 0001BA AE 80 00 [ 2] 333 ldw x, #0x8000
+ 0001BD 1F 12 [ 2] 334 ldw (0x12, sp), x
+ 0001BF 20 05 [ 2] 335 jra 00118$
+ 0001C1 336 00117$:
+ 0001C1 5F [ 1] 337 clrw x
+ 0001C2 1F 14 [ 2] 338 ldw (0x14, sp), x
+ 0001C4 1F 12 [ 2] 339 ldw (0x12, sp), x
+ 0001C6 340 00118$:
+ 0001C6 16 0E [ 2] 341 ldw y, (0x0e, sp)
+ 0001C8 5F [ 1] 342 clrw x
+ 0001C9 90 5D [ 2] 343 tnzw y
+ 0001CB 2A 01 [ 1] 344 jrpl 00161$
+ 0001CD 5A [ 2] 345 decw x
+ 0001CE 346 00161$:
+ 0001CE 90 9F [ 1] 347 ld a, yl
+ 0001D0 5F [ 1] 348 clrw x
+ 0001D1 88 [ 1] 349 push a
+ 0001D2 A6 07 [ 1] 350 ld a, #0x07
+ 0001D4 351 00162$:
+ 0001D4 08 01 [ 1] 352 sll (1, sp)
+ 0001D6 90 02 [ 1] 353 rlwa y
+ 0001D8 49 [ 1] 354 rlc a
+ 0001D9 90 01 [ 1] 355 rrwa y
+ 0001DB 4A [ 1] 356 dec a
+ 0001DC 26 F6 [ 1] 357 jrne 00162$
+ 0001DE 84 [ 1] 358 pop a
+ 0001DF 1A 13 [ 1] 359 or a, (0x13, sp)
+ 0001E1 90 97 [ 1] 360 ld yl, a
+ 0001E3 9F [ 1] 361 ld a, xl
+ 0001E4 1A 15 [ 1] 362 or a, (0x15, sp)
+ 0001E6 02 [ 1] 363 rlwa x
+ 0001E7 1A 14 [ 1] 364 or a, (0x14, sp)
+ 0001E9 95 [ 1] 365 ld xh, a
+ 0001EA 90 9E [ 1] 366 ld a, yh
+ 0001EC 1A 12 [ 1] 367 or a, (0x12, sp)
+ 0001EE 1A 09 [ 1] 368 or a, (0x09, sp)
+ 0001F0 90 95 [ 1] 369 ld yh, a
+ 0001F2 9F [ 1] 370 ld a, xl
+ 0001F3 1A 0C [ 1] 371 or a, (0x0c, sp)
+ 0001F5 02 [ 1] 372 rlwa x
+ 0001F6 1A 0B [ 1] 373 or a, (0x0b, sp)
+ 0001F8 95 [ 1] 374 ld xh, a
+ 0001F9 90 9F [ 1] 375 ld a, yl
+ 0001FB 1A 0A [ 1] 376 or a, (0x0a, sp)
+ 0001FD 90 97 [ 1] 377 ld yl, a
+ 0001FF 1F 03 [ 2] 378 ldw (0x03, sp), x
+ 000201 17 01 [ 2] 379 ldw (0x01, sp), y
+ 000203 380 00112$:
+ 381 ; ../_fsmul.c: 290: return (fl1.f);
+ 000203 1E 03 [ 2] 382 ldw x, (0x03, sp)
+ 000205 16 01 [ 2] 383 ldw y, (0x01, sp)
+ 000207 384 00113$:
+ 385 ; ../_fsmul.c: 291: }
+ 000207 5B 15 [ 2] 386 addw sp, #21
+ 000209 87 [ 5] 387 retf
+ 388 .area CODE
+ 389 .area CONST
+ 390 .area INITIALIZER
+ 391 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsmul.rel b/device/lib/stm8-large/_fsmul.rel
new file mode 100644
index 0000000..31699fd
--- /dev/null
+++ b/device/lib/stm8-large/_fsmul.rel
@@ -0,0 +1,158 @@
+XH3
+H B areas 3 global symbols
+M _fsmul
+O -mstm8
+S ___muluint2ulong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 20A flags 0 addr 0
+S ___fsmul Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 15 16 1B 17 03 16 19 17 01 16 1F 17
+R 00 00 00 09
+T 00 00 0D 07 16 1D 17 05 16 03 17 14 16 01 17 12
+R 00 00 00 09
+T 00 00 1A 1E 14 26 04 1E 12 27 0B
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 1E 07 16 05 5D 26 0B 90 5D 26 07
+R 00 00 00 09
+T 00 00 2D
+R 00 00 00 09
+T 00 00 2D 5F 90 5F AC 00 02 07
+R 00 00 00 09 80 07 00 09
+T 00 00 34
+R 00 00 00 09
+T 00 00 34 1E 01 58 4F 49 6B 15 1E 05 58 4F 49 18
+R 00 00 00 09
+T 00 00 41 15 6B 0D 1E 01 A6 80 62 4F 95 1D 00 7E
+R 00 00 00 09
+T 00 00 4E 1F 14 1E 05 A6 80 62 4F 95 72 FB 14 1F
+R 00 00 00 09
+T 00 00 5B 0E 16 03 1E 01 9F A4 7F 97 4F 01 AA 80
+R 00 00 00 09
+T 00 00 68 97 17 03 1F 01 16 07 1E 05 9F A4 7F 97
+R 00 00 00 09
+T 00 00 75 4F 01 AA 80 97 17 07 1F 05 16 03 1E 01
+R 00 00 00 09
+T 00 00 82 9F 90 02 6B 11 90 01 6B 10 1E 07 1F 14
+R 00 00 00 09
+T 00 00 8F 1E 05 7B 14 6B 15 1F 13 0F 12 7B 15 02
+R 00 00 00 09
+T 00 00 9C 7B 14 01 97 89 1E 12 89 8D
+R 00 00 00 09
+T 00 00 A5 00 00 00 5B 04 1F 0B 17 09 16 03 4F 90
+R 00 00 00 09 82 03 00 00
+T 00 00 B2 95 1E 07 1F 14 1E 05 7B 14 6B 15 1F 13
+R 00 00 00 09
+T 00 00 BF 0F 12 7B 15 02 7B 14 01 97 89 90 89 8D
+R 00 00 00 09
+T 00 00 CC 00 00 00 5B 04 9E 6B 15 17 13 0F 12 1E
+R 00 00 00 09 82 03 00 00
+T 00 00 D9 0B 72 FB 14 16 09 24 02 90 5C
+R 00 00 00 09
+T 00 00 E3
+R 00 00 00 09
+T 00 00 E3 72 F9 12 1F 0B 17 09 16 07 4F 90 95 1E
+R 00 00 00 09
+T 00 00 F0 03 1F 14 1E 01 7B 14 6B 15 1F 13 0F 12
+R 00 00 00 09
+T 00 00 FD 7B 15 02 7B 14 01 97 89 90 89 8D
+R 00 00 00 09
+T 00 01 08 00 00 00 5B 04 9E 6B 15 17 13 0F 12 1E
+R 00 00 00 09 82 03 00 00
+T 00 01 15 0B 72 FB 14 16 09 24 02 90 5C
+R 00 00 00 09
+T 00 01 1F
+R 00 00 00 09
+T 00 01 1F 72 F9 12 1F 0B 17 09 1E 0B 1C 00 40 16
+R 00 00 00 09
+T 00 01 2C 09 24 02 90 5C
+R 00 00 00 09
+T 00 01 31
+R 00 00 00 09
+T 00 01 31 1F 0B 17 09 0D 09 2A 1C 1E 0B 1C 00 40
+R 00 00 00 09
+T 00 01 3E 16 09 24 02 90 5C
+R 00 00 00 09
+T 00 01 44
+R 00 00 00 09
+T 00 01 44 1F 0B 17 09 16 0A 7B 09 97 4F 95 17 0B
+R 00 00 00 09
+T 00 01 51 1F 09 20 15
+R 00 00 00 09
+T 00 01 55
+R 00 00 00 09
+T 00 01 55 1E 0B 16 09 4F 90 01 01 48 59 90 59 1F
+R 00 00 00 09
+T 00 01 62 0B 17 09 1E 0E 5A 1F 0E
+R 00 00 00 09
+T 00 01 6A
+R 00 00 00 09
+T 00 01 6A 16 0B 7B 0A A4 7F 97 7B 09 95 17 0B 1F
+R 00 00 00 09
+T 00 01 77 09 1E 0E A3 01 00 2F 29 0D 0D 27 09 5F
+R 00 00 00 09
+T 00 01 84 1F 14 0F 13 A6 80 20 06
+R 00 00 00 09
+T 00 01 8C
+R 00 00 00 09
+T 00 01 8C 5F 1F 14 0F 13 4F
+R 00 00 00 09
+T 00 01 92
+R 00 00 00 09
+T 00 01 92 AA 7F 90 95 7B 15 97 7B 14 95 7B 13 AA
+R 00 00 00 09
+T 00 01 9F 80 90 97 1F 03 17 01 20 5B
+R 00 00 00 09
+T 00 01 A8
+R 00 00 00 09
+T 00 01 A8 0D 0E 2A 07 5F 1F 03 1F 01 20 50
+R 00 00 00 09
+T 00 01 B3
+R 00 00 00 09
+T 00 01 B3 0D 0D 27 0A 5F 1F 14 AE 80 00 1F 12 20
+R 00 00 00 09
+T 00 01 C0 05
+R 00 00 00 09
+T 00 01 C1
+R 00 00 00 09
+T 00 01 C1 5F 1F 14 1F 12
+R 00 00 00 09
+T 00 01 C6
+R 00 00 00 09
+T 00 01 C6 16 0E 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 01 CE
+R 00 00 00 09
+T 00 01 CE 90 9F 5F 88 A6 07
+R 00 00 00 09
+T 00 01 D4
+R 00 00 00 09
+T 00 01 D4 08 01 90 02 49 90 01 4A 26 F6 84 1A 13
+R 00 00 00 09
+T 00 01 E1 90 97 9F 1A 15 02 1A 14 95 90 9E 1A 12
+R 00 00 00 09
+T 00 01 EE 1A 09 90 95 9F 1A 0C 02 1A 0B 95 90 9F
+R 00 00 00 09
+T 00 01 FB 1A 0A 90 97 1F 03 17 01
+R 00 00 00 09
+T 00 02 03
+R 00 00 00 09
+T 00 02 03 1E 03 16 01
+R 00 00 00 09
+T 00 02 07
+R 00 00 00 09
+T 00 02 07 5B 15 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fsmul.sym b/device/lib/stm8-large/_fsmul.sym
new file mode 100644
index 0000000..16ce2ae
--- /dev/null
+++ b/device/lib/stm8-large/_fsmul.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fsmul 000000 GR
+ ___muluint2ulong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 20A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fsneq.asm b/device/lib/stm8-large/_fsneq.asm
new file mode 100644
index 0000000..4275d5a
--- /dev/null
+++ b/device/lib/stm8-large/_fsneq.asm
@@ -0,0 +1,118 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fsneq
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fsneq
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fsneq.c: 80: char __fsneq (float a1, float a2)
+; -----------------------------------------
+; function __fsneq
+; -----------------------------------------
+___fsneq:
+ sub sp, #16
+; ../_fsneq.c: 84: fl1.f = a1;
+ ldw y, (0x16, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x14, sp)
+ ldw (0x01, sp), y
+; ../_fsneq.c: 85: fl2.f = a2;
+ ldw y, (0x1a, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x18, sp)
+ ldw (0x05, sp), y
+; ../_fsneq.c: 87: if (fl1.l == fl2.l)
+ ldw y, (0x03, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x07, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x05, sp)
+ ldw x, (0x0b, sp)
+ cpw x, (0x0f, sp)
+ jrne 00102$
+ ldw x, y
+ cpw x, (0x09, sp)
+ jrne 00102$
+; ../_fsneq.c: 88: return (0);
+ clr a
+ jra 00105$
+00102$:
+; ../_fsneq.c: 89: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0)
+ ldw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+ ld a, xl
+ or a, (0x10, sp)
+ rlwa x
+ or a, (0x0f, sp)
+ ld xh, a
+ ld a, yl
+ or a, (0x0e, sp)
+ rlwa y
+ or a, (0x0d, sp)
+ and a, #0x7f
+ ld yh, a
+ tnzw x
+ jrne 00104$
+ tnzw y
+ jrne 00104$
+; ../_fsneq.c: 90: return (0);
+ clr a
+; ../_fsneq.c: 91: return (1);
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+; ../_fsneq.c: 92: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsneq.lst b/device/lib/stm8-large/_fsneq.lst
new file mode 100644
index 0000000..303ba11
--- /dev/null
+++ b/device/lib/stm8-large/_fsneq.lst
@@ -0,0 +1,118 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fsneq
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fsneq
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fsneq.c: 80: char __fsneq (float a1, float a2)
+ 50 ; -----------------------------------------
+ 51 ; function __fsneq
+ 52 ; -----------------------------------------
+ 000000 53 ___fsneq:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_fsneq.c: 84: fl1.f = a1;
+ 000002 16 16 [ 2] 56 ldw y, (0x16, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 14 [ 2] 58 ldw y, (0x14, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../_fsneq.c: 85: fl2.f = a2;
+ 00000A 16 1A [ 2] 61 ldw y, (0x1a, sp)
+ 00000C 17 07 [ 2] 62 ldw (0x07, sp), y
+ 00000E 16 18 [ 2] 63 ldw y, (0x18, sp)
+ 000010 17 05 [ 2] 64 ldw (0x05, sp), y
+ 65 ; ../_fsneq.c: 87: if (fl1.l == fl2.l)
+ 000012 16 03 [ 2] 66 ldw y, (0x03, sp)
+ 000014 17 0B [ 2] 67 ldw (0x0b, sp), y
+ 000016 16 01 [ 2] 68 ldw y, (0x01, sp)
+ 000018 17 09 [ 2] 69 ldw (0x09, sp), y
+ 00001A 16 07 [ 2] 70 ldw y, (0x07, sp)
+ 00001C 17 0F [ 2] 71 ldw (0x0f, sp), y
+ 00001E 16 05 [ 2] 72 ldw y, (0x05, sp)
+ 000020 1E 0B [ 2] 73 ldw x, (0x0b, sp)
+ 000022 13 0F [ 2] 74 cpw x, (0x0f, sp)
+ 000024 26 08 [ 1] 75 jrne 00102$
+ 000026 93 [ 1] 76 ldw x, y
+ 000027 13 09 [ 2] 77 cpw x, (0x09, sp)
+ 000029 26 03 [ 1] 78 jrne 00102$
+ 79 ; ../_fsneq.c: 88: return (0);
+ 00002B 4F [ 1] 80 clr a
+ 00002C 20 2A [ 2] 81 jra 00105$
+ 00002E 82 00102$:
+ 83 ; ../_fsneq.c: 89: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0)
+ 00002E 16 03 [ 2] 84 ldw y, (0x03, sp)
+ 000030 17 0F [ 2] 85 ldw (0x0f, sp), y
+ 000032 16 01 [ 2] 86 ldw y, (0x01, sp)
+ 000034 17 0D [ 2] 87 ldw (0x0d, sp), y
+ 000036 1E 07 [ 2] 88 ldw x, (0x07, sp)
+ 000038 16 05 [ 2] 89 ldw y, (0x05, sp)
+ 00003A 9F [ 1] 90 ld a, xl
+ 00003B 1A 10 [ 1] 91 or a, (0x10, sp)
+ 00003D 02 [ 1] 92 rlwa x
+ 00003E 1A 0F [ 1] 93 or a, (0x0f, sp)
+ 000040 95 [ 1] 94 ld xh, a
+ 000041 90 9F [ 1] 95 ld a, yl
+ 000043 1A 0E [ 1] 96 or a, (0x0e, sp)
+ 000045 90 02 [ 1] 97 rlwa y
+ 000047 1A 0D [ 1] 98 or a, (0x0d, sp)
+ 000049 A4 7F [ 1] 99 and a, #0x7f
+ 00004B 90 95 [ 1] 100 ld yh, a
+ 00004D 5D [ 2] 101 tnzw x
+ 00004E 26 06 [ 1] 102 jrne 00104$
+ 000050 90 5D [ 2] 103 tnzw y
+ 000052 26 02 [ 1] 104 jrne 00104$
+ 105 ; ../_fsneq.c: 90: return (0);
+ 000054 4F [ 1] 106 clr a
+ 107 ; ../_fsneq.c: 91: return (1);
+ 000055 C5 108 .byte 0xc5
+ 000056 109 00104$:
+ 000056 A6 01 [ 1] 110 ld a, #0x01
+ 000058 111 00105$:
+ 112 ; ../_fsneq.c: 92: }
+ 000058 5B 10 [ 2] 113 addw sp, #16
+ 00005A 87 [ 5] 114 retf
+ 115 .area CODE
+ 116 .area CONST
+ 117 .area INITIALIZER
+ 118 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fsneq.rel b/device/lib/stm8-large/_fsneq.rel
new file mode 100644
index 0000000..ade4542
--- /dev/null
+++ b/device/lib/stm8-large/_fsneq.rel
@@ -0,0 +1,45 @@
+XH3
+H B areas 2 global symbols
+M _fsneq
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 5B flags 0 addr 0
+S ___fsneq Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 16 16 17 03 16 14 17 01 16 1A 17
+R 00 00 00 09
+T 00 00 0D 07 16 18 17 05 16 03 17 0B 16 01 17 09
+R 00 00 00 09
+T 00 00 1A 16 07 17 0F 16 05 1E 0B 13 0F 26 08 93
+R 00 00 00 09
+T 00 00 27 13 09 26 03 4F 20 2A
+R 00 00 00 09
+T 00 00 2E
+R 00 00 00 09
+T 00 00 2E 16 03 17 0F 16 01 17 0D 1E 07 16 05 9F
+R 00 00 00 09
+T 00 00 3B 1A 10 02 1A 0F 95 90 9F 1A 0E 90 02 1A
+R 00 00 00 09
+T 00 00 48 0D A4 7F 90 95 5D 26 06 90 5D 26 02 4F
+R 00 00 00 09
+T 00 00 55 C5
+R 00 00 00 09
+T 00 00 56
+R 00 00 00 09
+T 00 00 56 A6 01
+R 00 00 00 09
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_fsneq.sym b/device/lib/stm8-large/_fsneq.sym
new file mode 100644
index 0000000..2b5d8fd
--- /dev/null
+++ b/device/lib/stm8-large/_fsneq.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___fsneq 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 5B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_fssub.asm b/device/lib/stm8-large/_fssub.asm
new file mode 100644
index 0000000..eecbda9
--- /dev/null
+++ b/device/lib/stm8-large/_fssub.asm
@@ -0,0 +1,83 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _fssub
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___fssub
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_fssub.c: 73: float __fssub (float a1, float a2)
+; -----------------------------------------
+; function __fssub
+; -----------------------------------------
+___fssub:
+ sub sp, #4
+; ../_fssub.c: 75: float neg = -a1;
+ ldw y, (0x0a, sp)
+ ldw x, (0x08, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../_fssub.c: 76: return -(neg + a2);
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ sllw y
+ ccf
+ rrcw y
+; ../_fssub.c: 77: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fssub.lst b/device/lib/stm8-large/_fssub.lst
new file mode 100644
index 0000000..0d47e3a
--- /dev/null
+++ b/device/lib/stm8-large/_fssub.lst
@@ -0,0 +1,83 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _fssub
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___fssub
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_fssub.c: 73: float __fssub (float a1, float a2)
+ 50 ; -----------------------------------------
+ 51 ; function __fssub
+ 52 ; -----------------------------------------
+ 000000 53 ___fssub:
+ 000000 52 04 [ 2] 54 sub sp, #4
+ 55 ; ../_fssub.c: 75: float neg = -a1;
+ 000002 16 0A [ 2] 56 ldw y, (0x0a, sp)
+ 000004 1E 08 [ 2] 57 ldw x, (0x08, sp)
+ 000006 58 [ 2] 58 sllw x
+ 000007 8C [ 1] 59 ccf
+ 000008 56 [ 2] 60 rrcw x
+ 000009 17 03 [ 2] 61 ldw (0x03, sp), y
+ 00000B 1F 01 [ 2] 62 ldw (0x01, sp), x
+ 63 ; ../_fssub.c: 76: return -(neg + a2);
+ 00000D 1E 0E [ 2] 64 ldw x, (0x0e, sp)
+ 00000F 89 [ 2] 65 pushw x
+ 000010 1E 0E [ 2] 66 ldw x, (0x0e, sp)
+ 000012 89 [ 2] 67 pushw x
+ 000013 1E 07 [ 2] 68 ldw x, (0x07, sp)
+ 000015 89 [ 2] 69 pushw x
+ 000016 1E 07 [ 2] 70 ldw x, (0x07, sp)
+ 000018 89 [ 2] 71 pushw x
+ 000019 8Ds00r00r00 [ 5] 72 callf ___fsadd
+ 00001D 5B 08 [ 2] 73 addw sp, #8
+ 00001F 90 58 [ 2] 74 sllw y
+ 000021 8C [ 1] 75 ccf
+ 000022 90 56 [ 2] 76 rrcw y
+ 77 ; ../_fssub.c: 77: }
+ 000024 5B 04 [ 2] 78 addw sp, #4
+ 000026 87 [ 5] 79 retf
+ 80 .area CODE
+ 81 .area CONST
+ 82 .area INITIALIZER
+ 83 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_fssub.rel b/device/lib/stm8-large/_fssub.rel
new file mode 100644
index 0000000..b3b17c9
--- /dev/null
+++ b/device/lib/stm8-large/_fssub.rel
@@ -0,0 +1,26 @@
+XH3
+H B areas 3 global symbols
+M _fssub
+O -mstm8
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 27 flags 0 addr 0
+S ___fssub Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 16 0A 1E 08 58 8C 56 17 03 1F 01
+R 00 00 00 09
+T 00 00 0D 1E 0E 89 1E 0E 89 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 1A 00 00 00 5B 08 90 58 8C 90 56 5B 04 87
+R 00 00 00 09 82 03 00 01
diff --git a/device/lib/stm8-large/_fssub.sym b/device/lib/stm8-large/_fssub.sym
new file mode 100644
index 0000000..3f16790
--- /dev/null
+++ b/device/lib/stm8-large/_fssub.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ 9 ___fssub 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 27 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_itoa.asm b/device/lib/stm8-large/_itoa.asm
new file mode 100644
index 0000000..f6f6530
--- /dev/null
+++ b/device/lib/stm8-large/_itoa.asm
@@ -0,0 +1,185 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _itoa
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __itoa
+ .globl __uitoa
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_itoa.c: 40: void _uitoa(unsigned int value, char* string, unsigned char radix)
+; -----------------------------------------
+; function _uitoa
+; -----------------------------------------
+__uitoa:
+ sub sp, #5
+; ../_itoa.c: 45: do {
+ clr (0x05, sp)
+00103$:
+; ../_itoa.c: 46: string[index] = '0' + (value % radix);
+ ld a, (0x05, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ addw x, (0x0b, sp)
+ ldw (0x01, sp), x
+ ld a, (0x0d, sp)
+ ld (0x04, sp), a
+ clr (0x03, sp)
+ ldw x, (0x09, sp)
+ ldw y, (0x03, sp)
+ divw x, y
+ ld a, yl
+ add a, #0x30
+ ldw x, (0x01, sp)
+ ld (x), a
+; ../_itoa.c: 47: if (string[index] > '9')
+ ldw x, (0x01, sp)
+ ld a, (x)
+ cp a, #0x39
+ jrule 00102$
+; ../_itoa.c: 48: string[index] += 'A' - '9' - 1;
+ add a, #0x07
+ ldw x, (0x01, sp)
+ ld (x), a
+00102$:
+; ../_itoa.c: 49: value /= radix;
+ ldw x, (0x09, sp)
+ ldw y, (0x03, sp)
+ divw x, y
+ ldw (0x09, sp), x
+; ../_itoa.c: 50: ++index;
+ inc (0x05, sp)
+; ../_itoa.c: 51: } while (value != 0);
+ ldw x, (0x09, sp)
+ jrne 00103$
+; ../_itoa.c: 54: string[index--] = '\0';
+ ld a, (0x05, sp)
+ dec a
+ ld (0x04, sp), a
+ ld a, (0x05, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ addw x, (0x0b, sp)
+ clr (x)
+; ../_itoa.c: 57: while (index > i) {
+ clr (0x05, sp)
+00106$:
+ ld a, (0x04, sp)
+ cp a, (0x05, sp)
+ jrsle 00109$
+; ../_itoa.c: 58: char tmp = string[i];
+ ld a, (0x05, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ addw x, (0x0b, sp)
+ exgw x, y
+ ld a, (y)
+ ld (0x03, sp), a
+; ../_itoa.c: 59: string[i] = string[index];
+ ld a, (0x04, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ addw x, (0x0b, sp)
+ ld a, (x)
+ ld (y), a
+; ../_itoa.c: 60: string[index] = tmp;
+ ld a, (0x03, sp)
+ ld (x), a
+; ../_itoa.c: 61: ++i;
+ inc (0x05, sp)
+; ../_itoa.c: 62: --index;
+ dec (0x04, sp)
+ jra 00106$
+00109$:
+; ../_itoa.c: 64: }
+ addw sp, #5
+ retf
+; ../_itoa.c: 66: void _itoa(int value, char* string, unsigned char radix)
+; -----------------------------------------
+; function _itoa
+; -----------------------------------------
+__itoa:
+; ../_itoa.c: 68: if (value < 0 && radix == 10) {
+ tnz (0x04, sp)
+ jrpl 00102$
+ ld a, (0x08, sp)
+ cp a, #0x0a
+ jrne 00102$
+; ../_itoa.c: 69: *string++ = '-';
+ ldw x, (0x06, sp)
+ ld a, #0x2d
+ ld (x), a
+ incw x
+ ldw (0x06, sp), x
+; ../_itoa.c: 70: value = -value;
+ ldw x, (0x04, sp)
+ negw x
+ ldw (0x04, sp), x
+00102$:
+; ../_itoa.c: 72: _uitoa(value, string, radix);
+ ld a, (0x08, sp)
+ push a
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf __uitoa
+ addw sp, #5
+; ../_itoa.c: 73: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_itoa.lst b/device/lib/stm8-large/_itoa.lst
new file mode 100644
index 0000000..4b759ad
--- /dev/null
+++ b/device/lib/stm8-large/_itoa.lst
@@ -0,0 +1,185 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _itoa
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __itoa
+ 12 .globl __uitoa
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_itoa.c: 40: void _uitoa(unsigned int value, char* string, unsigned char radix)
+ 51 ; -----------------------------------------
+ 52 ; function _uitoa
+ 53 ; -----------------------------------------
+ 000000 54 __uitoa:
+ 000000 52 05 [ 2] 55 sub sp, #5
+ 56 ; ../_itoa.c: 45: do {
+ 000002 0F 05 [ 1] 57 clr (0x05, sp)
+ 000004 58 00103$:
+ 59 ; ../_itoa.c: 46: string[index] = '0' + (value % radix);
+ 000004 7B 05 [ 1] 60 ld a, (0x05, sp)
+ 000006 97 [ 1] 61 ld xl, a
+ 000007 49 [ 1] 62 rlc a
+ 000008 4F [ 1] 63 clr a
+ 000009 A2 00 [ 1] 64 sbc a, #0x00
+ 00000B 95 [ 1] 65 ld xh, a
+ 00000C 72 FB 0B [ 2] 66 addw x, (0x0b, sp)
+ 00000F 1F 01 [ 2] 67 ldw (0x01, sp), x
+ 000011 7B 0D [ 1] 68 ld a, (0x0d, sp)
+ 000013 6B 04 [ 1] 69 ld (0x04, sp), a
+ 000015 0F 03 [ 1] 70 clr (0x03, sp)
+ 000017 1E 09 [ 2] 71 ldw x, (0x09, sp)
+ 000019 16 03 [ 2] 72 ldw y, (0x03, sp)
+ 00001B 65 [ 2] 73 divw x, y
+ 00001C 90 9F [ 1] 74 ld a, yl
+ 00001E AB 30 [ 1] 75 add a, #0x30
+ 000020 1E 01 [ 2] 76 ldw x, (0x01, sp)
+ 000022 F7 [ 1] 77 ld (x), a
+ 78 ; ../_itoa.c: 47: if (string[index] > '9')
+ 000023 1E 01 [ 2] 79 ldw x, (0x01, sp)
+ 000025 F6 [ 1] 80 ld a, (x)
+ 000026 A1 39 [ 1] 81 cp a, #0x39
+ 000028 23 05 [ 2] 82 jrule 00102$
+ 83 ; ../_itoa.c: 48: string[index] += 'A' - '9' - 1;
+ 00002A AB 07 [ 1] 84 add a, #0x07
+ 00002C 1E 01 [ 2] 85 ldw x, (0x01, sp)
+ 00002E F7 [ 1] 86 ld (x), a
+ 00002F 87 00102$:
+ 88 ; ../_itoa.c: 49: value /= radix;
+ 00002F 1E 09 [ 2] 89 ldw x, (0x09, sp)
+ 000031 16 03 [ 2] 90 ldw y, (0x03, sp)
+ 000033 65 [ 2] 91 divw x, y
+ 000034 1F 09 [ 2] 92 ldw (0x09, sp), x
+ 93 ; ../_itoa.c: 50: ++index;
+ 000036 0C 05 [ 1] 94 inc (0x05, sp)
+ 95 ; ../_itoa.c: 51: } while (value != 0);
+ 000038 1E 09 [ 2] 96 ldw x, (0x09, sp)
+ 00003A 26 C8 [ 1] 97 jrne 00103$
+ 98 ; ../_itoa.c: 54: string[index--] = '\0';
+ 00003C 7B 05 [ 1] 99 ld a, (0x05, sp)
+ 00003E 4A [ 1] 100 dec a
+ 00003F 6B 04 [ 1] 101 ld (0x04, sp), a
+ 000041 7B 05 [ 1] 102 ld a, (0x05, sp)
+ 000043 97 [ 1] 103 ld xl, a
+ 000044 49 [ 1] 104 rlc a
+ 000045 4F [ 1] 105 clr a
+ 000046 A2 00 [ 1] 106 sbc a, #0x00
+ 000048 95 [ 1] 107 ld xh, a
+ 000049 72 FB 0B [ 2] 108 addw x, (0x0b, sp)
+ 00004C 7F [ 1] 109 clr (x)
+ 110 ; ../_itoa.c: 57: while (index > i) {
+ 00004D 0F 05 [ 1] 111 clr (0x05, sp)
+ 00004F 112 00106$:
+ 00004F 7B 04 [ 1] 113 ld a, (0x04, sp)
+ 000051 11 05 [ 1] 114 cp a, (0x05, sp)
+ 000053 2D 27 [ 1] 115 jrsle 00109$
+ 116 ; ../_itoa.c: 58: char tmp = string[i];
+ 000055 7B 05 [ 1] 117 ld a, (0x05, sp)
+ 000057 97 [ 1] 118 ld xl, a
+ 000058 49 [ 1] 119 rlc a
+ 000059 4F [ 1] 120 clr a
+ 00005A A2 00 [ 1] 121 sbc a, #0x00
+ 00005C 95 [ 1] 122 ld xh, a
+ 00005D 72 FB 0B [ 2] 123 addw x, (0x0b, sp)
+ 000060 51 [ 1] 124 exgw x, y
+ 000061 90 F6 [ 1] 125 ld a, (y)
+ 000063 6B 03 [ 1] 126 ld (0x03, sp), a
+ 127 ; ../_itoa.c: 59: string[i] = string[index];
+ 000065 7B 04 [ 1] 128 ld a, (0x04, sp)
+ 000067 97 [ 1] 129 ld xl, a
+ 000068 49 [ 1] 130 rlc a
+ 000069 4F [ 1] 131 clr a
+ 00006A A2 00 [ 1] 132 sbc a, #0x00
+ 00006C 95 [ 1] 133 ld xh, a
+ 00006D 72 FB 0B [ 2] 134 addw x, (0x0b, sp)
+ 000070 F6 [ 1] 135 ld a, (x)
+ 000071 90 F7 [ 1] 136 ld (y), a
+ 137 ; ../_itoa.c: 60: string[index] = tmp;
+ 000073 7B 03 [ 1] 138 ld a, (0x03, sp)
+ 000075 F7 [ 1] 139 ld (x), a
+ 140 ; ../_itoa.c: 61: ++i;
+ 000076 0C 05 [ 1] 141 inc (0x05, sp)
+ 142 ; ../_itoa.c: 62: --index;
+ 000078 0A 04 [ 1] 143 dec (0x04, sp)
+ 00007A 20 D3 [ 2] 144 jra 00106$
+ 00007C 145 00109$:
+ 146 ; ../_itoa.c: 64: }
+ 00007C 5B 05 [ 2] 147 addw sp, #5
+ 00007E 87 [ 5] 148 retf
+ 149 ; ../_itoa.c: 66: void _itoa(int value, char* string, unsigned char radix)
+ 150 ; -----------------------------------------
+ 151 ; function _itoa
+ 152 ; -----------------------------------------
+ 00007F 153 __itoa:
+ 154 ; ../_itoa.c: 68: if (value < 0 && radix == 10) {
+ 00007F 0D 04 [ 1] 155 tnz (0x04, sp)
+ 000081 2A 13 [ 1] 156 jrpl 00102$
+ 000083 7B 08 [ 1] 157 ld a, (0x08, sp)
+ 000085 A1 0A [ 1] 158 cp a, #0x0a
+ 000087 26 0D [ 1] 159 jrne 00102$
+ 160 ; ../_itoa.c: 69: *string++ = '-';
+ 000089 1E 06 [ 2] 161 ldw x, (0x06, sp)
+ 00008B A6 2D [ 1] 162 ld a, #0x2d
+ 00008D F7 [ 1] 163 ld (x), a
+ 00008E 5C [ 1] 164 incw x
+ 00008F 1F 06 [ 2] 165 ldw (0x06, sp), x
+ 166 ; ../_itoa.c: 70: value = -value;
+ 000091 1E 04 [ 2] 167 ldw x, (0x04, sp)
+ 000093 50 [ 2] 168 negw x
+ 000094 1F 04 [ 2] 169 ldw (0x04, sp), x
+ 000096 170 00102$:
+ 171 ; ../_itoa.c: 72: _uitoa(value, string, radix);
+ 000096 7B 08 [ 1] 172 ld a, (0x08, sp)
+ 000098 88 [ 1] 173 push a
+ 000099 1E 07 [ 2] 174 ldw x, (0x07, sp)
+ 00009B 89 [ 2] 175 pushw x
+ 00009C 1E 07 [ 2] 176 ldw x, (0x07, sp)
+ 00009E 89 [ 2] 177 pushw x
+ 00009F 8Ds00r00r00 [ 5] 178 callf __uitoa
+ 0000A3 5B 05 [ 2] 179 addw sp, #5
+ 180 ; ../_itoa.c: 73: }
+ 0000A5 87 [ 5] 181 retf
+ 182 .area CODE
+ 183 .area CONST
+ 184 .area INITIALIZER
+ 185 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_itoa.rel b/device/lib/stm8-large/_itoa.rel
new file mode 100644
index 0000000..fb6dedc
--- /dev/null
+++ b/device/lib/stm8-large/_itoa.rel
@@ -0,0 +1,66 @@
+XH3
+H B areas 3 global symbols
+M _itoa
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size A6 flags 0 addr 0
+S __uitoa Def000000
+S __itoa Def00007F
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 0F 05
+R 00 00 00 09
+T 00 00 04
+R 00 00 00 09
+T 00 00 04 7B 05 97 49 4F A2 00 95 72 FB 0B 1F 01
+R 00 00 00 09
+T 00 00 11 7B 0D 6B 04 0F 03 1E 09 16 03 65 90 9F
+R 00 00 00 09
+T 00 00 1E AB 30 1E 01 F7 1E 01 F6 A1 39 23 05 AB
+R 00 00 00 09
+T 00 00 2B 07 1E 01 F7
+R 00 00 00 09
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F 1E 09 16 03 65 1F 09 0C 05 1E 09 26 C8
+R 00 00 00 09
+T 00 00 3C 7B 05 4A 6B 04 7B 05 97 49 4F A2 00 95
+R 00 00 00 09
+T 00 00 49 72 FB 0B 7F 0F 05
+R 00 00 00 09
+T 00 00 4F
+R 00 00 00 09
+T 00 00 4F 7B 04 11 05 2D 27 7B 05 97 49 4F A2 00
+R 00 00 00 09
+T 00 00 5C 95 72 FB 0B 51 90 F6 6B 03 7B 04 97 49
+R 00 00 00 09
+T 00 00 69 4F A2 00 95 72 FB 0B F6 90 F7 7B 03 F7
+R 00 00 00 09
+T 00 00 76 0C 05 0A 04 20 D3
+R 00 00 00 09
+T 00 00 7C
+R 00 00 00 09
+T 00 00 7C 5B 05 87
+R 00 00 00 09
+T 00 00 7F
+R 00 00 00 09
+T 00 00 7F 0D 04 2A 13 7B 08 A1 0A 26 0D 1E 06 A6
+R 00 00 00 09
+T 00 00 8C 2D F7 5C 1F 06 1E 04 50 1F 04
+R 00 00 00 09
+T 00 00 96
+R 00 00 00 09
+T 00 00 96 7B 08 88 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 A0 00 00 00 5B 05 87
+R 00 00 00 09 80 03 00 09
diff --git a/device/lib/stm8-large/_itoa.sym b/device/lib/stm8-large/_itoa.sym
new file mode 100644
index 0000000..2bdd568
--- /dev/null
+++ b/device/lib/stm8-large/_itoa.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __itoa 00007F GR
+ 9 __uitoa 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size A6 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_ltoa.asm b/device/lib/stm8-large/_ltoa.asm
new file mode 100644
index 0000000..6569c7b
--- /dev/null
+++ b/device/lib/stm8-large/_ltoa.asm
@@ -0,0 +1,178 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _ltoa
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __ltoa
+ .globl __ultoa
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_ltoa.c: 56: void _ultoa(unsigned long value, char* string, unsigned char radix)
+; -----------------------------------------
+; function _ultoa
+; -----------------------------------------
+__ultoa:
+ sub sp, #39
+; ../_ltoa.c: 61: do {
+ ldw x, sp
+ addw x, #5
+ ldw (0x25, sp), x
+ ld a, #0x20
+ ld (0x27, sp), a
+00103$:
+; ../_ltoa.c: 62: unsigned char c = '0' + (value % radix);
+ ld a, (0x31, sp)
+ ld (0x04, sp), a
+ clr (0x03, sp)
+ clr (0x02, sp)
+ clr (0x01, sp)
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x31, sp)
+ pushw x
+ ldw x, (0x31, sp)
+ pushw x
+ callf __modulong
+ addw sp, #8
+ ld a, xl
+ add a, #0x30
+; ../_ltoa.c: 63: if (c > (unsigned char)'9')
+ cp a, #0x39
+ jrule 00102$
+; ../_ltoa.c: 64: c += 'A' - '9' - 1;
+ add a, #0x07
+00102$:
+; ../_ltoa.c: 65: buffer[--index] = c;
+ dec (0x27, sp)
+ clrw x
+ exg a, xl
+ ld a, (0x27, sp)
+ exg a, xl
+ addw x, (0x25, sp)
+ ld (x), a
+; ../_ltoa.c: 66: value /= radix;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x31, sp)
+ pushw x
+ ldw x, (0x31, sp)
+ pushw x
+ callf __divulong
+ addw sp, #8
+ ldw (0x2d, sp), x
+ ldw (0x2b, sp), y
+; ../_ltoa.c: 67: } while (value);
+ ldw x, (0x2d, sp)
+ jrne 00103$
+ ldw x, (0x2b, sp)
+ jrne 00103$
+; ../_ltoa.c: 69: do {
+ ldw x, (0x2f, sp)
+00106$:
+; ../_ltoa.c: 70: *string++ = buffer[index];
+ clrw y
+ ld a, (0x27, sp)
+ ld yl, a
+ addw y, (0x25, sp)
+ ld a, (y)
+ ld (x), a
+ incw x
+; ../_ltoa.c: 71: } while ( ++index != NUMBER_OF_DIGITS );
+ inc (0x27, sp)
+ ld a, (0x27, sp)
+ cp a, #0x20
+ jrne 00106$
+; ../_ltoa.c: 73: *string = 0; /* string terminator */
+ clr (x)
+; ../_ltoa.c: 74: }
+ addw sp, #39
+ retf
+; ../_ltoa.c: 76: void _ltoa(long value, char* string, unsigned char radix)
+; -----------------------------------------
+; function _ltoa
+; -----------------------------------------
+__ltoa:
+; ../_ltoa.c: 78: if (value < 0 && radix == 10) {
+ tnz (0x04, sp)
+ jrpl 00102$
+ ld a, (0x0a, sp)
+ cp a, #0x0a
+ jrne 00102$
+; ../_ltoa.c: 79: *string++ = '-';
+ ldw x, (0x08, sp)
+ ld a, #0x2d
+ ld (x), a
+ incw x
+ ldw (0x08, sp), x
+; ../_ltoa.c: 80: value = -value;
+ ldw y, (0x06, sp)
+ negw y
+ ldw x, (0x04, sp)
+ jrnc 00120$
+ incw x
+00120$:
+ negw x
+ ldw (0x06, sp), y
+ ldw (0x04, sp), x
+00102$:
+; ../_ltoa.c: 82: _ultoa(value, string, radix);
+ ld a, (0x0a, sp)
+ push a
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf __ultoa
+ addw sp, #7
+; ../_ltoa.c: 83: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_ltoa.lst b/device/lib/stm8-large/_ltoa.lst
new file mode 100644
index 0000000..2211431
--- /dev/null
+++ b/device/lib/stm8-large/_ltoa.lst
@@ -0,0 +1,178 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _ltoa
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __ltoa
+ 12 .globl __ultoa
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_ltoa.c: 56: void _ultoa(unsigned long value, char* string, unsigned char radix)
+ 51 ; -----------------------------------------
+ 52 ; function _ultoa
+ 53 ; -----------------------------------------
+ 000000 54 __ultoa:
+ 000000 52 27 [ 2] 55 sub sp, #39
+ 56 ; ../_ltoa.c: 61: do {
+ 000002 96 [ 1] 57 ldw x, sp
+ 000003 1C 00 05 [ 2] 58 addw x, #5
+ 000006 1F 25 [ 2] 59 ldw (0x25, sp), x
+ 000008 A6 20 [ 1] 60 ld a, #0x20
+ 00000A 6B 27 [ 1] 61 ld (0x27, sp), a
+ 00000C 62 00103$:
+ 63 ; ../_ltoa.c: 62: unsigned char c = '0' + (value % radix);
+ 00000C 7B 31 [ 1] 64 ld a, (0x31, sp)
+ 00000E 6B 04 [ 1] 65 ld (0x04, sp), a
+ 000010 0F 03 [ 1] 66 clr (0x03, sp)
+ 000012 0F 02 [ 1] 67 clr (0x02, sp)
+ 000014 0F 01 [ 1] 68 clr (0x01, sp)
+ 000016 1E 03 [ 2] 69 ldw x, (0x03, sp)
+ 000018 89 [ 2] 70 pushw x
+ 000019 1E 03 [ 2] 71 ldw x, (0x03, sp)
+ 00001B 89 [ 2] 72 pushw x
+ 00001C 1E 31 [ 2] 73 ldw x, (0x31, sp)
+ 00001E 89 [ 2] 74 pushw x
+ 00001F 1E 31 [ 2] 75 ldw x, (0x31, sp)
+ 000021 89 [ 2] 76 pushw x
+ 000022 8Ds00r00r00 [ 5] 77 callf __modulong
+ 000026 5B 08 [ 2] 78 addw sp, #8
+ 000028 9F [ 1] 79 ld a, xl
+ 000029 AB 30 [ 1] 80 add a, #0x30
+ 81 ; ../_ltoa.c: 63: if (c > (unsigned char)'9')
+ 00002B A1 39 [ 1] 82 cp a, #0x39
+ 00002D 23 02 [ 2] 83 jrule 00102$
+ 84 ; ../_ltoa.c: 64: c += 'A' - '9' - 1;
+ 00002F AB 07 [ 1] 85 add a, #0x07
+ 000031 86 00102$:
+ 87 ; ../_ltoa.c: 65: buffer[--index] = c;
+ 000031 0A 27 [ 1] 88 dec (0x27, sp)
+ 000033 5F [ 1] 89 clrw x
+ 000034 41 [ 1] 90 exg a, xl
+ 000035 7B 27 [ 1] 91 ld a, (0x27, sp)
+ 000037 41 [ 1] 92 exg a, xl
+ 000038 72 FB 25 [ 2] 93 addw x, (0x25, sp)
+ 00003B F7 [ 1] 94 ld (x), a
+ 95 ; ../_ltoa.c: 66: value /= radix;
+ 00003C 1E 03 [ 2] 96 ldw x, (0x03, sp)
+ 00003E 89 [ 2] 97 pushw x
+ 00003F 1E 03 [ 2] 98 ldw x, (0x03, sp)
+ 000041 89 [ 2] 99 pushw x
+ 000042 1E 31 [ 2] 100 ldw x, (0x31, sp)
+ 000044 89 [ 2] 101 pushw x
+ 000045 1E 31 [ 2] 102 ldw x, (0x31, sp)
+ 000047 89 [ 2] 103 pushw x
+ 000048 8Ds00r00r00 [ 5] 104 callf __divulong
+ 00004C 5B 08 [ 2] 105 addw sp, #8
+ 00004E 1F 2D [ 2] 106 ldw (0x2d, sp), x
+ 000050 17 2B [ 2] 107 ldw (0x2b, sp), y
+ 108 ; ../_ltoa.c: 67: } while (value);
+ 000052 1E 2D [ 2] 109 ldw x, (0x2d, sp)
+ 000054 26 B6 [ 1] 110 jrne 00103$
+ 000056 1E 2B [ 2] 111 ldw x, (0x2b, sp)
+ 000058 26 B2 [ 1] 112 jrne 00103$
+ 113 ; ../_ltoa.c: 69: do {
+ 00005A 1E 2F [ 2] 114 ldw x, (0x2f, sp)
+ 00005C 115 00106$:
+ 116 ; ../_ltoa.c: 70: *string++ = buffer[index];
+ 00005C 90 5F [ 1] 117 clrw y
+ 00005E 7B 27 [ 1] 118 ld a, (0x27, sp)
+ 000060 90 97 [ 1] 119 ld yl, a
+ 000062 72 F9 25 [ 2] 120 addw y, (0x25, sp)
+ 000065 90 F6 [ 1] 121 ld a, (y)
+ 000067 F7 [ 1] 122 ld (x), a
+ 000068 5C [ 1] 123 incw x
+ 124 ; ../_ltoa.c: 71: } while ( ++index != NUMBER_OF_DIGITS );
+ 000069 0C 27 [ 1] 125 inc (0x27, sp)
+ 00006B 7B 27 [ 1] 126 ld a, (0x27, sp)
+ 00006D A1 20 [ 1] 127 cp a, #0x20
+ 00006F 26 EB [ 1] 128 jrne 00106$
+ 129 ; ../_ltoa.c: 73: *string = 0; /* string terminator */
+ 000071 7F [ 1] 130 clr (x)
+ 131 ; ../_ltoa.c: 74: }
+ 000072 5B 27 [ 2] 132 addw sp, #39
+ 000074 87 [ 5] 133 retf
+ 134 ; ../_ltoa.c: 76: void _ltoa(long value, char* string, unsigned char radix)
+ 135 ; -----------------------------------------
+ 136 ; function _ltoa
+ 137 ; -----------------------------------------
+ 000075 138 __ltoa:
+ 139 ; ../_ltoa.c: 78: if (value < 0 && radix == 10) {
+ 000075 0D 04 [ 1] 140 tnz (0x04, sp)
+ 000077 2A 1C [ 1] 141 jrpl 00102$
+ 000079 7B 0A [ 1] 142 ld a, (0x0a, sp)
+ 00007B A1 0A [ 1] 143 cp a, #0x0a
+ 00007D 26 16 [ 1] 144 jrne 00102$
+ 145 ; ../_ltoa.c: 79: *string++ = '-';
+ 00007F 1E 08 [ 2] 146 ldw x, (0x08, sp)
+ 000081 A6 2D [ 1] 147 ld a, #0x2d
+ 000083 F7 [ 1] 148 ld (x), a
+ 000084 5C [ 1] 149 incw x
+ 000085 1F 08 [ 2] 150 ldw (0x08, sp), x
+ 151 ; ../_ltoa.c: 80: value = -value;
+ 000087 16 06 [ 2] 152 ldw y, (0x06, sp)
+ 000089 90 50 [ 2] 153 negw y
+ 00008B 1E 04 [ 2] 154 ldw x, (0x04, sp)
+ 00008D 24 01 [ 1] 155 jrnc 00120$
+ 00008F 5C [ 1] 156 incw x
+ 000090 157 00120$:
+ 000090 50 [ 2] 158 negw x
+ 000091 17 06 [ 2] 159 ldw (0x06, sp), y
+ 000093 1F 04 [ 2] 160 ldw (0x04, sp), x
+ 000095 161 00102$:
+ 162 ; ../_ltoa.c: 82: _ultoa(value, string, radix);
+ 000095 7B 0A [ 1] 163 ld a, (0x0a, sp)
+ 000097 88 [ 1] 164 push a
+ 000098 1E 09 [ 2] 165 ldw x, (0x09, sp)
+ 00009A 89 [ 2] 166 pushw x
+ 00009B 1E 09 [ 2] 167 ldw x, (0x09, sp)
+ 00009D 89 [ 2] 168 pushw x
+ 00009E 1E 09 [ 2] 169 ldw x, (0x09, sp)
+ 0000A0 89 [ 2] 170 pushw x
+ 0000A1 8Ds00r00r00 [ 5] 171 callf __ultoa
+ 0000A5 5B 07 [ 2] 172 addw sp, #7
+ 173 ; ../_ltoa.c: 83: }
+ 0000A7 87 [ 5] 174 retf
+ 175 .area CODE
+ 176 .area CONST
+ 177 .area INITIALIZER
+ 178 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_ltoa.rel b/device/lib/stm8-large/_ltoa.rel
new file mode 100644
index 0000000..7edc805
--- /dev/null
+++ b/device/lib/stm8-large/_ltoa.rel
@@ -0,0 +1,68 @@
+XH3
+H B areas 5 global symbols
+M _ltoa
+O -mstm8
+S .__.ABS. Def000000
+S __modulong Ref000000
+S __divulong Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size A8 flags 0 addr 0
+S __ultoa Def000000
+S __ltoa Def000075
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 27 96 1C 00 05 1F 25 A6 20 6B 27
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 7B 31 6B 04 0F 03 0F 02 0F 01 1E 03 89
+R 00 00 00 09
+T 00 00 19 1E 03 89 1E 31 89 1E 31 89 8D
+R 00 00 00 09
+T 00 00 23 00 00 00 5B 08 9F AB 30 A1 39 23 02 AB
+R 00 00 00 09 82 03 00 01
+T 00 00 30 07
+R 00 00 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 0A 27 5F 41 7B 27 41 72 FB 25 F7 1E 03
+R 00 00 00 09
+T 00 00 3E 89 1E 03 89 1E 31 89 1E 31 89 8D
+R 00 00 00 09
+T 00 00 49 00 00 00 5B 08 1F 2D 17 2B 1E 2D 26 B6
+R 00 00 00 09 82 03 00 02
+T 00 00 56 1E 2B 26 B2 1E 2F
+R 00 00 00 09
+T 00 00 5C
+R 00 00 00 09
+T 00 00 5C 90 5F 7B 27 90 97 72 F9 25 90 F6 F7 5C
+R 00 00 00 09
+T 00 00 69 0C 27 7B 27 A1 20 26 EB 7F 5B 27 87
+R 00 00 00 09
+T 00 00 75
+R 00 00 00 09
+T 00 00 75 0D 04 2A 1C 7B 0A A1 0A 26 16 1E 08 A6
+R 00 00 00 09
+T 00 00 82 2D F7 5C 1F 08 16 06 90 50 1E 04 24 01
+R 00 00 00 09
+T 00 00 8F 5C
+R 00 00 00 09
+T 00 00 90
+R 00 00 00 09
+T 00 00 90 50 17 06 1F 04
+R 00 00 00 09
+T 00 00 95
+R 00 00 00 09
+T 00 00 95 7B 0A 88 1E 09 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 00 A2 00 00 00 5B 07 87
+R 00 00 00 09 80 03 00 09
diff --git a/device/lib/stm8-large/_ltoa.sym b/device/lib/stm8-large/_ltoa.sym
new file mode 100644
index 0000000..58118fb
--- /dev/null
+++ b/device/lib/stm8-large/_ltoa.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __divulong ****** GX
+ 9 __ltoa 000075 GR
+ __modulong ****** GX
+ 9 __ultoa 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size A8 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_memchr.asm b/device/lib/stm8-large/_memchr.asm
new file mode 100644
index 0000000..f1990bd
--- /dev/null
+++ b/device/lib/stm8-large/_memchr.asm
@@ -0,0 +1,91 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _memchr
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _memchr
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_memchr.c: 31: void *memchr(const void *s, int c, size_t n)
+; -----------------------------------------
+; function memchr
+; -----------------------------------------
+_memchr:
+ sub sp, #5
+; ../_memchr.c: 33: unsigned char *p = (unsigned char *)s;
+ ldw x, (0x09, sp)
+; ../_memchr.c: 34: unsigned char *end = p + n;
+ ldw (0x01, sp), x
+ addw x, (0x0d, sp)
+ ldw (0x03, sp), x
+; ../_memchr.c: 38: return(0);
+ ldw x, (0x01, sp)
+00105$:
+; ../_memchr.c: 35: for(; p != end; p++)
+ cpw x, (0x03, sp)
+ jreq 00103$
+; ../_memchr.c: 36: if(*p == (unsigned char)c)
+ ld a, (x)
+ ld (0x05, sp), a
+ ld a, (0x0c, sp)
+ cp a, (0x05, sp)
+ jrne 00106$
+; ../_memchr.c: 37: return((void *)p);
+ ldw x, (0x01, sp)
+ jra 00107$
+00106$:
+; ../_memchr.c: 35: for(; p != end; p++)
+ incw x
+ ldw (0x01, sp), x
+ jra 00105$
+00103$:
+; ../_memchr.c: 38: return(0);
+ clrw x
+00107$:
+; ../_memchr.c: 39: }
+ addw sp, #5
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memchr.lst b/device/lib/stm8-large/_memchr.lst
new file mode 100644
index 0000000..ff1de49
--- /dev/null
+++ b/device/lib/stm8-large/_memchr.lst
@@ -0,0 +1,91 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _memchr
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _memchr
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_memchr.c: 31: void *memchr(const void *s, int c, size_t n)
+ 50 ; -----------------------------------------
+ 51 ; function memchr
+ 52 ; -----------------------------------------
+ 000000 53 _memchr:
+ 000000 52 05 [ 2] 54 sub sp, #5
+ 55 ; ../_memchr.c: 33: unsigned char *p = (unsigned char *)s;
+ 000002 1E 09 [ 2] 56 ldw x, (0x09, sp)
+ 57 ; ../_memchr.c: 34: unsigned char *end = p + n;
+ 000004 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 000006 72 FB 0D [ 2] 59 addw x, (0x0d, sp)
+ 000009 1F 03 [ 2] 60 ldw (0x03, sp), x
+ 61 ; ../_memchr.c: 38: return(0);
+ 00000B 1E 01 [ 2] 62 ldw x, (0x01, sp)
+ 00000D 63 00105$:
+ 64 ; ../_memchr.c: 35: for(; p != end; p++)
+ 00000D 13 03 [ 2] 65 cpw x, (0x03, sp)
+ 00000F 27 12 [ 1] 66 jreq 00103$
+ 67 ; ../_memchr.c: 36: if(*p == (unsigned char)c)
+ 000011 F6 [ 1] 68 ld a, (x)
+ 000012 6B 05 [ 1] 69 ld (0x05, sp), a
+ 000014 7B 0C [ 1] 70 ld a, (0x0c, sp)
+ 000016 11 05 [ 1] 71 cp a, (0x05, sp)
+ 000018 26 04 [ 1] 72 jrne 00106$
+ 73 ; ../_memchr.c: 37: return((void *)p);
+ 00001A 1E 01 [ 2] 74 ldw x, (0x01, sp)
+ 00001C 20 06 [ 2] 75 jra 00107$
+ 00001E 76 00106$:
+ 77 ; ../_memchr.c: 35: for(; p != end; p++)
+ 00001E 5C [ 1] 78 incw x
+ 00001F 1F 01 [ 2] 79 ldw (0x01, sp), x
+ 000021 20 EA [ 2] 80 jra 00105$
+ 000023 81 00103$:
+ 82 ; ../_memchr.c: 38: return(0);
+ 000023 5F [ 1] 83 clrw x
+ 000024 84 00107$:
+ 85 ; ../_memchr.c: 39: }
+ 000024 5B 05 [ 2] 86 addw sp, #5
+ 000026 87 [ 5] 87 retf
+ 88 .area CODE
+ 89 .area CONST
+ 90 .area INITIALIZER
+ 91 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memchr.rel b/device/lib/stm8-large/_memchr.rel
new file mode 100644
index 0000000..1472a41
--- /dev/null
+++ b/device/lib/stm8-large/_memchr.rel
@@ -0,0 +1,39 @@
+XH3
+H B areas 2 global symbols
+M _memchr
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 27 flags 0 addr 0
+S _memchr Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 1E 09 1F 01 72 FB 0D 1F 03 1E 01
+R 00 00 00 09
+T 00 00 0D
+R 00 00 00 09
+T 00 00 0D 13 03 27 12 F6 6B 05 7B 0C 11 05 26 04
+R 00 00 00 09
+T 00 00 1A 1E 01 20 06
+R 00 00 00 09
+T 00 00 1E
+R 00 00 00 09
+T 00 00 1E 5C 1F 01 20 EA
+R 00 00 00 09
+T 00 00 23
+R 00 00 00 09
+T 00 00 23 5F
+R 00 00 00 09
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 5B 05 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_memchr.sym b/device/lib/stm8-large/_memchr.sym
new file mode 100644
index 0000000..2a68751
--- /dev/null
+++ b/device/lib/stm8-large/_memchr.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _memchr 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 27 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_memcmp.asm b/device/lib/stm8-large/_memcmp.asm
new file mode 100644
index 0000000..a8f78b6
--- /dev/null
+++ b/device/lib/stm8-large/_memcmp.asm
@@ -0,0 +1,101 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _memcmp
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _memcmp
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_memcmp.c: 31: int memcmp (const void * buf1, const void * buf2, size_t count)
+; -----------------------------------------
+; function memcmp
+; -----------------------------------------
+_memcmp:
+ sub sp, #5
+; ../_memcmp.c: 33: if (!count)
+; ../_memcmp.c: 34: return(0);
+ ldw x, (0x0d, sp)
+; ../_memcmp.c: 36: while ( --count && *((char *)buf1) == *((char *)buf2) ) {
+ jreq 00107$
+ ldw y, (0x0d, sp)
+ ldw (0x04, sp), y
+00104$:
+ ldw x, (0x04, sp)
+ decw x
+ ldw (0x04, sp), x
+ ldw x, (0x09, sp)
+ ldw y, (0x0b, sp)
+ ldw (0x01, sp), y
+ ld a, (x)
+ ld (0x03, sp), a
+ ldw y, (0x01, sp)
+ ld a, (y)
+ ldw y, (0x04, sp)
+ jreq 00106$
+ cp a, (0x03, sp)
+ jrne 00106$
+; ../_memcmp.c: 37: buf1 = (char *)buf1 + 1;
+ incw x
+ ldw (0x09, sp), x
+; ../_memcmp.c: 38: buf2 = (char *)buf2 + 1;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x0b, sp), x
+ jra 00104$
+00106$:
+; ../_memcmp.c: 41: return( *((unsigned char *)buf1) - *((unsigned char *)buf2) );
+ clrw x
+ exg a, xl
+ ld a, (0x03, sp)
+ exg a, xl
+ ld (0x05, sp), a
+ clr (0x04, sp)
+ subw x, (0x04, sp)
+00107$:
+; ../_memcmp.c: 42: }
+ addw sp, #5
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memcmp.lst b/device/lib/stm8-large/_memcmp.lst
new file mode 100644
index 0000000..943ac07
--- /dev/null
+++ b/device/lib/stm8-large/_memcmp.lst
@@ -0,0 +1,101 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _memcmp
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _memcmp
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_memcmp.c: 31: int memcmp (const void * buf1, const void * buf2, size_t count)
+ 50 ; -----------------------------------------
+ 51 ; function memcmp
+ 52 ; -----------------------------------------
+ 000000 53 _memcmp:
+ 000000 52 05 [ 2] 54 sub sp, #5
+ 55 ; ../_memcmp.c: 33: if (!count)
+ 56 ; ../_memcmp.c: 34: return(0);
+ 000002 1E 0D [ 2] 57 ldw x, (0x0d, sp)
+ 58 ; ../_memcmp.c: 36: while ( --count && *((char *)buf1) == *((char *)buf2) ) {
+ 000004 27 34 [ 1] 59 jreq 00107$
+ 000006 16 0D [ 2] 60 ldw y, (0x0d, sp)
+ 000008 17 04 [ 2] 61 ldw (0x04, sp), y
+ 00000A 62 00104$:
+ 00000A 1E 04 [ 2] 63 ldw x, (0x04, sp)
+ 00000C 5A [ 2] 64 decw x
+ 00000D 1F 04 [ 2] 65 ldw (0x04, sp), x
+ 00000F 1E 09 [ 2] 66 ldw x, (0x09, sp)
+ 000011 16 0B [ 2] 67 ldw y, (0x0b, sp)
+ 000013 17 01 [ 2] 68 ldw (0x01, sp), y
+ 000015 F6 [ 1] 69 ld a, (x)
+ 000016 6B 03 [ 1] 70 ld (0x03, sp), a
+ 000018 16 01 [ 2] 71 ldw y, (0x01, sp)
+ 00001A 90 F6 [ 1] 72 ld a, (y)
+ 00001C 16 04 [ 2] 73 ldw y, (0x04, sp)
+ 00001E 27 0E [ 1] 74 jreq 00106$
+ 000020 11 03 [ 1] 75 cp a, (0x03, sp)
+ 000022 26 0A [ 1] 76 jrne 00106$
+ 77 ; ../_memcmp.c: 37: buf1 = (char *)buf1 + 1;
+ 000024 5C [ 1] 78 incw x
+ 000025 1F 09 [ 2] 79 ldw (0x09, sp), x
+ 80 ; ../_memcmp.c: 38: buf2 = (char *)buf2 + 1;
+ 000027 1E 01 [ 2] 81 ldw x, (0x01, sp)
+ 000029 5C [ 1] 82 incw x
+ 00002A 1F 0B [ 2] 83 ldw (0x0b, sp), x
+ 00002C 20 DC [ 2] 84 jra 00104$
+ 00002E 85 00106$:
+ 86 ; ../_memcmp.c: 41: return( *((unsigned char *)buf1) - *((unsigned char *)buf2) );
+ 00002E 5F [ 1] 87 clrw x
+ 00002F 41 [ 1] 88 exg a, xl
+ 000030 7B 03 [ 1] 89 ld a, (0x03, sp)
+ 000032 41 [ 1] 90 exg a, xl
+ 000033 6B 05 [ 1] 91 ld (0x05, sp), a
+ 000035 0F 04 [ 1] 92 clr (0x04, sp)
+ 000037 72 F0 04 [ 2] 93 subw x, (0x04, sp)
+ 00003A 94 00107$:
+ 95 ; ../_memcmp.c: 42: }
+ 00003A 5B 05 [ 2] 96 addw sp, #5
+ 00003C 87 [ 5] 97 retf
+ 98 .area CODE
+ 99 .area CONST
+ 100 .area INITIALIZER
+ 101 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memcmp.rel b/device/lib/stm8-large/_memcmp.rel
new file mode 100644
index 0000000..195fea1
--- /dev/null
+++ b/device/lib/stm8-large/_memcmp.rel
@@ -0,0 +1,37 @@
+XH3
+H B areas 2 global symbols
+M _memcmp
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3D flags 0 addr 0
+S _memcmp Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 1E 0D 27 34 16 0D 17 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 1E 04 5A 1F 04 1E 09 16 0B 17 01 F6 6B
+R 00 00 00 09
+T 00 00 17 03 16 01 90 F6 16 04 27 0E 11 03 26 0A
+R 00 00 00 09
+T 00 00 24 5C 1F 09 1E 01 5C 1F 0B 20 DC
+R 00 00 00 09
+T 00 00 2E
+R 00 00 00 09
+T 00 00 2E 5F 41 7B 03 41 6B 05 0F 04 72 F0 04
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A 5B 05 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_memcmp.sym b/device/lib/stm8-large/_memcmp.sym
new file mode 100644
index 0000000..7371d2b
--- /dev/null
+++ b/device/lib/stm8-large/_memcmp.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _memcmp 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_memmove.asm b/device/lib/stm8-large/_memmove.asm
new file mode 100644
index 0000000..5555b3e
--- /dev/null
+++ b/device/lib/stm8-large/_memmove.asm
@@ -0,0 +1,140 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _memmove
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _memmove
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_memmove.c: 34: void * memmove (void * dst, const void * src, size_t acount)
+; -----------------------------------------
+; function memmove
+; -----------------------------------------
+_memmove:
+ sub sp, #10
+; ../_memmove.c: 36: void * ret = dst;
+ ldw y, (0x0e, sp)
+ ldw (0x03, sp), y
+; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) {
+ ldw x, (0x10, sp)
+ ldw y, (0x0e, sp)
+ ldw (0x01, sp), y
+; ../_memmove.c: 44: d = ((char *)dst)+acount-1;
+ ldw y, (0x0e, sp)
+ ldw (0x05, sp), y
+; ../_memmove.c: 45: s = ((char *)src)+acount-1;
+ ldw y, (0x10, sp)
+ ldw (0x07, sp), y
+; ../_memmove.c: 46: while (acount--) {
+ ldw y, (0x12, sp)
+ ldw (0x09, sp), y
+; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) {
+ cpw x, (0x01, sp)
+ jrnc 00108$
+; ../_memmove.c: 44: d = ((char *)dst)+acount-1;
+ ldw x, (0x05, sp)
+ addw x, (0x12, sp)
+ decw x
+ exgw x, y
+; ../_memmove.c: 45: s = ((char *)src)+acount-1;
+ ldw x, (0x07, sp)
+ addw x, (0x12, sp)
+ decw x
+; ../_memmove.c: 46: while (acount--) {
+ ldw (0x05, sp), x
+ ldw (0x07, sp), y
+ ldw y, (0x09, sp)
+00101$:
+ ldw x, y
+ decw y
+ tnzw x
+ jreq 00109$
+; ../_memmove.c: 47: *d-- = *s--;
+ ldw x, (0x05, sp)
+ ld a, (x)
+ ldw x, (0x05, sp)
+ decw x
+ ldw (0x05, sp), x
+ ldw x, (0x07, sp)
+ ld (x), a
+ ldw x, (0x07, sp)
+ decw x
+ ldw (0x07, sp), x
+ jra 00101$
+00108$:
+; ../_memmove.c: 54: d = dst;
+ ldw x, (0x05, sp)
+; ../_memmove.c: 55: s = src;
+ ldw y, (0x07, sp)
+; ../_memmove.c: 56: while (acount--) {
+ ldw (0x05, sp), y
+ ldw (0x07, sp), x
+00104$:
+ ldw x, (0x09, sp)
+ ldw y, (0x09, sp)
+ decw y
+ ldw (0x09, sp), y
+ tnzw x
+ jreq 00109$
+; ../_memmove.c: 57: *d++ = *s++;
+ ldw x, (0x05, sp)
+ ld a, (x)
+ ldw x, (0x05, sp)
+ incw x
+ ldw (0x05, sp), x
+ ldw x, (0x07, sp)
+ ld (x), a
+ ldw x, (0x07, sp)
+ incw x
+ ldw (0x07, sp), x
+ jra 00104$
+00109$:
+; ../_memmove.c: 61: return(ret);
+ ldw x, (0x03, sp)
+; ../_memmove.c: 62: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memmove.lst b/device/lib/stm8-large/_memmove.lst
new file mode 100644
index 0000000..fa0f36e
--- /dev/null
+++ b/device/lib/stm8-large/_memmove.lst
@@ -0,0 +1,140 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _memmove
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _memmove
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_memmove.c: 34: void * memmove (void * dst, const void * src, size_t acount)
+ 50 ; -----------------------------------------
+ 51 ; function memmove
+ 52 ; -----------------------------------------
+ 000000 53 _memmove:
+ 000000 52 0A [ 2] 54 sub sp, #10
+ 55 ; ../_memmove.c: 36: void * ret = dst;
+ 000002 16 0E [ 2] 56 ldw y, (0x0e, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 58 ; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) {
+ 000006 1E 10 [ 2] 59 ldw x, (0x10, sp)
+ 000008 16 0E [ 2] 60 ldw y, (0x0e, sp)
+ 00000A 17 01 [ 2] 61 ldw (0x01, sp), y
+ 62 ; ../_memmove.c: 44: d = ((char *)dst)+acount-1;
+ 00000C 16 0E [ 2] 63 ldw y, (0x0e, sp)
+ 00000E 17 05 [ 2] 64 ldw (0x05, sp), y
+ 65 ; ../_memmove.c: 45: s = ((char *)src)+acount-1;
+ 000010 16 10 [ 2] 66 ldw y, (0x10, sp)
+ 000012 17 07 [ 2] 67 ldw (0x07, sp), y
+ 68 ; ../_memmove.c: 46: while (acount--) {
+ 000014 16 12 [ 2] 69 ldw y, (0x12, sp)
+ 000016 17 09 [ 2] 70 ldw (0x09, sp), y
+ 71 ; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) {
+ 000018 13 01 [ 2] 72 cpw x, (0x01, sp)
+ 00001A 24 2B [ 1] 73 jrnc 00108$
+ 74 ; ../_memmove.c: 44: d = ((char *)dst)+acount-1;
+ 00001C 1E 05 [ 2] 75 ldw x, (0x05, sp)
+ 00001E 72 FB 12 [ 2] 76 addw x, (0x12, sp)
+ 000021 5A [ 2] 77 decw x
+ 000022 51 [ 1] 78 exgw x, y
+ 79 ; ../_memmove.c: 45: s = ((char *)src)+acount-1;
+ 000023 1E 07 [ 2] 80 ldw x, (0x07, sp)
+ 000025 72 FB 12 [ 2] 81 addw x, (0x12, sp)
+ 000028 5A [ 2] 82 decw x
+ 83 ; ../_memmove.c: 46: while (acount--) {
+ 000029 1F 05 [ 2] 84 ldw (0x05, sp), x
+ 00002B 17 07 [ 2] 85 ldw (0x07, sp), y
+ 00002D 16 09 [ 2] 86 ldw y, (0x09, sp)
+ 00002F 87 00101$:
+ 00002F 93 [ 1] 88 ldw x, y
+ 000030 90 5A [ 2] 89 decw y
+ 000032 5D [ 2] 90 tnzw x
+ 000033 27 37 [ 1] 91 jreq 00109$
+ 92 ; ../_memmove.c: 47: *d-- = *s--;
+ 000035 1E 05 [ 2] 93 ldw x, (0x05, sp)
+ 000037 F6 [ 1] 94 ld a, (x)
+ 000038 1E 05 [ 2] 95 ldw x, (0x05, sp)
+ 00003A 5A [ 2] 96 decw x
+ 00003B 1F 05 [ 2] 97 ldw (0x05, sp), x
+ 00003D 1E 07 [ 2] 98 ldw x, (0x07, sp)
+ 00003F F7 [ 1] 99 ld (x), a
+ 000040 1E 07 [ 2] 100 ldw x, (0x07, sp)
+ 000042 5A [ 2] 101 decw x
+ 000043 1F 07 [ 2] 102 ldw (0x07, sp), x
+ 000045 20 E8 [ 2] 103 jra 00101$
+ 000047 104 00108$:
+ 105 ; ../_memmove.c: 54: d = dst;
+ 000047 1E 05 [ 2] 106 ldw x, (0x05, sp)
+ 107 ; ../_memmove.c: 55: s = src;
+ 000049 16 07 [ 2] 108 ldw y, (0x07, sp)
+ 109 ; ../_memmove.c: 56: while (acount--) {
+ 00004B 17 05 [ 2] 110 ldw (0x05, sp), y
+ 00004D 1F 07 [ 2] 111 ldw (0x07, sp), x
+ 00004F 112 00104$:
+ 00004F 1E 09 [ 2] 113 ldw x, (0x09, sp)
+ 000051 16 09 [ 2] 114 ldw y, (0x09, sp)
+ 000053 90 5A [ 2] 115 decw y
+ 000055 17 09 [ 2] 116 ldw (0x09, sp), y
+ 000057 5D [ 2] 117 tnzw x
+ 000058 27 12 [ 1] 118 jreq 00109$
+ 119 ; ../_memmove.c: 57: *d++ = *s++;
+ 00005A 1E 05 [ 2] 120 ldw x, (0x05, sp)
+ 00005C F6 [ 1] 121 ld a, (x)
+ 00005D 1E 05 [ 2] 122 ldw x, (0x05, sp)
+ 00005F 5C [ 1] 123 incw x
+ 000060 1F 05 [ 2] 124 ldw (0x05, sp), x
+ 000062 1E 07 [ 2] 125 ldw x, (0x07, sp)
+ 000064 F7 [ 1] 126 ld (x), a
+ 000065 1E 07 [ 2] 127 ldw x, (0x07, sp)
+ 000067 5C [ 1] 128 incw x
+ 000068 1F 07 [ 2] 129 ldw (0x07, sp), x
+ 00006A 20 E3 [ 2] 130 jra 00104$
+ 00006C 131 00109$:
+ 132 ; ../_memmove.c: 61: return(ret);
+ 00006C 1E 03 [ 2] 133 ldw x, (0x03, sp)
+ 134 ; ../_memmove.c: 62: }
+ 00006E 5B 0A [ 2] 135 addw sp, #10
+ 000070 87 [ 5] 136 retf
+ 137 .area CODE
+ 138 .area CONST
+ 139 .area INITIALIZER
+ 140 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memmove.rel b/device/lib/stm8-large/_memmove.rel
new file mode 100644
index 0000000..7a0fdcb
--- /dev/null
+++ b/device/lib/stm8-large/_memmove.rel
@@ -0,0 +1,49 @@
+XH3
+H B areas 2 global symbols
+M _memmove
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 71 flags 0 addr 0
+S _memmove Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 16 0E 17 03 1E 10 16 0E 17 01 16
+R 00 00 00 09
+T 00 00 0D 0E 17 05 16 10 17 07 16 12 17 09 13 01
+R 00 00 00 09
+T 00 00 1A 24 2B 1E 05 72 FB 12 5A 51 1E 07 72 FB
+R 00 00 00 09
+T 00 00 27 12 5A 1F 05 17 07 16 09
+R 00 00 00 09
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F 93 90 5A 5D 27 37 1E 05 F6 1E 05 5A 1F
+R 00 00 00 09
+T 00 00 3C 05 1E 07 F7 1E 07 5A 1F 07 20 E8
+R 00 00 00 09
+T 00 00 47
+R 00 00 00 09
+T 00 00 47 1E 05 16 07 17 05 1F 07
+R 00 00 00 09
+T 00 00 4F
+R 00 00 00 09
+T 00 00 4F 1E 09 16 09 90 5A 17 09 5D 27 12 1E 05
+R 00 00 00 09
+T 00 00 5C F6 1E 05 5C 1F 05 1E 07 F7 1E 07 5C 1F
+R 00 00 00 09
+T 00 00 69 07 20 E3
+R 00 00 00 09
+T 00 00 6C
+R 00 00 00 09
+T 00 00 6C 1E 03 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_memmove.sym b/device/lib/stm8-large/_memmove.sym
new file mode 100644
index 0000000..588ce3b
--- /dev/null
+++ b/device/lib/stm8-large/_memmove.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _memmove 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 71 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_memset.asm b/device/lib/stm8-large/_memset.asm
new file mode 100644
index 0000000..19c0cec
--- /dev/null
+++ b/device/lib/stm8-large/_memset.asm
@@ -0,0 +1,83 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _memset
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _memset
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_memset.c: 41: void *memset (void *s, int c, size_t n)
+; -----------------------------------------
+; function memset
+; -----------------------------------------
+_memset:
+ sub sp, #2
+; ../_memset.c: 44: register unsigned char *ret = s;
+ ldw x, (0x06, sp)
+; ../_memset.c: 46: while (n--)
+ ldw (0x01, sp), x
+ ldw y, (0x0a, sp)
+00101$:
+ ldw x, y
+ decw y
+ tnzw x
+ jreq 00103$
+; ../_memset.c: 48: *(unsigned char *) ret = c;
+ ld a, (0x09, sp)
+ ldw x, (0x01, sp)
+ ld (x), a
+; ../_memset.c: 49: ret = ((unsigned char *) ret) + 1;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x01, sp), x
+ jra 00101$
+00103$:
+; ../_memset.c: 52: return s;
+ ldw x, (0x06, sp)
+; ../_memset.c: 53: }
+ addw sp, #2
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memset.lst b/device/lib/stm8-large/_memset.lst
new file mode 100644
index 0000000..01d217f
--- /dev/null
+++ b/device/lib/stm8-large/_memset.lst
@@ -0,0 +1,83 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _memset
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _memset
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_memset.c: 41: void *memset (void *s, int c, size_t n)
+ 50 ; -----------------------------------------
+ 51 ; function memset
+ 52 ; -----------------------------------------
+ 000000 53 _memset:
+ 000000 52 02 [ 2] 54 sub sp, #2
+ 55 ; ../_memset.c: 44: register unsigned char *ret = s;
+ 000002 1E 06 [ 2] 56 ldw x, (0x06, sp)
+ 57 ; ../_memset.c: 46: while (n--)
+ 000004 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 000006 16 0A [ 2] 59 ldw y, (0x0a, sp)
+ 000008 60 00101$:
+ 000008 93 [ 1] 61 ldw x, y
+ 000009 90 5A [ 2] 62 decw y
+ 00000B 5D [ 2] 63 tnzw x
+ 00000C 27 0C [ 1] 64 jreq 00103$
+ 65 ; ../_memset.c: 48: *(unsigned char *) ret = c;
+ 00000E 7B 09 [ 1] 66 ld a, (0x09, sp)
+ 000010 1E 01 [ 2] 67 ldw x, (0x01, sp)
+ 000012 F7 [ 1] 68 ld (x), a
+ 69 ; ../_memset.c: 49: ret = ((unsigned char *) ret) + 1;
+ 000013 1E 01 [ 2] 70 ldw x, (0x01, sp)
+ 000015 5C [ 1] 71 incw x
+ 000016 1F 01 [ 2] 72 ldw (0x01, sp), x
+ 000018 20 EE [ 2] 73 jra 00101$
+ 00001A 74 00103$:
+ 75 ; ../_memset.c: 52: return s;
+ 00001A 1E 06 [ 2] 76 ldw x, (0x06, sp)
+ 77 ; ../_memset.c: 53: }
+ 00001C 5B 02 [ 2] 78 addw sp, #2
+ 00001E 87 [ 5] 79 retf
+ 80 .area CODE
+ 81 .area CONST
+ 82 .area INITIALIZER
+ 83 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_memset.rel b/device/lib/stm8-large/_memset.rel
new file mode 100644
index 0000000..f89a346
--- /dev/null
+++ b/device/lib/stm8-large/_memset.rel
@@ -0,0 +1,31 @@
+XH3
+H B areas 2 global symbols
+M _memset
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1F flags 0 addr 0
+S _memset Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 1E 06 1F 01 16 0A
+R 00 00 00 09
+T 00 00 08
+R 00 00 00 09
+T 00 00 08 93 90 5A 5D 27 0C 7B 09 1E 01 F7 1E 01
+R 00 00 00 09
+T 00 00 15 5C 1F 01 20 EE
+R 00 00 00 09
+T 00 00 1A
+R 00 00 00 09
+T 00 00 1A 1E 06 5B 02 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_memset.sym b/device/lib/stm8-large/_memset.sym
new file mode 100644
index 0000000..044f739
--- /dev/null
+++ b/device/lib/stm8-large/_memset.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _memset 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_modschar.asm b/device/lib/stm8-large/_modschar.asm
new file mode 100644
index 0000000..06c8d00
--- /dev/null
+++ b/device/lib/stm8-large/_modschar.asm
@@ -0,0 +1,122 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _modschar
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __modschar
+ .globl __moduschar
+ .globl __modsuchar
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_modschar.c: 31: _modschar (signed char x, signed char y)
+; -----------------------------------------
+; function _modschar
+; -----------------------------------------
+__modschar:
+; ../_modschar.c: 33: return ((int)x % (int)y);
+ ld a, (0x04, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld a, (0x05, sp)
+ ld yl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld yh, a
+ pushw y
+ pushw x
+ callf __modsint
+ addw sp, #4
+; ../_modschar.c: 34: }
+ retf
+; ../_modschar.c: 37: _moduschar (unsigned char x, unsigned char y)
+; -----------------------------------------
+; function _moduschar
+; -----------------------------------------
+__moduschar:
+ sub sp, #2
+; ../_modschar.c: 39: return ((int)((signed char)x) % (int)y);
+ ld a, (0x06, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld a, (0x07, sp)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+ ldw y, (0x01, sp)
+ pushw y
+ pushw x
+ callf __modsint
+; ../_modschar.c: 40: }
+ addw sp, #6
+ retf
+; ../_modschar.c: 43: _modsuchar (signed char x, signed char y)
+; -----------------------------------------
+; function _modsuchar
+; -----------------------------------------
+__modsuchar:
+; ../_modschar.c: 45: return ((int)((unsigned char)x) % (int)y);
+ ld a, (0x04, sp)
+ clrw y
+ ld yl, a
+ ld a, (0x05, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ pushw x
+ pushw y
+ callf __modsint
+ addw sp, #4
+; ../_modschar.c: 46: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modschar.lst b/device/lib/stm8-large/_modschar.lst
new file mode 100644
index 0000000..46ccc49
--- /dev/null
+++ b/device/lib/stm8-large/_modschar.lst
@@ -0,0 +1,122 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _modschar
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __modschar
+ 12 .globl __moduschar
+ 13 .globl __modsuchar
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../_modschar.c: 31: _modschar (signed char x, signed char y)
+ 52 ; -----------------------------------------
+ 53 ; function _modschar
+ 54 ; -----------------------------------------
+ 000000 55 __modschar:
+ 56 ; ../_modschar.c: 33: return ((int)x % (int)y);
+ 000000 7B 04 [ 1] 57 ld a, (0x04, sp)
+ 000002 97 [ 1] 58 ld xl, a
+ 000003 49 [ 1] 59 rlc a
+ 000004 4F [ 1] 60 clr a
+ 000005 A2 00 [ 1] 61 sbc a, #0x00
+ 000007 95 [ 1] 62 ld xh, a
+ 000008 7B 05 [ 1] 63 ld a, (0x05, sp)
+ 00000A 90 97 [ 1] 64 ld yl, a
+ 00000C 49 [ 1] 65 rlc a
+ 00000D 4F [ 1] 66 clr a
+ 00000E A2 00 [ 1] 67 sbc a, #0x00
+ 000010 90 95 [ 1] 68 ld yh, a
+ 000012 90 89 [ 2] 69 pushw y
+ 000014 89 [ 2] 70 pushw x
+ 000015 8Ds00r00r00 [ 5] 71 callf __modsint
+ 000019 5B 04 [ 2] 72 addw sp, #4
+ 73 ; ../_modschar.c: 34: }
+ 00001B 87 [ 5] 74 retf
+ 75 ; ../_modschar.c: 37: _moduschar (unsigned char x, unsigned char y)
+ 76 ; -----------------------------------------
+ 77 ; function _moduschar
+ 78 ; -----------------------------------------
+ 00001C 79 __moduschar:
+ 00001C 52 02 [ 2] 80 sub sp, #2
+ 81 ; ../_modschar.c: 39: return ((int)((signed char)x) % (int)y);
+ 00001E 7B 06 [ 1] 82 ld a, (0x06, sp)
+ 000020 97 [ 1] 83 ld xl, a
+ 000021 49 [ 1] 84 rlc a
+ 000022 4F [ 1] 85 clr a
+ 000023 A2 00 [ 1] 86 sbc a, #0x00
+ 000025 95 [ 1] 87 ld xh, a
+ 000026 7B 07 [ 1] 88 ld a, (0x07, sp)
+ 000028 6B 02 [ 1] 89 ld (0x02, sp), a
+ 00002A 0F 01 [ 1] 90 clr (0x01, sp)
+ 00002C 16 01 [ 2] 91 ldw y, (0x01, sp)
+ 00002E 90 89 [ 2] 92 pushw y
+ 000030 89 [ 2] 93 pushw x
+ 000031 8Ds00r00r00 [ 5] 94 callf __modsint
+ 95 ; ../_modschar.c: 40: }
+ 000035 5B 06 [ 2] 96 addw sp, #6
+ 000037 87 [ 5] 97 retf
+ 98 ; ../_modschar.c: 43: _modsuchar (signed char x, signed char y)
+ 99 ; -----------------------------------------
+ 100 ; function _modsuchar
+ 101 ; -----------------------------------------
+ 000038 102 __modsuchar:
+ 103 ; ../_modschar.c: 45: return ((int)((unsigned char)x) % (int)y);
+ 000038 7B 04 [ 1] 104 ld a, (0x04, sp)
+ 00003A 90 5F [ 1] 105 clrw y
+ 00003C 90 97 [ 1] 106 ld yl, a
+ 00003E 7B 05 [ 1] 107 ld a, (0x05, sp)
+ 000040 97 [ 1] 108 ld xl, a
+ 000041 49 [ 1] 109 rlc a
+ 000042 4F [ 1] 110 clr a
+ 000043 A2 00 [ 1] 111 sbc a, #0x00
+ 000045 95 [ 1] 112 ld xh, a
+ 000046 89 [ 2] 113 pushw x
+ 000047 90 89 [ 2] 114 pushw y
+ 000049 8Ds00r00r00 [ 5] 115 callf __modsint
+ 00004D 5B 04 [ 2] 116 addw sp, #4
+ 117 ; ../_modschar.c: 46: }
+ 00004F 87 [ 5] 118 retf
+ 119 .area CODE
+ 120 .area CONST
+ 121 .area INITIALIZER
+ 122 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modschar.rel b/device/lib/stm8-large/_modschar.rel
new file mode 100644
index 0000000..0c5380c
--- /dev/null
+++ b/device/lib/stm8-large/_modschar.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 5 global symbols
+M _modschar
+O -mstm8
+S .__.ABS. Def000000
+S __modsint Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 50 flags 0 addr 0
+S __modsuchar Def000038
+S __moduschar Def00001C
+S __modschar Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 04 97 49 4F A2 00 95 7B 05 90 97 49
+R 00 00 00 09
+T 00 00 0D 4F A2 00 90 95 90 89 89 8D
+R 00 00 00 09
+T 00 00 16 00 00 00 5B 04 87
+R 00 00 00 09 82 03 00 01
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 52 02 7B 06 97 49 4F A2 00 95 7B 07 6B
+R 00 00 00 09
+T 00 00 29 02 0F 01 16 01 90 89 89 8D
+R 00 00 00 09
+T 00 00 32 00 00 00 5B 06 87
+R 00 00 00 09 82 03 00 01
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 7B 04 90 5F 90 97 7B 05 97 49 4F A2 00
+R 00 00 00 09
+T 00 00 45 95 89 90 89 8D 00 00 00 5B 04 87
+R 00 00 00 09 82 08 00 01
diff --git a/device/lib/stm8-large/_modschar.sym b/device/lib/stm8-large/_modschar.sym
new file mode 100644
index 0000000..a585b88
--- /dev/null
+++ b/device/lib/stm8-large/_modschar.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __modschar 000000 GR
+ __modsint ****** GX
+ 9 __modsuchar 000038 GR
+ 9 __moduschar 00001C GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 50 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_modsint.asm b/device/lib/stm8-large/_modsint.asm
new file mode 100644
index 0000000..5fe25bd
--- /dev/null
+++ b/device/lib/stm8-large/_modsint.asm
@@ -0,0 +1,103 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _modsint
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __modsint
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_modsint.c: 203: int _modsint (int a, int b)
+; -----------------------------------------
+; function _modsint
+; -----------------------------------------
+__modsint:
+ sub sp, #5
+; ../_modsint.c: 207: r = (unsigned)(a < 0 ? -a : a) % (unsigned)(b < 0 ? -b : b);
+ tnz (0x09, sp)
+ jrmi 00125$
+ clr (0x01, sp)
+ jra 00126$
+00125$:
+ ld a, #0x01
+ ld (0x01, sp), a
+00126$:
+ tnz (0x01, sp)
+ jreq 00106$
+ ldw x, (0x09, sp)
+ negw x
+ .byte 0xc5
+00106$:
+ ldw x, (0x09, sp)
+00107$:
+ ldw (0x02, sp), x
+ tnz (0x0b, sp)
+ jrpl 00108$
+ ld a, (0x0c, sp)
+ neg a
+ ld (0x05, sp), a
+ clr a
+ sbc a, (0x0b, sp)
+ ld (0x04, sp), a
+ jra 00109$
+00108$:
+ ldw y, (0x0b, sp)
+ ldw (0x04, sp), y
+00109$:
+ ldw y, (0x04, sp)
+ ldw x, (0x02, sp)
+ divw x, y
+ ldw x, y
+; ../_modsint.c: 209: if (a < 0)
+ tnz (0x01, sp)
+ jreq 00102$
+; ../_modsint.c: 210: return -r;
+ negw x
+; ../_modsint.c: 212: return r;
+00102$:
+; ../_modsint.c: 213: }
+ addw sp, #5
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modsint.lst b/device/lib/stm8-large/_modsint.lst
new file mode 100644
index 0000000..a0fac23
--- /dev/null
+++ b/device/lib/stm8-large/_modsint.lst
@@ -0,0 +1,103 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _modsint
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __modsint
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_modsint.c: 203: int _modsint (int a, int b)
+ 50 ; -----------------------------------------
+ 51 ; function _modsint
+ 52 ; -----------------------------------------
+ 000000 53 __modsint:
+ 000000 52 05 [ 2] 54 sub sp, #5
+ 55 ; ../_modsint.c: 207: r = (unsigned)(a < 0 ? -a : a) % (unsigned)(b < 0 ? -b : b);
+ 000002 0D 09 [ 1] 56 tnz (0x09, sp)
+ 000004 2B 04 [ 1] 57 jrmi 00125$
+ 000006 0F 01 [ 1] 58 clr (0x01, sp)
+ 000008 20 04 [ 2] 59 jra 00126$
+ 00000A 60 00125$:
+ 00000A A6 01 [ 1] 61 ld a, #0x01
+ 00000C 6B 01 [ 1] 62 ld (0x01, sp), a
+ 00000E 63 00126$:
+ 00000E 0D 01 [ 1] 64 tnz (0x01, sp)
+ 000010 27 04 [ 1] 65 jreq 00106$
+ 000012 1E 09 [ 2] 66 ldw x, (0x09, sp)
+ 000014 50 [ 2] 67 negw x
+ 000015 C5 68 .byte 0xc5
+ 000016 69 00106$:
+ 000016 1E 09 [ 2] 70 ldw x, (0x09, sp)
+ 000018 71 00107$:
+ 000018 1F 02 [ 2] 72 ldw (0x02, sp), x
+ 00001A 0D 0B [ 1] 73 tnz (0x0b, sp)
+ 00001C 2A 0C [ 1] 74 jrpl 00108$
+ 00001E 7B 0C [ 1] 75 ld a, (0x0c, sp)
+ 000020 40 [ 1] 76 neg a
+ 000021 6B 05 [ 1] 77 ld (0x05, sp), a
+ 000023 4F [ 1] 78 clr a
+ 000024 12 0B [ 1] 79 sbc a, (0x0b, sp)
+ 000026 6B 04 [ 1] 80 ld (0x04, sp), a
+ 000028 20 04 [ 2] 81 jra 00109$
+ 00002A 82 00108$:
+ 00002A 16 0B [ 2] 83 ldw y, (0x0b, sp)
+ 00002C 17 04 [ 2] 84 ldw (0x04, sp), y
+ 00002E 85 00109$:
+ 00002E 16 04 [ 2] 86 ldw y, (0x04, sp)
+ 000030 1E 02 [ 2] 87 ldw x, (0x02, sp)
+ 000032 65 [ 2] 88 divw x, y
+ 000033 93 [ 1] 89 ldw x, y
+ 90 ; ../_modsint.c: 209: if (a < 0)
+ 000034 0D 01 [ 1] 91 tnz (0x01, sp)
+ 000036 27 01 [ 1] 92 jreq 00102$
+ 93 ; ../_modsint.c: 210: return -r;
+ 000038 50 [ 2] 94 negw x
+ 95 ; ../_modsint.c: 212: return r;
+ 000039 96 00102$:
+ 97 ; ../_modsint.c: 213: }
+ 000039 5B 05 [ 2] 98 addw sp, #5
+ 00003B 87 [ 5] 99 retf
+ 100 .area CODE
+ 101 .area CONST
+ 102 .area INITIALIZER
+ 103 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modsint.rel b/device/lib/stm8-large/_modsint.rel
new file mode 100644
index 0000000..b9c5e0a
--- /dev/null
+++ b/device/lib/stm8-large/_modsint.rel
@@ -0,0 +1,51 @@
+XH3
+H B areas 2 global symbols
+M _modsint
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3C flags 0 addr 0
+S __modsint Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 0D 09 2B 04 0F 01 20 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 0D 01 27 04 1E 09 50 C5
+R 00 00 00 09
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 1E 09
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 1F 02 0D 0B 2A 0C 7B 0C 40 6B 05 4F 12
+R 00 00 00 09
+T 00 00 25 0B 6B 04 20 04
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 16 0B 17 04
+R 00 00 00 09
+T 00 00 2E
+R 00 00 00 09
+T 00 00 2E 16 04 1E 02 65 93 0D 01 27 01 50
+R 00 00 00 09
+T 00 00 39
+R 00 00 00 09
+T 00 00 39 5B 05 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_modsint.sym b/device/lib/stm8-large/_modsint.sym
new file mode 100644
index 0000000..6b288d2
--- /dev/null
+++ b/device/lib/stm8-large/_modsint.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __modsint 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_modslong.asm b/device/lib/stm8-large/_modslong.asm
new file mode 100644
index 0000000..c25006a
--- /dev/null
+++ b/device/lib/stm8-large/_modslong.asm
@@ -0,0 +1,142 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _modslong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __modslong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_modslong.c: 259: _modslong (long a, long b)
+; -----------------------------------------
+; function _modslong
+; -----------------------------------------
+__modslong:
+ sub sp, #9
+; ../_modslong.c: 263: r = (unsigned long)(a < 0 ? -a : a) % (unsigned long)(b < 0 ? -b : b);
+ tnz (0x0d, sp)
+ jrmi 00125$
+ clr (0x01, sp)
+ jra 00126$
+00125$:
+ ld a, #0x01
+ ld (0x01, sp), a
+00126$:
+ tnz (0x01, sp)
+ jreq 00106$
+ ldw y, (0x0f, sp)
+ negw y
+ ldw x, (0x0d, sp)
+ jrnc 00128$
+ incw x
+00128$:
+ negw x
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+ jra 00107$
+00106$:
+ ldw y, (0x0f, sp)
+ ldw (0x08, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x06, sp), y
+00107$:
+ ldw y, (0x08, sp)
+ ldw (0x04, sp), y
+ ldw y, (0x06, sp)
+ ldw (0x02, sp), y
+ tnz (0x11, sp)
+ jrpl 00108$
+ ld a, (0x14, sp)
+ neg a
+ ld (0x09, sp), a
+ clr a
+ sbc a, (0x13, sp)
+ ld (0x08, sp), a
+ clr a
+ sbc a, (0x12, sp)
+ ld (0x07, sp), a
+ clr a
+ sbc a, (0x11, sp)
+ ld (0x06, sp), a
+ jra 00109$
+00108$:
+ ldw y, (0x13, sp)
+ ldw (0x08, sp), y
+ ldw y, (0x11, sp)
+ ldw (0x06, sp), y
+00109$:
+ ldw x, (0x08, sp)
+ ldw y, (0x06, sp)
+ pushw x
+ pushw y
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ callf __modulong
+ addw sp, #8
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../_modslong.c: 265: if (a < 0)
+ tnz (0x01, sp)
+ jreq 00102$
+; ../_modslong.c: 266: return -r;
+ ldw x, (0x08, sp)
+ negw x
+ ldw y, (0x06, sp)
+ jrnc 00131$
+ incw y
+00131$:
+ negw y
+ jra 00104$
+00102$:
+; ../_modslong.c: 268: return r;
+ ldw x, (0x08, sp)
+ ldw y, (0x06, sp)
+00104$:
+; ../_modslong.c: 269: }
+ addw sp, #9
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modslong.lst b/device/lib/stm8-large/_modslong.lst
new file mode 100644
index 0000000..f52490b
--- /dev/null
+++ b/device/lib/stm8-large/_modslong.lst
@@ -0,0 +1,142 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _modslong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __modslong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_modslong.c: 259: _modslong (long a, long b)
+ 50 ; -----------------------------------------
+ 51 ; function _modslong
+ 52 ; -----------------------------------------
+ 000000 53 __modslong:
+ 000000 52 09 [ 2] 54 sub sp, #9
+ 55 ; ../_modslong.c: 263: r = (unsigned long)(a < 0 ? -a : a) % (unsigned long)(b < 0 ? -b : b);
+ 000002 0D 0D [ 1] 56 tnz (0x0d, sp)
+ 000004 2B 04 [ 1] 57 jrmi 00125$
+ 000006 0F 01 [ 1] 58 clr (0x01, sp)
+ 000008 20 04 [ 2] 59 jra 00126$
+ 00000A 60 00125$:
+ 00000A A6 01 [ 1] 61 ld a, #0x01
+ 00000C 6B 01 [ 1] 62 ld (0x01, sp), a
+ 00000E 63 00126$:
+ 00000E 0D 01 [ 1] 64 tnz (0x01, sp)
+ 000010 27 10 [ 1] 65 jreq 00106$
+ 000012 16 0F [ 2] 66 ldw y, (0x0f, sp)
+ 000014 90 50 [ 2] 67 negw y
+ 000016 1E 0D [ 2] 68 ldw x, (0x0d, sp)
+ 000018 24 01 [ 1] 69 jrnc 00128$
+ 00001A 5C [ 1] 70 incw x
+ 00001B 71 00128$:
+ 00001B 50 [ 2] 72 negw x
+ 00001C 17 08 [ 2] 73 ldw (0x08, sp), y
+ 00001E 1F 06 [ 2] 74 ldw (0x06, sp), x
+ 000020 20 08 [ 2] 75 jra 00107$
+ 000022 76 00106$:
+ 000022 16 0F [ 2] 77 ldw y, (0x0f, sp)
+ 000024 17 08 [ 2] 78 ldw (0x08, sp), y
+ 000026 16 0D [ 2] 79 ldw y, (0x0d, sp)
+ 000028 17 06 [ 2] 80 ldw (0x06, sp), y
+ 00002A 81 00107$:
+ 00002A 16 08 [ 2] 82 ldw y, (0x08, sp)
+ 00002C 17 04 [ 2] 83 ldw (0x04, sp), y
+ 00002E 16 06 [ 2] 84 ldw y, (0x06, sp)
+ 000030 17 02 [ 2] 85 ldw (0x02, sp), y
+ 000032 0D 11 [ 1] 86 tnz (0x11, sp)
+ 000034 2A 16 [ 1] 87 jrpl 00108$
+ 000036 7B 14 [ 1] 88 ld a, (0x14, sp)
+ 000038 40 [ 1] 89 neg a
+ 000039 6B 09 [ 1] 90 ld (0x09, sp), a
+ 00003B 4F [ 1] 91 clr a
+ 00003C 12 13 [ 1] 92 sbc a, (0x13, sp)
+ 00003E 6B 08 [ 1] 93 ld (0x08, sp), a
+ 000040 4F [ 1] 94 clr a
+ 000041 12 12 [ 1] 95 sbc a, (0x12, sp)
+ 000043 6B 07 [ 1] 96 ld (0x07, sp), a
+ 000045 4F [ 1] 97 clr a
+ 000046 12 11 [ 1] 98 sbc a, (0x11, sp)
+ 000048 6B 06 [ 1] 99 ld (0x06, sp), a
+ 00004A 20 08 [ 2] 100 jra 00109$
+ 00004C 101 00108$:
+ 00004C 16 13 [ 2] 102 ldw y, (0x13, sp)
+ 00004E 17 08 [ 2] 103 ldw (0x08, sp), y
+ 000050 16 11 [ 2] 104 ldw y, (0x11, sp)
+ 000052 17 06 [ 2] 105 ldw (0x06, sp), y
+ 000054 106 00109$:
+ 000054 1E 08 [ 2] 107 ldw x, (0x08, sp)
+ 000056 16 06 [ 2] 108 ldw y, (0x06, sp)
+ 000058 89 [ 2] 109 pushw x
+ 000059 90 89 [ 2] 110 pushw y
+ 00005B 1E 08 [ 2] 111 ldw x, (0x08, sp)
+ 00005D 89 [ 2] 112 pushw x
+ 00005E 1E 08 [ 2] 113 ldw x, (0x08, sp)
+ 000060 89 [ 2] 114 pushw x
+ 000061 8Ds00r00r00 [ 5] 115 callf __modulong
+ 000065 5B 08 [ 2] 116 addw sp, #8
+ 000067 1F 08 [ 2] 117 ldw (0x08, sp), x
+ 000069 17 06 [ 2] 118 ldw (0x06, sp), y
+ 119 ; ../_modslong.c: 265: if (a < 0)
+ 00006B 0D 01 [ 1] 120 tnz (0x01, sp)
+ 00006D 27 0D [ 1] 121 jreq 00102$
+ 122 ; ../_modslong.c: 266: return -r;
+ 00006F 1E 08 [ 2] 123 ldw x, (0x08, sp)
+ 000071 50 [ 2] 124 negw x
+ 000072 16 06 [ 2] 125 ldw y, (0x06, sp)
+ 000074 24 02 [ 1] 126 jrnc 00131$
+ 000076 90 5C [ 1] 127 incw y
+ 000078 128 00131$:
+ 000078 90 50 [ 2] 129 negw y
+ 00007A 20 04 [ 2] 130 jra 00104$
+ 00007C 131 00102$:
+ 132 ; ../_modslong.c: 268: return r;
+ 00007C 1E 08 [ 2] 133 ldw x, (0x08, sp)
+ 00007E 16 06 [ 2] 134 ldw y, (0x06, sp)
+ 000080 135 00104$:
+ 136 ; ../_modslong.c: 269: }
+ 000080 5B 09 [ 2] 137 addw sp, #9
+ 000082 87 [ 5] 138 retf
+ 139 .area CODE
+ 140 .area CONST
+ 141 .area INITIALIZER
+ 142 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modslong.rel b/device/lib/stm8-large/_modslong.rel
new file mode 100644
index 0000000..25a1937
--- /dev/null
+++ b/device/lib/stm8-large/_modslong.rel
@@ -0,0 +1,70 @@
+XH3
+H B areas 3 global symbols
+M _modslong
+O -mstm8
+S .__.ABS. Def000000
+S __modulong Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 83 flags 0 addr 0
+S __modslong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 09 0D 0D 2B 04 0F 01 20 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 0D 01 27 10 16 0F 90 50 1E 0D 24 01 5C
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 50 17 08 1F 06 20 08
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 16 0F 17 08 16 0D 17 06
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 16 08 17 04 16 06 17 02 0D 11 2A 16 7B
+R 00 00 00 09
+T 00 00 37 14 40 6B 09 4F 12 13 6B 08 4F 12 12 6B
+R 00 00 00 09
+T 00 00 44 07 4F 12 11 6B 06 20 08
+R 00 00 00 09
+T 00 00 4C
+R 00 00 00 09
+T 00 00 4C 16 13 17 08 16 11 17 06
+R 00 00 00 09
+T 00 00 54
+R 00 00 00 09
+T 00 00 54 1E 08 16 06 89 90 89 1E 08 89 1E 08 89
+R 00 00 00 09
+T 00 00 61 8D 00 00 00 5B 08 1F 08 17 06 0D 01 27
+R 00 00 00 09 82 04 00 01
+T 00 00 6E 0D 1E 08 50 16 06 24 02 90 5C
+R 00 00 00 09
+T 00 00 78
+R 00 00 00 09
+T 00 00 78 90 50 20 04
+R 00 00 00 09
+T 00 00 7C
+R 00 00 00 09
+T 00 00 7C 1E 08 16 06
+R 00 00 00 09
+T 00 00 80
+R 00 00 00 09
+T 00 00 80 5B 09 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_modslong.sym b/device/lib/stm8-large/_modslong.sym
new file mode 100644
index 0000000..ad1eae6
--- /dev/null
+++ b/device/lib/stm8-large/_modslong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __modslong 000000 GR
+ __modulong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 83 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_modslonglong.asm b/device/lib/stm8-large/_modslonglong.asm
new file mode 100644
index 0000000..29ab7e8
--- /dev/null
+++ b/device/lib/stm8-large/_modslonglong.asm
@@ -0,0 +1,243 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _modslonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __modslonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_modslonglong.c: 36: _modslonglong (long long numerator, long long denominator)
+; -----------------------------------------
+; function _modslonglong
+; -----------------------------------------
+__modslonglong:
+ sub sp, #17
+; ../_modslonglong.c: 38: bool numeratorneg = (numerator < 0);
+ tnz (0x17, sp)
+ jrmi 00124$
+ clr (0x11, sp)
+ jra 00125$
+00124$:
+ ld a, #0x01
+ ld (0x11, sp), a
+00125$:
+; ../_modslonglong.c: 39: bool denominatorneg = (denominator < 0);
+ tnz (0x1f, sp)
+ jrmi 00126$
+ clr a
+ .byte 0xc5
+00126$:
+ ld a, #0x01
+00127$:
+; ../_modslonglong.c: 42: if (numeratorneg)
+ tnz (0x11, sp)
+ jreq 00102$
+; ../_modslonglong.c: 43: numerator = -numerator;
+ push a
+ ld a, (0x1f, sp)
+ neg a
+ ld (0x11, sp), a
+ clr a
+ sbc a, (0x1e, sp)
+ ld (0x10, sp), a
+ clr a
+ sbc a, (0x1d, sp)
+ ld (0x0f, sp), a
+ clr a
+ sbc a, (0x1c, sp)
+ ld (0x0e, sp), a
+ clr a
+ sbc a, (0x1b, sp)
+ ld (0x0d, sp), a
+ clr a
+ sbc a, (0x1a, sp)
+ ld (0x0c, sp), a
+ ldw x, (0x18, sp)
+ jrnc 00129$
+ incw x
+00129$:
+ negw x
+ pop a
+ ldw (0x17, sp), x
+ ldw y, (0x0f, sp)
+ ldw (0x1d, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x1b, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x19, sp), y
+00102$:
+; ../_modslonglong.c: 44: if (denominatorneg)
+ tnz a
+ jreq 00104$
+; ../_modslonglong.c: 45: denominator = -denominator;
+ ld a, (0x26, sp)
+ neg a
+ ld (0x10, sp), a
+ clr a
+ sbc a, (0x25, sp)
+ ld (0x0f, sp), a
+ clr a
+ sbc a, (0x24, sp)
+ ld (0x0e, sp), a
+ clr a
+ sbc a, (0x23, sp)
+ ld (0x0d, sp), a
+ clr a
+ sbc a, (0x22, sp)
+ ld (0x0c, sp), a
+ clr a
+ sbc a, (0x21, sp)
+ ldw x, (0x1f, sp)
+ jrnc 00131$
+ incw x
+00131$:
+ negw x
+ ld (0x21, sp), a
+ ldw (0x1f, sp), x
+ ldw y, (0x0f, sp)
+ ldw (0x25, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x23, sp), y
+ ld a, (0x0c, sp)
+ ld (0x22, sp), a
+00104$:
+; ../_modslonglong.c: 47: r = (unsigned long long)numerator % (unsigned long long)denominator;
+ ldw y, (0x1d, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x1b, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x19, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x17, sp)
+ ldw (0x01, sp), y
+ ldw x, (0x25, sp)
+ ldw (0x0f, sp), x
+ ldw x, (0x23, sp)
+ ldw (0x0d, sp), x
+ ldw x, (0x21, sp)
+ ldw (0x0b, sp), x
+ ldw x, (0x1f, sp)
+ ldw (0x09, sp), x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, sp
+ addw x, #25
+ pushw x
+ callf __modulonglong
+ addw sp, #18
+ ldw y, (0x0f, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x09, sp)
+ ldw (0x01, sp), y
+; ../_modslonglong.c: 49: return (numeratorneg ? -r : r);
+ tnz (0x11, sp)
+ jreq 00107$
+ ld a, (0x08, sp)
+ neg a
+ ld (0x11, sp), a
+ clr a
+ sbc a, (0x07, sp)
+ ld (0x10, sp), a
+ clr a
+ sbc a, (0x06, sp)
+ ld (0x0f, sp), a
+ clr a
+ sbc a, (0x05, sp)
+ ld (0x0e, sp), a
+ clr a
+ sbc a, (0x04, sp)
+ ld (0x0d, sp), a
+ clr a
+ sbc a, (0x03, sp)
+ ld (0x0c, sp), a
+ clr a
+ sbc a, (0x02, sp)
+ ld (0x0b, sp), a
+ clr a
+ sbc a, (0x01, sp)
+ ld (0x0a, sp), a
+ jra 00108$
+00107$:
+ ldw y, (0x07, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x0e, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x0c, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0a, sp), y
+00108$:
+ ldw x, (0x15, sp)
+ ldw y, (0x10, sp)
+ ldw (#6, x), y
+ ldw y, (0x0e, sp)
+ ldw (#4, x), y
+ ldw y, (0x0c, sp)
+ ldw (#2, x), y
+ ldw y, (0x0a, sp)
+ ldw (x), y
+; ../_modslonglong.c: 50: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modslonglong.lst b/device/lib/stm8-large/_modslonglong.lst
new file mode 100644
index 0000000..2820041
--- /dev/null
+++ b/device/lib/stm8-large/_modslonglong.lst
@@ -0,0 +1,243 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _modslonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __modslonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_modslonglong.c: 36: _modslonglong (long long numerator, long long denominator)
+ 50 ; -----------------------------------------
+ 51 ; function _modslonglong
+ 52 ; -----------------------------------------
+ 000000 53 __modslonglong:
+ 000000 52 11 [ 2] 54 sub sp, #17
+ 55 ; ../_modslonglong.c: 38: bool numeratorneg = (numerator < 0);
+ 000002 0D 17 [ 1] 56 tnz (0x17, sp)
+ 000004 2B 04 [ 1] 57 jrmi 00124$
+ 000006 0F 11 [ 1] 58 clr (0x11, sp)
+ 000008 20 04 [ 2] 59 jra 00125$
+ 00000A 60 00124$:
+ 00000A A6 01 [ 1] 61 ld a, #0x01
+ 00000C 6B 11 [ 1] 62 ld (0x11, sp), a
+ 00000E 63 00125$:
+ 64 ; ../_modslonglong.c: 39: bool denominatorneg = (denominator < 0);
+ 00000E 0D 1F [ 1] 65 tnz (0x1f, sp)
+ 000010 2B 02 [ 1] 66 jrmi 00126$
+ 000012 4F [ 1] 67 clr a
+ 000013 C5 68 .byte 0xc5
+ 000014 69 00126$:
+ 000014 A6 01 [ 1] 70 ld a, #0x01
+ 000016 71 00127$:
+ 72 ; ../_modslonglong.c: 42: if (numeratorneg)
+ 000016 0D 11 [ 1] 73 tnz (0x11, sp)
+ 000018 27 34 [ 1] 74 jreq 00102$
+ 75 ; ../_modslonglong.c: 43: numerator = -numerator;
+ 00001A 88 [ 1] 76 push a
+ 00001B 7B 1F [ 1] 77 ld a, (0x1f, sp)
+ 00001D 40 [ 1] 78 neg a
+ 00001E 6B 11 [ 1] 79 ld (0x11, sp), a
+ 000020 4F [ 1] 80 clr a
+ 000021 12 1E [ 1] 81 sbc a, (0x1e, sp)
+ 000023 6B 10 [ 1] 82 ld (0x10, sp), a
+ 000025 4F [ 1] 83 clr a
+ 000026 12 1D [ 1] 84 sbc a, (0x1d, sp)
+ 000028 6B 0F [ 1] 85 ld (0x0f, sp), a
+ 00002A 4F [ 1] 86 clr a
+ 00002B 12 1C [ 1] 87 sbc a, (0x1c, sp)
+ 00002D 6B 0E [ 1] 88 ld (0x0e, sp), a
+ 00002F 4F [ 1] 89 clr a
+ 000030 12 1B [ 1] 90 sbc a, (0x1b, sp)
+ 000032 6B 0D [ 1] 91 ld (0x0d, sp), a
+ 000034 4F [ 1] 92 clr a
+ 000035 12 1A [ 1] 93 sbc a, (0x1a, sp)
+ 000037 6B 0C [ 1] 94 ld (0x0c, sp), a
+ 000039 1E 18 [ 2] 95 ldw x, (0x18, sp)
+ 00003B 24 01 [ 1] 96 jrnc 00129$
+ 00003D 5C [ 1] 97 incw x
+ 00003E 98 00129$:
+ 00003E 50 [ 2] 99 negw x
+ 00003F 84 [ 1] 100 pop a
+ 000040 1F 17 [ 2] 101 ldw (0x17, sp), x
+ 000042 16 0F [ 2] 102 ldw y, (0x0f, sp)
+ 000044 17 1D [ 2] 103 ldw (0x1d, sp), y
+ 000046 16 0D [ 2] 104 ldw y, (0x0d, sp)
+ 000048 17 1B [ 2] 105 ldw (0x1b, sp), y
+ 00004A 16 0B [ 2] 106 ldw y, (0x0b, sp)
+ 00004C 17 19 [ 2] 107 ldw (0x19, sp), y
+ 00004E 108 00102$:
+ 109 ; ../_modslonglong.c: 44: if (denominatorneg)
+ 00004E 4D [ 1] 110 tnz a
+ 00004F 27 32 [ 1] 111 jreq 00104$
+ 112 ; ../_modslonglong.c: 45: denominator = -denominator;
+ 000051 7B 26 [ 1] 113 ld a, (0x26, sp)
+ 000053 40 [ 1] 114 neg a
+ 000054 6B 10 [ 1] 115 ld (0x10, sp), a
+ 000056 4F [ 1] 116 clr a
+ 000057 12 25 [ 1] 117 sbc a, (0x25, sp)
+ 000059 6B 0F [ 1] 118 ld (0x0f, sp), a
+ 00005B 4F [ 1] 119 clr a
+ 00005C 12 24 [ 1] 120 sbc a, (0x24, sp)
+ 00005E 6B 0E [ 1] 121 ld (0x0e, sp), a
+ 000060 4F [ 1] 122 clr a
+ 000061 12 23 [ 1] 123 sbc a, (0x23, sp)
+ 000063 6B 0D [ 1] 124 ld (0x0d, sp), a
+ 000065 4F [ 1] 125 clr a
+ 000066 12 22 [ 1] 126 sbc a, (0x22, sp)
+ 000068 6B 0C [ 1] 127 ld (0x0c, sp), a
+ 00006A 4F [ 1] 128 clr a
+ 00006B 12 21 [ 1] 129 sbc a, (0x21, sp)
+ 00006D 1E 1F [ 2] 130 ldw x, (0x1f, sp)
+ 00006F 24 01 [ 1] 131 jrnc 00131$
+ 000071 5C [ 1] 132 incw x
+ 000072 133 00131$:
+ 000072 50 [ 2] 134 negw x
+ 000073 6B 21 [ 1] 135 ld (0x21, sp), a
+ 000075 1F 1F [ 2] 136 ldw (0x1f, sp), x
+ 000077 16 0F [ 2] 137 ldw y, (0x0f, sp)
+ 000079 17 25 [ 2] 138 ldw (0x25, sp), y
+ 00007B 16 0D [ 2] 139 ldw y, (0x0d, sp)
+ 00007D 17 23 [ 2] 140 ldw (0x23, sp), y
+ 00007F 7B 0C [ 1] 141 ld a, (0x0c, sp)
+ 000081 6B 22 [ 1] 142 ld (0x22, sp), a
+ 000083 143 00104$:
+ 144 ; ../_modslonglong.c: 47: r = (unsigned long long)numerator % (unsigned long long)denominator;
+ 000083 16 1D [ 2] 145 ldw y, (0x1d, sp)
+ 000085 17 07 [ 2] 146 ldw (0x07, sp), y
+ 000087 16 1B [ 2] 147 ldw y, (0x1b, sp)
+ 000089 17 05 [ 2] 148 ldw (0x05, sp), y
+ 00008B 16 19 [ 2] 149 ldw y, (0x19, sp)
+ 00008D 17 03 [ 2] 150 ldw (0x03, sp), y
+ 00008F 16 17 [ 2] 151 ldw y, (0x17, sp)
+ 000091 17 01 [ 2] 152 ldw (0x01, sp), y
+ 000093 1E 25 [ 2] 153 ldw x, (0x25, sp)
+ 000095 1F 0F [ 2] 154 ldw (0x0f, sp), x
+ 000097 1E 23 [ 2] 155 ldw x, (0x23, sp)
+ 000099 1F 0D [ 2] 156 ldw (0x0d, sp), x
+ 00009B 1E 21 [ 2] 157 ldw x, (0x21, sp)
+ 00009D 1F 0B [ 2] 158 ldw (0x0b, sp), x
+ 00009F 1E 1F [ 2] 159 ldw x, (0x1f, sp)
+ 0000A1 1F 09 [ 2] 160 ldw (0x09, sp), x
+ 0000A3 1E 0F [ 2] 161 ldw x, (0x0f, sp)
+ 0000A5 89 [ 2] 162 pushw x
+ 0000A6 1E 0F [ 2] 163 ldw x, (0x0f, sp)
+ 0000A8 89 [ 2] 164 pushw x
+ 0000A9 1E 0F [ 2] 165 ldw x, (0x0f, sp)
+ 0000AB 89 [ 2] 166 pushw x
+ 0000AC 1E 0F [ 2] 167 ldw x, (0x0f, sp)
+ 0000AE 89 [ 2] 168 pushw x
+ 0000AF 1E 0F [ 2] 169 ldw x, (0x0f, sp)
+ 0000B1 89 [ 2] 170 pushw x
+ 0000B2 1E 0F [ 2] 171 ldw x, (0x0f, sp)
+ 0000B4 89 [ 2] 172 pushw x
+ 0000B5 1E 0F [ 2] 173 ldw x, (0x0f, sp)
+ 0000B7 89 [ 2] 174 pushw x
+ 0000B8 1E 0F [ 2] 175 ldw x, (0x0f, sp)
+ 0000BA 89 [ 2] 176 pushw x
+ 0000BB 96 [ 1] 177 ldw x, sp
+ 0000BC 1C 00 19 [ 2] 178 addw x, #25
+ 0000BF 89 [ 2] 179 pushw x
+ 0000C0 8Ds00r00r00 [ 5] 180 callf __modulonglong
+ 0000C4 5B 12 [ 2] 181 addw sp, #18
+ 0000C6 16 0F [ 2] 182 ldw y, (0x0f, sp)
+ 0000C8 17 07 [ 2] 183 ldw (0x07, sp), y
+ 0000CA 16 0D [ 2] 184 ldw y, (0x0d, sp)
+ 0000CC 17 05 [ 2] 185 ldw (0x05, sp), y
+ 0000CE 16 0B [ 2] 186 ldw y, (0x0b, sp)
+ 0000D0 17 03 [ 2] 187 ldw (0x03, sp), y
+ 0000D2 16 09 [ 2] 188 ldw y, (0x09, sp)
+ 0000D4 17 01 [ 2] 189 ldw (0x01, sp), y
+ 190 ; ../_modslonglong.c: 49: return (numeratorneg ? -r : r);
+ 0000D6 0D 11 [ 1] 191 tnz (0x11, sp)
+ 0000D8 27 2A [ 1] 192 jreq 00107$
+ 0000DA 7B 08 [ 1] 193 ld a, (0x08, sp)
+ 0000DC 40 [ 1] 194 neg a
+ 0000DD 6B 11 [ 1] 195 ld (0x11, sp), a
+ 0000DF 4F [ 1] 196 clr a
+ 0000E0 12 07 [ 1] 197 sbc a, (0x07, sp)
+ 0000E2 6B 10 [ 1] 198 ld (0x10, sp), a
+ 0000E4 4F [ 1] 199 clr a
+ 0000E5 12 06 [ 1] 200 sbc a, (0x06, sp)
+ 0000E7 6B 0F [ 1] 201 ld (0x0f, sp), a
+ 0000E9 4F [ 1] 202 clr a
+ 0000EA 12 05 [ 1] 203 sbc a, (0x05, sp)
+ 0000EC 6B 0E [ 1] 204 ld (0x0e, sp), a
+ 0000EE 4F [ 1] 205 clr a
+ 0000EF 12 04 [ 1] 206 sbc a, (0x04, sp)
+ 0000F1 6B 0D [ 1] 207 ld (0x0d, sp), a
+ 0000F3 4F [ 1] 208 clr a
+ 0000F4 12 03 [ 1] 209 sbc a, (0x03, sp)
+ 0000F6 6B 0C [ 1] 210 ld (0x0c, sp), a
+ 0000F8 4F [ 1] 211 clr a
+ 0000F9 12 02 [ 1] 212 sbc a, (0x02, sp)
+ 0000FB 6B 0B [ 1] 213 ld (0x0b, sp), a
+ 0000FD 4F [ 1] 214 clr a
+ 0000FE 12 01 [ 1] 215 sbc a, (0x01, sp)
+ 000100 6B 0A [ 1] 216 ld (0x0a, sp), a
+ 000102 20 10 [ 2] 217 jra 00108$
+ 000104 218 00107$:
+ 000104 16 07 [ 2] 219 ldw y, (0x07, sp)
+ 000106 17 10 [ 2] 220 ldw (0x10, sp), y
+ 000108 16 05 [ 2] 221 ldw y, (0x05, sp)
+ 00010A 17 0E [ 2] 222 ldw (0x0e, sp), y
+ 00010C 16 03 [ 2] 223 ldw y, (0x03, sp)
+ 00010E 17 0C [ 2] 224 ldw (0x0c, sp), y
+ 000110 16 01 [ 2] 225 ldw y, (0x01, sp)
+ 000112 17 0A [ 2] 226 ldw (0x0a, sp), y
+ 000114 227 00108$:
+ 000114 1E 15 [ 2] 228 ldw x, (0x15, sp)
+ 000116 16 10 [ 2] 229 ldw y, (0x10, sp)
+ 000118 EF 06 [ 2] 230 ldw (#6, x), y
+ 00011A 16 0E [ 2] 231 ldw y, (0x0e, sp)
+ 00011C EF 04 [ 2] 232 ldw (#4, x), y
+ 00011E 16 0C [ 2] 233 ldw y, (0x0c, sp)
+ 000120 EF 02 [ 2] 234 ldw (#2, x), y
+ 000122 16 0A [ 2] 235 ldw y, (0x0a, sp)
+ 000124 FF [ 2] 236 ldw (x), y
+ 237 ; ../_modslonglong.c: 50: }
+ 000125 5B 11 [ 2] 238 addw sp, #17
+ 000127 87 [ 5] 239 retf
+ 240 .area CODE
+ 241 .area CONST
+ 242 .area INITIALIZER
+ 243 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modslonglong.rel b/device/lib/stm8-large/_modslonglong.rel
new file mode 100644
index 0000000..ee71524
--- /dev/null
+++ b/device/lib/stm8-large/_modslonglong.rel
@@ -0,0 +1,100 @@
+XH3
+H B areas 3 global symbols
+M _modslonglong
+O -mstm8
+S __modulonglong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 128 flags 0 addr 0
+S __modslonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 0D 17 2B 04 0F 11 20 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 11
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 0D 1F 2B 02 4F C5
+R 00 00 00 09
+T 00 00 14
+R 00 00 00 09
+T 00 00 14 A6 01
+R 00 00 00 09
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 0D 11 27 34 88 7B 1F 40 6B 11 4F 12 1E
+R 00 00 00 09
+T 00 00 23 6B 10 4F 12 1D 6B 0F 4F 12 1C 6B 0E 4F
+R 00 00 00 09
+T 00 00 30 12 1B 6B 0D 4F 12 1A 6B 0C 1E 18 24 01
+R 00 00 00 09
+T 00 00 3D 5C
+R 00 00 00 09
+T 00 00 3E
+R 00 00 00 09
+T 00 00 3E 50 84 1F 17 16 0F 17 1D 16 0D 17 1B 16
+R 00 00 00 09
+T 00 00 4B 0B 17 19
+R 00 00 00 09
+T 00 00 4E
+R 00 00 00 09
+T 00 00 4E 4D 27 32 7B 26 40 6B 10 4F 12 25 6B 0F
+R 00 00 00 09
+T 00 00 5B 4F 12 24 6B 0E 4F 12 23 6B 0D 4F 12 22
+R 00 00 00 09
+T 00 00 68 6B 0C 4F 12 21 1E 1F 24 01 5C
+R 00 00 00 09
+T 00 00 72
+R 00 00 00 09
+T 00 00 72 50 6B 21 1F 1F 16 0F 17 25 16 0D 17 23
+R 00 00 00 09
+T 00 00 7F 7B 0C 6B 22
+R 00 00 00 09
+T 00 00 83
+R 00 00 00 09
+T 00 00 83 16 1D 17 07 16 1B 17 05 16 19 17 03 16
+R 00 00 00 09
+T 00 00 90 17 17 01 1E 25 1F 0F 1E 23 1F 0D 1E 21
+R 00 00 00 09
+T 00 00 9D 1F 0B 1E 1F 1F 09 1E 0F 89 1E 0F 89 1E
+R 00 00 00 09
+T 00 00 AA 0F 89 1E 0F 89 1E 0F 89 1E 0F 89 1E 0F
+R 00 00 00 09
+T 00 00 B7 89 1E 0F 89 96 1C 00 19 89 8D
+R 00 00 00 09
+T 00 00 C1 00 00 00 5B 12 16 0F 17 07 16 0D 17 05
+R 00 00 00 09 82 03 00 00
+T 00 00 CE 16 0B 17 03 16 09 17 01 0D 11 27 2A 7B
+R 00 00 00 09
+T 00 00 DB 08 40 6B 11 4F 12 07 6B 10 4F 12 06 6B
+R 00 00 00 09
+T 00 00 E8 0F 4F 12 05 6B 0E 4F 12 04 6B 0D 4F 12
+R 00 00 00 09
+T 00 00 F5 03 6B 0C 4F 12 02 6B 0B 4F 12 01 6B 0A
+R 00 00 00 09
+T 00 01 02 20 10
+R 00 00 00 09
+T 00 01 04
+R 00 00 00 09
+T 00 01 04 16 07 17 10 16 05 17 0E 16 03 17 0C 16
+R 00 00 00 09
+T 00 01 11 01 17 0A
+R 00 00 00 09
+T 00 01 14
+R 00 00 00 09
+T 00 01 14 1E 15 16 10 EF 06 16 0E EF 04 16 0C EF
+R 00 00 00 09
+T 00 01 21 02 16 0A FF 5B 11 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_modslonglong.sym b/device/lib/stm8-large/_modslonglong.sym
new file mode 100644
index 0000000..e8f99be
--- /dev/null
+++ b/device/lib/stm8-large/_modslonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __modslonglong 000000 GR
+ __modulonglong ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 128 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_modulong.asm b/device/lib/stm8-large/_modulong.asm
new file mode 100644
index 0000000..97d9a39
--- /dev/null
+++ b/device/lib/stm8-large/_modulong.asm
@@ -0,0 +1,132 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _modulong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __modulong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_modulong.c: 340: _modulong (unsigned long a, unsigned long b)
+; -----------------------------------------
+; function _modulong
+; -----------------------------------------
+__modulong:
+ push a
+; ../_modulong.c: 342: unsigned char count = 0;
+ clr a
+; ../_modulong.c: 344: while (!MSB_SET(b))
+ clr (0x01, sp)
+00103$:
+ tnz (0x09, sp)
+ jrmi 00117$
+; ../_modulong.c: 346: b <<= 1;
+ sll (0x0c, sp)
+ rlc (0x0b, sp)
+ rlc (0x0a, sp)
+ rlc (0x09, sp)
+; ../_modulong.c: 347: if (b > a)
+ ldw x, (0x07, sp)
+ cpw x, (0x0b, sp)
+ push a
+ ld a, (0x07, sp)
+ sbc a, (0x0b, sp)
+ ld a, (0x06, sp)
+ sbc a, (0x0a, sp)
+ pop a
+ jrnc 00102$
+; ../_modulong.c: 349: b >>=1;
+ srl (0x09, sp)
+ rrc (0x0a, sp)
+ rrc (0x0b, sp)
+ rrc (0x0c, sp)
+; ../_modulong.c: 350: break;
+ jra 00117$
+00102$:
+; ../_modulong.c: 352: count++;
+ inc (0x01, sp)
+ ld a, (0x01, sp)
+ jra 00103$
+; ../_modulong.c: 354: do
+00117$:
+ ld (0x01, sp), a
+00108$:
+; ../_modulong.c: 356: if (a >= b)
+ ldw x, (0x07, sp)
+ cpw x, (0x0b, sp)
+ ld a, (0x06, sp)
+ sbc a, (0x0a, sp)
+ ld a, (0x05, sp)
+ sbc a, (0x09, sp)
+ jrc 00107$
+; ../_modulong.c: 357: a -= b;
+ ldw y, (0x07, sp)
+ subw y, (0x0b, sp)
+ ld a, (0x06, sp)
+ sbc a, (0x0a, sp)
+ ld xl, a
+ ld a, (0x05, sp)
+ sbc a, (0x09, sp)
+ ld xh, a
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+00107$:
+; ../_modulong.c: 358: b >>= 1;
+ srl (0x09, sp)
+ rrc (0x0a, sp)
+ rrc (0x0b, sp)
+ rrc (0x0c, sp)
+; ../_modulong.c: 360: while (count--);
+ ld a, (0x01, sp)
+ dec (0x01, sp)
+ tnz a
+ jrne 00108$
+; ../_modulong.c: 362: return a;
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+; ../_modulong.c: 363: }
+ pop a
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modulong.lst b/device/lib/stm8-large/_modulong.lst
new file mode 100644
index 0000000..12ad5f8
--- /dev/null
+++ b/device/lib/stm8-large/_modulong.lst
@@ -0,0 +1,132 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _modulong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __modulong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_modulong.c: 340: _modulong (unsigned long a, unsigned long b)
+ 50 ; -----------------------------------------
+ 51 ; function _modulong
+ 52 ; -----------------------------------------
+ 000000 53 __modulong:
+ 000000 88 [ 1] 54 push a
+ 55 ; ../_modulong.c: 342: unsigned char count = 0;
+ 000001 4F [ 1] 56 clr a
+ 57 ; ../_modulong.c: 344: while (!MSB_SET(b))
+ 000002 0F 01 [ 1] 58 clr (0x01, sp)
+ 000004 59 00103$:
+ 000004 0D 09 [ 1] 60 tnz (0x09, sp)
+ 000006 2B 28 [ 1] 61 jrmi 00117$
+ 62 ; ../_modulong.c: 346: b <<= 1;
+ 000008 08 0C [ 1] 63 sll (0x0c, sp)
+ 00000A 09 0B [ 1] 64 rlc (0x0b, sp)
+ 00000C 09 0A [ 1] 65 rlc (0x0a, sp)
+ 00000E 09 09 [ 1] 66 rlc (0x09, sp)
+ 67 ; ../_modulong.c: 347: if (b > a)
+ 000010 1E 07 [ 2] 68 ldw x, (0x07, sp)
+ 000012 13 0B [ 2] 69 cpw x, (0x0b, sp)
+ 000014 88 [ 1] 70 push a
+ 000015 7B 07 [ 1] 71 ld a, (0x07, sp)
+ 000017 12 0B [ 1] 72 sbc a, (0x0b, sp)
+ 000019 7B 06 [ 1] 73 ld a, (0x06, sp)
+ 00001B 12 0A [ 1] 74 sbc a, (0x0a, sp)
+ 00001D 84 [ 1] 75 pop a
+ 00001E 24 0A [ 1] 76 jrnc 00102$
+ 77 ; ../_modulong.c: 349: b >>=1;
+ 000020 04 09 [ 1] 78 srl (0x09, sp)
+ 000022 06 0A [ 1] 79 rrc (0x0a, sp)
+ 000024 06 0B [ 1] 80 rrc (0x0b, sp)
+ 000026 06 0C [ 1] 81 rrc (0x0c, sp)
+ 82 ; ../_modulong.c: 350: break;
+ 000028 20 06 [ 2] 83 jra 00117$
+ 00002A 84 00102$:
+ 85 ; ../_modulong.c: 352: count++;
+ 00002A 0C 01 [ 1] 86 inc (0x01, sp)
+ 00002C 7B 01 [ 1] 87 ld a, (0x01, sp)
+ 00002E 20 D4 [ 2] 88 jra 00103$
+ 89 ; ../_modulong.c: 354: do
+ 000030 90 00117$:
+ 000030 6B 01 [ 1] 91 ld (0x01, sp), a
+ 000032 92 00108$:
+ 93 ; ../_modulong.c: 356: if (a >= b)
+ 000032 1E 07 [ 2] 94 ldw x, (0x07, sp)
+ 000034 13 0B [ 2] 95 cpw x, (0x0b, sp)
+ 000036 7B 06 [ 1] 96 ld a, (0x06, sp)
+ 000038 12 0A [ 1] 97 sbc a, (0x0a, sp)
+ 00003A 7B 05 [ 1] 98 ld a, (0x05, sp)
+ 00003C 12 09 [ 1] 99 sbc a, (0x09, sp)
+ 00003E 25 13 [ 1] 100 jrc 00107$
+ 101 ; ../_modulong.c: 357: a -= b;
+ 000040 16 07 [ 2] 102 ldw y, (0x07, sp)
+ 000042 72 F2 0B [ 2] 103 subw y, (0x0b, sp)
+ 000045 7B 06 [ 1] 104 ld a, (0x06, sp)
+ 000047 12 0A [ 1] 105 sbc a, (0x0a, sp)
+ 000049 97 [ 1] 106 ld xl, a
+ 00004A 7B 05 [ 1] 107 ld a, (0x05, sp)
+ 00004C 12 09 [ 1] 108 sbc a, (0x09, sp)
+ 00004E 95 [ 1] 109 ld xh, a
+ 00004F 17 07 [ 2] 110 ldw (0x07, sp), y
+ 000051 1F 05 [ 2] 111 ldw (0x05, sp), x
+ 000053 112 00107$:
+ 113 ; ../_modulong.c: 358: b >>= 1;
+ 000053 04 09 [ 1] 114 srl (0x09, sp)
+ 000055 06 0A [ 1] 115 rrc (0x0a, sp)
+ 000057 06 0B [ 1] 116 rrc (0x0b, sp)
+ 000059 06 0C [ 1] 117 rrc (0x0c, sp)
+ 118 ; ../_modulong.c: 360: while (count--);
+ 00005B 7B 01 [ 1] 119 ld a, (0x01, sp)
+ 00005D 0A 01 [ 1] 120 dec (0x01, sp)
+ 00005F 4D [ 1] 121 tnz a
+ 000060 26 D0 [ 1] 122 jrne 00108$
+ 123 ; ../_modulong.c: 362: return a;
+ 000062 1E 07 [ 2] 124 ldw x, (0x07, sp)
+ 000064 16 05 [ 2] 125 ldw y, (0x05, sp)
+ 126 ; ../_modulong.c: 363: }
+ 000066 84 [ 1] 127 pop a
+ 000067 87 [ 5] 128 retf
+ 129 .area CODE
+ 130 .area CONST
+ 131 .area INITIALIZER
+ 132 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modulong.rel b/device/lib/stm8-large/_modulong.rel
new file mode 100644
index 0000000..84165a2
--- /dev/null
+++ b/device/lib/stm8-large/_modulong.rel
@@ -0,0 +1,51 @@
+XH3
+H B areas 2 global symbols
+M _modulong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 68 flags 0 addr 0
+S __modulong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 88 4F 0F 01
+R 00 00 00 09
+T 00 00 04
+R 00 00 00 09
+T 00 00 04 0D 09 2B 28 08 0C 09 0B 09 0A 09 09 1E
+R 00 00 00 09
+T 00 00 11 07 13 0B 88 7B 07 12 0B 7B 06 12 0A 84
+R 00 00 00 09
+T 00 00 1E 24 0A 04 09 06 0A 06 0B 06 0C 20 06
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 0C 01 7B 01 20 D4
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 6B 01
+R 00 00 00 09
+T 00 00 32
+R 00 00 00 09
+T 00 00 32 1E 07 13 0B 7B 06 12 0A 7B 05 12 09 25
+R 00 00 00 09
+T 00 00 3F 13 16 07 72 F2 0B 7B 06 12 0A 97 7B 05
+R 00 00 00 09
+T 00 00 4C 12 09 95 17 07 1F 05
+R 00 00 00 09
+T 00 00 53
+R 00 00 00 09
+T 00 00 53 04 09 06 0A 06 0B 06 0C 7B 01 0A 01 4D
+R 00 00 00 09
+T 00 00 60 26 D0 1E 07 16 05 84 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_modulong.sym b/device/lib/stm8-large/_modulong.sym
new file mode 100644
index 0000000..292a0fa
--- /dev/null
+++ b/device/lib/stm8-large/_modulong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __modulong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 68 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_modulonglong.asm b/device/lib/stm8-large/_modulonglong.asm
new file mode 100644
index 0000000..9d29e94
--- /dev/null
+++ b/device/lib/stm8-large/_modulonglong.asm
@@ -0,0 +1,186 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _modulonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __modulonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_modulonglong.c: 38: _modulonglong (unsigned long long a, unsigned long long b)
+; -----------------------------------------
+; function _modulonglong
+; -----------------------------------------
+__modulonglong:
+ sub sp, #9
+; ../_modulonglong.c: 40: unsigned char count = 0;
+ clr a
+; ../_modulonglong.c: 42: while (!MSB_SET(b))
+ clr (0x09, sp)
+00103$:
+ tnz (0x17, sp)
+ jrmi 00117$
+; ../_modulonglong.c: 44: b <<= 1;
+ sll (0x1e, sp)
+ rlc (0x1d, sp)
+ rlc (0x1c, sp)
+ rlc (0x1b, sp)
+ rlc (0x1a, sp)
+ rlc (0x19, sp)
+ rlc (0x18, sp)
+ rlc (0x17, sp)
+; ../_modulonglong.c: 45: if (b > a)
+ ldw x, (0x15, sp)
+ cpw x, (0x1d, sp)
+ push a
+ ld a, (0x15, sp)
+ sbc a, (0x1d, sp)
+ ld a, (0x14, sp)
+ sbc a, (0x1c, sp)
+ ld a, (0x13, sp)
+ sbc a, (0x1b, sp)
+ ld a, (0x12, sp)
+ sbc a, (0x1a, sp)
+ ld a, (0x11, sp)
+ sbc a, (0x19, sp)
+ ld a, (0x10, sp)
+ sbc a, (0x18, sp)
+ pop a
+ jrnc 00102$
+; ../_modulonglong.c: 47: b >>=1;
+ srl (0x17, sp)
+ rrc (0x18, sp)
+ rrc (0x19, sp)
+ rrc (0x1a, sp)
+ rrc (0x1b, sp)
+ rrc (0x1c, sp)
+ rrc (0x1d, sp)
+ rrc (0x1e, sp)
+; ../_modulonglong.c: 48: break;
+ jra 00117$
+00102$:
+; ../_modulonglong.c: 50: count++;
+ inc (0x09, sp)
+ ld a, (0x09, sp)
+ jra 00103$
+; ../_modulonglong.c: 52: do
+00117$:
+ ld (0x09, sp), a
+00108$:
+; ../_modulonglong.c: 54: if (a >= b)
+ ldw x, (0x15, sp)
+ cpw x, (0x1d, sp)
+ ld a, (0x14, sp)
+ sbc a, (0x1c, sp)
+ ld a, (0x13, sp)
+ sbc a, (0x1b, sp)
+ ld a, (0x12, sp)
+ sbc a, (0x1a, sp)
+ ld a, (0x11, sp)
+ sbc a, (0x19, sp)
+ ld a, (0x10, sp)
+ sbc a, (0x18, sp)
+ ld a, (0x0f, sp)
+ sbc a, (0x17, sp)
+ jrc 00107$
+; ../_modulonglong.c: 55: a -= b;
+ ldw x, (0x15, sp)
+ subw x, (0x1d, sp)
+ ldw (0x07, sp), x
+ ld a, (0x14, sp)
+ sbc a, (0x1c, sp)
+ ld (0x06, sp), a
+ ld a, (0x13, sp)
+ sbc a, (0x1b, sp)
+ ld (0x05, sp), a
+ ld a, (0x12, sp)
+ sbc a, (0x1a, sp)
+ ld (0x04, sp), a
+ ld a, (0x11, sp)
+ sbc a, (0x19, sp)
+ ld (0x03, sp), a
+ ld a, (0x10, sp)
+ sbc a, (0x18, sp)
+ ld (0x02, sp), a
+ ld a, (0x0f, sp)
+ sbc a, (0x17, sp)
+ ld (0x01, sp), a
+ ldw y, (0x07, sp)
+ ldw (0x15, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x13, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x11, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0f, sp), y
+00107$:
+; ../_modulonglong.c: 56: b >>= 1;
+ srl (0x17, sp)
+ rrc (0x18, sp)
+ rrc (0x19, sp)
+ rrc (0x1a, sp)
+ rrc (0x1b, sp)
+ rrc (0x1c, sp)
+ rrc (0x1d, sp)
+ rrc (0x1e, sp)
+; ../_modulonglong.c: 58: while (count--);
+ ld a, (0x09, sp)
+ dec (0x09, sp)
+ tnz a
+ jrne 00108$
+; ../_modulonglong.c: 60: return a;
+ ldw x, (0x0d, sp)
+ ldw y, (0x15, sp)
+ ldw (#6, x), y
+ ldw y, (0x13, sp)
+ ldw (#4, x), y
+ ldw y, (0x11, sp)
+ ldw (#2, x), y
+ ldw y, (0x0f, sp)
+ ldw (x), y
+; ../_modulonglong.c: 61: }
+ addw sp, #9
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modulonglong.lst b/device/lib/stm8-large/_modulonglong.lst
new file mode 100644
index 0000000..0b2e8b2
--- /dev/null
+++ b/device/lib/stm8-large/_modulonglong.lst
@@ -0,0 +1,186 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _modulonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __modulonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_modulonglong.c: 38: _modulonglong (unsigned long long a, unsigned long long b)
+ 50 ; -----------------------------------------
+ 51 ; function _modulonglong
+ 52 ; -----------------------------------------
+ 000000 53 __modulonglong:
+ 000000 52 09 [ 2] 54 sub sp, #9
+ 55 ; ../_modulonglong.c: 40: unsigned char count = 0;
+ 000002 4F [ 1] 56 clr a
+ 57 ; ../_modulonglong.c: 42: while (!MSB_SET(b))
+ 000003 0F 09 [ 1] 58 clr (0x09, sp)
+ 000005 59 00103$:
+ 000005 0D 17 [ 1] 60 tnz (0x17, sp)
+ 000007 2B 48 [ 1] 61 jrmi 00117$
+ 62 ; ../_modulonglong.c: 44: b <<= 1;
+ 000009 08 1E [ 1] 63 sll (0x1e, sp)
+ 00000B 09 1D [ 1] 64 rlc (0x1d, sp)
+ 00000D 09 1C [ 1] 65 rlc (0x1c, sp)
+ 00000F 09 1B [ 1] 66 rlc (0x1b, sp)
+ 000011 09 1A [ 1] 67 rlc (0x1a, sp)
+ 000013 09 19 [ 1] 68 rlc (0x19, sp)
+ 000015 09 18 [ 1] 69 rlc (0x18, sp)
+ 000017 09 17 [ 1] 70 rlc (0x17, sp)
+ 71 ; ../_modulonglong.c: 45: if (b > a)
+ 000019 1E 15 [ 2] 72 ldw x, (0x15, sp)
+ 00001B 13 1D [ 2] 73 cpw x, (0x1d, sp)
+ 00001D 88 [ 1] 74 push a
+ 00001E 7B 15 [ 1] 75 ld a, (0x15, sp)
+ 000020 12 1D [ 1] 76 sbc a, (0x1d, sp)
+ 000022 7B 14 [ 1] 77 ld a, (0x14, sp)
+ 000024 12 1C [ 1] 78 sbc a, (0x1c, sp)
+ 000026 7B 13 [ 1] 79 ld a, (0x13, sp)
+ 000028 12 1B [ 1] 80 sbc a, (0x1b, sp)
+ 00002A 7B 12 [ 1] 81 ld a, (0x12, sp)
+ 00002C 12 1A [ 1] 82 sbc a, (0x1a, sp)
+ 00002E 7B 11 [ 1] 83 ld a, (0x11, sp)
+ 000030 12 19 [ 1] 84 sbc a, (0x19, sp)
+ 000032 7B 10 [ 1] 85 ld a, (0x10, sp)
+ 000034 12 18 [ 1] 86 sbc a, (0x18, sp)
+ 000036 84 [ 1] 87 pop a
+ 000037 24 12 [ 1] 88 jrnc 00102$
+ 89 ; ../_modulonglong.c: 47: b >>=1;
+ 000039 04 17 [ 1] 90 srl (0x17, sp)
+ 00003B 06 18 [ 1] 91 rrc (0x18, sp)
+ 00003D 06 19 [ 1] 92 rrc (0x19, sp)
+ 00003F 06 1A [ 1] 93 rrc (0x1a, sp)
+ 000041 06 1B [ 1] 94 rrc (0x1b, sp)
+ 000043 06 1C [ 1] 95 rrc (0x1c, sp)
+ 000045 06 1D [ 1] 96 rrc (0x1d, sp)
+ 000047 06 1E [ 1] 97 rrc (0x1e, sp)
+ 98 ; ../_modulonglong.c: 48: break;
+ 000049 20 06 [ 2] 99 jra 00117$
+ 00004B 100 00102$:
+ 101 ; ../_modulonglong.c: 50: count++;
+ 00004B 0C 09 [ 1] 102 inc (0x09, sp)
+ 00004D 7B 09 [ 1] 103 ld a, (0x09, sp)
+ 00004F 20 B4 [ 2] 104 jra 00103$
+ 105 ; ../_modulonglong.c: 52: do
+ 000051 106 00117$:
+ 000051 6B 09 [ 1] 107 ld (0x09, sp), a
+ 000053 108 00108$:
+ 109 ; ../_modulonglong.c: 54: if (a >= b)
+ 000053 1E 15 [ 2] 110 ldw x, (0x15, sp)
+ 000055 13 1D [ 2] 111 cpw x, (0x1d, sp)
+ 000057 7B 14 [ 1] 112 ld a, (0x14, sp)
+ 000059 12 1C [ 1] 113 sbc a, (0x1c, sp)
+ 00005B 7B 13 [ 1] 114 ld a, (0x13, sp)
+ 00005D 12 1B [ 1] 115 sbc a, (0x1b, sp)
+ 00005F 7B 12 [ 1] 116 ld a, (0x12, sp)
+ 000061 12 1A [ 1] 117 sbc a, (0x1a, sp)
+ 000063 7B 11 [ 1] 118 ld a, (0x11, sp)
+ 000065 12 19 [ 1] 119 sbc a, (0x19, sp)
+ 000067 7B 10 [ 1] 120 ld a, (0x10, sp)
+ 000069 12 18 [ 1] 121 sbc a, (0x18, sp)
+ 00006B 7B 0F [ 1] 122 ld a, (0x0f, sp)
+ 00006D 12 17 [ 1] 123 sbc a, (0x17, sp)
+ 00006F 25 3B [ 1] 124 jrc 00107$
+ 125 ; ../_modulonglong.c: 55: a -= b;
+ 000071 1E 15 [ 2] 126 ldw x, (0x15, sp)
+ 000073 72 F0 1D [ 2] 127 subw x, (0x1d, sp)
+ 000076 1F 07 [ 2] 128 ldw (0x07, sp), x
+ 000078 7B 14 [ 1] 129 ld a, (0x14, sp)
+ 00007A 12 1C [ 1] 130 sbc a, (0x1c, sp)
+ 00007C 6B 06 [ 1] 131 ld (0x06, sp), a
+ 00007E 7B 13 [ 1] 132 ld a, (0x13, sp)
+ 000080 12 1B [ 1] 133 sbc a, (0x1b, sp)
+ 000082 6B 05 [ 1] 134 ld (0x05, sp), a
+ 000084 7B 12 [ 1] 135 ld a, (0x12, sp)
+ 000086 12 1A [ 1] 136 sbc a, (0x1a, sp)
+ 000088 6B 04 [ 1] 137 ld (0x04, sp), a
+ 00008A 7B 11 [ 1] 138 ld a, (0x11, sp)
+ 00008C 12 19 [ 1] 139 sbc a, (0x19, sp)
+ 00008E 6B 03 [ 1] 140 ld (0x03, sp), a
+ 000090 7B 10 [ 1] 141 ld a, (0x10, sp)
+ 000092 12 18 [ 1] 142 sbc a, (0x18, sp)
+ 000094 6B 02 [ 1] 143 ld (0x02, sp), a
+ 000096 7B 0F [ 1] 144 ld a, (0x0f, sp)
+ 000098 12 17 [ 1] 145 sbc a, (0x17, sp)
+ 00009A 6B 01 [ 1] 146 ld (0x01, sp), a
+ 00009C 16 07 [ 2] 147 ldw y, (0x07, sp)
+ 00009E 17 15 [ 2] 148 ldw (0x15, sp), y
+ 0000A0 16 05 [ 2] 149 ldw y, (0x05, sp)
+ 0000A2 17 13 [ 2] 150 ldw (0x13, sp), y
+ 0000A4 16 03 [ 2] 151 ldw y, (0x03, sp)
+ 0000A6 17 11 [ 2] 152 ldw (0x11, sp), y
+ 0000A8 16 01 [ 2] 153 ldw y, (0x01, sp)
+ 0000AA 17 0F [ 2] 154 ldw (0x0f, sp), y
+ 0000AC 155 00107$:
+ 156 ; ../_modulonglong.c: 56: b >>= 1;
+ 0000AC 04 17 [ 1] 157 srl (0x17, sp)
+ 0000AE 06 18 [ 1] 158 rrc (0x18, sp)
+ 0000B0 06 19 [ 1] 159 rrc (0x19, sp)
+ 0000B2 06 1A [ 1] 160 rrc (0x1a, sp)
+ 0000B4 06 1B [ 1] 161 rrc (0x1b, sp)
+ 0000B6 06 1C [ 1] 162 rrc (0x1c, sp)
+ 0000B8 06 1D [ 1] 163 rrc (0x1d, sp)
+ 0000BA 06 1E [ 1] 164 rrc (0x1e, sp)
+ 165 ; ../_modulonglong.c: 58: while (count--);
+ 0000BC 7B 09 [ 1] 166 ld a, (0x09, sp)
+ 0000BE 0A 09 [ 1] 167 dec (0x09, sp)
+ 0000C0 4D [ 1] 168 tnz a
+ 0000C1 26 90 [ 1] 169 jrne 00108$
+ 170 ; ../_modulonglong.c: 60: return a;
+ 0000C3 1E 0D [ 2] 171 ldw x, (0x0d, sp)
+ 0000C5 16 15 [ 2] 172 ldw y, (0x15, sp)
+ 0000C7 EF 06 [ 2] 173 ldw (#6, x), y
+ 0000C9 16 13 [ 2] 174 ldw y, (0x13, sp)
+ 0000CB EF 04 [ 2] 175 ldw (#4, x), y
+ 0000CD 16 11 [ 2] 176 ldw y, (0x11, sp)
+ 0000CF EF 02 [ 2] 177 ldw (#2, x), y
+ 0000D1 16 0F [ 2] 178 ldw y, (0x0f, sp)
+ 0000D3 FF [ 2] 179 ldw (x), y
+ 180 ; ../_modulonglong.c: 61: }
+ 0000D4 5B 09 [ 2] 181 addw sp, #9
+ 0000D6 87 [ 5] 182 retf
+ 183 .area CODE
+ 184 .area CONST
+ 185 .area INITIALIZER
+ 186 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_modulonglong.rel b/device/lib/stm8-large/_modulonglong.rel
new file mode 100644
index 0000000..4025b35
--- /dev/null
+++ b/device/lib/stm8-large/_modulonglong.rel
@@ -0,0 +1,69 @@
+XH3
+H B areas 2 global symbols
+M _modulonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size D7 flags 0 addr 0
+S __modulonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 09 4F 0F 09
+R 00 00 00 09
+T 00 00 05
+R 00 00 00 09
+T 00 00 05 0D 17 2B 48 08 1E 09 1D 09 1C 09 1B 09
+R 00 00 00 09
+T 00 00 12 1A 09 19 09 18 09 17 1E 15 13 1D 88 7B
+R 00 00 00 09
+T 00 00 1F 15 12 1D 7B 14 12 1C 7B 13 12 1B 7B 12
+R 00 00 00 09
+T 00 00 2C 12 1A 7B 11 12 19 7B 10 12 18 84 24 12
+R 00 00 00 09
+T 00 00 39 04 17 06 18 06 19 06 1A 06 1B 06 1C 06
+R 00 00 00 09
+T 00 00 46 1D 06 1E 20 06
+R 00 00 00 09
+T 00 00 4B
+R 00 00 00 09
+T 00 00 4B 0C 09 7B 09 20 B4
+R 00 00 00 09
+T 00 00 51
+R 00 00 00 09
+T 00 00 51 6B 09
+R 00 00 00 09
+T 00 00 53
+R 00 00 00 09
+T 00 00 53 1E 15 13 1D 7B 14 12 1C 7B 13 12 1B 7B
+R 00 00 00 09
+T 00 00 60 12 12 1A 7B 11 12 19 7B 10 12 18 7B 0F
+R 00 00 00 09
+T 00 00 6D 12 17 25 3B 1E 15 72 F0 1D 1F 07 7B 14
+R 00 00 00 09
+T 00 00 7A 12 1C 6B 06 7B 13 12 1B 6B 05 7B 12 12
+R 00 00 00 09
+T 00 00 87 1A 6B 04 7B 11 12 19 6B 03 7B 10 12 18
+R 00 00 00 09
+T 00 00 94 6B 02 7B 0F 12 17 6B 01 16 07 17 15 16
+R 00 00 00 09
+T 00 00 A1 05 17 13 16 03 17 11 16 01 17 0F
+R 00 00 00 09
+T 00 00 AC
+R 00 00 00 09
+T 00 00 AC 04 17 06 18 06 19 06 1A 06 1B 06 1C 06
+R 00 00 00 09
+T 00 00 B9 1D 06 1E 7B 09 0A 09 4D 26 90 1E 0D 16
+R 00 00 00 09
+T 00 00 C6 15 EF 06 16 13 EF 04 16 11 EF 02 16 0F
+R 00 00 00 09
+T 00 00 D3 FF 5B 09 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_modulonglong.sym b/device/lib/stm8-large/_modulonglong.sym
new file mode 100644
index 0000000..cfaa4d3
--- /dev/null
+++ b/device/lib/stm8-large/_modulonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __modulonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size D7 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_mulint.asm b/device/lib/stm8-large/_mulint.asm
new file mode 100644
index 0000000..315c229
--- /dev/null
+++ b/device/lib/stm8-large/_mulint.asm
@@ -0,0 +1,94 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _mulint
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __mulint
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_mulint.c: 226: _mulint (int a, int b)
+; -----------------------------------------
+; function _mulint
+; -----------------------------------------
+__mulint:
+ sub sp, #5
+; ../_mulint.c: 238: x = (union uu *)&a;
+ ldw x, sp
+ addw x, #9
+ ldw (0x03, sp), x
+; ../_mulint.c: 239: y = (union uu *)&b;
+ ldw x, sp
+ addw x, #11
+; ../_mulint.c: 243: t.t = (unsigned char)a * (unsigned char)b;
+ ld a, (0x0a, sp)
+ ld yl, a
+ ld a, (0x0c, sp)
+ mul y, a
+ ldw (0x01, sp), y
+; ../_mulint.c: 244: t.s.hi += ((unsigned char)a * y->s.hi) + (x->s.hi * (unsigned char)b);
+ ld a, (0x01, sp)
+ ld (0x05, sp), a
+ ld a, (0x0a, sp)
+ ld yl, a
+ ld a, (x)
+ mul y, a
+ ldw x, (0x03, sp)
+ ld a, (x)
+ ld xl, a
+ ld a, (0x0c, sp)
+ mul x, a
+ ld a, yl
+ pushw x
+ add a, (2, sp)
+ popw x
+ add a, (0x05, sp)
+ ld (0x01, sp), a
+; ../_mulint.c: 246: return t.t;
+ ldw x, (0x01, sp)
+; ../_mulint.c: 247: }
+ addw sp, #5
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mulint.lst b/device/lib/stm8-large/_mulint.lst
new file mode 100644
index 0000000..bcc6716
--- /dev/null
+++ b/device/lib/stm8-large/_mulint.lst
@@ -0,0 +1,94 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _mulint
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __mulint
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_mulint.c: 226: _mulint (int a, int b)
+ 50 ; -----------------------------------------
+ 51 ; function _mulint
+ 52 ; -----------------------------------------
+ 000000 53 __mulint:
+ 000000 52 05 [ 2] 54 sub sp, #5
+ 55 ; ../_mulint.c: 238: x = (union uu *)&a;
+ 000002 96 [ 1] 56 ldw x, sp
+ 000003 1C 00 09 [ 2] 57 addw x, #9
+ 000006 1F 03 [ 2] 58 ldw (0x03, sp), x
+ 59 ; ../_mulint.c: 239: y = (union uu *)&b;
+ 000008 96 [ 1] 60 ldw x, sp
+ 000009 1C 00 0B [ 2] 61 addw x, #11
+ 62 ; ../_mulint.c: 243: t.t = (unsigned char)a * (unsigned char)b;
+ 00000C 7B 0A [ 1] 63 ld a, (0x0a, sp)
+ 00000E 90 97 [ 1] 64 ld yl, a
+ 000010 7B 0C [ 1] 65 ld a, (0x0c, sp)
+ 000012 90 42 [ 4] 66 mul y, a
+ 000014 17 01 [ 2] 67 ldw (0x01, sp), y
+ 68 ; ../_mulint.c: 244: t.s.hi += ((unsigned char)a * y->s.hi) + (x->s.hi * (unsigned char)b);
+ 000016 7B 01 [ 1] 69 ld a, (0x01, sp)
+ 000018 6B 05 [ 1] 70 ld (0x05, sp), a
+ 00001A 7B 0A [ 1] 71 ld a, (0x0a, sp)
+ 00001C 90 97 [ 1] 72 ld yl, a
+ 00001E F6 [ 1] 73 ld a, (x)
+ 00001F 90 42 [ 4] 74 mul y, a
+ 000021 1E 03 [ 2] 75 ldw x, (0x03, sp)
+ 000023 F6 [ 1] 76 ld a, (x)
+ 000024 97 [ 1] 77 ld xl, a
+ 000025 7B 0C [ 1] 78 ld a, (0x0c, sp)
+ 000027 42 [ 4] 79 mul x, a
+ 000028 90 9F [ 1] 80 ld a, yl
+ 00002A 89 [ 2] 81 pushw x
+ 00002B 1B 02 [ 1] 82 add a, (2, sp)
+ 00002D 85 [ 2] 83 popw x
+ 00002E 1B 05 [ 1] 84 add a, (0x05, sp)
+ 000030 6B 01 [ 1] 85 ld (0x01, sp), a
+ 86 ; ../_mulint.c: 246: return t.t;
+ 000032 1E 01 [ 2] 87 ldw x, (0x01, sp)
+ 88 ; ../_mulint.c: 247: }
+ 000034 5B 05 [ 2] 89 addw sp, #5
+ 000036 87 [ 5] 90 retf
+ 91 .area CODE
+ 92 .area CONST
+ 93 .area INITIALIZER
+ 94 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mulint.rel b/device/lib/stm8-large/_mulint.rel
new file mode 100644
index 0000000..5a38733
--- /dev/null
+++ b/device/lib/stm8-large/_mulint.rel
@@ -0,0 +1,29 @@
+XH3
+H B areas 2 global symbols
+M _mulint
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 37 flags 0 addr 0
+S __mulint Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 96 1C 00 09 1F 03 96 1C 00 0B 7B
+R 00 00 00 09
+T 00 00 0D 0A 90 97 7B 0C 90 42 17 01 7B 01 6B 05
+R 00 00 00 09
+T 00 00 1A 7B 0A 90 97 F6 90 42 1E 03 F6 97 7B 0C
+R 00 00 00 09
+T 00 00 27 42 90 9F 89 1B 02 85 1B 05 6B 01 1E 01
+R 00 00 00 09
+T 00 00 34 5B 05 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_mulint.sym b/device/lib/stm8-large/_mulint.sym
new file mode 100644
index 0000000..14e5066
--- /dev/null
+++ b/device/lib/stm8-large/_mulint.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __mulint 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 37 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_mullong.asm b/device/lib/stm8-large/_mullong.asm
new file mode 100644
index 0000000..0ce6c86
--- /dev/null
+++ b/device/lib/stm8-large/_mullong.asm
@@ -0,0 +1,225 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _mullong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __mullong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_mullong.c: 734: _mullong (long a, long b)
+; -----------------------------------------
+; function _mullong
+; -----------------------------------------
+__mullong:
+ sub sp, #16
+; ../_mullong.c: 738: t.i.hi = bcast(a)->b.b0 * bcast(b)->b.b2; // A
+ ldw y, sp
+ addw y, #5
+ ldw x, sp
+ addw x, #20
+ ldw (0x09, sp), x
+ ld a, (0x3, x)
+ ldw x, sp
+ addw x, #24
+ ldw (0x0b, sp), x
+ push a
+ ld a, (0x1, x)
+ ld xl, a
+ pop a
+ mul x, a
+ ldw (y), x
+; ../_mullong.c: 739: t.i.lo = bcast(a)->b.b0 * bcast(b)->b.b0; // A
+ addw y, #0x0002
+ ldw x, (0x09, sp)
+ ld a, (0x3, x)
+ ldw x, (0x0b, sp)
+ push a
+ ld a, (0x3, x)
+ ld xl, a
+ pop a
+ mul x, a
+ ldw (y), x
+; ../_mullong.c: 740: t.b.b3 += bcast(a)->b.b3 * bcast(b)->b.b0; // G
+ ld a, (0x05, sp)
+ ld (0x10, sp), a
+ ldw x, (0x09, sp)
+ ld a, (x)
+ ld xl, a
+ ldw y, (0x0b, sp)
+ ld a, (0x3, y)
+ mul x, a
+ ld a, xl
+ add a, (0x10, sp)
+ ld (0x10, sp), a
+; ../_mullong.c: 741: t.b.b3 += bcast(a)->b.b2 * bcast(b)->b.b1; // F
+ ld (0x05, sp), a
+ ldw x, (0x09, sp)
+ ld a, (0x1, x)
+ ld xl, a
+ ldw y, (0x0b, sp)
+ ld a, (0x2, y)
+ mul x, a
+ ld a, xl
+ add a, (0x10, sp)
+ ld (0x05, sp), a
+; ../_mullong.c: 742: t.i.hi += bcast(a)->b.b2 * bcast(b)->b.b0; // E <- b lost in .lst
+ ldw y, (0x05, sp)
+ ldw (0x0d, sp), y
+ ldw x, (0x09, sp)
+ ld a, (0x1, x)
+ ld xl, a
+ ldw y, (0x0b, sp)
+ ld a, (0x3, y)
+ mul x, a
+ addw x, (0x0d, sp)
+ ldw (0x0f, sp), x
+ ldw (0x05, sp), x
+; ../_mullong.c: 744: t.i.hi += bcast(a)->b.b1 * bcast(b)->b.b1; // D <- b lost in .lst
+ ld a, (0x06, sp)
+ ld a, (0x05, sp)
+ ldw x, (0x09, sp)
+ ld a, (0x2, x)
+ ld xl, a
+ ldw y, (0x0b, sp)
+ ld a, (0x2, y)
+ mul x, a
+ addw x, (0x0f, sp)
+ ldw (0x05, sp), x
+; ../_mullong.c: 746: bcast(a)->bi.b3 = bcast(a)->b.b1 * bcast(b)->b.b2; // C
+ ldw y, (0x09, sp)
+ ldw x, (0x09, sp)
+ ld a, (0x2, x)
+ ldw x, (0x0b, sp)
+ push a
+ ld a, (0x1, x)
+ ld xl, a
+ pop a
+ mul x, a
+ ld a, xl
+ ld (y), a
+; ../_mullong.c: 747: bcast(a)->bi.i12 = bcast(a)->b.b1 * bcast(b)->b.b0; // C
+ ldw y, (0x09, sp)
+ incw y
+ ldw x, (0x09, sp)
+ ld a, (0x2, x)
+ ldw x, (0x0b, sp)
+ push a
+ ld a, (0x3, x)
+ ld xl, a
+ pop a
+ mul x, a
+ ldw (y), x
+; ../_mullong.c: 749: bcast(b)->bi.b3 = bcast(a)->b.b0 * bcast(b)->b.b3; // B
+ ldw y, (0x0b, sp)
+ ldw x, (0x09, sp)
+ ld a, (0x3, x)
+ ldw x, (0x0b, sp)
+ push a
+ ld a, (x)
+ ld xl, a
+ pop a
+ mul x, a
+ ld a, xl
+ ld (y), a
+; ../_mullong.c: 750: bcast(b)->bi.i12 = bcast(a)->b.b0 * bcast(b)->b.b1; // B
+ ldw y, (0x0b, sp)
+ incw y
+ ldw x, (0x09, sp)
+ ld a, (0x3, x)
+ ldw x, (0x0b, sp)
+ push a
+ ld a, (0x2, x)
+ ld xl, a
+ pop a
+ mul x, a
+ ldw (y), x
+; ../_mullong.c: 752: bcast(b)->bi.b0 = 0; // B
+ ldw x, (0x0b, sp)
+ clr (0x0003, x)
+; ../_mullong.c: 753: bcast(a)->bi.b0 = 0; // C
+ ldw x, (0x09, sp)
+ clr (0x0003, x)
+; ../_mullong.c: 754: t.l += a;
+ ldw y, (0x07, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x01, sp), y
+ ldw x, (0x16, sp)
+ ldw (0x0b, sp), x
+ ldw x, (0x14, sp)
+ ldw y, (0x0b, sp)
+ addw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ld a, xl
+ adc a, (0x02, sp)
+ ld (0x0e, sp), a
+ ld a, xh
+ adc a, (0x01, sp)
+ ld (0x0d, sp), a
+ ldw x, (0x0f, sp)
+ ldw (0x07, sp), x
+ ldw x, (0x0d, sp)
+ ldw (0x05, sp), x
+; ../_mullong.c: 756: return t.l + b;
+ ld a, (0x08, sp)
+ ld a, (0x07, sp)
+ ld a, (0x06, sp)
+ ld a, (0x05, sp)
+ ldw x, (0x1a, sp)
+ ldw (0x0b, sp), x
+ ldw x, (0x18, sp)
+ ldw y, (0x0b, sp)
+ addw y, (0x0f, sp)
+ ld a, xl
+ adc a, (0x0e, sp)
+ rlwa x
+ adc a, (0x0d, sp)
+ ld xh, a
+ exgw x, y
+; ../_mullong.c: 757: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mullong.lst b/device/lib/stm8-large/_mullong.lst
new file mode 100644
index 0000000..e0cafea
--- /dev/null
+++ b/device/lib/stm8-large/_mullong.lst
@@ -0,0 +1,225 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _mullong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __mullong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_mullong.c: 734: _mullong (long a, long b)
+ 50 ; -----------------------------------------
+ 51 ; function _mullong
+ 52 ; -----------------------------------------
+ 000000 53 __mullong:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_mullong.c: 738: t.i.hi = bcast(a)->b.b0 * bcast(b)->b.b2; // A
+ 000002 90 96 [ 1] 56 ldw y, sp
+ 000004 72 A9 00 05 [ 2] 57 addw y, #5
+ 000008 96 [ 1] 58 ldw x, sp
+ 000009 1C 00 14 [ 2] 59 addw x, #20
+ 00000C 1F 09 [ 2] 60 ldw (0x09, sp), x
+ 00000E E6 03 [ 1] 61 ld a, (0x3, x)
+ 000010 96 [ 1] 62 ldw x, sp
+ 000011 1C 00 18 [ 2] 63 addw x, #24
+ 000014 1F 0B [ 2] 64 ldw (0x0b, sp), x
+ 000016 88 [ 1] 65 push a
+ 000017 E6 01 [ 1] 66 ld a, (0x1, x)
+ 000019 97 [ 1] 67 ld xl, a
+ 00001A 84 [ 1] 68 pop a
+ 00001B 42 [ 4] 69 mul x, a
+ 00001C 90 FF [ 2] 70 ldw (y), x
+ 71 ; ../_mullong.c: 739: t.i.lo = bcast(a)->b.b0 * bcast(b)->b.b0; // A
+ 00001E 72 A9 00 02 [ 2] 72 addw y, #0x0002
+ 000022 1E 09 [ 2] 73 ldw x, (0x09, sp)
+ 000024 E6 03 [ 1] 74 ld a, (0x3, x)
+ 000026 1E 0B [ 2] 75 ldw x, (0x0b, sp)
+ 000028 88 [ 1] 76 push a
+ 000029 E6 03 [ 1] 77 ld a, (0x3, x)
+ 00002B 97 [ 1] 78 ld xl, a
+ 00002C 84 [ 1] 79 pop a
+ 00002D 42 [ 4] 80 mul x, a
+ 00002E 90 FF [ 2] 81 ldw (y), x
+ 82 ; ../_mullong.c: 740: t.b.b3 += bcast(a)->b.b3 * bcast(b)->b.b0; // G
+ 000030 7B 05 [ 1] 83 ld a, (0x05, sp)
+ 000032 6B 10 [ 1] 84 ld (0x10, sp), a
+ 000034 1E 09 [ 2] 85 ldw x, (0x09, sp)
+ 000036 F6 [ 1] 86 ld a, (x)
+ 000037 97 [ 1] 87 ld xl, a
+ 000038 16 0B [ 2] 88 ldw y, (0x0b, sp)
+ 00003A 90 E6 03 [ 1] 89 ld a, (0x3, y)
+ 00003D 42 [ 4] 90 mul x, a
+ 00003E 9F [ 1] 91 ld a, xl
+ 00003F 1B 10 [ 1] 92 add a, (0x10, sp)
+ 000041 6B 10 [ 1] 93 ld (0x10, sp), a
+ 94 ; ../_mullong.c: 741: t.b.b3 += bcast(a)->b.b2 * bcast(b)->b.b1; // F
+ 000043 6B 05 [ 1] 95 ld (0x05, sp), a
+ 000045 1E 09 [ 2] 96 ldw x, (0x09, sp)
+ 000047 E6 01 [ 1] 97 ld a, (0x1, x)
+ 000049 97 [ 1] 98 ld xl, a
+ 00004A 16 0B [ 2] 99 ldw y, (0x0b, sp)
+ 00004C 90 E6 02 [ 1] 100 ld a, (0x2, y)
+ 00004F 42 [ 4] 101 mul x, a
+ 000050 9F [ 1] 102 ld a, xl
+ 000051 1B 10 [ 1] 103 add a, (0x10, sp)
+ 000053 6B 05 [ 1] 104 ld (0x05, sp), a
+ 105 ; ../_mullong.c: 742: t.i.hi += bcast(a)->b.b2 * bcast(b)->b.b0; // E <- b lost in .lst
+ 000055 16 05 [ 2] 106 ldw y, (0x05, sp)
+ 000057 17 0D [ 2] 107 ldw (0x0d, sp), y
+ 000059 1E 09 [ 2] 108 ldw x, (0x09, sp)
+ 00005B E6 01 [ 1] 109 ld a, (0x1, x)
+ 00005D 97 [ 1] 110 ld xl, a
+ 00005E 16 0B [ 2] 111 ldw y, (0x0b, sp)
+ 000060 90 E6 03 [ 1] 112 ld a, (0x3, y)
+ 000063 42 [ 4] 113 mul x, a
+ 000064 72 FB 0D [ 2] 114 addw x, (0x0d, sp)
+ 000067 1F 0F [ 2] 115 ldw (0x0f, sp), x
+ 000069 1F 05 [ 2] 116 ldw (0x05, sp), x
+ 117 ; ../_mullong.c: 744: t.i.hi += bcast(a)->b.b1 * bcast(b)->b.b1; // D <- b lost in .lst
+ 00006B 7B 06 [ 1] 118 ld a, (0x06, sp)
+ 00006D 7B 05 [ 1] 119 ld a, (0x05, sp)
+ 00006F 1E 09 [ 2] 120 ldw x, (0x09, sp)
+ 000071 E6 02 [ 1] 121 ld a, (0x2, x)
+ 000073 97 [ 1] 122 ld xl, a
+ 000074 16 0B [ 2] 123 ldw y, (0x0b, sp)
+ 000076 90 E6 02 [ 1] 124 ld a, (0x2, y)
+ 000079 42 [ 4] 125 mul x, a
+ 00007A 72 FB 0F [ 2] 126 addw x, (0x0f, sp)
+ 00007D 1F 05 [ 2] 127 ldw (0x05, sp), x
+ 128 ; ../_mullong.c: 746: bcast(a)->bi.b3 = bcast(a)->b.b1 * bcast(b)->b.b2; // C
+ 00007F 16 09 [ 2] 129 ldw y, (0x09, sp)
+ 000081 1E 09 [ 2] 130 ldw x, (0x09, sp)
+ 000083 E6 02 [ 1] 131 ld a, (0x2, x)
+ 000085 1E 0B [ 2] 132 ldw x, (0x0b, sp)
+ 000087 88 [ 1] 133 push a
+ 000088 E6 01 [ 1] 134 ld a, (0x1, x)
+ 00008A 97 [ 1] 135 ld xl, a
+ 00008B 84 [ 1] 136 pop a
+ 00008C 42 [ 4] 137 mul x, a
+ 00008D 9F [ 1] 138 ld a, xl
+ 00008E 90 F7 [ 1] 139 ld (y), a
+ 140 ; ../_mullong.c: 747: bcast(a)->bi.i12 = bcast(a)->b.b1 * bcast(b)->b.b0; // C
+ 000090 16 09 [ 2] 141 ldw y, (0x09, sp)
+ 000092 90 5C [ 1] 142 incw y
+ 000094 1E 09 [ 2] 143 ldw x, (0x09, sp)
+ 000096 E6 02 [ 1] 144 ld a, (0x2, x)
+ 000098 1E 0B [ 2] 145 ldw x, (0x0b, sp)
+ 00009A 88 [ 1] 146 push a
+ 00009B E6 03 [ 1] 147 ld a, (0x3, x)
+ 00009D 97 [ 1] 148 ld xl, a
+ 00009E 84 [ 1] 149 pop a
+ 00009F 42 [ 4] 150 mul x, a
+ 0000A0 90 FF [ 2] 151 ldw (y), x
+ 152 ; ../_mullong.c: 749: bcast(b)->bi.b3 = bcast(a)->b.b0 * bcast(b)->b.b3; // B
+ 0000A2 16 0B [ 2] 153 ldw y, (0x0b, sp)
+ 0000A4 1E 09 [ 2] 154 ldw x, (0x09, sp)
+ 0000A6 E6 03 [ 1] 155 ld a, (0x3, x)
+ 0000A8 1E 0B [ 2] 156 ldw x, (0x0b, sp)
+ 0000AA 88 [ 1] 157 push a
+ 0000AB F6 [ 1] 158 ld a, (x)
+ 0000AC 97 [ 1] 159 ld xl, a
+ 0000AD 84 [ 1] 160 pop a
+ 0000AE 42 [ 4] 161 mul x, a
+ 0000AF 9F [ 1] 162 ld a, xl
+ 0000B0 90 F7 [ 1] 163 ld (y), a
+ 164 ; ../_mullong.c: 750: bcast(b)->bi.i12 = bcast(a)->b.b0 * bcast(b)->b.b1; // B
+ 0000B2 16 0B [ 2] 165 ldw y, (0x0b, sp)
+ 0000B4 90 5C [ 1] 166 incw y
+ 0000B6 1E 09 [ 2] 167 ldw x, (0x09, sp)
+ 0000B8 E6 03 [ 1] 168 ld a, (0x3, x)
+ 0000BA 1E 0B [ 2] 169 ldw x, (0x0b, sp)
+ 0000BC 88 [ 1] 170 push a
+ 0000BD E6 02 [ 1] 171 ld a, (0x2, x)
+ 0000BF 97 [ 1] 172 ld xl, a
+ 0000C0 84 [ 1] 173 pop a
+ 0000C1 42 [ 4] 174 mul x, a
+ 0000C2 90 FF [ 2] 175 ldw (y), x
+ 176 ; ../_mullong.c: 752: bcast(b)->bi.b0 = 0; // B
+ 0000C4 1E 0B [ 2] 177 ldw x, (0x0b, sp)
+ 0000C6 6F 03 [ 1] 178 clr (0x0003, x)
+ 179 ; ../_mullong.c: 753: bcast(a)->bi.b0 = 0; // C
+ 0000C8 1E 09 [ 2] 180 ldw x, (0x09, sp)
+ 0000CA 6F 03 [ 1] 181 clr (0x0003, x)
+ 182 ; ../_mullong.c: 754: t.l += a;
+ 0000CC 16 07 [ 2] 183 ldw y, (0x07, sp)
+ 0000CE 17 03 [ 2] 184 ldw (0x03, sp), y
+ 0000D0 16 05 [ 2] 185 ldw y, (0x05, sp)
+ 0000D2 17 01 [ 2] 186 ldw (0x01, sp), y
+ 0000D4 1E 16 [ 2] 187 ldw x, (0x16, sp)
+ 0000D6 1F 0B [ 2] 188 ldw (0x0b, sp), x
+ 0000D8 1E 14 [ 2] 189 ldw x, (0x14, sp)
+ 0000DA 16 0B [ 2] 190 ldw y, (0x0b, sp)
+ 0000DC 72 F9 03 [ 2] 191 addw y, (0x03, sp)
+ 0000DF 17 0F [ 2] 192 ldw (0x0f, sp), y
+ 0000E1 9F [ 1] 193 ld a, xl
+ 0000E2 19 02 [ 1] 194 adc a, (0x02, sp)
+ 0000E4 6B 0E [ 1] 195 ld (0x0e, sp), a
+ 0000E6 9E [ 1] 196 ld a, xh
+ 0000E7 19 01 [ 1] 197 adc a, (0x01, sp)
+ 0000E9 6B 0D [ 1] 198 ld (0x0d, sp), a
+ 0000EB 1E 0F [ 2] 199 ldw x, (0x0f, sp)
+ 0000ED 1F 07 [ 2] 200 ldw (0x07, sp), x
+ 0000EF 1E 0D [ 2] 201 ldw x, (0x0d, sp)
+ 0000F1 1F 05 [ 2] 202 ldw (0x05, sp), x
+ 203 ; ../_mullong.c: 756: return t.l + b;
+ 0000F3 7B 08 [ 1] 204 ld a, (0x08, sp)
+ 0000F5 7B 07 [ 1] 205 ld a, (0x07, sp)
+ 0000F7 7B 06 [ 1] 206 ld a, (0x06, sp)
+ 0000F9 7B 05 [ 1] 207 ld a, (0x05, sp)
+ 0000FB 1E 1A [ 2] 208 ldw x, (0x1a, sp)
+ 0000FD 1F 0B [ 2] 209 ldw (0x0b, sp), x
+ 0000FF 1E 18 [ 2] 210 ldw x, (0x18, sp)
+ 000101 16 0B [ 2] 211 ldw y, (0x0b, sp)
+ 000103 72 F9 0F [ 2] 212 addw y, (0x0f, sp)
+ 000106 9F [ 1] 213 ld a, xl
+ 000107 19 0E [ 1] 214 adc a, (0x0e, sp)
+ 000109 02 [ 1] 215 rlwa x
+ 00010A 19 0D [ 1] 216 adc a, (0x0d, sp)
+ 00010C 95 [ 1] 217 ld xh, a
+ 00010D 51 [ 1] 218 exgw x, y
+ 219 ; ../_mullong.c: 757: }
+ 00010E 5B 10 [ 2] 220 addw sp, #16
+ 000110 87 [ 5] 221 retf
+ 222 .area CODE
+ 223 .area CONST
+ 224 .area INITIALIZER
+ 225 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mullong.rel b/device/lib/stm8-large/_mullong.rel
new file mode 100644
index 0000000..9e3e64c
--- /dev/null
+++ b/device/lib/stm8-large/_mullong.rel
@@ -0,0 +1,61 @@
+XH3
+H B areas 2 global symbols
+M _mullong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 111 flags 0 addr 0
+S __mullong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 90 96 72 A9 00 05 96 1C 00 14 1F
+R 00 00 00 09
+T 00 00 0D 09 E6 03 96 1C 00 18 1F 0B 88 E6 01 97
+R 00 00 00 09
+T 00 00 1A 84 42 90 FF 72 A9 00 02 1E 09 E6 03 1E
+R 00 00 00 09
+T 00 00 27 0B 88 E6 03 97 84 42 90 FF 7B 05 6B 10
+R 00 00 00 09
+T 00 00 34 1E 09 F6 97 16 0B 90 E6 03 42 9F 1B 10
+R 00 00 00 09
+T 00 00 41 6B 10 6B 05 1E 09 E6 01 97 16 0B 90 E6
+R 00 00 00 09
+T 00 00 4E 02 42 9F 1B 10 6B 05 16 05 17 0D 1E 09
+R 00 00 00 09
+T 00 00 5B E6 01 97 16 0B 90 E6 03 42 72 FB 0D 1F
+R 00 00 00 09
+T 00 00 68 0F 1F 05 7B 06 7B 05 1E 09 E6 02 97 16
+R 00 00 00 09
+T 00 00 75 0B 90 E6 02 42 72 FB 0F 1F 05 16 09 1E
+R 00 00 00 09
+T 00 00 82 09 E6 02 1E 0B 88 E6 01 97 84 42 9F 90
+R 00 00 00 09
+T 00 00 8F F7 16 09 90 5C 1E 09 E6 02 1E 0B 88 E6
+R 00 00 00 09
+T 00 00 9C 03 97 84 42 90 FF 16 0B 1E 09 E6 03 1E
+R 00 00 00 09
+T 00 00 A9 0B 88 F6 97 84 42 9F 90 F7 16 0B 90 5C
+R 00 00 00 09
+T 00 00 B6 1E 09 E6 03 1E 0B 88 E6 02 97 84 42 90
+R 00 00 00 09
+T 00 00 C3 FF 1E 0B 6F 03 1E 09 6F 03 16 07 17 03
+R 00 00 00 09
+T 00 00 D0 16 05 17 01 1E 16 1F 0B 1E 14 16 0B 72
+R 00 00 00 09
+T 00 00 DD F9 03 17 0F 9F 19 02 6B 0E 9E 19 01 6B
+R 00 00 00 09
+T 00 00 EA 0D 1E 0F 1F 07 1E 0D 1F 05 7B 08 7B 07
+R 00 00 00 09
+T 00 00 F7 7B 06 7B 05 1E 1A 1F 0B 1E 18 16 0B 72
+R 00 00 00 09
+T 00 01 04 F9 0F 9F 19 0E 02 19 0D 95 51 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_mullong.sym b/device/lib/stm8-large/_mullong.sym
new file mode 100644
index 0000000..0dab026
--- /dev/null
+++ b/device/lib/stm8-large/_mullong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __mullong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 111 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_mullonglong.asm b/device/lib/stm8-large/_mullonglong.asm
new file mode 100644
index 0000000..97342aa
--- /dev/null
+++ b/device/lib/stm8-large/_mullonglong.asm
@@ -0,0 +1,226 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _mullonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __mullonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_mullonglong.c: 35: long long _mullonglong(long long ll, long long lr)
+; -----------------------------------------
+; function _mullonglong
+; -----------------------------------------
+__mullonglong:
+ sub sp, #27
+; ../_mullonglong.c: 37: unsigned long long ret = 0ull;
+ clrw x
+ ldw (0x07, sp), x
+ ldw (0x05, sp), x
+ ldw (0x03, sp), x
+ ldw (0x01, sp), x
+; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++)
+ clr (0x1a, sp)
+00106$:
+; ../_mullonglong.c: 42: unsigned char l = ll >> (i * 8);
+ ld a, (0x1a, sp)
+ sll a
+ sll a
+ sll a
+ ld (0x1b, sp), a
+ ldw y, (0x25, sp)
+ ldw (0x16, sp), y
+ ldw y, (0x23, sp)
+ ldw (0x14, sp), y
+ ldw y, (0x21, sp)
+ ldw (0x12, sp), y
+ ldw x, (0x27, sp)
+ ld a, (0x1b, sp)
+ jreq 00133$
+00132$:
+ sra (0x12, sp)
+ rrc (0x13, sp)
+ rrc (0x14, sp)
+ rrc (0x15, sp)
+ rrc (0x16, sp)
+ rrc (0x17, sp)
+ rrcw x
+ dec a
+ jrne 00132$
+00133$:
+ ldw (0x18, sp), x
+ ld a, (0x19, sp)
+ ld (0x11, sp), a
+; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++)
+ clr (0x1b, sp)
+00104$:
+ clrw x
+ ld a, (0x1a, sp)
+ ld xl, a
+ ld a, (0x1b, sp)
+ ld (0x19, sp), a
+ clr (0x18, sp)
+ addw x, (0x18, sp)
+ cpw x, #0x0008
+ jrslt 00134$
+ jpf 00107$
+00134$:
+; ../_mullonglong.c: 45: unsigned char r = lr >> (j * 8);
+ ld a, (0x1b, sp)
+ sll a
+ sll a
+ sll a
+ ld (0x19, sp), a
+ ldw y, (0x2d, sp)
+ ldw (0x16, sp), y
+ ldw y, (0x2b, sp)
+ ldw (0x14, sp), y
+ ldw y, (0x29, sp)
+ ldw (0x12, sp), y
+ ldw x, (0x2f, sp)
+ ld a, (0x19, sp)
+ jreq 00136$
+00135$:
+ sra (0x12, sp)
+ rrc (0x13, sp)
+ rrc (0x14, sp)
+ rrc (0x15, sp)
+ rrc (0x16, sp)
+ rrc (0x17, sp)
+ rrcw x
+ dec a
+ jrne 00135$
+00136$:
+ ldw (0x18, sp), x
+ ld a, (0x19, sp)
+ ld xl, a
+; ../_mullonglong.c: 46: ret += (unsigned long long)((unsigned short)(l * r)) << ((i + j) * 8);
+ ld a, (0x11, sp)
+ mul x, a
+ ldw (0x0f, sp), x
+ clr (0x0e, sp)
+ clr (0x0d, sp)
+ clr (0x0c, sp)
+ clr (0x0b, sp)
+ clr (0x0a, sp)
+ clr (0x09, sp)
+ ld a, (0x1a, sp)
+ add a, (0x1b, sp)
+ sll a
+ sll a
+ sll a
+ ld (0x19, sp), a
+ ldw y, (0x0d, sp)
+ ldw (0x16, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x14, sp), y
+ ldw y, (0x09, sp)
+ ldw (0x12, sp), y
+ ldw x, (0x0f, sp)
+ ld a, (0x19, sp)
+ jreq 00138$
+00137$:
+ sllw x
+ rlc (0x17, sp)
+ rlc (0x16, sp)
+ rlc (0x15, sp)
+ rlc (0x14, sp)
+ rlc (0x13, sp)
+ rlc (0x12, sp)
+ dec a
+ jrne 00137$
+00138$:
+ ldw (0x18, sp), x
+ addw x, (0x07, sp)
+ ldw (0x0f, sp), x
+ ld a, (0x06, sp)
+ adc a, (0x17, sp)
+ ld (0x0e, sp), a
+ ld a, (0x05, sp)
+ adc a, (0x16, sp)
+ ld (0x0d, sp), a
+ ld a, (0x04, sp)
+ adc a, (0x15, sp)
+ ld (0x0c, sp), a
+ ld a, (0x03, sp)
+ adc a, (0x14, sp)
+ ldw y, (0x01, sp)
+ jrnc 00139$
+ incw y
+00139$:
+ addw y, (0x12, sp)
+ ld (0x03, sp), a
+ ldw (0x01, sp), y
+ ldw y, (0x0f, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x05, sp), y
+ ld a, (0x0c, sp)
+ ld (0x04, sp), a
+; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++)
+ inc (0x1b, sp)
+ jpf 00104$
+00107$:
+; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++)
+ inc (0x1a, sp)
+ ld a, (0x1a, sp)
+ cp a, #0x08
+ jrnc 00140$
+ jpf 00106$
+00140$:
+; ../_mullonglong.c: 50: return(ret);
+ ldw x, (0x1f, sp)
+ ldw y, (0x07, sp)
+ ldw (#6, x), y
+ ldw y, (0x05, sp)
+ ldw (#4, x), y
+ ldw y, (0x03, sp)
+ ldw (#2, x), y
+ ldw y, (0x01, sp)
+ ldw (x), y
+; ../_mullonglong.c: 51: }
+ addw sp, #27
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mullonglong.lst b/device/lib/stm8-large/_mullonglong.lst
new file mode 100644
index 0000000..c567d41
--- /dev/null
+++ b/device/lib/stm8-large/_mullonglong.lst
@@ -0,0 +1,226 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _mullonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __mullonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_mullonglong.c: 35: long long _mullonglong(long long ll, long long lr)
+ 50 ; -----------------------------------------
+ 51 ; function _mullonglong
+ 52 ; -----------------------------------------
+ 000000 53 __mullonglong:
+ 000000 52 1B [ 2] 54 sub sp, #27
+ 55 ; ../_mullonglong.c: 37: unsigned long long ret = 0ull;
+ 000002 5F [ 1] 56 clrw x
+ 000003 1F 07 [ 2] 57 ldw (0x07, sp), x
+ 000005 1F 05 [ 2] 58 ldw (0x05, sp), x
+ 000007 1F 03 [ 2] 59 ldw (0x03, sp), x
+ 000009 1F 01 [ 2] 60 ldw (0x01, sp), x
+ 61 ; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++)
+ 00000B 0F 1A [ 1] 62 clr (0x1a, sp)
+ 00000D 63 00106$:
+ 64 ; ../_mullonglong.c: 42: unsigned char l = ll >> (i * 8);
+ 00000D 7B 1A [ 1] 65 ld a, (0x1a, sp)
+ 00000F 48 [ 1] 66 sll a
+ 000010 48 [ 1] 67 sll a
+ 000011 48 [ 1] 68 sll a
+ 000012 6B 1B [ 1] 69 ld (0x1b, sp), a
+ 000014 16 25 [ 2] 70 ldw y, (0x25, sp)
+ 000016 17 16 [ 2] 71 ldw (0x16, sp), y
+ 000018 16 23 [ 2] 72 ldw y, (0x23, sp)
+ 00001A 17 14 [ 2] 73 ldw (0x14, sp), y
+ 00001C 16 21 [ 2] 74 ldw y, (0x21, sp)
+ 00001E 17 12 [ 2] 75 ldw (0x12, sp), y
+ 000020 1E 27 [ 2] 76 ldw x, (0x27, sp)
+ 000022 7B 1B [ 1] 77 ld a, (0x1b, sp)
+ 000024 27 10 [ 1] 78 jreq 00133$
+ 000026 79 00132$:
+ 000026 07 12 [ 1] 80 sra (0x12, sp)
+ 000028 06 13 [ 1] 81 rrc (0x13, sp)
+ 00002A 06 14 [ 1] 82 rrc (0x14, sp)
+ 00002C 06 15 [ 1] 83 rrc (0x15, sp)
+ 00002E 06 16 [ 1] 84 rrc (0x16, sp)
+ 000030 06 17 [ 1] 85 rrc (0x17, sp)
+ 000032 56 [ 2] 86 rrcw x
+ 000033 4A [ 1] 87 dec a
+ 000034 26 F0 [ 1] 88 jrne 00132$
+ 000036 89 00133$:
+ 000036 1F 18 [ 2] 90 ldw (0x18, sp), x
+ 000038 7B 19 [ 1] 91 ld a, (0x19, sp)
+ 00003A 6B 11 [ 1] 92 ld (0x11, sp), a
+ 93 ; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++)
+ 00003C 0F 1B [ 1] 94 clr (0x1b, sp)
+ 00003E 95 00104$:
+ 00003E 5F [ 1] 96 clrw x
+ 00003F 7B 1A [ 1] 97 ld a, (0x1a, sp)
+ 000041 97 [ 1] 98 ld xl, a
+ 000042 7B 1B [ 1] 99 ld a, (0x1b, sp)
+ 000044 6B 19 [ 1] 100 ld (0x19, sp), a
+ 000046 0F 18 [ 1] 101 clr (0x18, sp)
+ 000048 72 FB 18 [ 2] 102 addw x, (0x18, sp)
+ 00004B A3 00 08 [ 2] 103 cpw x, #0x0008
+ 00004E 2F 04 [ 1] 104 jrslt 00134$
+ 000050 ACs00r00rFA [ 2] 105 jpf 00107$
+ 000054 106 00134$:
+ 107 ; ../_mullonglong.c: 45: unsigned char r = lr >> (j * 8);
+ 000054 7B 1B [ 1] 108 ld a, (0x1b, sp)
+ 000056 48 [ 1] 109 sll a
+ 000057 48 [ 1] 110 sll a
+ 000058 48 [ 1] 111 sll a
+ 000059 6B 19 [ 1] 112 ld (0x19, sp), a
+ 00005B 16 2D [ 2] 113 ldw y, (0x2d, sp)
+ 00005D 17 16 [ 2] 114 ldw (0x16, sp), y
+ 00005F 16 2B [ 2] 115 ldw y, (0x2b, sp)
+ 000061 17 14 [ 2] 116 ldw (0x14, sp), y
+ 000063 16 29 [ 2] 117 ldw y, (0x29, sp)
+ 000065 17 12 [ 2] 118 ldw (0x12, sp), y
+ 000067 1E 2F [ 2] 119 ldw x, (0x2f, sp)
+ 000069 7B 19 [ 1] 120 ld a, (0x19, sp)
+ 00006B 27 10 [ 1] 121 jreq 00136$
+ 00006D 122 00135$:
+ 00006D 07 12 [ 1] 123 sra (0x12, sp)
+ 00006F 06 13 [ 1] 124 rrc (0x13, sp)
+ 000071 06 14 [ 1] 125 rrc (0x14, sp)
+ 000073 06 15 [ 1] 126 rrc (0x15, sp)
+ 000075 06 16 [ 1] 127 rrc (0x16, sp)
+ 000077 06 17 [ 1] 128 rrc (0x17, sp)
+ 000079 56 [ 2] 129 rrcw x
+ 00007A 4A [ 1] 130 dec a
+ 00007B 26 F0 [ 1] 131 jrne 00135$
+ 00007D 132 00136$:
+ 00007D 1F 18 [ 2] 133 ldw (0x18, sp), x
+ 00007F 7B 19 [ 1] 134 ld a, (0x19, sp)
+ 000081 97 [ 1] 135 ld xl, a
+ 136 ; ../_mullonglong.c: 46: ret += (unsigned long long)((unsigned short)(l * r)) << ((i + j) * 8);
+ 000082 7B 11 [ 1] 137 ld a, (0x11, sp)
+ 000084 42 [ 4] 138 mul x, a
+ 000085 1F 0F [ 2] 139 ldw (0x0f, sp), x
+ 000087 0F 0E [ 1] 140 clr (0x0e, sp)
+ 000089 0F 0D [ 1] 141 clr (0x0d, sp)
+ 00008B 0F 0C [ 1] 142 clr (0x0c, sp)
+ 00008D 0F 0B [ 1] 143 clr (0x0b, sp)
+ 00008F 0F 0A [ 1] 144 clr (0x0a, sp)
+ 000091 0F 09 [ 1] 145 clr (0x09, sp)
+ 000093 7B 1A [ 1] 146 ld a, (0x1a, sp)
+ 000095 1B 1B [ 1] 147 add a, (0x1b, sp)
+ 000097 48 [ 1] 148 sll a
+ 000098 48 [ 1] 149 sll a
+ 000099 48 [ 1] 150 sll a
+ 00009A 6B 19 [ 1] 151 ld (0x19, sp), a
+ 00009C 16 0D [ 2] 152 ldw y, (0x0d, sp)
+ 00009E 17 16 [ 2] 153 ldw (0x16, sp), y
+ 0000A0 16 0B [ 2] 154 ldw y, (0x0b, sp)
+ 0000A2 17 14 [ 2] 155 ldw (0x14, sp), y
+ 0000A4 16 09 [ 2] 156 ldw y, (0x09, sp)
+ 0000A6 17 12 [ 2] 157 ldw (0x12, sp), y
+ 0000A8 1E 0F [ 2] 158 ldw x, (0x0f, sp)
+ 0000AA 7B 19 [ 1] 159 ld a, (0x19, sp)
+ 0000AC 27 10 [ 1] 160 jreq 00138$
+ 0000AE 161 00137$:
+ 0000AE 58 [ 2] 162 sllw x
+ 0000AF 09 17 [ 1] 163 rlc (0x17, sp)
+ 0000B1 09 16 [ 1] 164 rlc (0x16, sp)
+ 0000B3 09 15 [ 1] 165 rlc (0x15, sp)
+ 0000B5 09 14 [ 1] 166 rlc (0x14, sp)
+ 0000B7 09 13 [ 1] 167 rlc (0x13, sp)
+ 0000B9 09 12 [ 1] 168 rlc (0x12, sp)
+ 0000BB 4A [ 1] 169 dec a
+ 0000BC 26 F0 [ 1] 170 jrne 00137$
+ 0000BE 171 00138$:
+ 0000BE 1F 18 [ 2] 172 ldw (0x18, sp), x
+ 0000C0 72 FB 07 [ 2] 173 addw x, (0x07, sp)
+ 0000C3 1F 0F [ 2] 174 ldw (0x0f, sp), x
+ 0000C5 7B 06 [ 1] 175 ld a, (0x06, sp)
+ 0000C7 19 17 [ 1] 176 adc a, (0x17, sp)
+ 0000C9 6B 0E [ 1] 177 ld (0x0e, sp), a
+ 0000CB 7B 05 [ 1] 178 ld a, (0x05, sp)
+ 0000CD 19 16 [ 1] 179 adc a, (0x16, sp)
+ 0000CF 6B 0D [ 1] 180 ld (0x0d, sp), a
+ 0000D1 7B 04 [ 1] 181 ld a, (0x04, sp)
+ 0000D3 19 15 [ 1] 182 adc a, (0x15, sp)
+ 0000D5 6B 0C [ 1] 183 ld (0x0c, sp), a
+ 0000D7 7B 03 [ 1] 184 ld a, (0x03, sp)
+ 0000D9 19 14 [ 1] 185 adc a, (0x14, sp)
+ 0000DB 16 01 [ 2] 186 ldw y, (0x01, sp)
+ 0000DD 24 02 [ 1] 187 jrnc 00139$
+ 0000DF 90 5C [ 1] 188 incw y
+ 0000E1 189 00139$:
+ 0000E1 72 F9 12 [ 2] 190 addw y, (0x12, sp)
+ 0000E4 6B 03 [ 1] 191 ld (0x03, sp), a
+ 0000E6 17 01 [ 2] 192 ldw (0x01, sp), y
+ 0000E8 16 0F [ 2] 193 ldw y, (0x0f, sp)
+ 0000EA 17 07 [ 2] 194 ldw (0x07, sp), y
+ 0000EC 16 0D [ 2] 195 ldw y, (0x0d, sp)
+ 0000EE 17 05 [ 2] 196 ldw (0x05, sp), y
+ 0000F0 7B 0C [ 1] 197 ld a, (0x0c, sp)
+ 0000F2 6B 04 [ 1] 198 ld (0x04, sp), a
+ 199 ; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++)
+ 0000F4 0C 1B [ 1] 200 inc (0x1b, sp)
+ 0000F6 ACs00r00r3E [ 2] 201 jpf 00104$
+ 0000FA 202 00107$:
+ 203 ; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++)
+ 0000FA 0C 1A [ 1] 204 inc (0x1a, sp)
+ 0000FC 7B 1A [ 1] 205 ld a, (0x1a, sp)
+ 0000FE A1 08 [ 1] 206 cp a, #0x08
+ 000100 24 04 [ 1] 207 jrnc 00140$
+ 000102 ACs00r00r0D [ 2] 208 jpf 00106$
+ 000106 209 00140$:
+ 210 ; ../_mullonglong.c: 50: return(ret);
+ 000106 1E 1F [ 2] 211 ldw x, (0x1f, sp)
+ 000108 16 07 [ 2] 212 ldw y, (0x07, sp)
+ 00010A EF 06 [ 2] 213 ldw (#6, x), y
+ 00010C 16 05 [ 2] 214 ldw y, (0x05, sp)
+ 00010E EF 04 [ 2] 215 ldw (#4, x), y
+ 000110 16 03 [ 2] 216 ldw y, (0x03, sp)
+ 000112 EF 02 [ 2] 217 ldw (#2, x), y
+ 000114 16 01 [ 2] 218 ldw y, (0x01, sp)
+ 000116 FF [ 2] 219 ldw (x), y
+ 220 ; ../_mullonglong.c: 51: }
+ 000117 5B 1B [ 2] 221 addw sp, #27
+ 000119 87 [ 5] 222 retf
+ 223 .area CODE
+ 224 .area CONST
+ 225 .area INITIALIZER
+ 226 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mullonglong.rel b/device/lib/stm8-large/_mullonglong.rel
new file mode 100644
index 0000000..9477fda
--- /dev/null
+++ b/device/lib/stm8-large/_mullonglong.rel
@@ -0,0 +1,99 @@
+XH3
+H B areas 2 global symbols
+M _mullonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 11A flags 0 addr 0
+S __mullonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 1B 5F 1F 07 1F 05 1F 03 1F 01 0F 1A
+R 00 00 00 09
+T 00 00 0D
+R 00 00 00 09
+T 00 00 0D 7B 1A 48 48 48 6B 1B 16 25 17 16 16 23
+R 00 00 00 09
+T 00 00 1A 17 14 16 21 17 12 1E 27 7B 1B 27 10
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 07 12 06 13 06 14 06 15 06 16 06 17 56
+R 00 00 00 09
+T 00 00 33 4A 26 F0
+R 00 00 00 09
+T 00 00 36
+R 00 00 00 09
+T 00 00 36 1F 18 7B 19 6B 11 0F 1B
+R 00 00 00 09
+T 00 00 3E
+R 00 00 00 09
+T 00 00 3E 5F 7B 1A 97 7B 1B 6B 19 0F 18 72 FB 18
+R 00 00 00 09
+T 00 00 4B A3 00 08 2F 04 AC 00 00 FA
+R 00 00 00 09 80 09 00 09
+T 00 00 54
+R 00 00 00 09
+T 00 00 54 7B 1B 48 48 48 6B 19 16 2D 17 16 16 2B
+R 00 00 00 09
+T 00 00 61 17 14 16 29 17 12 1E 2F 7B 19 27 10
+R 00 00 00 09
+T 00 00 6D
+R 00 00 00 09
+T 00 00 6D 07 12 06 13 06 14 06 15 06 16 06 17 56
+R 00 00 00 09
+T 00 00 7A 4A 26 F0
+R 00 00 00 09
+T 00 00 7D
+R 00 00 00 09
+T 00 00 7D 1F 18 7B 19 97 7B 11 42 1F 0F 0F 0E 0F
+R 00 00 00 09
+T 00 00 8A 0D 0F 0C 0F 0B 0F 0A 0F 09 7B 1A 1B 1B
+R 00 00 00 09
+T 00 00 97 48 48 48 6B 19 16 0D 17 16 16 0B 17 14
+R 00 00 00 09
+T 00 00 A4 16 09 17 12 1E 0F 7B 19 27 10
+R 00 00 00 09
+T 00 00 AE
+R 00 00 00 09
+T 00 00 AE 58 09 17 09 16 09 15 09 14 09 13 09 12
+R 00 00 00 09
+T 00 00 BB 4A 26 F0
+R 00 00 00 09
+T 00 00 BE
+R 00 00 00 09
+T 00 00 BE 1F 18 72 FB 07 1F 0F 7B 06 19 17 6B 0E
+R 00 00 00 09
+T 00 00 CB 7B 05 19 16 6B 0D 7B 04 19 15 6B 0C 7B
+R 00 00 00 09
+T 00 00 D8 03 19 14 16 01 24 02 90 5C
+R 00 00 00 09
+T 00 00 E1
+R 00 00 00 09
+T 00 00 E1 72 F9 12 6B 03 17 01 16 0F 17 07 16 0D
+R 00 00 00 09
+T 00 00 EE 17 05 7B 0C 6B 04 0C 1B AC
+R 00 00 00 09
+T 00 00 F7 00 00 3E
+R 00 00 00 09 80 03 00 09
+T 00 00 FA
+R 00 00 00 09
+T 00 00 FA 0C 1A 7B 1A A1 08 24 04 AC
+R 00 00 00 09
+T 00 01 03 00 00 0D
+R 00 00 00 09 80 03 00 09
+T 00 01 06
+R 00 00 00 09
+T 00 01 06 1E 1F 16 07 EF 06 16 05 EF 04 16 03 EF
+R 00 00 00 09
+T 00 01 13 02 16 01 FF 5B 1B 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_mullonglong.sym b/device/lib/stm8-large/_mullonglong.sym
new file mode 100644
index 0000000..5af92d1
--- /dev/null
+++ b/device/lib/stm8-large/_mullonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __mullonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 11A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_mulschar.asm b/device/lib/stm8-large/_mulschar.asm
new file mode 100644
index 0000000..f9d9db9
--- /dev/null
+++ b/device/lib/stm8-large/_mulschar.asm
@@ -0,0 +1,122 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _mulschar
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __mulschar
+ .globl __muluschar
+ .globl __mulsuchar
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_mulschar.c: 31: _mulschar (signed char x, signed char y)
+; -----------------------------------------
+; function _mulschar
+; -----------------------------------------
+__mulschar:
+; ../_mulschar.c: 33: return ((int)x * (int)y);
+ ld a, (0x04, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld a, (0x05, sp)
+ ld yl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld yh, a
+ pushw y
+ pushw x
+ callf __mulint
+ addw sp, #4
+; ../_mulschar.c: 34: }
+ retf
+; ../_mulschar.c: 37: _muluschar (unsigned char x, unsigned char y)
+; -----------------------------------------
+; function _muluschar
+; -----------------------------------------
+__muluschar:
+ sub sp, #2
+; ../_mulschar.c: 39: return ((int)((signed char)x) * (int)y);
+ ld a, (0x06, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld a, (0x07, sp)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+ ldw y, (0x01, sp)
+ pushw y
+ pushw x
+ callf __mulint
+; ../_mulschar.c: 40: }
+ addw sp, #6
+ retf
+; ../_mulschar.c: 43: _mulsuchar (signed char x, signed char y)
+; -----------------------------------------
+; function _mulsuchar
+; -----------------------------------------
+__mulsuchar:
+; ../_mulschar.c: 45: return ((int)((unsigned char)x) * (int)y);
+ ld a, (0x04, sp)
+ clrw y
+ ld yl, a
+ ld a, (0x05, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ pushw x
+ pushw y
+ callf __mulint
+ addw sp, #4
+; ../_mulschar.c: 46: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mulschar.lst b/device/lib/stm8-large/_mulschar.lst
new file mode 100644
index 0000000..472a5c8
--- /dev/null
+++ b/device/lib/stm8-large/_mulschar.lst
@@ -0,0 +1,122 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _mulschar
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __mulschar
+ 12 .globl __muluschar
+ 13 .globl __mulsuchar
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../_mulschar.c: 31: _mulschar (signed char x, signed char y)
+ 52 ; -----------------------------------------
+ 53 ; function _mulschar
+ 54 ; -----------------------------------------
+ 000000 55 __mulschar:
+ 56 ; ../_mulschar.c: 33: return ((int)x * (int)y);
+ 000000 7B 04 [ 1] 57 ld a, (0x04, sp)
+ 000002 97 [ 1] 58 ld xl, a
+ 000003 49 [ 1] 59 rlc a
+ 000004 4F [ 1] 60 clr a
+ 000005 A2 00 [ 1] 61 sbc a, #0x00
+ 000007 95 [ 1] 62 ld xh, a
+ 000008 7B 05 [ 1] 63 ld a, (0x05, sp)
+ 00000A 90 97 [ 1] 64 ld yl, a
+ 00000C 49 [ 1] 65 rlc a
+ 00000D 4F [ 1] 66 clr a
+ 00000E A2 00 [ 1] 67 sbc a, #0x00
+ 000010 90 95 [ 1] 68 ld yh, a
+ 000012 90 89 [ 2] 69 pushw y
+ 000014 89 [ 2] 70 pushw x
+ 000015 8Ds00r00r00 [ 5] 71 callf __mulint
+ 000019 5B 04 [ 2] 72 addw sp, #4
+ 73 ; ../_mulschar.c: 34: }
+ 00001B 87 [ 5] 74 retf
+ 75 ; ../_mulschar.c: 37: _muluschar (unsigned char x, unsigned char y)
+ 76 ; -----------------------------------------
+ 77 ; function _muluschar
+ 78 ; -----------------------------------------
+ 00001C 79 __muluschar:
+ 00001C 52 02 [ 2] 80 sub sp, #2
+ 81 ; ../_mulschar.c: 39: return ((int)((signed char)x) * (int)y);
+ 00001E 7B 06 [ 1] 82 ld a, (0x06, sp)
+ 000020 97 [ 1] 83 ld xl, a
+ 000021 49 [ 1] 84 rlc a
+ 000022 4F [ 1] 85 clr a
+ 000023 A2 00 [ 1] 86 sbc a, #0x00
+ 000025 95 [ 1] 87 ld xh, a
+ 000026 7B 07 [ 1] 88 ld a, (0x07, sp)
+ 000028 6B 02 [ 1] 89 ld (0x02, sp), a
+ 00002A 0F 01 [ 1] 90 clr (0x01, sp)
+ 00002C 16 01 [ 2] 91 ldw y, (0x01, sp)
+ 00002E 90 89 [ 2] 92 pushw y
+ 000030 89 [ 2] 93 pushw x
+ 000031 8Ds00r00r00 [ 5] 94 callf __mulint
+ 95 ; ../_mulschar.c: 40: }
+ 000035 5B 06 [ 2] 96 addw sp, #6
+ 000037 87 [ 5] 97 retf
+ 98 ; ../_mulschar.c: 43: _mulsuchar (signed char x, signed char y)
+ 99 ; -----------------------------------------
+ 100 ; function _mulsuchar
+ 101 ; -----------------------------------------
+ 000038 102 __mulsuchar:
+ 103 ; ../_mulschar.c: 45: return ((int)((unsigned char)x) * (int)y);
+ 000038 7B 04 [ 1] 104 ld a, (0x04, sp)
+ 00003A 90 5F [ 1] 105 clrw y
+ 00003C 90 97 [ 1] 106 ld yl, a
+ 00003E 7B 05 [ 1] 107 ld a, (0x05, sp)
+ 000040 97 [ 1] 108 ld xl, a
+ 000041 49 [ 1] 109 rlc a
+ 000042 4F [ 1] 110 clr a
+ 000043 A2 00 [ 1] 111 sbc a, #0x00
+ 000045 95 [ 1] 112 ld xh, a
+ 000046 89 [ 2] 113 pushw x
+ 000047 90 89 [ 2] 114 pushw y
+ 000049 8Ds00r00r00 [ 5] 115 callf __mulint
+ 00004D 5B 04 [ 2] 116 addw sp, #4
+ 117 ; ../_mulschar.c: 46: }
+ 00004F 87 [ 5] 118 retf
+ 119 .area CODE
+ 120 .area CONST
+ 121 .area INITIALIZER
+ 122 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_mulschar.rel b/device/lib/stm8-large/_mulschar.rel
new file mode 100644
index 0000000..3850eaf
--- /dev/null
+++ b/device/lib/stm8-large/_mulschar.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 5 global symbols
+M _mulschar
+O -mstm8
+S __mulint Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 50 flags 0 addr 0
+S __mulsuchar Def000038
+S __muluschar Def00001C
+S __mulschar Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 04 97 49 4F A2 00 95 7B 05 90 97 49
+R 00 00 00 09
+T 00 00 0D 4F A2 00 90 95 90 89 89 8D
+R 00 00 00 09
+T 00 00 16 00 00 00 5B 04 87
+R 00 00 00 09 82 03 00 00
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 52 02 7B 06 97 49 4F A2 00 95 7B 07 6B
+R 00 00 00 09
+T 00 00 29 02 0F 01 16 01 90 89 89 8D
+R 00 00 00 09
+T 00 00 32 00 00 00 5B 06 87
+R 00 00 00 09 82 03 00 00
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 7B 04 90 5F 90 97 7B 05 97 49 4F A2 00
+R 00 00 00 09
+T 00 00 45 95 89 90 89 8D 00 00 00 5B 04 87
+R 00 00 00 09 82 08 00 00
diff --git a/device/lib/stm8-large/_mulschar.sym b/device/lib/stm8-large/_mulschar.sym
new file mode 100644
index 0000000..11ebf02
--- /dev/null
+++ b/device/lib/stm8-large/_mulschar.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __mulint ****** GX
+ 9 __mulschar 000000 GR
+ 9 __mulsuchar 000038 GR
+ 9 __muluschar 00001C GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 50 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_rlslonglong.asm b/device/lib/stm8-large/_rlslonglong.asm
new file mode 100644
index 0000000..6c9b486
--- /dev/null
+++ b/device/lib/stm8-large/_rlslonglong.asm
@@ -0,0 +1,102 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _rlslonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __rlslonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_rlslonglong.c: 35: long long _rlslonglong(long long l, char s)
+; -----------------------------------------
+; function _rlslonglong
+; -----------------------------------------
+__rlslonglong:
+ sub sp, #17
+; ../_rlslonglong.c: 37: return((unsigned long long)(l) << s);
+ ldw y, (0x1d, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x1b, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x19, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x17, sp)
+ ldw (0x01, sp), y
+ ld a, (0x1f, sp)
+ ld (0x11, sp), a
+ ldw y, (0x05, sp)
+ ldw (0x0e, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x0c, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0a, sp), y
+ ldw x, (0x07, sp)
+ ld a, (0x11, sp)
+ jreq 00104$
+00103$:
+ sllw x
+ rlc (0x0f, sp)
+ rlc (0x0e, sp)
+ rlc (0x0d, sp)
+ rlc (0x0c, sp)
+ rlc (0x0b, sp)
+ rlc (0x0a, sp)
+ dec a
+ jrne 00103$
+00104$:
+ ldw (0x10, sp), x
+ ldw x, (0x15, sp)
+ ldw y, (0x10, sp)
+ ldw (#6, x), y
+ ldw y, (0x0e, sp)
+ ldw (#4, x), y
+ ldw y, (0x0c, sp)
+ ldw (#2, x), y
+ ldw y, (0x0a, sp)
+ ldw (x), y
+; ../_rlslonglong.c: 38: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rlslonglong.lst b/device/lib/stm8-large/_rlslonglong.lst
new file mode 100644
index 0000000..2edf3d6
--- /dev/null
+++ b/device/lib/stm8-large/_rlslonglong.lst
@@ -0,0 +1,102 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _rlslonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __rlslonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_rlslonglong.c: 35: long long _rlslonglong(long long l, char s)
+ 50 ; -----------------------------------------
+ 51 ; function _rlslonglong
+ 52 ; -----------------------------------------
+ 000000 53 __rlslonglong:
+ 000000 52 11 [ 2] 54 sub sp, #17
+ 55 ; ../_rlslonglong.c: 37: return((unsigned long long)(l) << s);
+ 000002 16 1D [ 2] 56 ldw y, (0x1d, sp)
+ 000004 17 07 [ 2] 57 ldw (0x07, sp), y
+ 000006 16 1B [ 2] 58 ldw y, (0x1b, sp)
+ 000008 17 05 [ 2] 59 ldw (0x05, sp), y
+ 00000A 16 19 [ 2] 60 ldw y, (0x19, sp)
+ 00000C 17 03 [ 2] 61 ldw (0x03, sp), y
+ 00000E 16 17 [ 2] 62 ldw y, (0x17, sp)
+ 000010 17 01 [ 2] 63 ldw (0x01, sp), y
+ 000012 7B 1F [ 1] 64 ld a, (0x1f, sp)
+ 000014 6B 11 [ 1] 65 ld (0x11, sp), a
+ 000016 16 05 [ 2] 66 ldw y, (0x05, sp)
+ 000018 17 0E [ 2] 67 ldw (0x0e, sp), y
+ 00001A 16 03 [ 2] 68 ldw y, (0x03, sp)
+ 00001C 17 0C [ 2] 69 ldw (0x0c, sp), y
+ 00001E 16 01 [ 2] 70 ldw y, (0x01, sp)
+ 000020 17 0A [ 2] 71 ldw (0x0a, sp), y
+ 000022 1E 07 [ 2] 72 ldw x, (0x07, sp)
+ 000024 7B 11 [ 1] 73 ld a, (0x11, sp)
+ 000026 27 10 [ 1] 74 jreq 00104$
+ 000028 75 00103$:
+ 000028 58 [ 2] 76 sllw x
+ 000029 09 0F [ 1] 77 rlc (0x0f, sp)
+ 00002B 09 0E [ 1] 78 rlc (0x0e, sp)
+ 00002D 09 0D [ 1] 79 rlc (0x0d, sp)
+ 00002F 09 0C [ 1] 80 rlc (0x0c, sp)
+ 000031 09 0B [ 1] 81 rlc (0x0b, sp)
+ 000033 09 0A [ 1] 82 rlc (0x0a, sp)
+ 000035 4A [ 1] 83 dec a
+ 000036 26 F0 [ 1] 84 jrne 00103$
+ 000038 85 00104$:
+ 000038 1F 10 [ 2] 86 ldw (0x10, sp), x
+ 00003A 1E 15 [ 2] 87 ldw x, (0x15, sp)
+ 00003C 16 10 [ 2] 88 ldw y, (0x10, sp)
+ 00003E EF 06 [ 2] 89 ldw (#6, x), y
+ 000040 16 0E [ 2] 90 ldw y, (0x0e, sp)
+ 000042 EF 04 [ 2] 91 ldw (#4, x), y
+ 000044 16 0C [ 2] 92 ldw y, (0x0c, sp)
+ 000046 EF 02 [ 2] 93 ldw (#2, x), y
+ 000048 16 0A [ 2] 94 ldw y, (0x0a, sp)
+ 00004A FF [ 2] 95 ldw (x), y
+ 96 ; ../_rlslonglong.c: 38: }
+ 00004B 5B 11 [ 2] 97 addw sp, #17
+ 00004D 87 [ 5] 98 retf
+ 99 .area CODE
+ 100 .area CONST
+ 101 .area INITIALIZER
+ 102 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rlslonglong.rel b/device/lib/stm8-large/_rlslonglong.rel
new file mode 100644
index 0000000..8bc0769
--- /dev/null
+++ b/device/lib/stm8-large/_rlslonglong.rel
@@ -0,0 +1,39 @@
+XH3
+H B areas 2 global symbols
+M _rlslonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 4E flags 0 addr 0
+S __rlslonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 16 1D 17 07 16 1B 17 05 16 19 17
+R 00 00 00 09
+T 00 00 0D 03 16 17 17 01 7B 1F 6B 11 16 05 17 0E
+R 00 00 00 09
+T 00 00 1A 16 03 17 0C 16 01 17 0A 1E 07 7B 11 27
+R 00 00 00 09
+T 00 00 27 10
+R 00 00 00 09
+T 00 00 28
+R 00 00 00 09
+T 00 00 28 58 09 0F 09 0E 09 0D 09 0C 09 0B 09 0A
+R 00 00 00 09
+T 00 00 35 4A 26 F0
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 1F 10 1E 15 16 10 EF 06 16 0E EF 04 16
+R 00 00 00 09
+T 00 00 45 0C EF 02 16 0A FF 5B 11 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_rlslonglong.sym b/device/lib/stm8-large/_rlslonglong.sym
new file mode 100644
index 0000000..95120a9
--- /dev/null
+++ b/device/lib/stm8-large/_rlslonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __rlslonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 4E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_rlulonglong.asm b/device/lib/stm8-large/_rlulonglong.asm
new file mode 100644
index 0000000..47b7dea
--- /dev/null
+++ b/device/lib/stm8-large/_rlulonglong.asm
@@ -0,0 +1,199 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _rlulonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __rlulonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_rlulonglong.c: 37: unsigned long long _rlulonglong(unsigned long long l, char s)
+; -----------------------------------------
+; function _rlulonglong
+; -----------------------------------------
+__rlulonglong:
+ sub sp, #16
+; ../_rlulonglong.c: 39: uint32_t *const top = (uint32_t *)((char *)(&l) + 0);
+ ldw y, sp
+ addw y, #20
+ ldw x, y
+ ldw (0x05, sp), x
+; ../_rlulonglong.c: 40: uint16_t *const middle = (uint16_t *)((char *)(&l) + 4);
+ ldw x, y
+ addw x, #0x0004
+ ldw (0x07, sp), x
+; ../_rlulonglong.c: 41: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4);
+ ldw x, y
+ addw x, #0x0004
+ ldw (0x09, sp), x
+; ../_rlulonglong.c: 42: uint16_t *const b = (uint16_t *)(&l);
+ ldw (0x0b, sp), y
+; ../_rlulonglong.c: 52: (*top) <<= s;
+00103$:
+; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16)
+ ld a, (0x1e, sp)
+ cp a, #0x10
+ jrc 00101$
+; ../_rlulonglong.c: 46: b[0] = b[1];
+ ldw x, (0x0b, sp)
+ incw x
+ incw x
+ ldw (0x0f, sp), x
+ ldw x, (x)
+ ldw y, (0x0b, sp)
+ ldw (y), x
+; ../_rlulonglong.c: 47: b[1] = b[2];
+ ldw x, (0x0b, sp)
+ addw x, #0x0004
+ ldw (0x0d, sp), x
+ ldw x, (x)
+ ldw y, (0x0f, sp)
+ ldw (y), x
+; ../_rlulonglong.c: 48: b[2] = b[3];
+ ldw x, (0x0b, sp)
+ addw x, #0x0006
+ ldw (0x0f, sp), x
+ ldw x, (x)
+ ldw y, (0x0d, sp)
+ ldw (y), x
+; ../_rlulonglong.c: 49: b[3] = 0;
+ ldw x, (0x0f, sp)
+ clr (0x1, x)
+ clr (x)
+; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16)
+ ld a, (0x1e, sp)
+ sub a, #0x10
+ ld (0x1e, sp), a
+ jra 00103$
+00101$:
+; ../_rlulonglong.c: 52: (*top) <<= s;
+ ldw x, (0x05, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ld a, (0x1e, sp)
+ ld (0x0c, sp), a
+ jreq 00119$
+00118$:
+ sllw y
+ rlcw x
+ dec a
+ jrne 00118$
+00119$:
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+ ldw x, (0x05, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rlulonglong.c: 53: (*top) |= (((uint32_t)((*middle) & 0xffffu) << s) >> 16);
+ ldw x, (0x07, sp)
+ ldw x, (x)
+ exgw x, y
+ clrw x
+ ldw (0x03, sp), y
+ ld a, (0x0c, sp)
+ jreq 00121$
+00120$:
+ sll (0x04, sp)
+ rlc (0x03, sp)
+ rlcw x
+ dec a
+ jrne 00120$
+00121$:
+ ldw y, x
+ ld a, xl
+ clrw x
+ or a, (0x10, sp)
+ ld (0x04, sp), a
+ ld a, yh
+ or a, (0x0f, sp)
+ ld (0x03, sp), a
+ ld a, xl
+ or a, (0x0e, sp)
+ ld (0x02, sp), a
+ ld a, xh
+ or a, (0x0d, sp)
+ ld (0x01, sp), a
+ ldw x, (0x05, sp)
+ ldw y, (0x03, sp)
+ ldw (0x2, x), y
+ ldw y, (0x01, sp)
+ ldw (x), y
+; ../_rlulonglong.c: 54: (*bottom) <<= s;
+ ldw x, (0x09, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ld a, (0x0c, sp)
+ jreq 00123$
+00122$:
+ sllw y
+ rlcw x
+ dec a
+ jrne 00122$
+00123$:
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+ ldw x, (0x09, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rlulonglong.c: 56: return(l);
+ ldw x, (0x14, sp)
+ ldw y, (0x1c, sp)
+ ldw (#6, x), y
+ ldw y, (0x1a, sp)
+ ldw (#4, x), y
+ ldw y, (0x18, sp)
+ ldw (#2, x), y
+ ldw y, (0x16, sp)
+ ldw (x), y
+; ../_rlulonglong.c: 57: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rlulonglong.lst b/device/lib/stm8-large/_rlulonglong.lst
new file mode 100644
index 0000000..9a2adb5
--- /dev/null
+++ b/device/lib/stm8-large/_rlulonglong.lst
@@ -0,0 +1,199 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _rlulonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __rlulonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_rlulonglong.c: 37: unsigned long long _rlulonglong(unsigned long long l, char s)
+ 50 ; -----------------------------------------
+ 51 ; function _rlulonglong
+ 52 ; -----------------------------------------
+ 000000 53 __rlulonglong:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_rlulonglong.c: 39: uint32_t *const top = (uint32_t *)((char *)(&l) + 0);
+ 000002 90 96 [ 1] 56 ldw y, sp
+ 000004 72 A9 00 14 [ 2] 57 addw y, #20
+ 000008 93 [ 1] 58 ldw x, y
+ 000009 1F 05 [ 2] 59 ldw (0x05, sp), x
+ 60 ; ../_rlulonglong.c: 40: uint16_t *const middle = (uint16_t *)((char *)(&l) + 4);
+ 00000B 93 [ 1] 61 ldw x, y
+ 00000C 1C 00 04 [ 2] 62 addw x, #0x0004
+ 00000F 1F 07 [ 2] 63 ldw (0x07, sp), x
+ 64 ; ../_rlulonglong.c: 41: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4);
+ 000011 93 [ 1] 65 ldw x, y
+ 000012 1C 00 04 [ 2] 66 addw x, #0x0004
+ 000015 1F 09 [ 2] 67 ldw (0x09, sp), x
+ 68 ; ../_rlulonglong.c: 42: uint16_t *const b = (uint16_t *)(&l);
+ 000017 17 0B [ 2] 69 ldw (0x0b, sp), y
+ 70 ; ../_rlulonglong.c: 52: (*top) <<= s;
+ 000019 71 00103$:
+ 72 ; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16)
+ 000019 7B 1E [ 1] 73 ld a, (0x1e, sp)
+ 00001B A1 10 [ 1] 74 cp a, #0x10
+ 00001D 25 30 [ 1] 75 jrc 00101$
+ 76 ; ../_rlulonglong.c: 46: b[0] = b[1];
+ 00001F 1E 0B [ 2] 77 ldw x, (0x0b, sp)
+ 000021 5C [ 1] 78 incw x
+ 000022 5C [ 1] 79 incw x
+ 000023 1F 0F [ 2] 80 ldw (0x0f, sp), x
+ 000025 FE [ 2] 81 ldw x, (x)
+ 000026 16 0B [ 2] 82 ldw y, (0x0b, sp)
+ 000028 90 FF [ 2] 83 ldw (y), x
+ 84 ; ../_rlulonglong.c: 47: b[1] = b[2];
+ 00002A 1E 0B [ 2] 85 ldw x, (0x0b, sp)
+ 00002C 1C 00 04 [ 2] 86 addw x, #0x0004
+ 00002F 1F 0D [ 2] 87 ldw (0x0d, sp), x
+ 000031 FE [ 2] 88 ldw x, (x)
+ 000032 16 0F [ 2] 89 ldw y, (0x0f, sp)
+ 000034 90 FF [ 2] 90 ldw (y), x
+ 91 ; ../_rlulonglong.c: 48: b[2] = b[3];
+ 000036 1E 0B [ 2] 92 ldw x, (0x0b, sp)
+ 000038 1C 00 06 [ 2] 93 addw x, #0x0006
+ 00003B 1F 0F [ 2] 94 ldw (0x0f, sp), x
+ 00003D FE [ 2] 95 ldw x, (x)
+ 00003E 16 0D [ 2] 96 ldw y, (0x0d, sp)
+ 000040 90 FF [ 2] 97 ldw (y), x
+ 98 ; ../_rlulonglong.c: 49: b[3] = 0;
+ 000042 1E 0F [ 2] 99 ldw x, (0x0f, sp)
+ 000044 6F 01 [ 1] 100 clr (0x1, x)
+ 000046 7F [ 1] 101 clr (x)
+ 102 ; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16)
+ 000047 7B 1E [ 1] 103 ld a, (0x1e, sp)
+ 000049 A0 10 [ 1] 104 sub a, #0x10
+ 00004B 6B 1E [ 1] 105 ld (0x1e, sp), a
+ 00004D 20 CA [ 2] 106 jra 00103$
+ 00004F 107 00101$:
+ 108 ; ../_rlulonglong.c: 52: (*top) <<= s;
+ 00004F 1E 05 [ 2] 109 ldw x, (0x05, sp)
+ 000051 90 93 [ 1] 110 ldw y, x
+ 000053 90 EE 02 [ 2] 111 ldw y, (0x2, y)
+ 000056 FE [ 2] 112 ldw x, (x)
+ 000057 7B 1E [ 1] 113 ld a, (0x1e, sp)
+ 000059 6B 0C [ 1] 114 ld (0x0c, sp), a
+ 00005B 27 06 [ 1] 115 jreq 00119$
+ 00005D 116 00118$:
+ 00005D 90 58 [ 2] 117 sllw y
+ 00005F 59 [ 2] 118 rlcw x
+ 000060 4A [ 1] 119 dec a
+ 000061 26 FA [ 1] 120 jrne 00118$
+ 000063 121 00119$:
+ 000063 17 0F [ 2] 122 ldw (0x0f, sp), y
+ 000065 1F 0D [ 2] 123 ldw (0x0d, sp), x
+ 000067 1E 05 [ 2] 124 ldw x, (0x05, sp)
+ 000069 16 0F [ 2] 125 ldw y, (0x0f, sp)
+ 00006B EF 02 [ 2] 126 ldw (0x2, x), y
+ 00006D 16 0D [ 2] 127 ldw y, (0x0d, sp)
+ 00006F FF [ 2] 128 ldw (x), y
+ 129 ; ../_rlulonglong.c: 53: (*top) |= (((uint32_t)((*middle) & 0xffffu) << s) >> 16);
+ 000070 1E 07 [ 2] 130 ldw x, (0x07, sp)
+ 000072 FE [ 2] 131 ldw x, (x)
+ 000073 51 [ 1] 132 exgw x, y
+ 000074 5F [ 1] 133 clrw x
+ 000075 17 03 [ 2] 134 ldw (0x03, sp), y
+ 000077 7B 0C [ 1] 135 ld a, (0x0c, sp)
+ 000079 27 08 [ 1] 136 jreq 00121$
+ 00007B 137 00120$:
+ 00007B 08 04 [ 1] 138 sll (0x04, sp)
+ 00007D 09 03 [ 1] 139 rlc (0x03, sp)
+ 00007F 59 [ 2] 140 rlcw x
+ 000080 4A [ 1] 141 dec a
+ 000081 26 F8 [ 1] 142 jrne 00120$
+ 000083 143 00121$:
+ 000083 90 93 [ 1] 144 ldw y, x
+ 000085 9F [ 1] 145 ld a, xl
+ 000086 5F [ 1] 146 clrw x
+ 000087 1A 10 [ 1] 147 or a, (0x10, sp)
+ 000089 6B 04 [ 1] 148 ld (0x04, sp), a
+ 00008B 90 9E [ 1] 149 ld a, yh
+ 00008D 1A 0F [ 1] 150 or a, (0x0f, sp)
+ 00008F 6B 03 [ 1] 151 ld (0x03, sp), a
+ 000091 9F [ 1] 152 ld a, xl
+ 000092 1A 0E [ 1] 153 or a, (0x0e, sp)
+ 000094 6B 02 [ 1] 154 ld (0x02, sp), a
+ 000096 9E [ 1] 155 ld a, xh
+ 000097 1A 0D [ 1] 156 or a, (0x0d, sp)
+ 000099 6B 01 [ 1] 157 ld (0x01, sp), a
+ 00009B 1E 05 [ 2] 158 ldw x, (0x05, sp)
+ 00009D 16 03 [ 2] 159 ldw y, (0x03, sp)
+ 00009F EF 02 [ 2] 160 ldw (0x2, x), y
+ 0000A1 16 01 [ 2] 161 ldw y, (0x01, sp)
+ 0000A3 FF [ 2] 162 ldw (x), y
+ 163 ; ../_rlulonglong.c: 54: (*bottom) <<= s;
+ 0000A4 1E 09 [ 2] 164 ldw x, (0x09, sp)
+ 0000A6 90 93 [ 1] 165 ldw y, x
+ 0000A8 90 EE 02 [ 2] 166 ldw y, (0x2, y)
+ 0000AB FE [ 2] 167 ldw x, (x)
+ 0000AC 7B 0C [ 1] 168 ld a, (0x0c, sp)
+ 0000AE 27 06 [ 1] 169 jreq 00123$
+ 0000B0 170 00122$:
+ 0000B0 90 58 [ 2] 171 sllw y
+ 0000B2 59 [ 2] 172 rlcw x
+ 0000B3 4A [ 1] 173 dec a
+ 0000B4 26 FA [ 1] 174 jrne 00122$
+ 0000B6 175 00123$:
+ 0000B6 17 0F [ 2] 176 ldw (0x0f, sp), y
+ 0000B8 1F 0D [ 2] 177 ldw (0x0d, sp), x
+ 0000BA 1E 09 [ 2] 178 ldw x, (0x09, sp)
+ 0000BC 16 0F [ 2] 179 ldw y, (0x0f, sp)
+ 0000BE EF 02 [ 2] 180 ldw (0x2, x), y
+ 0000C0 16 0D [ 2] 181 ldw y, (0x0d, sp)
+ 0000C2 FF [ 2] 182 ldw (x), y
+ 183 ; ../_rlulonglong.c: 56: return(l);
+ 0000C3 1E 14 [ 2] 184 ldw x, (0x14, sp)
+ 0000C5 16 1C [ 2] 185 ldw y, (0x1c, sp)
+ 0000C7 EF 06 [ 2] 186 ldw (#6, x), y
+ 0000C9 16 1A [ 2] 187 ldw y, (0x1a, sp)
+ 0000CB EF 04 [ 2] 188 ldw (#4, x), y
+ 0000CD 16 18 [ 2] 189 ldw y, (0x18, sp)
+ 0000CF EF 02 [ 2] 190 ldw (#2, x), y
+ 0000D1 16 16 [ 2] 191 ldw y, (0x16, sp)
+ 0000D3 FF [ 2] 192 ldw (x), y
+ 193 ; ../_rlulonglong.c: 57: }
+ 0000D4 5B 10 [ 2] 194 addw sp, #16
+ 0000D6 87 [ 5] 195 retf
+ 196 .area CODE
+ 197 .area CONST
+ 198 .area INITIALIZER
+ 199 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rlulonglong.rel b/device/lib/stm8-large/_rlulonglong.rel
new file mode 100644
index 0000000..2ff1327
--- /dev/null
+++ b/device/lib/stm8-large/_rlulonglong.rel
@@ -0,0 +1,77 @@
+XH3
+H B areas 2 global symbols
+M _rlulonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size D7 flags 0 addr 0
+S __rlulonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 90 96 72 A9 00 14 93 1F 05 93 1C
+R 00 00 00 09
+T 00 00 0D 00 04 1F 07 93 1C 00 04 1F 09 17 0B
+R 00 00 00 09
+T 00 00 19
+R 00 00 00 09
+T 00 00 19 7B 1E A1 10 25 30 1E 0B 5C 5C 1F 0F FE
+R 00 00 00 09
+T 00 00 26 16 0B 90 FF 1E 0B 1C 00 04 1F 0D FE 16
+R 00 00 00 09
+T 00 00 33 0F 90 FF 1E 0B 1C 00 06 1F 0F FE 16 0D
+R 00 00 00 09
+T 00 00 40 90 FF 1E 0F 6F 01 7F 7B 1E A0 10 6B 1E
+R 00 00 00 09
+T 00 00 4D 20 CA
+R 00 00 00 09
+T 00 00 4F
+R 00 00 00 09
+T 00 00 4F 1E 05 90 93 90 EE 02 FE 7B 1E 6B 0C 27
+R 00 00 00 09
+T 00 00 5C 06
+R 00 00 00 09
+T 00 00 5D
+R 00 00 00 09
+T 00 00 5D 90 58 59 4A 26 FA
+R 00 00 00 09
+T 00 00 63
+R 00 00 00 09
+T 00 00 63 17 0F 1F 0D 1E 05 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 70 1E 07 FE 51 5F 17 03 7B 0C 27 08
+R 00 00 00 09
+T 00 00 7B
+R 00 00 00 09
+T 00 00 7B 08 04 09 03 59 4A 26 F8
+R 00 00 00 09
+T 00 00 83
+R 00 00 00 09
+T 00 00 83 90 93 9F 5F 1A 10 6B 04 90 9E 1A 0F 6B
+R 00 00 00 09
+T 00 00 90 03 9F 1A 0E 6B 02 9E 1A 0D 6B 01 1E 05
+R 00 00 00 09
+T 00 00 9D 16 03 EF 02 16 01 FF 1E 09 90 93 90 EE
+R 00 00 00 09
+T 00 00 AA 02 FE 7B 0C 27 06
+R 00 00 00 09
+T 00 00 B0
+R 00 00 00 09
+T 00 00 B0 90 58 59 4A 26 FA
+R 00 00 00 09
+T 00 00 B6
+R 00 00 00 09
+T 00 00 B6 17 0F 1F 0D 1E 09 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 C3 1E 14 16 1C EF 06 16 1A EF 04 16 18 EF
+R 00 00 00 09
+T 00 00 D0 02 16 16 FF 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_rlulonglong.sym b/device/lib/stm8-large/_rlulonglong.sym
new file mode 100644
index 0000000..ad9513c
--- /dev/null
+++ b/device/lib/stm8-large/_rlulonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __rlulonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size D7 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_rrslonglong.asm b/device/lib/stm8-large/_rrslonglong.asm
new file mode 100644
index 0000000..0351003
--- /dev/null
+++ b/device/lib/stm8-large/_rrslonglong.asm
@@ -0,0 +1,211 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _rrslonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __rrslonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_rrslonglong.c: 38: long long _rrslonglong(long long l, char s)
+; -----------------------------------------
+; function _rrslonglong
+; -----------------------------------------
+__rrslonglong:
+ sub sp, #16
+; ../_rrslonglong.c: 40: int32_t *top = (uint32_t *)((char *)(&l) + 0);
+ ldw y, sp
+ addw y, #20
+ ldw x, y
+ ldw (0x05, sp), x
+; ../_rrslonglong.c: 41: uint32_t *middle = (uint16_t *)((char *)(&l) + 2);
+ ldw x, y
+ incw x
+ incw x
+ ldw (0x07, sp), x
+; ../_rrslonglong.c: 42: uint32_t *bottom = (uint32_t *)((char *)(&l) + 4);
+ ldw x, y
+ addw x, #0x0004
+ ldw (0x09, sp), x
+; ../_rrslonglong.c: 43: uint16_t *b = (uint16_t *)(&l);
+ ldw (0x0b, sp), y
+; ../_rrslonglong.c: 53: (*bottom) >>= s;
+00103$:
+; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16)
+ ld a, (0x1e, sp)
+ cp a, #0x10
+ jrc 00101$
+; ../_rrslonglong.c: 47: b[3] = b[2];
+ ldw x, (0x0b, sp)
+ addw x, #0x0006
+ ldw y, (0x0b, sp)
+ addw y, #0x0004
+ ldw (0x0d, sp), y
+ ldw y, (y)
+ ldw (x), y
+; ../_rrslonglong.c: 48: b[2] = b[1];
+ ldw x, (0x0b, sp)
+ incw x
+ incw x
+ ldw (0x0f, sp), x
+ ldw x, (x)
+ ldw y, (0x0d, sp)
+ ldw (y), x
+; ../_rrslonglong.c: 49: b[1] = b[0];
+ ldw x, (0x0b, sp)
+ ldw x, (x)
+ ldw y, (0x0f, sp)
+ ldw (y), x
+; ../_rrslonglong.c: 50: b[0] = (b[0] & 0x8000) ? 0xffff : 0x000000;
+ ldw y, (0x0b, sp)
+ ldw (0x0f, sp), y
+ ldw x, (0x0b, sp)
+ ldw x, (x)
+ jrpl 00107$
+ clrw x
+ decw x
+ .byte 0x21
+00107$:
+ clrw x
+00108$:
+ ldw y, (0x0f, sp)
+ ldw (y), x
+; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16)
+ ld a, (0x1e, sp)
+ sub a, #0x10
+ ld (0x1e, sp), a
+ jra 00103$
+00101$:
+; ../_rrslonglong.c: 53: (*bottom) >>= s;
+ ldw x, (0x09, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ld a, (0x1e, sp)
+ jreq 00127$
+00126$:
+ srlw x
+ rrcw y
+ dec a
+ jrne 00126$
+00127$:
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+ ldw x, (0x09, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rrslonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful);
+ ldw x, (0x07, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x03, sp), y
+ ldw x, (x)
+ ldw (0x01, sp), x
+ clrw x
+ ldw y, (0x01, sp)
+ ld a, (0x1e, sp)
+ jreq 00129$
+00128$:
+ srlw y
+ rrcw x
+ dec a
+ jrne 00128$
+00129$:
+ ldw (0x0b, sp), x
+ clr (0x0a, sp)
+ clr (0x09, sp)
+ ld a, (0x04, sp)
+ or a, (0x0c, sp)
+ ld (0x10, sp), a
+ ld a, (0x03, sp)
+ or a, (0x0b, sp)
+ ld (0x0f, sp), a
+ ld a, (0x02, sp)
+ or a, (0x0a, sp)
+ ld (0x0e, sp), a
+ ld a, (0x01, sp)
+ or a, (0x09, sp)
+ ld (0x0d, sp), a
+ ldw x, (0x07, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rrslonglong.c: 55: (*top) >>= s;
+ ldw x, (0x05, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ld a, (0x1e, sp)
+ jreq 00131$
+00130$:
+ sraw x
+ rrcw y
+ dec a
+ jrne 00130$
+00131$:
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+ ldw x, (0x05, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rrslonglong.c: 57: return(l);
+ ldw x, (0x14, sp)
+ ldw y, (0x1c, sp)
+ ldw (#6, x), y
+ ldw y, (0x1a, sp)
+ ldw (#4, x), y
+ ldw y, (0x18, sp)
+ ldw (#2, x), y
+ ldw y, (0x16, sp)
+ ldw (x), y
+; ../_rrslonglong.c: 58: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rrslonglong.lst b/device/lib/stm8-large/_rrslonglong.lst
new file mode 100644
index 0000000..1ef8d3c
--- /dev/null
+++ b/device/lib/stm8-large/_rrslonglong.lst
@@ -0,0 +1,211 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _rrslonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __rrslonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_rrslonglong.c: 38: long long _rrslonglong(long long l, char s)
+ 50 ; -----------------------------------------
+ 51 ; function _rrslonglong
+ 52 ; -----------------------------------------
+ 000000 53 __rrslonglong:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_rrslonglong.c: 40: int32_t *top = (uint32_t *)((char *)(&l) + 0);
+ 000002 90 96 [ 1] 56 ldw y, sp
+ 000004 72 A9 00 14 [ 2] 57 addw y, #20
+ 000008 93 [ 1] 58 ldw x, y
+ 000009 1F 05 [ 2] 59 ldw (0x05, sp), x
+ 60 ; ../_rrslonglong.c: 41: uint32_t *middle = (uint16_t *)((char *)(&l) + 2);
+ 00000B 93 [ 1] 61 ldw x, y
+ 00000C 5C [ 1] 62 incw x
+ 00000D 5C [ 1] 63 incw x
+ 00000E 1F 07 [ 2] 64 ldw (0x07, sp), x
+ 65 ; ../_rrslonglong.c: 42: uint32_t *bottom = (uint32_t *)((char *)(&l) + 4);
+ 000010 93 [ 1] 66 ldw x, y
+ 000011 1C 00 04 [ 2] 67 addw x, #0x0004
+ 000014 1F 09 [ 2] 68 ldw (0x09, sp), x
+ 69 ; ../_rrslonglong.c: 43: uint16_t *b = (uint16_t *)(&l);
+ 000016 17 0B [ 2] 70 ldw (0x0b, sp), y
+ 71 ; ../_rrslonglong.c: 53: (*bottom) >>= s;
+ 000018 72 00103$:
+ 73 ; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16)
+ 000018 7B 1E [ 1] 74 ld a, (0x1e, sp)
+ 00001A A1 10 [ 1] 75 cp a, #0x10
+ 00001C 25 3B [ 1] 76 jrc 00101$
+ 77 ; ../_rrslonglong.c: 47: b[3] = b[2];
+ 00001E 1E 0B [ 2] 78 ldw x, (0x0b, sp)
+ 000020 1C 00 06 [ 2] 79 addw x, #0x0006
+ 000023 16 0B [ 2] 80 ldw y, (0x0b, sp)
+ 000025 72 A9 00 04 [ 2] 81 addw y, #0x0004
+ 000029 17 0D [ 2] 82 ldw (0x0d, sp), y
+ 00002B 90 FE [ 2] 83 ldw y, (y)
+ 00002D FF [ 2] 84 ldw (x), y
+ 85 ; ../_rrslonglong.c: 48: b[2] = b[1];
+ 00002E 1E 0B [ 2] 86 ldw x, (0x0b, sp)
+ 000030 5C [ 1] 87 incw x
+ 000031 5C [ 1] 88 incw x
+ 000032 1F 0F [ 2] 89 ldw (0x0f, sp), x
+ 000034 FE [ 2] 90 ldw x, (x)
+ 000035 16 0D [ 2] 91 ldw y, (0x0d, sp)
+ 000037 90 FF [ 2] 92 ldw (y), x
+ 93 ; ../_rrslonglong.c: 49: b[1] = b[0];
+ 000039 1E 0B [ 2] 94 ldw x, (0x0b, sp)
+ 00003B FE [ 2] 95 ldw x, (x)
+ 00003C 16 0F [ 2] 96 ldw y, (0x0f, sp)
+ 00003E 90 FF [ 2] 97 ldw (y), x
+ 98 ; ../_rrslonglong.c: 50: b[0] = (b[0] & 0x8000) ? 0xffff : 0x000000;
+ 000040 16 0B [ 2] 99 ldw y, (0x0b, sp)
+ 000042 17 0F [ 2] 100 ldw (0x0f, sp), y
+ 000044 1E 0B [ 2] 101 ldw x, (0x0b, sp)
+ 000046 FE [ 2] 102 ldw x, (x)
+ 000047 2A 03 [ 1] 103 jrpl 00107$
+ 000049 5F [ 1] 104 clrw x
+ 00004A 5A [ 2] 105 decw x
+ 00004B 21 106 .byte 0x21
+ 00004C 107 00107$:
+ 00004C 5F [ 1] 108 clrw x
+ 00004D 109 00108$:
+ 00004D 16 0F [ 2] 110 ldw y, (0x0f, sp)
+ 00004F 90 FF [ 2] 111 ldw (y), x
+ 112 ; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16)
+ 000051 7B 1E [ 1] 113 ld a, (0x1e, sp)
+ 000053 A0 10 [ 1] 114 sub a, #0x10
+ 000055 6B 1E [ 1] 115 ld (0x1e, sp), a
+ 000057 20 BF [ 2] 116 jra 00103$
+ 000059 117 00101$:
+ 118 ; ../_rrslonglong.c: 53: (*bottom) >>= s;
+ 000059 1E 09 [ 2] 119 ldw x, (0x09, sp)
+ 00005B 90 93 [ 1] 120 ldw y, x
+ 00005D 90 EE 02 [ 2] 121 ldw y, (0x2, y)
+ 000060 FE [ 2] 122 ldw x, (x)
+ 000061 7B 1E [ 1] 123 ld a, (0x1e, sp)
+ 000063 27 06 [ 1] 124 jreq 00127$
+ 000065 125 00126$:
+ 000065 54 [ 2] 126 srlw x
+ 000066 90 56 [ 2] 127 rrcw y
+ 000068 4A [ 1] 128 dec a
+ 000069 26 FA [ 1] 129 jrne 00126$
+ 00006B 130 00127$:
+ 00006B 17 0F [ 2] 131 ldw (0x0f, sp), y
+ 00006D 1F 0D [ 2] 132 ldw (0x0d, sp), x
+ 00006F 1E 09 [ 2] 133 ldw x, (0x09, sp)
+ 000071 16 0F [ 2] 134 ldw y, (0x0f, sp)
+ 000073 EF 02 [ 2] 135 ldw (0x2, x), y
+ 000075 16 0D [ 2] 136 ldw y, (0x0d, sp)
+ 000077 FF [ 2] 137 ldw (x), y
+ 138 ; ../_rrslonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful);
+ 000078 1E 07 [ 2] 139 ldw x, (0x07, sp)
+ 00007A 90 93 [ 1] 140 ldw y, x
+ 00007C 90 EE 02 [ 2] 141 ldw y, (0x2, y)
+ 00007F 17 03 [ 2] 142 ldw (0x03, sp), y
+ 000081 FE [ 2] 143 ldw x, (x)
+ 000082 1F 01 [ 2] 144 ldw (0x01, sp), x
+ 000084 5F [ 1] 145 clrw x
+ 000085 16 01 [ 2] 146 ldw y, (0x01, sp)
+ 000087 7B 1E [ 1] 147 ld a, (0x1e, sp)
+ 000089 27 06 [ 1] 148 jreq 00129$
+ 00008B 149 00128$:
+ 00008B 90 54 [ 2] 150 srlw y
+ 00008D 56 [ 2] 151 rrcw x
+ 00008E 4A [ 1] 152 dec a
+ 00008F 26 FA [ 1] 153 jrne 00128$
+ 000091 154 00129$:
+ 000091 1F 0B [ 2] 155 ldw (0x0b, sp), x
+ 000093 0F 0A [ 1] 156 clr (0x0a, sp)
+ 000095 0F 09 [ 1] 157 clr (0x09, sp)
+ 000097 7B 04 [ 1] 158 ld a, (0x04, sp)
+ 000099 1A 0C [ 1] 159 or a, (0x0c, sp)
+ 00009B 6B 10 [ 1] 160 ld (0x10, sp), a
+ 00009D 7B 03 [ 1] 161 ld a, (0x03, sp)
+ 00009F 1A 0B [ 1] 162 or a, (0x0b, sp)
+ 0000A1 6B 0F [ 1] 163 ld (0x0f, sp), a
+ 0000A3 7B 02 [ 1] 164 ld a, (0x02, sp)
+ 0000A5 1A 0A [ 1] 165 or a, (0x0a, sp)
+ 0000A7 6B 0E [ 1] 166 ld (0x0e, sp), a
+ 0000A9 7B 01 [ 1] 167 ld a, (0x01, sp)
+ 0000AB 1A 09 [ 1] 168 or a, (0x09, sp)
+ 0000AD 6B 0D [ 1] 169 ld (0x0d, sp), a
+ 0000AF 1E 07 [ 2] 170 ldw x, (0x07, sp)
+ 0000B1 16 0F [ 2] 171 ldw y, (0x0f, sp)
+ 0000B3 EF 02 [ 2] 172 ldw (0x2, x), y
+ 0000B5 16 0D [ 2] 173 ldw y, (0x0d, sp)
+ 0000B7 FF [ 2] 174 ldw (x), y
+ 175 ; ../_rrslonglong.c: 55: (*top) >>= s;
+ 0000B8 1E 05 [ 2] 176 ldw x, (0x05, sp)
+ 0000BA 90 93 [ 1] 177 ldw y, x
+ 0000BC 90 EE 02 [ 2] 178 ldw y, (0x2, y)
+ 0000BF FE [ 2] 179 ldw x, (x)
+ 0000C0 7B 1E [ 1] 180 ld a, (0x1e, sp)
+ 0000C2 27 06 [ 1] 181 jreq 00131$
+ 0000C4 182 00130$:
+ 0000C4 57 [ 2] 183 sraw x
+ 0000C5 90 56 [ 2] 184 rrcw y
+ 0000C7 4A [ 1] 185 dec a
+ 0000C8 26 FA [ 1] 186 jrne 00130$
+ 0000CA 187 00131$:
+ 0000CA 17 0F [ 2] 188 ldw (0x0f, sp), y
+ 0000CC 1F 0D [ 2] 189 ldw (0x0d, sp), x
+ 0000CE 1E 05 [ 2] 190 ldw x, (0x05, sp)
+ 0000D0 16 0F [ 2] 191 ldw y, (0x0f, sp)
+ 0000D2 EF 02 [ 2] 192 ldw (0x2, x), y
+ 0000D4 16 0D [ 2] 193 ldw y, (0x0d, sp)
+ 0000D6 FF [ 2] 194 ldw (x), y
+ 195 ; ../_rrslonglong.c: 57: return(l);
+ 0000D7 1E 14 [ 2] 196 ldw x, (0x14, sp)
+ 0000D9 16 1C [ 2] 197 ldw y, (0x1c, sp)
+ 0000DB EF 06 [ 2] 198 ldw (#6, x), y
+ 0000DD 16 1A [ 2] 199 ldw y, (0x1a, sp)
+ 0000DF EF 04 [ 2] 200 ldw (#4, x), y
+ 0000E1 16 18 [ 2] 201 ldw y, (0x18, sp)
+ 0000E3 EF 02 [ 2] 202 ldw (#2, x), y
+ 0000E5 16 16 [ 2] 203 ldw y, (0x16, sp)
+ 0000E7 FF [ 2] 204 ldw (x), y
+ 205 ; ../_rrslonglong.c: 58: }
+ 0000E8 5B 10 [ 2] 206 addw sp, #16
+ 0000EA 87 [ 5] 207 retf
+ 208 .area CODE
+ 209 .area CONST
+ 210 .area INITIALIZER
+ 211 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rrslonglong.rel b/device/lib/stm8-large/_rrslonglong.rel
new file mode 100644
index 0000000..6faf7e0
--- /dev/null
+++ b/device/lib/stm8-large/_rrslonglong.rel
@@ -0,0 +1,83 @@
+XH3
+H B areas 2 global symbols
+M _rrslonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size EB flags 0 addr 0
+S __rrslonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 90 96 72 A9 00 14 93 1F 05 93 5C
+R 00 00 00 09
+T 00 00 0D 5C 1F 07 93 1C 00 04 1F 09 17 0B
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 7B 1E A1 10 25 3B 1E 0B 1C 00 06 16 0B
+R 00 00 00 09
+T 00 00 25 72 A9 00 04 17 0D 90 FE FF 1E 0B 5C 5C
+R 00 00 00 09
+T 00 00 32 1F 0F FE 16 0D 90 FF 1E 0B FE 16 0F 90
+R 00 00 00 09
+T 00 00 3F FF 16 0B 17 0F 1E 0B FE 2A 03 5F 5A 21
+R 00 00 00 09
+T 00 00 4C
+R 00 00 00 09
+T 00 00 4C 5F
+R 00 00 00 09
+T 00 00 4D
+R 00 00 00 09
+T 00 00 4D 16 0F 90 FF 7B 1E A0 10 6B 1E 20 BF
+R 00 00 00 09
+T 00 00 59
+R 00 00 00 09
+T 00 00 59 1E 09 90 93 90 EE 02 FE 7B 1E 27 06
+R 00 00 00 09
+T 00 00 65
+R 00 00 00 09
+T 00 00 65 54 90 56 4A 26 FA
+R 00 00 00 09
+T 00 00 6B
+R 00 00 00 09
+T 00 00 6B 17 0F 1F 0D 1E 09 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 78 1E 07 90 93 90 EE 02 17 03 FE 1F 01 5F
+R 00 00 00 09
+T 00 00 85 16 01 7B 1E 27 06
+R 00 00 00 09
+T 00 00 8B
+R 00 00 00 09
+T 00 00 8B 90 54 56 4A 26 FA
+R 00 00 00 09
+T 00 00 91
+R 00 00 00 09
+T 00 00 91 1F 0B 0F 0A 0F 09 7B 04 1A 0C 6B 10 7B
+R 00 00 00 09
+T 00 00 9E 03 1A 0B 6B 0F 7B 02 1A 0A 6B 0E 7B 01
+R 00 00 00 09
+T 00 00 AB 1A 09 6B 0D 1E 07 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 B8 1E 05 90 93 90 EE 02 FE 7B 1E 27 06
+R 00 00 00 09
+T 00 00 C4
+R 00 00 00 09
+T 00 00 C4 57 90 56 4A 26 FA
+R 00 00 00 09
+T 00 00 CA
+R 00 00 00 09
+T 00 00 CA 17 0F 1F 0D 1E 05 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 D7 1E 14 16 1C EF 06 16 1A EF 04 16 18 EF
+R 00 00 00 09
+T 00 00 E4 02 16 16 FF 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_rrslonglong.sym b/device/lib/stm8-large/_rrslonglong.sym
new file mode 100644
index 0000000..a44e4ec
--- /dev/null
+++ b/device/lib/stm8-large/_rrslonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __rrslonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size EB flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_rrulonglong.asm b/device/lib/stm8-large/_rrulonglong.asm
new file mode 100644
index 0000000..28acacb
--- /dev/null
+++ b/device/lib/stm8-large/_rrulonglong.asm
@@ -0,0 +1,201 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _rrulonglong
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __rrulonglong
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_rrulonglong.c: 38: unsigned long long _rrulonglong(unsigned long long l, char s)
+; -----------------------------------------
+; function _rrulonglong
+; -----------------------------------------
+__rrulonglong:
+ sub sp, #16
+; ../_rrulonglong.c: 40: uint32_t *const top = (uint32_t *)((char *)(&l) + 0);
+ ldw y, sp
+ addw y, #20
+ ldw x, y
+ ldw (0x05, sp), x
+; ../_rrulonglong.c: 41: uint32_t *const middle = (uint16_t *)((char *)(&l) + 2);
+ ldw x, y
+ incw x
+ incw x
+ ldw (0x07, sp), x
+; ../_rrulonglong.c: 42: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4);
+ ldw x, y
+ addw x, #0x0004
+ ldw (0x09, sp), x
+; ../_rrulonglong.c: 43: uint16_t *const b = (uint16_t *)(&l);
+ ldw (0x0b, sp), y
+; ../_rrulonglong.c: 53: (*bottom) >>= s;
+00103$:
+; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16)
+ ld a, (0x1e, sp)
+ cp a, #0x10
+ jrc 00101$
+; ../_rrulonglong.c: 47: b[3] = b[2];
+ ldw x, (0x0b, sp)
+ addw x, #0x0006
+ ldw y, (0x0b, sp)
+ addw y, #0x0004
+ ldw (0x0d, sp), y
+ ldw y, (y)
+ ldw (x), y
+; ../_rrulonglong.c: 48: b[2] = b[1];
+ ldw x, (0x0b, sp)
+ incw x
+ incw x
+ ldw (0x0f, sp), x
+ ldw x, (x)
+ ldw y, (0x0d, sp)
+ ldw (y), x
+; ../_rrulonglong.c: 49: b[1] = b[0];
+ ldw x, (0x0b, sp)
+ ldw x, (x)
+ ldw y, (0x0f, sp)
+ ldw (y), x
+; ../_rrulonglong.c: 50: b[0] = 0x000000;
+ ldw x, (0x0b, sp)
+ clr (0x1, x)
+ clr (x)
+; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16)
+ ld a, (0x1e, sp)
+ sub a, #0x10
+ ld (0x1e, sp), a
+ jra 00103$
+00101$:
+; ../_rrulonglong.c: 53: (*bottom) >>= s;
+ ldw x, (0x09, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ld a, (0x1e, sp)
+ jreq 00119$
+00118$:
+ srlw x
+ rrcw y
+ dec a
+ jrne 00118$
+00119$:
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+ ldw x, (0x09, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rrulonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful);
+ ldw x, (0x07, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x03, sp), y
+ ldw x, (x)
+ ldw (0x01, sp), x
+ clrw x
+ ldw y, (0x01, sp)
+ ld a, (0x1e, sp)
+ jreq 00121$
+00120$:
+ srlw y
+ rrcw x
+ dec a
+ jrne 00120$
+00121$:
+ ldw (0x0b, sp), x
+ clr (0x0a, sp)
+ clr (0x09, sp)
+ ld a, (0x04, sp)
+ or a, (0x0c, sp)
+ ld (0x10, sp), a
+ ld a, (0x03, sp)
+ or a, (0x0b, sp)
+ ld (0x0f, sp), a
+ ld a, (0x02, sp)
+ or a, (0x0a, sp)
+ ld (0x0e, sp), a
+ ld a, (0x01, sp)
+ or a, (0x09, sp)
+ ld (0x0d, sp), a
+ ldw x, (0x07, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rrulonglong.c: 55: (*top) >>= s;
+ ldw x, (0x05, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ld a, (0x1e, sp)
+ jreq 00123$
+00122$:
+ srlw x
+ rrcw y
+ dec a
+ jrne 00122$
+00123$:
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+ ldw x, (0x05, sp)
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+; ../_rrulonglong.c: 57: return(l);
+ ldw x, (0x14, sp)
+ ldw y, (0x1c, sp)
+ ldw (#6, x), y
+ ldw y, (0x1a, sp)
+ ldw (#4, x), y
+ ldw y, (0x18, sp)
+ ldw (#2, x), y
+ ldw y, (0x16, sp)
+ ldw (x), y
+; ../_rrulonglong.c: 58: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rrulonglong.lst b/device/lib/stm8-large/_rrulonglong.lst
new file mode 100644
index 0000000..39367c5
--- /dev/null
+++ b/device/lib/stm8-large/_rrulonglong.lst
@@ -0,0 +1,201 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _rrulonglong
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __rrulonglong
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_rrulonglong.c: 38: unsigned long long _rrulonglong(unsigned long long l, char s)
+ 50 ; -----------------------------------------
+ 51 ; function _rrulonglong
+ 52 ; -----------------------------------------
+ 000000 53 __rrulonglong:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../_rrulonglong.c: 40: uint32_t *const top = (uint32_t *)((char *)(&l) + 0);
+ 000002 90 96 [ 1] 56 ldw y, sp
+ 000004 72 A9 00 14 [ 2] 57 addw y, #20
+ 000008 93 [ 1] 58 ldw x, y
+ 000009 1F 05 [ 2] 59 ldw (0x05, sp), x
+ 60 ; ../_rrulonglong.c: 41: uint32_t *const middle = (uint16_t *)((char *)(&l) + 2);
+ 00000B 93 [ 1] 61 ldw x, y
+ 00000C 5C [ 1] 62 incw x
+ 00000D 5C [ 1] 63 incw x
+ 00000E 1F 07 [ 2] 64 ldw (0x07, sp), x
+ 65 ; ../_rrulonglong.c: 42: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4);
+ 000010 93 [ 1] 66 ldw x, y
+ 000011 1C 00 04 [ 2] 67 addw x, #0x0004
+ 000014 1F 09 [ 2] 68 ldw (0x09, sp), x
+ 69 ; ../_rrulonglong.c: 43: uint16_t *const b = (uint16_t *)(&l);
+ 000016 17 0B [ 2] 70 ldw (0x0b, sp), y
+ 71 ; ../_rrulonglong.c: 53: (*bottom) >>= s;
+ 000018 72 00103$:
+ 73 ; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16)
+ 000018 7B 1E [ 1] 74 ld a, (0x1e, sp)
+ 00001A A1 10 [ 1] 75 cp a, #0x10
+ 00001C 25 2F [ 1] 76 jrc 00101$
+ 77 ; ../_rrulonglong.c: 47: b[3] = b[2];
+ 00001E 1E 0B [ 2] 78 ldw x, (0x0b, sp)
+ 000020 1C 00 06 [ 2] 79 addw x, #0x0006
+ 000023 16 0B [ 2] 80 ldw y, (0x0b, sp)
+ 000025 72 A9 00 04 [ 2] 81 addw y, #0x0004
+ 000029 17 0D [ 2] 82 ldw (0x0d, sp), y
+ 00002B 90 FE [ 2] 83 ldw y, (y)
+ 00002D FF [ 2] 84 ldw (x), y
+ 85 ; ../_rrulonglong.c: 48: b[2] = b[1];
+ 00002E 1E 0B [ 2] 86 ldw x, (0x0b, sp)
+ 000030 5C [ 1] 87 incw x
+ 000031 5C [ 1] 88 incw x
+ 000032 1F 0F [ 2] 89 ldw (0x0f, sp), x
+ 000034 FE [ 2] 90 ldw x, (x)
+ 000035 16 0D [ 2] 91 ldw y, (0x0d, sp)
+ 000037 90 FF [ 2] 92 ldw (y), x
+ 93 ; ../_rrulonglong.c: 49: b[1] = b[0];
+ 000039 1E 0B [ 2] 94 ldw x, (0x0b, sp)
+ 00003B FE [ 2] 95 ldw x, (x)
+ 00003C 16 0F [ 2] 96 ldw y, (0x0f, sp)
+ 00003E 90 FF [ 2] 97 ldw (y), x
+ 98 ; ../_rrulonglong.c: 50: b[0] = 0x000000;
+ 000040 1E 0B [ 2] 99 ldw x, (0x0b, sp)
+ 000042 6F 01 [ 1] 100 clr (0x1, x)
+ 000044 7F [ 1] 101 clr (x)
+ 102 ; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16)
+ 000045 7B 1E [ 1] 103 ld a, (0x1e, sp)
+ 000047 A0 10 [ 1] 104 sub a, #0x10
+ 000049 6B 1E [ 1] 105 ld (0x1e, sp), a
+ 00004B 20 CB [ 2] 106 jra 00103$
+ 00004D 107 00101$:
+ 108 ; ../_rrulonglong.c: 53: (*bottom) >>= s;
+ 00004D 1E 09 [ 2] 109 ldw x, (0x09, sp)
+ 00004F 90 93 [ 1] 110 ldw y, x
+ 000051 90 EE 02 [ 2] 111 ldw y, (0x2, y)
+ 000054 FE [ 2] 112 ldw x, (x)
+ 000055 7B 1E [ 1] 113 ld a, (0x1e, sp)
+ 000057 27 06 [ 1] 114 jreq 00119$
+ 000059 115 00118$:
+ 000059 54 [ 2] 116 srlw x
+ 00005A 90 56 [ 2] 117 rrcw y
+ 00005C 4A [ 1] 118 dec a
+ 00005D 26 FA [ 1] 119 jrne 00118$
+ 00005F 120 00119$:
+ 00005F 17 0F [ 2] 121 ldw (0x0f, sp), y
+ 000061 1F 0D [ 2] 122 ldw (0x0d, sp), x
+ 000063 1E 09 [ 2] 123 ldw x, (0x09, sp)
+ 000065 16 0F [ 2] 124 ldw y, (0x0f, sp)
+ 000067 EF 02 [ 2] 125 ldw (0x2, x), y
+ 000069 16 0D [ 2] 126 ldw y, (0x0d, sp)
+ 00006B FF [ 2] 127 ldw (x), y
+ 128 ; ../_rrulonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful);
+ 00006C 1E 07 [ 2] 129 ldw x, (0x07, sp)
+ 00006E 90 93 [ 1] 130 ldw y, x
+ 000070 90 EE 02 [ 2] 131 ldw y, (0x2, y)
+ 000073 17 03 [ 2] 132 ldw (0x03, sp), y
+ 000075 FE [ 2] 133 ldw x, (x)
+ 000076 1F 01 [ 2] 134 ldw (0x01, sp), x
+ 000078 5F [ 1] 135 clrw x
+ 000079 16 01 [ 2] 136 ldw y, (0x01, sp)
+ 00007B 7B 1E [ 1] 137 ld a, (0x1e, sp)
+ 00007D 27 06 [ 1] 138 jreq 00121$
+ 00007F 139 00120$:
+ 00007F 90 54 [ 2] 140 srlw y
+ 000081 56 [ 2] 141 rrcw x
+ 000082 4A [ 1] 142 dec a
+ 000083 26 FA [ 1] 143 jrne 00120$
+ 000085 144 00121$:
+ 000085 1F 0B [ 2] 145 ldw (0x0b, sp), x
+ 000087 0F 0A [ 1] 146 clr (0x0a, sp)
+ 000089 0F 09 [ 1] 147 clr (0x09, sp)
+ 00008B 7B 04 [ 1] 148 ld a, (0x04, sp)
+ 00008D 1A 0C [ 1] 149 or a, (0x0c, sp)
+ 00008F 6B 10 [ 1] 150 ld (0x10, sp), a
+ 000091 7B 03 [ 1] 151 ld a, (0x03, sp)
+ 000093 1A 0B [ 1] 152 or a, (0x0b, sp)
+ 000095 6B 0F [ 1] 153 ld (0x0f, sp), a
+ 000097 7B 02 [ 1] 154 ld a, (0x02, sp)
+ 000099 1A 0A [ 1] 155 or a, (0x0a, sp)
+ 00009B 6B 0E [ 1] 156 ld (0x0e, sp), a
+ 00009D 7B 01 [ 1] 157 ld a, (0x01, sp)
+ 00009F 1A 09 [ 1] 158 or a, (0x09, sp)
+ 0000A1 6B 0D [ 1] 159 ld (0x0d, sp), a
+ 0000A3 1E 07 [ 2] 160 ldw x, (0x07, sp)
+ 0000A5 16 0F [ 2] 161 ldw y, (0x0f, sp)
+ 0000A7 EF 02 [ 2] 162 ldw (0x2, x), y
+ 0000A9 16 0D [ 2] 163 ldw y, (0x0d, sp)
+ 0000AB FF [ 2] 164 ldw (x), y
+ 165 ; ../_rrulonglong.c: 55: (*top) >>= s;
+ 0000AC 1E 05 [ 2] 166 ldw x, (0x05, sp)
+ 0000AE 90 93 [ 1] 167 ldw y, x
+ 0000B0 90 EE 02 [ 2] 168 ldw y, (0x2, y)
+ 0000B3 FE [ 2] 169 ldw x, (x)
+ 0000B4 7B 1E [ 1] 170 ld a, (0x1e, sp)
+ 0000B6 27 06 [ 1] 171 jreq 00123$
+ 0000B8 172 00122$:
+ 0000B8 54 [ 2] 173 srlw x
+ 0000B9 90 56 [ 2] 174 rrcw y
+ 0000BB 4A [ 1] 175 dec a
+ 0000BC 26 FA [ 1] 176 jrne 00122$
+ 0000BE 177 00123$:
+ 0000BE 17 0F [ 2] 178 ldw (0x0f, sp), y
+ 0000C0 1F 0D [ 2] 179 ldw (0x0d, sp), x
+ 0000C2 1E 05 [ 2] 180 ldw x, (0x05, sp)
+ 0000C4 16 0F [ 2] 181 ldw y, (0x0f, sp)
+ 0000C6 EF 02 [ 2] 182 ldw (0x2, x), y
+ 0000C8 16 0D [ 2] 183 ldw y, (0x0d, sp)
+ 0000CA FF [ 2] 184 ldw (x), y
+ 185 ; ../_rrulonglong.c: 57: return(l);
+ 0000CB 1E 14 [ 2] 186 ldw x, (0x14, sp)
+ 0000CD 16 1C [ 2] 187 ldw y, (0x1c, sp)
+ 0000CF EF 06 [ 2] 188 ldw (#6, x), y
+ 0000D1 16 1A [ 2] 189 ldw y, (0x1a, sp)
+ 0000D3 EF 04 [ 2] 190 ldw (#4, x), y
+ 0000D5 16 18 [ 2] 191 ldw y, (0x18, sp)
+ 0000D7 EF 02 [ 2] 192 ldw (#2, x), y
+ 0000D9 16 16 [ 2] 193 ldw y, (0x16, sp)
+ 0000DB FF [ 2] 194 ldw (x), y
+ 195 ; ../_rrulonglong.c: 58: }
+ 0000DC 5B 10 [ 2] 196 addw sp, #16
+ 0000DE 87 [ 5] 197 retf
+ 198 .area CODE
+ 199 .area CONST
+ 200 .area INITIALIZER
+ 201 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_rrulonglong.rel b/device/lib/stm8-large/_rrulonglong.rel
new file mode 100644
index 0000000..ee613ee
--- /dev/null
+++ b/device/lib/stm8-large/_rrulonglong.rel
@@ -0,0 +1,77 @@
+XH3
+H B areas 2 global symbols
+M _rrulonglong
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size DF flags 0 addr 0
+S __rrulonglong Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 90 96 72 A9 00 14 93 1F 05 93 5C
+R 00 00 00 09
+T 00 00 0D 5C 1F 07 93 1C 00 04 1F 09 17 0B
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 7B 1E A1 10 25 2F 1E 0B 1C 00 06 16 0B
+R 00 00 00 09
+T 00 00 25 72 A9 00 04 17 0D 90 FE FF 1E 0B 5C 5C
+R 00 00 00 09
+T 00 00 32 1F 0F FE 16 0D 90 FF 1E 0B FE 16 0F 90
+R 00 00 00 09
+T 00 00 3F FF 1E 0B 6F 01 7F 7B 1E A0 10 6B 1E 20
+R 00 00 00 09
+T 00 00 4C CB
+R 00 00 00 09
+T 00 00 4D
+R 00 00 00 09
+T 00 00 4D 1E 09 90 93 90 EE 02 FE 7B 1E 27 06
+R 00 00 00 09
+T 00 00 59
+R 00 00 00 09
+T 00 00 59 54 90 56 4A 26 FA
+R 00 00 00 09
+T 00 00 5F
+R 00 00 00 09
+T 00 00 5F 17 0F 1F 0D 1E 09 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 6C 1E 07 90 93 90 EE 02 17 03 FE 1F 01 5F
+R 00 00 00 09
+T 00 00 79 16 01 7B 1E 27 06
+R 00 00 00 09
+T 00 00 7F
+R 00 00 00 09
+T 00 00 7F 90 54 56 4A 26 FA
+R 00 00 00 09
+T 00 00 85
+R 00 00 00 09
+T 00 00 85 1F 0B 0F 0A 0F 09 7B 04 1A 0C 6B 10 7B
+R 00 00 00 09
+T 00 00 92 03 1A 0B 6B 0F 7B 02 1A 0A 6B 0E 7B 01
+R 00 00 00 09
+T 00 00 9F 1A 09 6B 0D 1E 07 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 AC 1E 05 90 93 90 EE 02 FE 7B 1E 27 06
+R 00 00 00 09
+T 00 00 B8
+R 00 00 00 09
+T 00 00 B8 54 90 56 4A 26 FA
+R 00 00 00 09
+T 00 00 BE
+R 00 00 00 09
+T 00 00 BE 17 0F 1F 0D 1E 05 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 CB 1E 14 16 1C EF 06 16 1A EF 04 16 18 EF
+R 00 00 00 09
+T 00 00 D8 02 16 16 FF 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_rrulonglong.sym b/device/lib/stm8-large/_rrulonglong.sym
new file mode 100644
index 0000000..6f321f3
--- /dev/null
+++ b/device/lib/stm8-large/_rrulonglong.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __rrulonglong 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size DF flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_schar2fs.asm b/device/lib/stm8-large/_schar2fs.asm
new file mode 100644
index 0000000..ac5ed8c
--- /dev/null
+++ b/device/lib/stm8-large/_schar2fs.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _schar2fs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___slong2fs
+ .globl ___schar2fs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_schar2fs.c: 55: float __schar2fs (signed char sc) {
+; -----------------------------------------
+; function __schar2fs
+; -----------------------------------------
+___schar2fs:
+; ../_schar2fs.c: 56: return __slong2fs(sc);
+ ld a, (0x04, sp)
+ ld xl, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld xh, a
+ ld yl, a
+ ld yh, a
+ pushw x
+ pushw y
+ callf ___slong2fs
+ addw sp, #4
+; ../_schar2fs.c: 57: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_schar2fs.lst b/device/lib/stm8-large/_schar2fs.lst
new file mode 100644
index 0000000..8ecc038
--- /dev/null
+++ b/device/lib/stm8-large/_schar2fs.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _schar2fs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___slong2fs
+ 12 .globl ___schar2fs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_schar2fs.c: 55: float __schar2fs (signed char sc) {
+ 51 ; -----------------------------------------
+ 52 ; function __schar2fs
+ 53 ; -----------------------------------------
+ 000000 54 ___schar2fs:
+ 55 ; ../_schar2fs.c: 56: return __slong2fs(sc);
+ 000000 7B 04 [ 1] 56 ld a, (0x04, sp)
+ 000002 97 [ 1] 57 ld xl, a
+ 000003 49 [ 1] 58 rlc a
+ 000004 4F [ 1] 59 clr a
+ 000005 A2 00 [ 1] 60 sbc a, #0x00
+ 000007 95 [ 1] 61 ld xh, a
+ 000008 90 97 [ 1] 62 ld yl, a
+ 00000A 90 95 [ 1] 63 ld yh, a
+ 00000C 89 [ 2] 64 pushw x
+ 00000D 90 89 [ 2] 65 pushw y
+ 00000F 8Ds00r00r00 [ 5] 66 callf ___slong2fs
+ 000013 5B 04 [ 2] 67 addw sp, #4
+ 68 ; ../_schar2fs.c: 57: }
+ 000015 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_schar2fs.rel b/device/lib/stm8-large/_schar2fs.rel
new file mode 100644
index 0000000..4f1d52d
--- /dev/null
+++ b/device/lib/stm8-large/_schar2fs.rel
@@ -0,0 +1,24 @@
+XH3
+H B areas 3 global symbols
+M _schar2fs
+O -mstm8
+S ___slong2fs Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 16 flags 0 addr 0
+S ___schar2fs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 04 97 49 4F A2 00 95 90 97 90 95 89
+R 00 00 00 09
+T 00 00 0D 90 89 8D 00 00 00 5B 04 87
+R 00 00 00 09 82 06 00 00
diff --git a/device/lib/stm8-large/_schar2fs.sym b/device/lib/stm8-large/_schar2fs.sym
new file mode 100644
index 0000000..a5b11e9
--- /dev/null
+++ b/device/lib/stm8-large/_schar2fs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___schar2fs 000000 GR
+ ___slong2fs ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 16 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_sint2fs.asm b/device/lib/stm8-large/_sint2fs.asm
new file mode 100644
index 0000000..5742891
--- /dev/null
+++ b/device/lib/stm8-large/_sint2fs.asm
@@ -0,0 +1,71 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _sint2fs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___slong2fs
+ .globl ___sint2fs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_sint2fs.c: 54: float __sint2fs (signed int si) {
+; -----------------------------------------
+; function __sint2fs
+; -----------------------------------------
+___sint2fs:
+; ../_sint2fs.c: 55: return __slong2fs(si);
+ ldw y, (0x04, sp)
+ clrw x
+ tnzw y
+ jrpl 00103$
+ decw x
+00103$:
+ pushw y
+ pushw x
+ callf ___slong2fs
+ addw sp, #4
+; ../_sint2fs.c: 56: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_sint2fs.lst b/device/lib/stm8-large/_sint2fs.lst
new file mode 100644
index 0000000..679b12a
--- /dev/null
+++ b/device/lib/stm8-large/_sint2fs.lst
@@ -0,0 +1,71 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _sint2fs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___slong2fs
+ 12 .globl ___sint2fs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_sint2fs.c: 54: float __sint2fs (signed int si) {
+ 51 ; -----------------------------------------
+ 52 ; function __sint2fs
+ 53 ; -----------------------------------------
+ 000000 54 ___sint2fs:
+ 55 ; ../_sint2fs.c: 55: return __slong2fs(si);
+ 000000 16 04 [ 2] 56 ldw y, (0x04, sp)
+ 000002 5F [ 1] 57 clrw x
+ 000003 90 5D [ 2] 58 tnzw y
+ 000005 2A 01 [ 1] 59 jrpl 00103$
+ 000007 5A [ 2] 60 decw x
+ 000008 61 00103$:
+ 000008 90 89 [ 2] 62 pushw y
+ 00000A 89 [ 2] 63 pushw x
+ 00000B 8Ds00r00r00 [ 5] 64 callf ___slong2fs
+ 00000F 5B 04 [ 2] 65 addw sp, #4
+ 66 ; ../_sint2fs.c: 56: }
+ 000011 87 [ 5] 67 retf
+ 68 .area CODE
+ 69 .area CONST
+ 70 .area INITIALIZER
+ 71 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_sint2fs.rel b/device/lib/stm8-large/_sint2fs.rel
new file mode 100644
index 0000000..8089898
--- /dev/null
+++ b/device/lib/stm8-large/_sint2fs.rel
@@ -0,0 +1,26 @@
+XH3
+H B areas 3 global symbols
+M _sint2fs
+O -mstm8
+S ___slong2fs Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 12 flags 0 addr 0
+S ___sint2fs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 16 04 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 00 08
+R 00 00 00 09
+T 00 00 08 90 89 89 8D 00 00 00 5B 04 87
+R 00 00 00 09 82 07 00 00
diff --git a/device/lib/stm8-large/_sint2fs.sym b/device/lib/stm8-large/_sint2fs.sym
new file mode 100644
index 0000000..b6f68c5
--- /dev/null
+++ b/device/lib/stm8-large/_sint2fs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___sint2fs 000000 GR
+ ___slong2fs ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 12 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_slong2fs.asm b/device/lib/stm8-large/_slong2fs.asm
new file mode 100644
index 0000000..4687f35
--- /dev/null
+++ b/device/lib/stm8-large/_slong2fs.asm
@@ -0,0 +1,88 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _slong2fs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___ulong2fs
+ .globl ___slong2fs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_slong2fs.c: 79: float __slong2fs (signed long sl) {
+; -----------------------------------------
+; function __slong2fs
+; -----------------------------------------
+___slong2fs:
+; ../_slong2fs.c: 80: if (sl<0)
+ tnz (0x04, sp)
+ jrpl 00102$
+; ../_slong2fs.c: 81: return -__ulong2fs(-sl);
+ ldw y, (0x06, sp)
+ negw y
+ ldw x, (0x04, sp)
+ jrnc 00112$
+ incw x
+00112$:
+ negw x
+ pushw y
+ pushw x
+ callf ___ulong2fs
+ addw sp, #4
+ sllw y
+ ccf
+ rrcw y
+ jra 00104$
+00102$:
+; ../_slong2fs.c: 83: return __ulong2fs(sl);
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ callf ___ulong2fs
+ addw sp, #4
+00104$:
+; ../_slong2fs.c: 84: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_slong2fs.lst b/device/lib/stm8-large/_slong2fs.lst
new file mode 100644
index 0000000..cc78989
--- /dev/null
+++ b/device/lib/stm8-large/_slong2fs.lst
@@ -0,0 +1,88 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _slong2fs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___ulong2fs
+ 12 .globl ___slong2fs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_slong2fs.c: 79: float __slong2fs (signed long sl) {
+ 51 ; -----------------------------------------
+ 52 ; function __slong2fs
+ 53 ; -----------------------------------------
+ 000000 54 ___slong2fs:
+ 55 ; ../_slong2fs.c: 80: if (sl<0)
+ 000000 0D 04 [ 1] 56 tnz (0x04, sp)
+ 000002 2A 1A [ 1] 57 jrpl 00102$
+ 58 ; ../_slong2fs.c: 81: return -__ulong2fs(-sl);
+ 000004 16 06 [ 2] 59 ldw y, (0x06, sp)
+ 000006 90 50 [ 2] 60 negw y
+ 000008 1E 04 [ 2] 61 ldw x, (0x04, sp)
+ 00000A 24 01 [ 1] 62 jrnc 00112$
+ 00000C 5C [ 1] 63 incw x
+ 00000D 64 00112$:
+ 00000D 50 [ 2] 65 negw x
+ 00000E 90 89 [ 2] 66 pushw y
+ 000010 89 [ 2] 67 pushw x
+ 000011 8Ds00r00r00 [ 5] 68 callf ___ulong2fs
+ 000015 5B 04 [ 2] 69 addw sp, #4
+ 000017 90 58 [ 2] 70 sllw y
+ 000019 8C [ 1] 71 ccf
+ 00001A 90 56 [ 2] 72 rrcw y
+ 00001C 20 0C [ 2] 73 jra 00104$
+ 00001E 74 00102$:
+ 75 ; ../_slong2fs.c: 83: return __ulong2fs(sl);
+ 00001E 1E 06 [ 2] 76 ldw x, (0x06, sp)
+ 000020 89 [ 2] 77 pushw x
+ 000021 1E 06 [ 2] 78 ldw x, (0x06, sp)
+ 000023 89 [ 2] 79 pushw x
+ 000024 8Ds00r00r00 [ 5] 80 callf ___ulong2fs
+ 000028 5B 04 [ 2] 81 addw sp, #4
+ 00002A 82 00104$:
+ 83 ; ../_slong2fs.c: 84: }
+ 00002A 87 [ 5] 84 retf
+ 85 .area CODE
+ 86 .area CONST
+ 87 .area INITIALIZER
+ 88 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_slong2fs.rel b/device/lib/stm8-large/_slong2fs.rel
new file mode 100644
index 0000000..a73b32f
--- /dev/null
+++ b/device/lib/stm8-large/_slong2fs.rel
@@ -0,0 +1,36 @@
+XH3
+H B areas 3 global symbols
+M _slong2fs
+O -mstm8
+S ___ulong2fs Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2B flags 0 addr 0
+S ___slong2fs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 0D 04 2A 1A 16 06 90 50 1E 04 24 01 5C
+R 00 00 00 09
+T 00 00 0D
+R 00 00 00 09
+T 00 00 0D 50 90 89 89 8D 00 00 00 5B 04 90 58 8C
+R 00 00 00 09 82 08 00 00
+T 00 00 1A 90 56 20 0C
+R 00 00 00 09
+T 00 00 1E
+R 00 00 00 09
+T 00 00 1E 1E 06 89 1E 06 89 8D 00 00 00 5B 04
+R 00 00 00 09 82 0A 00 00
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_slong2fs.sym b/device/lib/stm8-large/_slong2fs.sym
new file mode 100644
index 0000000..946799d
--- /dev/null
+++ b/device/lib/stm8-large/_slong2fs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___slong2fs 000000 GR
+ ___ulong2fs ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_startup.asm b/device/lib/stm8-large/_startup.asm
new file mode 100644
index 0000000..60f288d
--- /dev/null
+++ b/device/lib/stm8-large/_startup.asm
@@ -0,0 +1,61 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _startup
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __sdcc_external_startup
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_startup.c: 52: unsigned char _sdcc_external_startup ()
+; -----------------------------------------
+; function _sdcc_external_startup
+; -----------------------------------------
+__sdcc_external_startup:
+; ../_startup.c: 54: return 0;
+ clr a
+; ../_startup.c: 55: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_startup.lst b/device/lib/stm8-large/_startup.lst
new file mode 100644
index 0000000..20b88fb
--- /dev/null
+++ b/device/lib/stm8-large/_startup.lst
@@ -0,0 +1,61 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _startup
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __sdcc_external_startup
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_startup.c: 52: unsigned char _sdcc_external_startup ()
+ 50 ; -----------------------------------------
+ 51 ; function _sdcc_external_startup
+ 52 ; -----------------------------------------
+ 000000 53 __sdcc_external_startup:
+ 54 ; ../_startup.c: 54: return 0;
+ 000000 4F [ 1] 55 clr a
+ 56 ; ../_startup.c: 55: }
+ 000001 87 [ 5] 57 retf
+ 58 .area CODE
+ 59 .area CONST
+ 60 .area INITIALIZER
+ 61 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_startup.rel b/device/lib/stm8-large/_startup.rel
new file mode 100644
index 0000000..b26b400
--- /dev/null
+++ b/device/lib/stm8-large/_startup.rel
@@ -0,0 +1,21 @@
+XH3
+H B areas 2 global symbols
+M _startup
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2 flags 0 addr 0
+S __sdcc_external_startup Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 4F 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_startup.sym b/device/lib/stm8-large/_startup.sym
new file mode 100644
index 0000000..fd727c6
--- /dev/null
+++ b/device/lib/stm8-large/_startup.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 __sdcc_external_startup 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strcat.asm b/device/lib/stm8-large/_strcat.asm
new file mode 100644
index 0000000..851279f
--- /dev/null
+++ b/device/lib/stm8-large/_strcat.asm
@@ -0,0 +1,80 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strcat
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strcat
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strcat.c: 31: char * strcat ( char * dst, const char * src )
+; -----------------------------------------
+; function strcat
+; -----------------------------------------
+_strcat:
+; ../_strcat.c: 33: char * cp = dst;
+ ldw x, (0x04, sp)
+; ../_strcat.c: 35: while( *cp )
+00101$:
+ ld a, (x)
+ jreq 00111$
+; ../_strcat.c: 36: cp++; /* find end of dst */
+ incw x
+ jra 00101$
+; ../_strcat.c: 38: while( *cp++ = *src++ ) ; /* Copy src to end of dst */
+00111$:
+ ldw y, (0x06, sp)
+00104$:
+ ld a, (y)
+ incw y
+ ld (x), a
+ incw x
+ tnz a
+ jrne 00104$
+; ../_strcat.c: 40: return( dst ); /* return dst */
+ ldw x, (0x04, sp)
+; ../_strcat.c: 41: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcat.lst b/device/lib/stm8-large/_strcat.lst
new file mode 100644
index 0000000..8091cbf
--- /dev/null
+++ b/device/lib/stm8-large/_strcat.lst
@@ -0,0 +1,80 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strcat
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strcat
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strcat.c: 31: char * strcat ( char * dst, const char * src )
+ 50 ; -----------------------------------------
+ 51 ; function strcat
+ 52 ; -----------------------------------------
+ 000000 53 _strcat:
+ 54 ; ../_strcat.c: 33: char * cp = dst;
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 56 ; ../_strcat.c: 35: while( *cp )
+ 000002 57 00101$:
+ 000002 F6 [ 1] 58 ld a, (x)
+ 000003 27 03 [ 1] 59 jreq 00111$
+ 60 ; ../_strcat.c: 36: cp++; /* find end of dst */
+ 000005 5C [ 1] 61 incw x
+ 000006 20 FA [ 2] 62 jra 00101$
+ 63 ; ../_strcat.c: 38: while( *cp++ = *src++ ) ; /* Copy src to end of dst */
+ 000008 64 00111$:
+ 000008 16 06 [ 2] 65 ldw y, (0x06, sp)
+ 00000A 66 00104$:
+ 00000A 90 F6 [ 1] 67 ld a, (y)
+ 00000C 90 5C [ 1] 68 incw y
+ 00000E F7 [ 1] 69 ld (x), a
+ 00000F 5C [ 1] 70 incw x
+ 000010 4D [ 1] 71 tnz a
+ 000011 26 F7 [ 1] 72 jrne 00104$
+ 73 ; ../_strcat.c: 40: return( dst ); /* return dst */
+ 000013 1E 04 [ 2] 74 ldw x, (0x04, sp)
+ 75 ; ../_strcat.c: 41: }
+ 000015 87 [ 5] 76 retf
+ 77 .area CODE
+ 78 .area CONST
+ 79 .area INITIALIZER
+ 80 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcat.rel b/device/lib/stm8-large/_strcat.rel
new file mode 100644
index 0000000..6697155
--- /dev/null
+++ b/device/lib/stm8-large/_strcat.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M _strcat
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 16 flags 0 addr 0
+S _strcat Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04
+R 00 00 00 09
+T 00 00 02
+R 00 00 00 09
+T 00 00 02 F6 27 03 5C 20 FA
+R 00 00 00 09
+T 00 00 08
+R 00 00 00 09
+T 00 00 08 16 06
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 90 F6 90 5C F7 5C 4D 26 F7 1E 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strcat.sym b/device/lib/stm8-large/_strcat.sym
new file mode 100644
index 0000000..f51b52f
--- /dev/null
+++ b/device/lib/stm8-large/_strcat.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strcat 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 16 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strchr.asm b/device/lib/stm8-large/_strchr.asm
new file mode 100644
index 0000000..98fa86c
--- /dev/null
+++ b/device/lib/stm8-large/_strchr.asm
@@ -0,0 +1,93 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strchr
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strchr
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strchr.c: 36: char * strchr ( const char * string, int ch )
+; -----------------------------------------
+; function strchr
+; -----------------------------------------
+_strchr:
+ push a
+; ../_strchr.c: 39: while (*string && *string != ch)
+ ldw x, (0x05, sp)
+00102$:
+ ld a, (x)
+ ld (0x01, sp), a
+ clrw y
+ ld a, (0x01, sp)
+ ld yl, a
+ exgw x, y
+ cpw x, (0x07, sp)
+ exgw x, y
+ jrne 00131$
+ ld a, #0x01
+ .byte 0x21
+00131$:
+ clr a
+00132$:
+ tnz (0x01, sp)
+ jreq 00104$
+ tnz a
+ jrne 00104$
+; ../_strchr.c: 40: string++;
+ incw x
+ jra 00102$
+00104$:
+; ../_strchr.c: 42: if (*string == ch)
+ tnz a
+; ../_strchr.c: 43: return((char *)string);
+ jrne 00107$
+; ../_strchr.c: 44: return ( NULL );
+ clrw x
+00107$:
+; ../_strchr.c: 45: }
+ pop a
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strchr.lst b/device/lib/stm8-large/_strchr.lst
new file mode 100644
index 0000000..b889ba0
--- /dev/null
+++ b/device/lib/stm8-large/_strchr.lst
@@ -0,0 +1,93 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strchr
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strchr
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strchr.c: 36: char * strchr ( const char * string, int ch )
+ 50 ; -----------------------------------------
+ 51 ; function strchr
+ 52 ; -----------------------------------------
+ 000000 53 _strchr:
+ 000000 88 [ 1] 54 push a
+ 55 ; ../_strchr.c: 39: while (*string && *string != ch)
+ 000001 1E 05 [ 2] 56 ldw x, (0x05, sp)
+ 000003 57 00102$:
+ 000003 F6 [ 1] 58 ld a, (x)
+ 000004 6B 01 [ 1] 59 ld (0x01, sp), a
+ 000006 90 5F [ 1] 60 clrw y
+ 000008 7B 01 [ 1] 61 ld a, (0x01, sp)
+ 00000A 90 97 [ 1] 62 ld yl, a
+ 00000C 51 [ 1] 63 exgw x, y
+ 00000D 13 07 [ 2] 64 cpw x, (0x07, sp)
+ 00000F 51 [ 1] 65 exgw x, y
+ 000010 26 03 [ 1] 66 jrne 00131$
+ 000012 A6 01 [ 1] 67 ld a, #0x01
+ 000014 21 68 .byte 0x21
+ 000015 69 00131$:
+ 000015 4F [ 1] 70 clr a
+ 000016 71 00132$:
+ 000016 0D 01 [ 1] 72 tnz (0x01, sp)
+ 000018 27 06 [ 1] 73 jreq 00104$
+ 00001A 4D [ 1] 74 tnz a
+ 00001B 26 03 [ 1] 75 jrne 00104$
+ 76 ; ../_strchr.c: 40: string++;
+ 00001D 5C [ 1] 77 incw x
+ 00001E 20 E3 [ 2] 78 jra 00102$
+ 000020 79 00104$:
+ 80 ; ../_strchr.c: 42: if (*string == ch)
+ 000020 4D [ 1] 81 tnz a
+ 82 ; ../_strchr.c: 43: return((char *)string);
+ 000021 26 01 [ 1] 83 jrne 00107$
+ 84 ; ../_strchr.c: 44: return ( NULL );
+ 000023 5F [ 1] 85 clrw x
+ 000024 86 00107$:
+ 87 ; ../_strchr.c: 45: }
+ 000024 84 [ 1] 88 pop a
+ 000025 87 [ 5] 89 retf
+ 90 .area CODE
+ 91 .area CONST
+ 92 .area INITIALIZER
+ 93 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strchr.rel b/device/lib/stm8-large/_strchr.rel
new file mode 100644
index 0000000..d998a7a
--- /dev/null
+++ b/device/lib/stm8-large/_strchr.rel
@@ -0,0 +1,43 @@
+XH3
+H B areas 2 global symbols
+M _strchr
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 26 flags 0 addr 0
+S _strchr Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 88 1E 05
+R 00 00 00 09
+T 00 00 03
+R 00 00 00 09
+T 00 00 03 F6 6B 01 90 5F 7B 01 90 97 51 13 07 51
+R 00 00 00 09
+T 00 00 10 26 03 A6 01 21
+R 00 00 00 09
+T 00 00 15
+R 00 00 00 09
+T 00 00 15 4F
+R 00 00 00 09
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 0D 01 27 06 4D 26 03 5C 20 E3
+R 00 00 00 09
+T 00 00 20
+R 00 00 00 09
+T 00 00 20 4D 26 01 5F
+R 00 00 00 09
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 84 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strchr.sym b/device/lib/stm8-large/_strchr.sym
new file mode 100644
index 0000000..7cf507b
--- /dev/null
+++ b/device/lib/stm8-large/_strchr.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strchr 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 26 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strcmp.asm b/device/lib/stm8-large/_strcmp.asm
new file mode 100644
index 0000000..d20d229
--- /dev/null
+++ b/device/lib/stm8-large/_strcmp.asm
@@ -0,0 +1,94 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strcmp
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strcmp
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strcmp.c: 34: int strcmp ( const char * asrc, const char * adst )
+; -----------------------------------------
+; function strcmp
+; -----------------------------------------
+_strcmp:
+ sub sp, #8
+; ../_strcmp.c: 40: const char * src = asrc;
+ ldw y, (0x0c, sp)
+ ldw (0x01, sp), y
+; ../_strcmp.c: 41: const char * dst = adst;
+ ldw y, (0x0e, sp)
+ ldw (0x03, sp), y
+; ../_strcmp.c: 43: while( ! (*src - *dst) && *dst)
+00102$:
+ ldw x, (0x01, sp)
+ ld a, (x)
+ clrw x
+ ld xl, a
+ ldw y, (0x03, sp)
+ ld a, (y)
+ ld (0x06, sp), a
+ clr (0x05, sp)
+ subw x, (0x05, sp)
+ ldw (0x07, sp), x
+ jrne 00104$
+ tnz a
+ jreq 00104$
+; ../_strcmp.c: 44: ++src, ++dst;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x07, sp), x
+ ldw (0x01, sp), x
+ ldw x, (0x03, sp)
+ incw x
+ ldw (0x03, sp), x
+ jra 00102$
+00104$:
+; ../_strcmp.c: 46: return *src - *dst;
+ ldw x, (0x07, sp)
+; ../_strcmp.c: 55: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcmp.lst b/device/lib/stm8-large/_strcmp.lst
new file mode 100644
index 0000000..8ce4824
--- /dev/null
+++ b/device/lib/stm8-large/_strcmp.lst
@@ -0,0 +1,94 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strcmp
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strcmp
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strcmp.c: 34: int strcmp ( const char * asrc, const char * adst )
+ 50 ; -----------------------------------------
+ 51 ; function strcmp
+ 52 ; -----------------------------------------
+ 000000 53 _strcmp:
+ 000000 52 08 [ 2] 54 sub sp, #8
+ 55 ; ../_strcmp.c: 40: const char * src = asrc;
+ 000002 16 0C [ 2] 56 ldw y, (0x0c, sp)
+ 000004 17 01 [ 2] 57 ldw (0x01, sp), y
+ 58 ; ../_strcmp.c: 41: const char * dst = adst;
+ 000006 16 0E [ 2] 59 ldw y, (0x0e, sp)
+ 000008 17 03 [ 2] 60 ldw (0x03, sp), y
+ 61 ; ../_strcmp.c: 43: while( ! (*src - *dst) && *dst)
+ 00000A 62 00102$:
+ 00000A 1E 01 [ 2] 63 ldw x, (0x01, sp)
+ 00000C F6 [ 1] 64 ld a, (x)
+ 00000D 5F [ 1] 65 clrw x
+ 00000E 97 [ 1] 66 ld xl, a
+ 00000F 16 03 [ 2] 67 ldw y, (0x03, sp)
+ 000011 90 F6 [ 1] 68 ld a, (y)
+ 000013 6B 06 [ 1] 69 ld (0x06, sp), a
+ 000015 0F 05 [ 1] 70 clr (0x05, sp)
+ 000017 72 F0 05 [ 2] 71 subw x, (0x05, sp)
+ 00001A 1F 07 [ 2] 72 ldw (0x07, sp), x
+ 00001C 26 11 [ 1] 73 jrne 00104$
+ 00001E 4D [ 1] 74 tnz a
+ 00001F 27 0E [ 1] 75 jreq 00104$
+ 76 ; ../_strcmp.c: 44: ++src, ++dst;
+ 000021 1E 01 [ 2] 77 ldw x, (0x01, sp)
+ 000023 5C [ 1] 78 incw x
+ 000024 1F 07 [ 2] 79 ldw (0x07, sp), x
+ 000026 1F 01 [ 2] 80 ldw (0x01, sp), x
+ 000028 1E 03 [ 2] 81 ldw x, (0x03, sp)
+ 00002A 5C [ 1] 82 incw x
+ 00002B 1F 03 [ 2] 83 ldw (0x03, sp), x
+ 00002D 20 DB [ 2] 84 jra 00102$
+ 00002F 85 00104$:
+ 86 ; ../_strcmp.c: 46: return *src - *dst;
+ 00002F 1E 07 [ 2] 87 ldw x, (0x07, sp)
+ 88 ; ../_strcmp.c: 55: }
+ 000031 5B 08 [ 2] 89 addw sp, #8
+ 000033 87 [ 5] 90 retf
+ 91 .area CODE
+ 92 .area CONST
+ 93 .area INITIALIZER
+ 94 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcmp.rel b/device/lib/stm8-large/_strcmp.rel
new file mode 100644
index 0000000..68adae0
--- /dev/null
+++ b/device/lib/stm8-large/_strcmp.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M _strcmp
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 34 flags 0 addr 0
+S _strcmp Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 16 0C 17 01 16 0E 17 03
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 1E 01 F6 5F 97 16 03 90 F6 6B 06 0F 05
+R 00 00 00 09
+T 00 00 17 72 F0 05 1F 07 26 11 4D 27 0E 1E 01 5C
+R 00 00 00 09
+T 00 00 24 1F 07 1F 01 1E 03 5C 1F 03 20 DB
+R 00 00 00 09
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F 1E 07 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strcmp.sym b/device/lib/stm8-large/_strcmp.sym
new file mode 100644
index 0000000..a228b40
--- /dev/null
+++ b/device/lib/stm8-large/_strcmp.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strcmp 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 34 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strcpy.asm b/device/lib/stm8-large/_strcpy.asm
new file mode 100644
index 0000000..0eec522
--- /dev/null
+++ b/device/lib/stm8-large/_strcpy.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strcpy
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strcpy
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strcpy.c: 34: char * strcpy ( char * d, const char * s )
+; -----------------------------------------
+; function strcpy
+; -----------------------------------------
+_strcpy:
+; ../_strcpy.c: 37: register char * to = d;
+ ldw y, (0x04, sp)
+; ../_strcpy.c: 38: register const char * from = s;
+ ldw x, (0x06, sp)
+; ../_strcpy.c: 40: while (*to++ = *from++) ;
+00101$:
+ ld a, (x)
+ incw x
+ ld (y), a
+ incw y
+ tnz a
+ jrne 00101$
+; ../_strcpy.c: 42: return d;
+ ldw x, (0x04, sp)
+; ../_strcpy.c: 50: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcpy.lst b/device/lib/stm8-large/_strcpy.lst
new file mode 100644
index 0000000..3ccb0e1
--- /dev/null
+++ b/device/lib/stm8-large/_strcpy.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strcpy
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strcpy
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strcpy.c: 34: char * strcpy ( char * d, const char * s )
+ 50 ; -----------------------------------------
+ 51 ; function strcpy
+ 52 ; -----------------------------------------
+ 000000 53 _strcpy:
+ 54 ; ../_strcpy.c: 37: register char * to = d;
+ 000000 16 04 [ 2] 55 ldw y, (0x04, sp)
+ 56 ; ../_strcpy.c: 38: register const char * from = s;
+ 000002 1E 06 [ 2] 57 ldw x, (0x06, sp)
+ 58 ; ../_strcpy.c: 40: while (*to++ = *from++) ;
+ 000004 59 00101$:
+ 000004 F6 [ 1] 60 ld a, (x)
+ 000005 5C [ 1] 61 incw x
+ 000006 90 F7 [ 1] 62 ld (y), a
+ 000008 90 5C [ 1] 63 incw y
+ 00000A 4D [ 1] 64 tnz a
+ 00000B 26 F7 [ 1] 65 jrne 00101$
+ 66 ; ../_strcpy.c: 42: return d;
+ 00000D 1E 04 [ 2] 67 ldw x, (0x04, sp)
+ 68 ; ../_strcpy.c: 50: }
+ 00000F 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcpy.rel b/device/lib/stm8-large/_strcpy.rel
new file mode 100644
index 0000000..12851d0
--- /dev/null
+++ b/device/lib/stm8-large/_strcpy.rel
@@ -0,0 +1,25 @@
+XH3
+H B areas 2 global symbols
+M _strcpy
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 10 flags 0 addr 0
+S _strcpy Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 16 04 1E 06
+R 00 00 00 09
+T 00 00 04
+R 00 00 00 09
+T 00 00 04 F6 5C 90 F7 90 5C 4D 26 F7 1E 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strcpy.sym b/device/lib/stm8-large/_strcpy.sym
new file mode 100644
index 0000000..d8171fd
--- /dev/null
+++ b/device/lib/stm8-large/_strcpy.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strcpy 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 10 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strcspn.asm b/device/lib/stm8-large/_strcspn.asm
new file mode 100644
index 0000000..47e1130
--- /dev/null
+++ b/device/lib/stm8-large/_strcspn.asm
@@ -0,0 +1,93 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strcspn
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strchr
+ .globl _strcspn
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strcspn.c: 31: size_t strcspn ( const char * string, const char * control )
+; -----------------------------------------
+; function strcspn
+; -----------------------------------------
+_strcspn:
+ sub sp, #2
+; ../_strcspn.c: 36: while (ch = *string) {
+ clrw x
+ ldw (0x01, sp), x
+ ldw y, (0x06, sp)
+00104$:
+ ld a, (y)
+ ld xl, a
+ tnz a
+ jreq 00106$
+; ../_strcspn.c: 37: if (strchr(control,ch))
+ clr a
+ ld xh, a
+ pushw y
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ callf _strchr
+ addw sp, #4
+ popw y
+ tnzw x
+ jrne 00106$
+; ../_strcspn.c: 40: count++;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x01, sp), x
+; ../_strcspn.c: 41: string++;
+ incw y
+ jra 00104$
+00106$:
+; ../_strcspn.c: 44: return count;
+ ldw x, (0x01, sp)
+; ../_strcspn.c: 45: }
+ addw sp, #2
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcspn.lst b/device/lib/stm8-large/_strcspn.lst
new file mode 100644
index 0000000..68c8f4b
--- /dev/null
+++ b/device/lib/stm8-large/_strcspn.lst
@@ -0,0 +1,93 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strcspn
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strchr
+ 12 .globl _strcspn
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_strcspn.c: 31: size_t strcspn ( const char * string, const char * control )
+ 51 ; -----------------------------------------
+ 52 ; function strcspn
+ 53 ; -----------------------------------------
+ 000000 54 _strcspn:
+ 000000 52 02 [ 2] 55 sub sp, #2
+ 56 ; ../_strcspn.c: 36: while (ch = *string) {
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 000005 16 06 [ 2] 59 ldw y, (0x06, sp)
+ 000007 60 00104$:
+ 000007 90 F6 [ 1] 61 ld a, (y)
+ 000009 97 [ 1] 62 ld xl, a
+ 00000A 4D [ 1] 63 tnz a
+ 00000B 27 1C [ 1] 64 jreq 00106$
+ 65 ; ../_strcspn.c: 37: if (strchr(control,ch))
+ 00000D 4F [ 1] 66 clr a
+ 00000E 95 [ 1] 67 ld xh, a
+ 00000F 90 89 [ 2] 68 pushw y
+ 000011 89 [ 2] 69 pushw x
+ 000012 1E 0C [ 2] 70 ldw x, (0x0c, sp)
+ 000014 89 [ 2] 71 pushw x
+ 000015 8Ds00r00r00 [ 5] 72 callf _strchr
+ 000019 5B 04 [ 2] 73 addw sp, #4
+ 00001B 90 85 [ 2] 74 popw y
+ 00001D 5D [ 2] 75 tnzw x
+ 00001E 26 09 [ 1] 76 jrne 00106$
+ 77 ; ../_strcspn.c: 40: count++;
+ 000020 1E 01 [ 2] 78 ldw x, (0x01, sp)
+ 000022 5C [ 1] 79 incw x
+ 000023 1F 01 [ 2] 80 ldw (0x01, sp), x
+ 81 ; ../_strcspn.c: 41: string++;
+ 000025 90 5C [ 1] 82 incw y
+ 000027 20 DE [ 2] 83 jra 00104$
+ 000029 84 00106$:
+ 85 ; ../_strcspn.c: 44: return count;
+ 000029 1E 01 [ 2] 86 ldw x, (0x01, sp)
+ 87 ; ../_strcspn.c: 45: }
+ 00002B 5B 02 [ 2] 88 addw sp, #2
+ 00002D 87 [ 5] 89 retf
+ 90 .area CODE
+ 91 .area CONST
+ 92 .area INITIALIZER
+ 93 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strcspn.rel b/device/lib/stm8-large/_strcspn.rel
new file mode 100644
index 0000000..0e05a32
--- /dev/null
+++ b/device/lib/stm8-large/_strcspn.rel
@@ -0,0 +1,34 @@
+XH3
+H B areas 3 global symbols
+M _strcspn
+O -mstm8
+S .__.ABS. Def000000
+S _strchr Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2E flags 0 addr 0
+S _strcspn Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 5F 1F 01 16 06
+R 00 00 00 09
+T 00 00 07
+R 00 00 00 09
+T 00 00 07 90 F6 97 4D 27 1C 4F 95 90 89 89 1E 0C
+R 00 00 00 09
+T 00 00 14 89 8D 00 00 00 5B 04 90 85 5D 26 09 1E
+R 00 00 00 09 82 05 00 01
+T 00 00 21 01 5C 1F 01 90 5C 20 DE
+R 00 00 00 09
+T 00 00 29
+R 00 00 00 09
+T 00 00 29 1E 01 5B 02 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strcspn.sym b/device/lib/stm8-large/_strcspn.sym
new file mode 100644
index 0000000..ac18db4
--- /dev/null
+++ b/device/lib/stm8-large/_strcspn.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _strchr ****** GX
+ 9 _strcspn 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strlen.asm b/device/lib/stm8-large/_strlen.asm
new file mode 100644
index 0000000..69629a6
--- /dev/null
+++ b/device/lib/stm8-large/_strlen.asm
@@ -0,0 +1,72 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strlen
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strlen
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strlen.c: 35: size_t strlen ( const char * str )
+; -----------------------------------------
+; function strlen
+; -----------------------------------------
+_strlen:
+; ../_strlen.c: 39: while (*str++)
+ clrw x
+ ldw y, (0x04, sp)
+00101$:
+ ld a, (y)
+ incw y
+ tnz a
+ jreq 00103$
+; ../_strlen.c: 40: i++ ;
+ incw x
+ jra 00101$
+00103$:
+; ../_strlen.c: 42: return i;
+; ../_strlen.c: 43: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strlen.lst b/device/lib/stm8-large/_strlen.lst
new file mode 100644
index 0000000..3c20886
--- /dev/null
+++ b/device/lib/stm8-large/_strlen.lst
@@ -0,0 +1,72 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strlen
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strlen
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strlen.c: 35: size_t strlen ( const char * str )
+ 50 ; -----------------------------------------
+ 51 ; function strlen
+ 52 ; -----------------------------------------
+ 000000 53 _strlen:
+ 54 ; ../_strlen.c: 39: while (*str++)
+ 000000 5F [ 1] 55 clrw x
+ 000001 16 04 [ 2] 56 ldw y, (0x04, sp)
+ 000003 57 00101$:
+ 000003 90 F6 [ 1] 58 ld a, (y)
+ 000005 90 5C [ 1] 59 incw y
+ 000007 4D [ 1] 60 tnz a
+ 000008 27 03 [ 1] 61 jreq 00103$
+ 62 ; ../_strlen.c: 40: i++ ;
+ 00000A 5C [ 1] 63 incw x
+ 00000B 20 F6 [ 2] 64 jra 00101$
+ 00000D 65 00103$:
+ 66 ; ../_strlen.c: 42: return i;
+ 67 ; ../_strlen.c: 43: }
+ 00000D 87 [ 5] 68 retf
+ 69 .area CODE
+ 70 .area CONST
+ 71 .area INITIALIZER
+ 72 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strlen.rel b/device/lib/stm8-large/_strlen.rel
new file mode 100644
index 0000000..84ab940
--- /dev/null
+++ b/device/lib/stm8-large/_strlen.rel
@@ -0,0 +1,29 @@
+XH3
+H B areas 2 global symbols
+M _strlen
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size E flags 0 addr 0
+S _strlen Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 5F 16 04
+R 00 00 00 09
+T 00 00 03
+R 00 00 00 09
+T 00 00 03 90 F6 90 5C 4D 27 03 5C 20 F6
+R 00 00 00 09
+T 00 00 0D
+R 00 00 00 09
+T 00 00 0D 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strlen.sym b/device/lib/stm8-large/_strlen.sym
new file mode 100644
index 0000000..0f65ae7
--- /dev/null
+++ b/device/lib/stm8-large/_strlen.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strlen 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strncat.asm b/device/lib/stm8-large/_strncat.asm
new file mode 100644
index 0000000..1183d93
--- /dev/null
+++ b/device/lib/stm8-large/_strncat.asm
@@ -0,0 +1,115 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strncat
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strncat
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strncat.c: 31: char * strncat ( char * front, const char * back, size_t count )
+; -----------------------------------------
+; function strncat
+; -----------------------------------------
+_strncat:
+ sub sp, #10
+; ../_strncat.c: 33: char *start = front;
+ ldw y, (0x0e, sp)
+; ../_strncat.c: 35: while (*front++);
+ ldw (0x01, sp), y
+ ldw x, y
+00101$:
+ ld a, (x)
+ incw x
+ tnz a
+ jrne 00101$
+; ../_strncat.c: 37: front--;
+ decw x
+ ldw (0x0e, sp), x
+; ../_strncat.c: 39: while (count--)
+ ldw y, (0x10, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0e, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x12, sp)
+ ldw (0x09, sp), y
+00106$:
+ ldw y, (0x09, sp)
+ ldw (0x03, sp), y
+ ldw x, (0x09, sp)
+ decw x
+ ldw (0x09, sp), x
+ ldw x, (0x03, sp)
+ jreq 00108$
+; ../_strncat.c: 40: if (!(*front++ = *back++))
+ ldw x, (0x05, sp)
+ ld a, (x)
+ ldw x, (0x05, sp)
+ incw x
+ ldw (0x05, sp), x
+ ldw x, (0x07, sp)
+ ld (x), a
+ ldw x, (0x07, sp)
+ incw x
+ ldw (0x07, sp), x
+ ldw (0x0e, sp), x
+ tnz a
+ jrne 00106$
+; ../_strncat.c: 41: return(start);
+ ldw x, (0x01, sp)
+ jra 00109$
+00108$:
+; ../_strncat.c: 43: *front = '\0';
+ ldw y, (0x0e, sp)
+ ldw (0x09, sp), y
+ ldw x, y
+ clr (x)
+; ../_strncat.c: 44: return(start);
+ ldw x, (0x01, sp)
+00109$:
+; ../_strncat.c: 45: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strncat.lst b/device/lib/stm8-large/_strncat.lst
new file mode 100644
index 0000000..f5bde3a
--- /dev/null
+++ b/device/lib/stm8-large/_strncat.lst
@@ -0,0 +1,115 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strncat
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strncat
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strncat.c: 31: char * strncat ( char * front, const char * back, size_t count )
+ 50 ; -----------------------------------------
+ 51 ; function strncat
+ 52 ; -----------------------------------------
+ 000000 53 _strncat:
+ 000000 52 0A [ 2] 54 sub sp, #10
+ 55 ; ../_strncat.c: 33: char *start = front;
+ 000002 16 0E [ 2] 56 ldw y, (0x0e, sp)
+ 57 ; ../_strncat.c: 35: while (*front++);
+ 000004 17 01 [ 2] 58 ldw (0x01, sp), y
+ 000006 93 [ 1] 59 ldw x, y
+ 000007 60 00101$:
+ 000007 F6 [ 1] 61 ld a, (x)
+ 000008 5C [ 1] 62 incw x
+ 000009 4D [ 1] 63 tnz a
+ 00000A 26 FB [ 1] 64 jrne 00101$
+ 65 ; ../_strncat.c: 37: front--;
+ 00000C 5A [ 2] 66 decw x
+ 00000D 1F 0E [ 2] 67 ldw (0x0e, sp), x
+ 68 ; ../_strncat.c: 39: while (count--)
+ 00000F 16 10 [ 2] 69 ldw y, (0x10, sp)
+ 000011 17 05 [ 2] 70 ldw (0x05, sp), y
+ 000013 16 0E [ 2] 71 ldw y, (0x0e, sp)
+ 000015 17 07 [ 2] 72 ldw (0x07, sp), y
+ 000017 16 12 [ 2] 73 ldw y, (0x12, sp)
+ 000019 17 09 [ 2] 74 ldw (0x09, sp), y
+ 00001B 75 00106$:
+ 00001B 16 09 [ 2] 76 ldw y, (0x09, sp)
+ 00001D 17 03 [ 2] 77 ldw (0x03, sp), y
+ 00001F 1E 09 [ 2] 78 ldw x, (0x09, sp)
+ 000021 5A [ 2] 79 decw x
+ 000022 1F 09 [ 2] 80 ldw (0x09, sp), x
+ 000024 1E 03 [ 2] 81 ldw x, (0x03, sp)
+ 000026 27 19 [ 1] 82 jreq 00108$
+ 83 ; ../_strncat.c: 40: if (!(*front++ = *back++))
+ 000028 1E 05 [ 2] 84 ldw x, (0x05, sp)
+ 00002A F6 [ 1] 85 ld a, (x)
+ 00002B 1E 05 [ 2] 86 ldw x, (0x05, sp)
+ 00002D 5C [ 1] 87 incw x
+ 00002E 1F 05 [ 2] 88 ldw (0x05, sp), x
+ 000030 1E 07 [ 2] 89 ldw x, (0x07, sp)
+ 000032 F7 [ 1] 90 ld (x), a
+ 000033 1E 07 [ 2] 91 ldw x, (0x07, sp)
+ 000035 5C [ 1] 92 incw x
+ 000036 1F 07 [ 2] 93 ldw (0x07, sp), x
+ 000038 1F 0E [ 2] 94 ldw (0x0e, sp), x
+ 00003A 4D [ 1] 95 tnz a
+ 00003B 26 DE [ 1] 96 jrne 00106$
+ 97 ; ../_strncat.c: 41: return(start);
+ 00003D 1E 01 [ 2] 98 ldw x, (0x01, sp)
+ 00003F 20 08 [ 2] 99 jra 00109$
+ 000041 100 00108$:
+ 101 ; ../_strncat.c: 43: *front = '\0';
+ 000041 16 0E [ 2] 102 ldw y, (0x0e, sp)
+ 000043 17 09 [ 2] 103 ldw (0x09, sp), y
+ 000045 93 [ 1] 104 ldw x, y
+ 000046 7F [ 1] 105 clr (x)
+ 106 ; ../_strncat.c: 44: return(start);
+ 000047 1E 01 [ 2] 107 ldw x, (0x01, sp)
+ 000049 108 00109$:
+ 109 ; ../_strncat.c: 45: }
+ 000049 5B 0A [ 2] 110 addw sp, #10
+ 00004B 87 [ 5] 111 retf
+ 112 .area CODE
+ 113 .area CONST
+ 114 .area INITIALIZER
+ 115 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strncat.rel b/device/lib/stm8-large/_strncat.rel
new file mode 100644
index 0000000..5275d06
--- /dev/null
+++ b/device/lib/stm8-large/_strncat.rel
@@ -0,0 +1,43 @@
+XH3
+H B areas 2 global symbols
+M _strncat
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 4C flags 0 addr 0
+S _strncat Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 16 0E 17 01 93
+R 00 00 00 09
+T 00 00 07
+R 00 00 00 09
+T 00 00 07 F6 5C 4D 26 FB 5A 1F 0E 16 10 17 05 16
+R 00 00 00 09
+T 00 00 14 0E 17 07 16 12 17 09
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 16 09 17 03 1E 09 5A 1F 09 1E 03 27 19
+R 00 00 00 09
+T 00 00 28 1E 05 F6 1E 05 5C 1F 05 1E 07 F7 1E 07
+R 00 00 00 09
+T 00 00 35 5C 1F 07 1F 0E 4D 26 DE 1E 01 20 08
+R 00 00 00 09
+T 00 00 41
+R 00 00 00 09
+T 00 00 41 16 0E 17 09 93 7F 1E 01
+R 00 00 00 09
+T 00 00 49
+R 00 00 00 09
+T 00 00 49 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strncat.sym b/device/lib/stm8-large/_strncat.sym
new file mode 100644
index 0000000..7690e64
--- /dev/null
+++ b/device/lib/stm8-large/_strncat.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strncat 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 4C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strncmp.asm b/device/lib/stm8-large/_strncmp.asm
new file mode 100644
index 0000000..c5fea04
--- /dev/null
+++ b/device/lib/stm8-large/_strncmp.asm
@@ -0,0 +1,104 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strncmp
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strncmp
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strncmp.c: 31: int strncmp ( const char * first, const char * last, size_t count )
+; -----------------------------------------
+; function strncmp
+; -----------------------------------------
+_strncmp:
+ sub sp, #5
+; ../_strncmp.c: 33: if (!count)
+; ../_strncmp.c: 34: return(0);
+ ldw x, (0x0d, sp)
+; ../_strncmp.c: 36: while (--count && *first && *first == *last) {
+ jreq 00108$
+ ldw y, (0x09, sp)
+ ldw (0x02, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x04, sp), y
+ ldw y, (0x0d, sp)
+00105$:
+ decw y
+ ldw x, (0x02, sp)
+ ld a, (x)
+ ldw x, (0x04, sp)
+ push a
+ ld a, (x)
+ ld (0x02, sp), a
+ pop a
+ tnzw y
+ jreq 00107$
+ tnz a
+ jreq 00107$
+ cp a, (0x01, sp)
+ jrne 00107$
+; ../_strncmp.c: 37: first++;
+ ldw x, (0x02, sp)
+ incw x
+ ldw (0x02, sp), x
+; ../_strncmp.c: 38: last++;
+ ldw x, (0x04, sp)
+ incw x
+ ldw (0x04, sp), x
+ jra 00105$
+00107$:
+; ../_strncmp.c: 41: return( *first - *last );
+ clrw x
+ ld xl, a
+ ld a, (0x01, sp)
+ ld (0x05, sp), a
+ clr (0x04, sp)
+ subw x, (0x04, sp)
+00108$:
+; ../_strncmp.c: 42: }
+ addw sp, #5
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strncmp.lst b/device/lib/stm8-large/_strncmp.lst
new file mode 100644
index 0000000..16b1ae6
--- /dev/null
+++ b/device/lib/stm8-large/_strncmp.lst
@@ -0,0 +1,104 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strncmp
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strncmp
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strncmp.c: 31: int strncmp ( const char * first, const char * last, size_t count )
+ 50 ; -----------------------------------------
+ 51 ; function strncmp
+ 52 ; -----------------------------------------
+ 000000 53 _strncmp:
+ 000000 52 05 [ 2] 54 sub sp, #5
+ 55 ; ../_strncmp.c: 33: if (!count)
+ 56 ; ../_strncmp.c: 34: return(0);
+ 000002 1E 0D [ 2] 57 ldw x, (0x0d, sp)
+ 58 ; ../_strncmp.c: 36: while (--count && *first && *first == *last) {
+ 000004 27 38 [ 1] 59 jreq 00108$
+ 000006 16 09 [ 2] 60 ldw y, (0x09, sp)
+ 000008 17 02 [ 2] 61 ldw (0x02, sp), y
+ 00000A 16 0B [ 2] 62 ldw y, (0x0b, sp)
+ 00000C 17 04 [ 2] 63 ldw (0x04, sp), y
+ 00000E 16 0D [ 2] 64 ldw y, (0x0d, sp)
+ 000010 65 00105$:
+ 000010 90 5A [ 2] 66 decw y
+ 000012 1E 02 [ 2] 67 ldw x, (0x02, sp)
+ 000014 F6 [ 1] 68 ld a, (x)
+ 000015 1E 04 [ 2] 69 ldw x, (0x04, sp)
+ 000017 88 [ 1] 70 push a
+ 000018 F6 [ 1] 71 ld a, (x)
+ 000019 6B 02 [ 1] 72 ld (0x02, sp), a
+ 00001B 84 [ 1] 73 pop a
+ 00001C 90 5D [ 2] 74 tnzw y
+ 00001E 27 13 [ 1] 75 jreq 00107$
+ 000020 4D [ 1] 76 tnz a
+ 000021 27 10 [ 1] 77 jreq 00107$
+ 000023 11 01 [ 1] 78 cp a, (0x01, sp)
+ 000025 26 0C [ 1] 79 jrne 00107$
+ 80 ; ../_strncmp.c: 37: first++;
+ 000027 1E 02 [ 2] 81 ldw x, (0x02, sp)
+ 000029 5C [ 1] 82 incw x
+ 00002A 1F 02 [ 2] 83 ldw (0x02, sp), x
+ 84 ; ../_strncmp.c: 38: last++;
+ 00002C 1E 04 [ 2] 85 ldw x, (0x04, sp)
+ 00002E 5C [ 1] 86 incw x
+ 00002F 1F 04 [ 2] 87 ldw (0x04, sp), x
+ 000031 20 DD [ 2] 88 jra 00105$
+ 000033 89 00107$:
+ 90 ; ../_strncmp.c: 41: return( *first - *last );
+ 000033 5F [ 1] 91 clrw x
+ 000034 97 [ 1] 92 ld xl, a
+ 000035 7B 01 [ 1] 93 ld a, (0x01, sp)
+ 000037 6B 05 [ 1] 94 ld (0x05, sp), a
+ 000039 0F 04 [ 1] 95 clr (0x04, sp)
+ 00003B 72 F0 04 [ 2] 96 subw x, (0x04, sp)
+ 00003E 97 00108$:
+ 98 ; ../_strncmp.c: 42: }
+ 00003E 5B 05 [ 2] 99 addw sp, #5
+ 000040 87 [ 5] 100 retf
+ 101 .area CODE
+ 102 .area CONST
+ 103 .area INITIALIZER
+ 104 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strncmp.rel b/device/lib/stm8-large/_strncmp.rel
new file mode 100644
index 0000000..4fa1642
--- /dev/null
+++ b/device/lib/stm8-large/_strncmp.rel
@@ -0,0 +1,39 @@
+XH3
+H B areas 2 global symbols
+M _strncmp
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 41 flags 0 addr 0
+S _strncmp Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 1E 0D 27 38 16 09 17 02 16 0B 17
+R 00 00 00 09
+T 00 00 0D 04 16 0D
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 90 5A 1E 02 F6 1E 04 88 F6 6B 02 84 90
+R 00 00 00 09
+T 00 00 1D 5D 27 13 4D 27 10 11 01 26 0C 1E 02 5C
+R 00 00 00 09
+T 00 00 2A 1F 02 1E 04 5C 1F 04 20 DD
+R 00 00 00 09
+T 00 00 33
+R 00 00 00 09
+T 00 00 33 5F 97 7B 01 6B 05 0F 04 72 F0 04
+R 00 00 00 09
+T 00 00 3E
+R 00 00 00 09
+T 00 00 3E 5B 05 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strncmp.sym b/device/lib/stm8-large/_strncmp.sym
new file mode 100644
index 0000000..1b00c4a
--- /dev/null
+++ b/device/lib/stm8-large/_strncmp.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strncmp 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 41 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strncpy.asm b/device/lib/stm8-large/_strncpy.asm
new file mode 100644
index 0000000..22dfe58
--- /dev/null
+++ b/device/lib/stm8-large/_strncpy.asm
@@ -0,0 +1,104 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strncpy
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strncpy
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strncpy.c: 33: char *strncpy ( char * d, const char * s, size_t n )
+; -----------------------------------------
+; function strncpy
+; -----------------------------------------
+_strncpy:
+ sub sp, #6
+; ../_strncpy.c: 35: register char * d1 = d;
+ ldw y, (0x0a, sp)
+ ldw (0x01, sp), y
+; ../_strncpy.c: 37: while ( n && *s )
+ ldw y, (0x0e, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0c, sp)
+ ldw (0x03, sp), y
+ ldw x, (0x01, sp)
+00102$:
+ ldw y, (0x05, sp)
+ jreq 00114$
+ ldw y, (0x03, sp)
+ ld a, (y)
+ jreq 00114$
+; ../_strncpy.c: 39: n-- ;
+ ldw y, (0x05, sp)
+ decw y
+ ldw (0x05, sp), y
+; ../_strncpy.c: 40: *d++ = *s++ ;
+ ldw y, (0x03, sp)
+ incw y
+ ldw (0x03, sp), y
+ ld (x), a
+ incw x
+ jra 00102$
+; ../_strncpy.c: 42: while ( n-- )
+00114$:
+00105$:
+ ldw y, (0x05, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x05, sp)
+ decw y
+ ldw (0x05, sp), y
+ ldw y, (0x03, sp)
+ jreq 00107$
+; ../_strncpy.c: 44: *d++ = '\0' ;
+ clr (x)
+ incw x
+ jra 00105$
+00107$:
+; ../_strncpy.c: 46: return d1;
+ ldw x, (0x01, sp)
+; ../_strncpy.c: 47: }
+ addw sp, #6
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strncpy.lst b/device/lib/stm8-large/_strncpy.lst
new file mode 100644
index 0000000..4ca9f2c
--- /dev/null
+++ b/device/lib/stm8-large/_strncpy.lst
@@ -0,0 +1,104 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strncpy
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strncpy
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strncpy.c: 33: char *strncpy ( char * d, const char * s, size_t n )
+ 50 ; -----------------------------------------
+ 51 ; function strncpy
+ 52 ; -----------------------------------------
+ 000000 53 _strncpy:
+ 000000 52 06 [ 2] 54 sub sp, #6
+ 55 ; ../_strncpy.c: 35: register char * d1 = d;
+ 000002 16 0A [ 2] 56 ldw y, (0x0a, sp)
+ 000004 17 01 [ 2] 57 ldw (0x01, sp), y
+ 58 ; ../_strncpy.c: 37: while ( n && *s )
+ 000006 16 0E [ 2] 59 ldw y, (0x0e, sp)
+ 000008 17 05 [ 2] 60 ldw (0x05, sp), y
+ 00000A 16 0C [ 2] 61 ldw y, (0x0c, sp)
+ 00000C 17 03 [ 2] 62 ldw (0x03, sp), y
+ 00000E 1E 01 [ 2] 63 ldw x, (0x01, sp)
+ 000010 64 00102$:
+ 000010 16 05 [ 2] 65 ldw y, (0x05, sp)
+ 000012 27 16 [ 1] 66 jreq 00114$
+ 000014 16 03 [ 2] 67 ldw y, (0x03, sp)
+ 000016 90 F6 [ 1] 68 ld a, (y)
+ 000018 27 10 [ 1] 69 jreq 00114$
+ 70 ; ../_strncpy.c: 39: n-- ;
+ 00001A 16 05 [ 2] 71 ldw y, (0x05, sp)
+ 00001C 90 5A [ 2] 72 decw y
+ 00001E 17 05 [ 2] 73 ldw (0x05, sp), y
+ 74 ; ../_strncpy.c: 40: *d++ = *s++ ;
+ 000020 16 03 [ 2] 75 ldw y, (0x03, sp)
+ 000022 90 5C [ 1] 76 incw y
+ 000024 17 03 [ 2] 77 ldw (0x03, sp), y
+ 000026 F7 [ 1] 78 ld (x), a
+ 000027 5C [ 1] 79 incw x
+ 000028 20 E6 [ 2] 80 jra 00102$
+ 81 ; ../_strncpy.c: 42: while ( n-- )
+ 00002A 82 00114$:
+ 00002A 83 00105$:
+ 00002A 16 05 [ 2] 84 ldw y, (0x05, sp)
+ 00002C 17 03 [ 2] 85 ldw (0x03, sp), y
+ 00002E 16 05 [ 2] 86 ldw y, (0x05, sp)
+ 000030 90 5A [ 2] 87 decw y
+ 000032 17 05 [ 2] 88 ldw (0x05, sp), y
+ 000034 16 03 [ 2] 89 ldw y, (0x03, sp)
+ 000036 27 04 [ 1] 90 jreq 00107$
+ 91 ; ../_strncpy.c: 44: *d++ = '\0' ;
+ 000038 7F [ 1] 92 clr (x)
+ 000039 5C [ 1] 93 incw x
+ 00003A 20 EE [ 2] 94 jra 00105$
+ 00003C 95 00107$:
+ 96 ; ../_strncpy.c: 46: return d1;
+ 00003C 1E 01 [ 2] 97 ldw x, (0x01, sp)
+ 98 ; ../_strncpy.c: 47: }
+ 00003E 5B 06 [ 2] 99 addw sp, #6
+ 000040 87 [ 5] 100 retf
+ 101 .area CODE
+ 102 .area CONST
+ 103 .area INITIALIZER
+ 104 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strncpy.rel b/device/lib/stm8-large/_strncpy.rel
new file mode 100644
index 0000000..6b7012d
--- /dev/null
+++ b/device/lib/stm8-large/_strncpy.rel
@@ -0,0 +1,41 @@
+XH3
+H B areas 2 global symbols
+M _strncpy
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 41 flags 0 addr 0
+S _strncpy Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 16 0A 17 01 16 0E 17 05 16 0C 17
+R 00 00 00 09
+T 00 00 0D 03 1E 01
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 16 05 27 16 16 03 90 F6 27 10 16 05 90
+R 00 00 00 09
+T 00 00 1D 5A 17 05 16 03 90 5C 17 03 F7 5C 20 E6
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 16 05 17 03 16 05 90 5A 17 05 16 03 27
+R 00 00 00 09
+T 00 00 37 04 7F 5C 20 EE
+R 00 00 00 09
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 1E 01 5B 06 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strncpy.sym b/device/lib/stm8-large/_strncpy.sym
new file mode 100644
index 0000000..0d065a3
--- /dev/null
+++ b/device/lib/stm8-large/_strncpy.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strncpy 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 41 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strpbrk.asm b/device/lib/stm8-large/_strpbrk.asm
new file mode 100644
index 0000000..90ba709
--- /dev/null
+++ b/device/lib/stm8-large/_strpbrk.asm
@@ -0,0 +1,101 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strpbrk
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strchr
+ .globl _strpbrk
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strpbrk.c: 31: char * strpbrk ( const char * string, const char * control )
+; -----------------------------------------
+; function strpbrk
+; -----------------------------------------
+_strpbrk:
+ sub sp, #4
+; ../_strpbrk.c: 33: char *ret = NULL;
+ clrw x
+ ldw (0x01, sp), x
+; ../_strpbrk.c: 36: while (ch = *control) {
+ ldw y, (0x0a, sp)
+ ldw (0x03, sp), y
+00105$:
+ ldw x, (0x03, sp)
+ ld a, (x)
+ ld xl, a
+ tnz a
+ jreq 00107$
+; ../_strpbrk.c: 37: char * p = strchr(string, ch);
+ clr a
+ ld xh, a
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf _strchr
+ addw sp, #4
+; ../_strpbrk.c: 38: if (p != NULL && (ret == NULL || p < ret)) {
+ tnzw x
+ jreq 00102$
+ ldw y, (0x01, sp)
+ jreq 00101$
+ cpw x, (0x01, sp)
+ jrnc 00102$
+00101$:
+; ../_strpbrk.c: 39: ret = p;
+ ldw (0x01, sp), x
+00102$:
+; ../_strpbrk.c: 41: control++;
+ ldw x, (0x03, sp)
+ incw x
+ ldw (0x03, sp), x
+ jra 00105$
+00107$:
+; ../_strpbrk.c: 44: return (ret);
+ ldw x, (0x01, sp)
+; ../_strpbrk.c: 45: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strpbrk.lst b/device/lib/stm8-large/_strpbrk.lst
new file mode 100644
index 0000000..5f56474
--- /dev/null
+++ b/device/lib/stm8-large/_strpbrk.lst
@@ -0,0 +1,101 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strpbrk
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strchr
+ 12 .globl _strpbrk
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_strpbrk.c: 31: char * strpbrk ( const char * string, const char * control )
+ 51 ; -----------------------------------------
+ 52 ; function strpbrk
+ 53 ; -----------------------------------------
+ 000000 54 _strpbrk:
+ 000000 52 04 [ 2] 55 sub sp, #4
+ 56 ; ../_strpbrk.c: 33: char *ret = NULL;
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 59 ; ../_strpbrk.c: 36: while (ch = *control) {
+ 000005 16 0A [ 2] 60 ldw y, (0x0a, sp)
+ 000007 17 03 [ 2] 61 ldw (0x03, sp), y
+ 000009 62 00105$:
+ 000009 1E 03 [ 2] 63 ldw x, (0x03, sp)
+ 00000B F6 [ 1] 64 ld a, (x)
+ 00000C 97 [ 1] 65 ld xl, a
+ 00000D 4D [ 1] 66 tnz a
+ 00000E 27 20 [ 1] 67 jreq 00107$
+ 68 ; ../_strpbrk.c: 37: char * p = strchr(string, ch);
+ 000010 4F [ 1] 69 clr a
+ 000011 95 [ 1] 70 ld xh, a
+ 000012 89 [ 2] 71 pushw x
+ 000013 1E 0A [ 2] 72 ldw x, (0x0a, sp)
+ 000015 89 [ 2] 73 pushw x
+ 000016 8Ds00r00r00 [ 5] 74 callf _strchr
+ 00001A 5B 04 [ 2] 75 addw sp, #4
+ 76 ; ../_strpbrk.c: 38: if (p != NULL && (ret == NULL || p < ret)) {
+ 00001C 5D [ 2] 77 tnzw x
+ 00001D 27 0A [ 1] 78 jreq 00102$
+ 00001F 16 01 [ 2] 79 ldw y, (0x01, sp)
+ 000021 27 04 [ 1] 80 jreq 00101$
+ 000023 13 01 [ 2] 81 cpw x, (0x01, sp)
+ 000025 24 02 [ 1] 82 jrnc 00102$
+ 000027 83 00101$:
+ 84 ; ../_strpbrk.c: 39: ret = p;
+ 000027 1F 01 [ 2] 85 ldw (0x01, sp), x
+ 000029 86 00102$:
+ 87 ; ../_strpbrk.c: 41: control++;
+ 000029 1E 03 [ 2] 88 ldw x, (0x03, sp)
+ 00002B 5C [ 1] 89 incw x
+ 00002C 1F 03 [ 2] 90 ldw (0x03, sp), x
+ 00002E 20 D9 [ 2] 91 jra 00105$
+ 000030 92 00107$:
+ 93 ; ../_strpbrk.c: 44: return (ret);
+ 000030 1E 01 [ 2] 94 ldw x, (0x01, sp)
+ 95 ; ../_strpbrk.c: 45: }
+ 000032 5B 04 [ 2] 96 addw sp, #4
+ 000034 87 [ 5] 97 retf
+ 98 .area CODE
+ 99 .area CONST
+ 100 .area INITIALIZER
+ 101 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strpbrk.rel b/device/lib/stm8-large/_strpbrk.rel
new file mode 100644
index 0000000..93d2226
--- /dev/null
+++ b/device/lib/stm8-large/_strpbrk.rel
@@ -0,0 +1,42 @@
+XH3
+H B areas 3 global symbols
+M _strpbrk
+O -mstm8
+S .__.ABS. Def000000
+S _strchr Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 35 flags 0 addr 0
+S _strpbrk Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 5F 1F 01 16 0A 17 03
+R 00 00 00 09
+T 00 00 09
+R 00 00 00 09
+T 00 00 09 1E 03 F6 97 4D 27 20 4F 95 89 1E 0A 89
+R 00 00 00 09
+T 00 00 16 8D 00 00 00 5B 04 5D 27 0A 16 01 27 04
+R 00 00 00 09 82 04 00 01
+T 00 00 23 13 01 24 02
+R 00 00 00 09
+T 00 00 27
+R 00 00 00 09
+T 00 00 27 1F 01
+R 00 00 00 09
+T 00 00 29
+R 00 00 00 09
+T 00 00 29 1E 03 5C 1F 03 20 D9
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 1E 01 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strpbrk.sym b/device/lib/stm8-large/_strpbrk.sym
new file mode 100644
index 0000000..5ebae9b
--- /dev/null
+++ b/device/lib/stm8-large/_strpbrk.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _strchr ****** GX
+ 9 _strpbrk 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 35 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strrchr.asm b/device/lib/stm8-large/_strrchr.asm
new file mode 100644
index 0000000..5317803
--- /dev/null
+++ b/device/lib/stm8-large/_strrchr.asm
@@ -0,0 +1,102 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strrchr
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strrchr
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strrchr.c: 34: char * strrchr ( const char * string, int ch )
+; -----------------------------------------
+; function strrchr
+; -----------------------------------------
+_strrchr:
+ sub sp, #2
+; ../_strrchr.c: 37: const char * start = string;
+ ldw y, (0x06, sp)
+; ../_strrchr.c: 39: while (*string++) /* find end of string */
+ ldw x, y
+00101$:
+ ld a, (x)
+ incw x
+ tnz a
+ jrne 00101$
+; ../_strrchr.c: 42: while (--string != start && *string != ch)
+ ldw (0x01, sp), x
+00105$:
+ ldw x, (0x01, sp)
+ decw x
+ ldw (0x01, sp), x
+ ld a, (x)
+ clrw x
+ ld xl, a
+ cpw x, (0x08, sp)
+ jrne 00140$
+ ld a, #0x01
+ .byte 0x21
+00140$:
+ clr a
+00141$:
+ ldw x, y
+ cpw x, (0x01, sp)
+ jreq 00107$
+ tnz a
+ jreq 00105$
+00107$:
+; ../_strrchr.c: 45: if (*string == ch) /* char found ? */
+ tnz a
+ jreq 00109$
+; ../_strrchr.c: 46: return( (char *)string );
+ ldw x, (0x01, sp)
+; ../_strrchr.c: 48: return (NULL) ;
+ .byte 0x21
+00109$:
+ clrw x
+00110$:
+; ../_strrchr.c: 49: }
+ addw sp, #2
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strrchr.lst b/device/lib/stm8-large/_strrchr.lst
new file mode 100644
index 0000000..6da6fda
--- /dev/null
+++ b/device/lib/stm8-large/_strrchr.lst
@@ -0,0 +1,102 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strrchr
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strrchr
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strrchr.c: 34: char * strrchr ( const char * string, int ch )
+ 50 ; -----------------------------------------
+ 51 ; function strrchr
+ 52 ; -----------------------------------------
+ 000000 53 _strrchr:
+ 000000 52 02 [ 2] 54 sub sp, #2
+ 55 ; ../_strrchr.c: 37: const char * start = string;
+ 000002 16 06 [ 2] 56 ldw y, (0x06, sp)
+ 57 ; ../_strrchr.c: 39: while (*string++) /* find end of string */
+ 000004 93 [ 1] 58 ldw x, y
+ 000005 59 00101$:
+ 000005 F6 [ 1] 60 ld a, (x)
+ 000006 5C [ 1] 61 incw x
+ 000007 4D [ 1] 62 tnz a
+ 000008 26 FB [ 1] 63 jrne 00101$
+ 64 ; ../_strrchr.c: 42: while (--string != start && *string != ch)
+ 00000A 1F 01 [ 2] 65 ldw (0x01, sp), x
+ 00000C 66 00105$:
+ 00000C 1E 01 [ 2] 67 ldw x, (0x01, sp)
+ 00000E 5A [ 2] 68 decw x
+ 00000F 1F 01 [ 2] 69 ldw (0x01, sp), x
+ 000011 F6 [ 1] 70 ld a, (x)
+ 000012 5F [ 1] 71 clrw x
+ 000013 97 [ 1] 72 ld xl, a
+ 000014 13 08 [ 2] 73 cpw x, (0x08, sp)
+ 000016 26 03 [ 1] 74 jrne 00140$
+ 000018 A6 01 [ 1] 75 ld a, #0x01
+ 00001A 21 76 .byte 0x21
+ 00001B 77 00140$:
+ 00001B 4F [ 1] 78 clr a
+ 00001C 79 00141$:
+ 00001C 93 [ 1] 80 ldw x, y
+ 00001D 13 01 [ 2] 81 cpw x, (0x01, sp)
+ 00001F 27 03 [ 1] 82 jreq 00107$
+ 000021 4D [ 1] 83 tnz a
+ 000022 27 E8 [ 1] 84 jreq 00105$
+ 000024 85 00107$:
+ 86 ; ../_strrchr.c: 45: if (*string == ch) /* char found ? */
+ 000024 4D [ 1] 87 tnz a
+ 000025 27 03 [ 1] 88 jreq 00109$
+ 89 ; ../_strrchr.c: 46: return( (char *)string );
+ 000027 1E 01 [ 2] 90 ldw x, (0x01, sp)
+ 91 ; ../_strrchr.c: 48: return (NULL) ;
+ 000029 21 92 .byte 0x21
+ 00002A 93 00109$:
+ 00002A 5F [ 1] 94 clrw x
+ 00002B 95 00110$:
+ 96 ; ../_strrchr.c: 49: }
+ 00002B 5B 02 [ 2] 97 addw sp, #2
+ 00002D 87 [ 5] 98 retf
+ 99 .area CODE
+ 100 .area CONST
+ 101 .area INITIALIZER
+ 102 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strrchr.rel b/device/lib/stm8-large/_strrchr.rel
new file mode 100644
index 0000000..bda1d41
--- /dev/null
+++ b/device/lib/stm8-large/_strrchr.rel
@@ -0,0 +1,51 @@
+XH3
+H B areas 2 global symbols
+M _strrchr
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2E flags 0 addr 0
+S _strrchr Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 16 06 93
+R 00 00 00 09
+T 00 00 05
+R 00 00 00 09
+T 00 00 05 F6 5C 4D 26 FB 1F 01
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 1E 01 5A 1F 01 F6 5F 97 13 08 26 03 A6
+R 00 00 00 09
+T 00 00 19 01 21
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 4F
+R 00 00 00 09
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 93 13 01 27 03 4D 27 E8
+R 00 00 00 09
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 4D 27 03 1E 01 21
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 5F
+R 00 00 00 09
+T 00 00 2B
+R 00 00 00 09
+T 00 00 2B 5B 02 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strrchr.sym b/device/lib/stm8-large/_strrchr.sym
new file mode 100644
index 0000000..051cded
--- /dev/null
+++ b/device/lib/stm8-large/_strrchr.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strrchr 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strspn.asm b/device/lib/stm8-large/_strspn.asm
new file mode 100644
index 0000000..92a22de
--- /dev/null
+++ b/device/lib/stm8-large/_strspn.asm
@@ -0,0 +1,93 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strspn
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strchr
+ .globl _strspn
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strspn.c: 31: size_t strspn ( const char * string, const char * control )
+; -----------------------------------------
+; function strspn
+; -----------------------------------------
+_strspn:
+ sub sp, #2
+; ../_strspn.c: 36: while (ch = *string) {
+ clrw x
+ ldw (0x01, sp), x
+ ldw y, (0x06, sp)
+00104$:
+ ld a, (y)
+ ld xl, a
+ tnz a
+ jreq 00106$
+; ../_strspn.c: 37: if ( strchr(control,ch) )
+ clr a
+ ld xh, a
+ pushw y
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ callf _strchr
+ addw sp, #4
+ popw y
+ tnzw x
+ jreq 00106$
+; ../_strspn.c: 38: count++ ;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x01, sp), x
+; ../_strspn.c: 41: string++ ;
+ incw y
+ jra 00104$
+00106$:
+; ../_strspn.c: 44: return count ;
+ ldw x, (0x01, sp)
+; ../_strspn.c: 45: }
+ addw sp, #2
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strspn.lst b/device/lib/stm8-large/_strspn.lst
new file mode 100644
index 0000000..d936f21
--- /dev/null
+++ b/device/lib/stm8-large/_strspn.lst
@@ -0,0 +1,93 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strspn
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strchr
+ 12 .globl _strspn
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_strspn.c: 31: size_t strspn ( const char * string, const char * control )
+ 51 ; -----------------------------------------
+ 52 ; function strspn
+ 53 ; -----------------------------------------
+ 000000 54 _strspn:
+ 000000 52 02 [ 2] 55 sub sp, #2
+ 56 ; ../_strspn.c: 36: while (ch = *string) {
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 000005 16 06 [ 2] 59 ldw y, (0x06, sp)
+ 000007 60 00104$:
+ 000007 90 F6 [ 1] 61 ld a, (y)
+ 000009 97 [ 1] 62 ld xl, a
+ 00000A 4D [ 1] 63 tnz a
+ 00000B 27 1C [ 1] 64 jreq 00106$
+ 65 ; ../_strspn.c: 37: if ( strchr(control,ch) )
+ 00000D 4F [ 1] 66 clr a
+ 00000E 95 [ 1] 67 ld xh, a
+ 00000F 90 89 [ 2] 68 pushw y
+ 000011 89 [ 2] 69 pushw x
+ 000012 1E 0C [ 2] 70 ldw x, (0x0c, sp)
+ 000014 89 [ 2] 71 pushw x
+ 000015 8Ds00r00r00 [ 5] 72 callf _strchr
+ 000019 5B 04 [ 2] 73 addw sp, #4
+ 00001B 90 85 [ 2] 74 popw y
+ 00001D 5D [ 2] 75 tnzw x
+ 00001E 27 09 [ 1] 76 jreq 00106$
+ 77 ; ../_strspn.c: 38: count++ ;
+ 000020 1E 01 [ 2] 78 ldw x, (0x01, sp)
+ 000022 5C [ 1] 79 incw x
+ 000023 1F 01 [ 2] 80 ldw (0x01, sp), x
+ 81 ; ../_strspn.c: 41: string++ ;
+ 000025 90 5C [ 1] 82 incw y
+ 000027 20 DE [ 2] 83 jra 00104$
+ 000029 84 00106$:
+ 85 ; ../_strspn.c: 44: return count ;
+ 000029 1E 01 [ 2] 86 ldw x, (0x01, sp)
+ 87 ; ../_strspn.c: 45: }
+ 00002B 5B 02 [ 2] 88 addw sp, #2
+ 00002D 87 [ 5] 89 retf
+ 90 .area CODE
+ 91 .area CONST
+ 92 .area INITIALIZER
+ 93 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strspn.rel b/device/lib/stm8-large/_strspn.rel
new file mode 100644
index 0000000..3a8a8e7
--- /dev/null
+++ b/device/lib/stm8-large/_strspn.rel
@@ -0,0 +1,34 @@
+XH3
+H B areas 3 global symbols
+M _strspn
+O -mstm8
+S .__.ABS. Def000000
+S _strchr Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2E flags 0 addr 0
+S _strspn Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 5F 1F 01 16 06
+R 00 00 00 09
+T 00 00 07
+R 00 00 00 09
+T 00 00 07 90 F6 97 4D 27 1C 4F 95 90 89 89 1E 0C
+R 00 00 00 09
+T 00 00 14 89 8D 00 00 00 5B 04 90 85 5D 27 09 1E
+R 00 00 00 09 82 05 00 01
+T 00 00 21 01 5C 1F 01 90 5C 20 DE
+R 00 00 00 09
+T 00 00 29
+R 00 00 00 09
+T 00 00 29 1E 01 5B 02 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strspn.sym b/device/lib/stm8-large/_strspn.sym
new file mode 100644
index 0000000..f1c3e87
--- /dev/null
+++ b/device/lib/stm8-large/_strspn.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _strchr ****** GX
+ 9 _strspn 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strstr.asm b/device/lib/stm8-large/_strstr.asm
new file mode 100644
index 0000000..5b7ac3f
--- /dev/null
+++ b/device/lib/stm8-large/_strstr.asm
@@ -0,0 +1,134 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strstr
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strstr
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strstr.c: 31: char *strstr ( const char *str1, const char *str2 )
+; -----------------------------------------
+; function strstr
+; -----------------------------------------
+_strstr:
+ sub sp, #13
+; ../_strstr.c: 33: const char *cp = str1;
+ ldw y, (0x11, sp)
+ ldw (0x01, sp), y
+; ../_strstr.c: 37: if (!*str2)
+ ldw y, (0x13, sp)
+ ldw (0x03, sp), y
+ ldw x, y
+ ld a, (x)
+ ld (0x0d, sp), a
+ jrne 00122$
+; ../_strstr.c: 38: return ((char*)str1);
+ ldw x, (0x01, sp)
+ jra 00113$
+; ../_strstr.c: 40: while (*cp)
+00122$:
+ ldw y, (0x01, sp)
+ ldw (0x08, sp), y
+00110$:
+ ldw x, (0x08, sp)
+ ld a, (x)
+ jreq 00112$
+; ../_strstr.c: 43: s2 = str2;
+ ldw x, (0x03, sp)
+; ../_strstr.c: 45: while (*s1 && *s2 && !(*s1-*s2))
+ ldw y, (0x08, sp)
+ ldw (0x0a, sp), y
+ ldw (0x0c, sp), x
+00105$:
+ ldw x, (0x0a, sp)
+ ld a, (x)
+ ld (0x07, sp), a
+ ldw x, (0x0c, sp)
+ ld a, (x)
+ ld (0x05, sp), a
+ tnz (0x07, sp)
+ jreq 00107$
+ tnz (0x05, sp)
+ jreq 00107$
+ clrw x
+ ld a, (0x07, sp)
+ ld xl, a
+ ld a, (0x05, sp)
+ ld (0x07, sp), a
+ clr (0x06, sp)
+ subw x, (0x06, sp)
+ tnzw x
+ jrne 00107$
+; ../_strstr.c: 46: s1++, s2++;
+ ldw x, (0x0a, sp)
+ incw x
+ ldw (0x0a, sp), x
+ ldw x, (0x0c, sp)
+ incw x
+ ldw (0x0c, sp), x
+ jra 00105$
+00107$:
+; ../_strstr.c: 48: if (!*s2)
+ tnz (0x05, sp)
+ jrne 00109$
+; ../_strstr.c: 49: return ((char*)cp);
+ ldw x, (0x01, sp)
+ jra 00113$
+00109$:
+; ../_strstr.c: 51: cp++;
+ ldw x, (0x08, sp)
+ incw x
+ ldw (0x08, sp), x
+ ldw (0x01, sp), x
+ jra 00110$
+00112$:
+; ../_strstr.c: 54: return (NULL) ;
+ clrw x
+00113$:
+; ../_strstr.c: 55: }
+ addw sp, #13
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strstr.lst b/device/lib/stm8-large/_strstr.lst
new file mode 100644
index 0000000..439da6f
--- /dev/null
+++ b/device/lib/stm8-large/_strstr.lst
@@ -0,0 +1,134 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strstr
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strstr
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_strstr.c: 31: char *strstr ( const char *str1, const char *str2 )
+ 50 ; -----------------------------------------
+ 51 ; function strstr
+ 52 ; -----------------------------------------
+ 000000 53 _strstr:
+ 000000 52 0D [ 2] 54 sub sp, #13
+ 55 ; ../_strstr.c: 33: const char *cp = str1;
+ 000002 16 11 [ 2] 56 ldw y, (0x11, sp)
+ 000004 17 01 [ 2] 57 ldw (0x01, sp), y
+ 58 ; ../_strstr.c: 37: if (!*str2)
+ 000006 16 13 [ 2] 59 ldw y, (0x13, sp)
+ 000008 17 03 [ 2] 60 ldw (0x03, sp), y
+ 00000A 93 [ 1] 61 ldw x, y
+ 00000B F6 [ 1] 62 ld a, (x)
+ 00000C 6B 0D [ 1] 63 ld (0x0d, sp), a
+ 00000E 26 04 [ 1] 64 jrne 00122$
+ 65 ; ../_strstr.c: 38: return ((char*)str1);
+ 000010 1E 01 [ 2] 66 ldw x, (0x01, sp)
+ 000012 20 51 [ 2] 67 jra 00113$
+ 68 ; ../_strstr.c: 40: while (*cp)
+ 000014 69 00122$:
+ 000014 16 01 [ 2] 70 ldw y, (0x01, sp)
+ 000016 17 08 [ 2] 71 ldw (0x08, sp), y
+ 000018 72 00110$:
+ 000018 1E 08 [ 2] 73 ldw x, (0x08, sp)
+ 00001A F6 [ 1] 74 ld a, (x)
+ 00001B 27 47 [ 1] 75 jreq 00112$
+ 76 ; ../_strstr.c: 43: s2 = str2;
+ 00001D 1E 03 [ 2] 77 ldw x, (0x03, sp)
+ 78 ; ../_strstr.c: 45: while (*s1 && *s2 && !(*s1-*s2))
+ 00001F 16 08 [ 2] 79 ldw y, (0x08, sp)
+ 000021 17 0A [ 2] 80 ldw (0x0a, sp), y
+ 000023 1F 0C [ 2] 81 ldw (0x0c, sp), x
+ 000025 82 00105$:
+ 000025 1E 0A [ 2] 83 ldw x, (0x0a, sp)
+ 000027 F6 [ 1] 84 ld a, (x)
+ 000028 6B 07 [ 1] 85 ld (0x07, sp), a
+ 00002A 1E 0C [ 2] 86 ldw x, (0x0c, sp)
+ 00002C F6 [ 1] 87 ld a, (x)
+ 00002D 6B 05 [ 1] 88 ld (0x05, sp), a
+ 00002F 0D 07 [ 1] 89 tnz (0x07, sp)
+ 000031 27 20 [ 1] 90 jreq 00107$
+ 000033 0D 05 [ 1] 91 tnz (0x05, sp)
+ 000035 27 1C [ 1] 92 jreq 00107$
+ 000037 5F [ 1] 93 clrw x
+ 000038 7B 07 [ 1] 94 ld a, (0x07, sp)
+ 00003A 97 [ 1] 95 ld xl, a
+ 00003B 7B 05 [ 1] 96 ld a, (0x05, sp)
+ 00003D 6B 07 [ 1] 97 ld (0x07, sp), a
+ 00003F 0F 06 [ 1] 98 clr (0x06, sp)
+ 000041 72 F0 06 [ 2] 99 subw x, (0x06, sp)
+ 000044 5D [ 2] 100 tnzw x
+ 000045 26 0C [ 1] 101 jrne 00107$
+ 102 ; ../_strstr.c: 46: s1++, s2++;
+ 000047 1E 0A [ 2] 103 ldw x, (0x0a, sp)
+ 000049 5C [ 1] 104 incw x
+ 00004A 1F 0A [ 2] 105 ldw (0x0a, sp), x
+ 00004C 1E 0C [ 2] 106 ldw x, (0x0c, sp)
+ 00004E 5C [ 1] 107 incw x
+ 00004F 1F 0C [ 2] 108 ldw (0x0c, sp), x
+ 000051 20 D2 [ 2] 109 jra 00105$
+ 000053 110 00107$:
+ 111 ; ../_strstr.c: 48: if (!*s2)
+ 000053 0D 05 [ 1] 112 tnz (0x05, sp)
+ 000055 26 04 [ 1] 113 jrne 00109$
+ 114 ; ../_strstr.c: 49: return ((char*)cp);
+ 000057 1E 01 [ 2] 115 ldw x, (0x01, sp)
+ 000059 20 0A [ 2] 116 jra 00113$
+ 00005B 117 00109$:
+ 118 ; ../_strstr.c: 51: cp++;
+ 00005B 1E 08 [ 2] 119 ldw x, (0x08, sp)
+ 00005D 5C [ 1] 120 incw x
+ 00005E 1F 08 [ 2] 121 ldw (0x08, sp), x
+ 000060 1F 01 [ 2] 122 ldw (0x01, sp), x
+ 000062 20 B4 [ 2] 123 jra 00110$
+ 000064 124 00112$:
+ 125 ; ../_strstr.c: 54: return (NULL) ;
+ 000064 5F [ 1] 126 clrw x
+ 000065 127 00113$:
+ 128 ; ../_strstr.c: 55: }
+ 000065 5B 0D [ 2] 129 addw sp, #13
+ 000067 87 [ 5] 130 retf
+ 131 .area CODE
+ 132 .area CONST
+ 133 .area INITIALIZER
+ 134 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strstr.rel b/device/lib/stm8-large/_strstr.rel
new file mode 100644
index 0000000..4b05b31
--- /dev/null
+++ b/device/lib/stm8-large/_strstr.rel
@@ -0,0 +1,57 @@
+XH3
+H B areas 2 global symbols
+M _strstr
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 68 flags 0 addr 0
+S _strstr Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0D 16 11 17 01 16 13 17 03 93 F6 6B
+R 00 00 00 09
+T 00 00 0D 0D 26 04 1E 01 20 51
+R 00 00 00 09
+T 00 00 14
+R 00 00 00 09
+T 00 00 14 16 01 17 08
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 1E 08 F6 27 47 1E 03 16 08 17 0A 1F 0C
+R 00 00 00 09
+T 00 00 25
+R 00 00 00 09
+T 00 00 25 1E 0A F6 6B 07 1E 0C F6 6B 05 0D 07 27
+R 00 00 00 09
+T 00 00 32 20 0D 05 27 1C 5F 7B 07 97 7B 05 6B 07
+R 00 00 00 09
+T 00 00 3F 0F 06 72 F0 06 5D 26 0C 1E 0A 5C 1F 0A
+R 00 00 00 09
+T 00 00 4C 1E 0C 5C 1F 0C 20 D2
+R 00 00 00 09
+T 00 00 53
+R 00 00 00 09
+T 00 00 53 0D 05 26 04 1E 01 20 0A
+R 00 00 00 09
+T 00 00 5B
+R 00 00 00 09
+T 00 00 5B 1E 08 5C 1F 08 1F 01 20 B4
+R 00 00 00 09
+T 00 00 64
+R 00 00 00 09
+T 00 00 64 5F
+R 00 00 00 09
+T 00 00 65
+R 00 00 00 09
+T 00 00 65 5B 0D 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strstr.sym b/device/lib/stm8-large/_strstr.sym
new file mode 100644
index 0000000..b5464dc
--- /dev/null
+++ b/device/lib/stm8-large/_strstr.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _strstr 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 68 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_strtok.asm b/device/lib/stm8-large/_strtok.asm
new file mode 100644
index 0000000..65e96fb
--- /dev/null
+++ b/device/lib/stm8-large/_strtok.asm
@@ -0,0 +1,148 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _strtok
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strchr
+ .globl _strtok
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_strtok_s_65536_26:
+ .ds 2
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_strtok.c: 36: char * strtok ( char * str, const char * control )
+; -----------------------------------------
+; function strtok
+; -----------------------------------------
+_strtok:
+ sub sp, #2
+; ../_strtok.c: 41: if ( str )
+; ../_strtok.c: 42: s = str;
+ ldw x, (0x06, sp)
+ jreq 00102$
+ ldw _strtok_s_65536_26+0, x
+00102$:
+; ../_strtok.c: 43: if ( !s )
+ ldw x, _strtok_s_65536_26+0
+ jrne 00108$
+; ../_strtok.c: 44: return NULL;
+ clrw x
+ jra 00119$
+; ../_strtok.c: 46: while (*s) {
+00108$:
+ ldw x, _strtok_s_65536_26+0
+ ld a, (x)
+ jreq 00110$
+; ../_strtok.c: 47: if (strchr(control,*s))
+ clrw x
+ ld xl, a
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf _strchr
+ addw sp, #4
+ tnzw x
+ jreq 00110$
+; ../_strtok.c: 48: s++;
+ ldw x, _strtok_s_65536_26+0
+ incw x
+ ldw _strtok_s_65536_26+0, x
+ jra 00108$
+; ../_strtok.c: 50: break;
+00110$:
+; ../_strtok.c: 53: s1 = s;
+ ldw x, _strtok_s_65536_26+0
+ ldw (0x01, sp), x
+; ../_strtok.c: 55: while (*s) {
+00113$:
+; ../_strtok.c: 46: while (*s) {
+ ldw x, _strtok_s_65536_26+0
+; ../_strtok.c: 55: while (*s) {
+ ld a, (x)
+ jreq 00115$
+; ../_strtok.c: 56: if (strchr(control,*s)) {
+ clrw x
+ ld xl, a
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf _strchr
+ addw sp, #4
+ tnzw x
+ jreq 00112$
+; ../_strtok.c: 57: *s++ = '\0';
+ ldw x, _strtok_s_65536_26+0
+ clr (x)
+ ldw x, _strtok_s_65536_26+0
+ incw x
+ ldw _strtok_s_65536_26+0, x
+; ../_strtok.c: 58: return s1;
+ ldw x, (0x01, sp)
+ jra 00119$
+00112$:
+; ../_strtok.c: 60: s++ ;
+ ldw x, _strtok_s_65536_26+0
+ incw x
+ ldw _strtok_s_65536_26+0, x
+ jra 00113$
+00115$:
+; ../_strtok.c: 63: s = NULL;
+ clrw x
+ ldw _strtok_s_65536_26+0, x
+; ../_strtok.c: 65: if (*s1)
+ ldw x, (0x01, sp)
+ ld a, (x)
+ jreq 00117$
+; ../_strtok.c: 66: return s1;
+ ldw x, (0x01, sp)
+; ../_strtok.c: 68: return NULL;
+ .byte 0x21
+00117$:
+ clrw x
+00119$:
+; ../_strtok.c: 69: }
+ addw sp, #2
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strtok.lst b/device/lib/stm8-large/_strtok.lst
new file mode 100644
index 0000000..bcf90cc
--- /dev/null
+++ b/device/lib/stm8-large/_strtok.lst
@@ -0,0 +1,148 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _strtok
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strchr
+ 12 .globl _strtok
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 000000 17 _strtok_s_65536_26:
+ 000000 18 .ds 2
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../_strtok.c: 36: char * strtok ( char * str, const char * control )
+ 53 ; -----------------------------------------
+ 54 ; function strtok
+ 55 ; -----------------------------------------
+ 000000 56 _strtok:
+ 000000 52 02 [ 2] 57 sub sp, #2
+ 58 ; ../_strtok.c: 41: if ( str )
+ 59 ; ../_strtok.c: 42: s = str;
+ 000002 1E 06 [ 2] 60 ldw x, (0x06, sp)
+ 000004 27 03 [ 1] 61 jreq 00102$
+ 000006 CFu00u00 [ 2] 62 ldw _strtok_s_65536_26+0, x
+ 000009 63 00102$:
+ 64 ; ../_strtok.c: 43: if ( !s )
+ 000009 CEu00u00 [ 2] 65 ldw x, _strtok_s_65536_26+0
+ 00000C 26 03 [ 1] 66 jrne 00108$
+ 67 ; ../_strtok.c: 44: return NULL;
+ 00000E 5F [ 1] 68 clrw x
+ 00000F 20 5D [ 2] 69 jra 00119$
+ 70 ; ../_strtok.c: 46: while (*s) {
+ 000011 71 00108$:
+ 000011 CEu00u00 [ 2] 72 ldw x, _strtok_s_65536_26+0
+ 000014 F6 [ 1] 73 ld a, (x)
+ 000015 27 18 [ 1] 74 jreq 00110$
+ 75 ; ../_strtok.c: 47: if (strchr(control,*s))
+ 000017 5F [ 1] 76 clrw x
+ 000018 97 [ 1] 77 ld xl, a
+ 000019 89 [ 2] 78 pushw x
+ 00001A 1E 0A [ 2] 79 ldw x, (0x0a, sp)
+ 00001C 89 [ 2] 80 pushw x
+ 00001D 8Ds00r00r00 [ 5] 81 callf _strchr
+ 000021 5B 04 [ 2] 82 addw sp, #4
+ 000023 5D [ 2] 83 tnzw x
+ 000024 27 09 [ 1] 84 jreq 00110$
+ 85 ; ../_strtok.c: 48: s++;
+ 000026 CEu00u00 [ 2] 86 ldw x, _strtok_s_65536_26+0
+ 000029 5C [ 1] 87 incw x
+ 00002A CFu00u00 [ 2] 88 ldw _strtok_s_65536_26+0, x
+ 00002D 20 E2 [ 2] 89 jra 00108$
+ 90 ; ../_strtok.c: 50: break;
+ 00002F 91 00110$:
+ 92 ; ../_strtok.c: 53: s1 = s;
+ 00002F CEu00u00 [ 2] 93 ldw x, _strtok_s_65536_26+0
+ 000032 1F 01 [ 2] 94 ldw (0x01, sp), x
+ 95 ; ../_strtok.c: 55: while (*s) {
+ 000034 96 00113$:
+ 97 ; ../_strtok.c: 46: while (*s) {
+ 000034 CEu00u00 [ 2] 98 ldw x, _strtok_s_65536_26+0
+ 99 ; ../_strtok.c: 55: while (*s) {
+ 000037 F6 [ 1] 100 ld a, (x)
+ 000038 27 27 [ 1] 101 jreq 00115$
+ 102 ; ../_strtok.c: 56: if (strchr(control,*s)) {
+ 00003A 5F [ 1] 103 clrw x
+ 00003B 97 [ 1] 104 ld xl, a
+ 00003C 89 [ 2] 105 pushw x
+ 00003D 1E 0A [ 2] 106 ldw x, (0x0a, sp)
+ 00003F 89 [ 2] 107 pushw x
+ 000040 8Ds00r00r00 [ 5] 108 callf _strchr
+ 000044 5B 04 [ 2] 109 addw sp, #4
+ 000046 5D [ 2] 110 tnzw x
+ 000047 27 0F [ 1] 111 jreq 00112$
+ 112 ; ../_strtok.c: 57: *s++ = '\0';
+ 000049 CEu00u00 [ 2] 113 ldw x, _strtok_s_65536_26+0
+ 00004C 7F [ 1] 114 clr (x)
+ 00004D CEu00u00 [ 2] 115 ldw x, _strtok_s_65536_26+0
+ 000050 5C [ 1] 116 incw x
+ 000051 CFu00u00 [ 2] 117 ldw _strtok_s_65536_26+0, x
+ 118 ; ../_strtok.c: 58: return s1;
+ 000054 1E 01 [ 2] 119 ldw x, (0x01, sp)
+ 000056 20 16 [ 2] 120 jra 00119$
+ 000058 121 00112$:
+ 122 ; ../_strtok.c: 60: s++ ;
+ 000058 CEu00u00 [ 2] 123 ldw x, _strtok_s_65536_26+0
+ 00005B 5C [ 1] 124 incw x
+ 00005C CFu00u00 [ 2] 125 ldw _strtok_s_65536_26+0, x
+ 00005F 20 D3 [ 2] 126 jra 00113$
+ 000061 127 00115$:
+ 128 ; ../_strtok.c: 63: s = NULL;
+ 000061 5F [ 1] 129 clrw x
+ 000062 CFu00u00 [ 2] 130 ldw _strtok_s_65536_26+0, x
+ 131 ; ../_strtok.c: 65: if (*s1)
+ 000065 1E 01 [ 2] 132 ldw x, (0x01, sp)
+ 000067 F6 [ 1] 133 ld a, (x)
+ 000068 27 03 [ 1] 134 jreq 00117$
+ 135 ; ../_strtok.c: 66: return s1;
+ 00006A 1E 01 [ 2] 136 ldw x, (0x01, sp)
+ 137 ; ../_strtok.c: 68: return NULL;
+ 00006C 21 138 .byte 0x21
+ 00006D 139 00117$:
+ 00006D 5F [ 1] 140 clrw x
+ 00006E 141 00119$:
+ 142 ; ../_strtok.c: 69: }
+ 00006E 5B 02 [ 2] 143 addw sp, #2
+ 000070 87 [ 5] 144 retf
+ 145 .area CODE
+ 146 .area CONST
+ 147 .area INITIALIZER
+ 148 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_strtok.rel b/device/lib/stm8-large/_strtok.rel
new file mode 100644
index 0000000..ac50616
--- /dev/null
+++ b/device/lib/stm8-large/_strtok.rel
@@ -0,0 +1,66 @@
+XH3
+H B areas 3 global symbols
+M _strtok
+O -mstm8
+S .__.ABS. Def000000
+S _strchr Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 2 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 71 flags 0 addr 0
+S _strtok Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 1E 06 27 03 CF 00 00
+R 00 00 00 09 10 0A 00 01
+T 00 00 09
+R 00 00 00 09
+T 00 00 09 CE 00 00 26 03 5F 20 5D
+R 00 00 00 09 10 04 00 01
+T 00 00 11
+R 00 00 00 09
+T 00 00 11 CE 00 00 F6 27 18 5F 97 89 1E 0A 89 8D
+R 00 00 00 09 10 04 00 01
+T 00 00 1E 00 00 00 5B 04 5D 27 09 CE 00 00 5C CF
+R 00 00 00 09 82 03 00 01 10 0C 00 01
+T 00 00 2B 00 00 20 E2
+R 00 00 00 09 10 03 00 01
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F CE 00 00 1F 01
+R 00 00 00 09 10 04 00 01
+T 00 00 34
+R 00 00 00 09
+T 00 00 34 CE 00 00 F6 27 27 5F 97 89 1E 0A 89 8D
+R 00 00 00 09 10 04 00 01
+T 00 00 41 00 00 00 5B 04 5D 27 0F CE 00 00 7F CE
+R 00 00 00 09 82 03 00 01 10 0C 00 01
+T 00 00 4E 00 00 5C CF 00 00 1E 01 20 16
+R 00 00 00 09 10 03 00 01 10 07 00 01
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 CE 00 00 5C CF 00 00 20 D3
+R 00 00 00 09 10 04 00 01 10 08 00 01
+T 00 00 61
+R 00 00 00 09
+T 00 00 61 5F CF 00 00 1E 01 F6 27 03 1E 01 21
+R 00 00 00 09 10 05 00 01
+T 00 00 6D
+R 00 00 00 09
+T 00 00 6D 5F
+R 00 00 00 09
+T 00 00 6E
+R 00 00 00 09
+T 00 00 6E 5B 02 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_strtok.sym b/device/lib/stm8-large/_strtok.sym
new file mode 100644
index 0000000..57c140c
--- /dev/null
+++ b/device/lib/stm8-large/_strtok.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _strchr ****** GX
+ 9 _strtok 000000 GR
+ 1 _strtok_s_65536_26 000000 R
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 2 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 71 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_uchar2fs.asm b/device/lib/stm8-large/_uchar2fs.asm
new file mode 100644
index 0000000..35c93a7
--- /dev/null
+++ b/device/lib/stm8-large/_uchar2fs.asm
@@ -0,0 +1,69 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _uchar2fs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___ulong2fs
+ .globl ___uchar2fs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_uchar2fs.c: 55: float __uchar2fs (unsigned char uc) {
+; -----------------------------------------
+; function __uchar2fs
+; -----------------------------------------
+___uchar2fs:
+; ../_uchar2fs.c: 56: return __ulong2fs(uc);
+ clrw x
+ ld a, (0x04, sp)
+ ld xl, a
+ clrw y
+ pushw x
+ pushw y
+ callf ___ulong2fs
+ addw sp, #4
+; ../_uchar2fs.c: 57: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_uchar2fs.lst b/device/lib/stm8-large/_uchar2fs.lst
new file mode 100644
index 0000000..39f565c
--- /dev/null
+++ b/device/lib/stm8-large/_uchar2fs.lst
@@ -0,0 +1,69 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _uchar2fs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___ulong2fs
+ 12 .globl ___uchar2fs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_uchar2fs.c: 55: float __uchar2fs (unsigned char uc) {
+ 51 ; -----------------------------------------
+ 52 ; function __uchar2fs
+ 53 ; -----------------------------------------
+ 000000 54 ___uchar2fs:
+ 55 ; ../_uchar2fs.c: 56: return __ulong2fs(uc);
+ 000000 5F [ 1] 56 clrw x
+ 000001 7B 04 [ 1] 57 ld a, (0x04, sp)
+ 000003 97 [ 1] 58 ld xl, a
+ 000004 90 5F [ 1] 59 clrw y
+ 000006 89 [ 2] 60 pushw x
+ 000007 90 89 [ 2] 61 pushw y
+ 000009 8Ds00r00r00 [ 5] 62 callf ___ulong2fs
+ 00000D 5B 04 [ 2] 63 addw sp, #4
+ 64 ; ../_uchar2fs.c: 57: }
+ 00000F 87 [ 5] 65 retf
+ 66 .area CODE
+ 67 .area CONST
+ 68 .area INITIALIZER
+ 69 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_uchar2fs.rel b/device/lib/stm8-large/_uchar2fs.rel
new file mode 100644
index 0000000..a027f89
--- /dev/null
+++ b/device/lib/stm8-large/_uchar2fs.rel
@@ -0,0 +1,24 @@
+XH3
+H B areas 3 global symbols
+M _uchar2fs
+O -mstm8
+S ___ulong2fs Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 10 flags 0 addr 0
+S ___uchar2fs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 5F 7B 04 97 90 5F 89 90 89 8D
+R 00 00 00 09
+T 00 00 0A 00 00 00 5B 04 87
+R 00 00 00 09 82 03 00 00
diff --git a/device/lib/stm8-large/_uchar2fs.sym b/device/lib/stm8-large/_uchar2fs.sym
new file mode 100644
index 0000000..2d11738
--- /dev/null
+++ b/device/lib/stm8-large/_uchar2fs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___uchar2fs 000000 GR
+ ___ulong2fs ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 10 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_uint2fs.asm b/device/lib/stm8-large/_uint2fs.asm
new file mode 100644
index 0000000..2401675
--- /dev/null
+++ b/device/lib/stm8-large/_uint2fs.asm
@@ -0,0 +1,67 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _uint2fs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___ulong2fs
+ .globl ___uint2fs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_uint2fs.c: 54: float __uint2fs (unsigned int ui) {
+; -----------------------------------------
+; function __uint2fs
+; -----------------------------------------
+___uint2fs:
+; ../_uint2fs.c: 55: return __ulong2fs(ui);
+ ldw y, (0x04, sp)
+ clrw x
+ pushw y
+ pushw x
+ callf ___ulong2fs
+ addw sp, #4
+; ../_uint2fs.c: 56: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_uint2fs.lst b/device/lib/stm8-large/_uint2fs.lst
new file mode 100644
index 0000000..b4fe573
--- /dev/null
+++ b/device/lib/stm8-large/_uint2fs.lst
@@ -0,0 +1,67 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _uint2fs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___ulong2fs
+ 12 .globl ___uint2fs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../_uint2fs.c: 54: float __uint2fs (unsigned int ui) {
+ 51 ; -----------------------------------------
+ 52 ; function __uint2fs
+ 53 ; -----------------------------------------
+ 000000 54 ___uint2fs:
+ 55 ; ../_uint2fs.c: 55: return __ulong2fs(ui);
+ 000000 16 04 [ 2] 56 ldw y, (0x04, sp)
+ 000002 5F [ 1] 57 clrw x
+ 000003 90 89 [ 2] 58 pushw y
+ 000005 89 [ 2] 59 pushw x
+ 000006 8Ds00r00r00 [ 5] 60 callf ___ulong2fs
+ 00000A 5B 04 [ 2] 61 addw sp, #4
+ 62 ; ../_uint2fs.c: 56: }
+ 00000C 87 [ 5] 63 retf
+ 64 .area CODE
+ 65 .area CONST
+ 66 .area INITIALIZER
+ 67 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_uint2fs.rel b/device/lib/stm8-large/_uint2fs.rel
new file mode 100644
index 0000000..0f23197
--- /dev/null
+++ b/device/lib/stm8-large/_uint2fs.rel
@@ -0,0 +1,22 @@
+XH3
+H B areas 3 global symbols
+M _uint2fs
+O -mstm8
+S ___ulong2fs Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size D flags 0 addr 0
+S ___uint2fs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 16 04 5F 90 89 89 8D 00 00 00 5B 04 87
+R 00 00 00 09 82 0A 00 00
diff --git a/device/lib/stm8-large/_uint2fs.sym b/device/lib/stm8-large/_uint2fs.sym
new file mode 100644
index 0000000..20ee599
--- /dev/null
+++ b/device/lib/stm8-large/_uint2fs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___uint2fs 000000 GR
+ ___ulong2fs ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/_ulong2fs.asm b/device/lib/stm8-large/_ulong2fs.asm
new file mode 100644
index 0000000..c3ed4aa
--- /dev/null
+++ b/device/lib/stm8-large/_ulong2fs.asm
@@ -0,0 +1,152 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module _ulong2fs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___ulong2fs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../_ulong2fs.c: 83: float __ulong2fs (unsigned long a )
+; -----------------------------------------
+; function __ulong2fs
+; -----------------------------------------
+___ulong2fs:
+ sub sp, #8
+; ../_ulong2fs.c: 88: if (!a)
+ ldw x, (0x0e, sp)
+ jrne 00115$
+; ../_ulong2fs.c: 90: return 0.0;
+ ldw x, (0x0c, sp)
+ jrne 00115$
+ clrw y
+ jra 00111$
+; ../_ulong2fs.c: 93: while (a < HIDDEN)
+00115$:
+ ld a, #0x96
+00103$:
+ ldw x, (0x0c, sp)
+ cpw x, #0x0080
+ jrnc 00118$
+; ../_ulong2fs.c: 95: a <<= 1;
+ sll (0x0f, sp)
+ rlc (0x0e, sp)
+ rlc (0x0d, sp)
+ rlc (0x0c, sp)
+; ../_ulong2fs.c: 96: exp--;
+ dec a
+ jra 00103$
+; ../_ulong2fs.c: 99: while (a & NORM)
+00118$:
+00108$:
+ tnz (0x0c, sp)
+ jreq 00110$
+; ../_ulong2fs.c: 102: if (a & 1)
+ push a
+ ld a, (0x10, sp)
+ srl a
+ pop a
+ jrnc 00107$
+; ../_ulong2fs.c: 103: a += 2;
+ ldw x, (0x0e, sp)
+ addw x, #0x0002
+ ldw y, (0x0c, sp)
+ jrnc 00150$
+ incw y
+00150$:
+ ldw (0x0e, sp), x
+ ldw (0x0c, sp), y
+00107$:
+; ../_ulong2fs.c: 104: a >>= 1;
+ srl (0x0c, sp)
+ rrc (0x0d, sp)
+ rrc (0x0e, sp)
+ rrc (0x0f, sp)
+; ../_ulong2fs.c: 105: exp++;
+ inc a
+ jra 00108$
+00110$:
+; ../_ulong2fs.c: 108: a &= ~HIDDEN ;
+ push a
+ ldw y, (0x0f, sp)
+ ld a, (0x0e, sp)
+ and a, #0x7f
+ ld xl, a
+ ld a, (0x0d, sp)
+ ld xh, a
+ pop a
+ ldw (0x0e, sp), y
+ ldw (0x0c, sp), x
+; ../_ulong2fs.c: 110: fl.l = PACK(0,(unsigned long)exp, a);
+ clrw x
+ ld xl, a
+ clr (0x08, sp)
+ clr (0x07, sp)
+ ld a, #0x07
+00151$:
+ sllw x
+ dec a
+ jrne 00151$
+ ld a, (0x08, sp)
+ or a, (0x0f, sp)
+ ld yl, a
+ ld a, (0x07, sp)
+ or a, (0x0e, sp)
+ ld yh, a
+ ld a, xl
+ or a, (0x0d, sp)
+ rlwa x
+ or a, (0x0c, sp)
+ ld xh, a
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../_ulong2fs.c: 112: return (fl.f);
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+00111$:
+; ../_ulong2fs.c: 113: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/_ulong2fs.lst b/device/lib/stm8-large/_ulong2fs.lst
new file mode 100644
index 0000000..9c272a6
--- /dev/null
+++ b/device/lib/stm8-large/_ulong2fs.lst
@@ -0,0 +1,152 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module _ulong2fs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___ulong2fs
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../_ulong2fs.c: 83: float __ulong2fs (unsigned long a )
+ 50 ; -----------------------------------------
+ 51 ; function __ulong2fs
+ 52 ; -----------------------------------------
+ 000000 53 ___ulong2fs:
+ 000000 52 08 [ 2] 54 sub sp, #8
+ 55 ; ../_ulong2fs.c: 88: if (!a)
+ 000002 1E 0E [ 2] 56 ldw x, (0x0e, sp)
+ 000004 26 08 [ 1] 57 jrne 00115$
+ 58 ; ../_ulong2fs.c: 90: return 0.0;
+ 000006 1E 0C [ 2] 59 ldw x, (0x0c, sp)
+ 000008 26 04 [ 1] 60 jrne 00115$
+ 00000A 90 5F [ 1] 61 clrw y
+ 00000C 20 70 [ 2] 62 jra 00111$
+ 63 ; ../_ulong2fs.c: 93: while (a < HIDDEN)
+ 00000E 64 00115$:
+ 00000E A6 96 [ 1] 65 ld a, #0x96
+ 000010 66 00103$:
+ 000010 1E 0C [ 2] 67 ldw x, (0x0c, sp)
+ 000012 A3 00 80 [ 2] 68 cpw x, #0x0080
+ 000015 24 0B [ 1] 69 jrnc 00118$
+ 70 ; ../_ulong2fs.c: 95: a <<= 1;
+ 000017 08 0F [ 1] 71 sll (0x0f, sp)
+ 000019 09 0E [ 1] 72 rlc (0x0e, sp)
+ 00001B 09 0D [ 1] 73 rlc (0x0d, sp)
+ 00001D 09 0C [ 1] 74 rlc (0x0c, sp)
+ 75 ; ../_ulong2fs.c: 96: exp--;
+ 00001F 4A [ 1] 76 dec a
+ 000020 20 EE [ 2] 77 jra 00103$
+ 78 ; ../_ulong2fs.c: 99: while (a & NORM)
+ 000022 79 00118$:
+ 000022 80 00108$:
+ 000022 0D 0C [ 1] 81 tnz (0x0c, sp)
+ 000024 27 21 [ 1] 82 jreq 00110$
+ 83 ; ../_ulong2fs.c: 102: if (a & 1)
+ 000026 88 [ 1] 84 push a
+ 000027 7B 10 [ 1] 85 ld a, (0x10, sp)
+ 000029 44 [ 1] 86 srl a
+ 00002A 84 [ 1] 87 pop a
+ 00002B 24 0F [ 1] 88 jrnc 00107$
+ 89 ; ../_ulong2fs.c: 103: a += 2;
+ 00002D 1E 0E [ 2] 90 ldw x, (0x0e, sp)
+ 00002F 1C 00 02 [ 2] 91 addw x, #0x0002
+ 000032 16 0C [ 2] 92 ldw y, (0x0c, sp)
+ 000034 24 02 [ 1] 93 jrnc 00150$
+ 000036 90 5C [ 1] 94 incw y
+ 000038 95 00150$:
+ 000038 1F 0E [ 2] 96 ldw (0x0e, sp), x
+ 00003A 17 0C [ 2] 97 ldw (0x0c, sp), y
+ 00003C 98 00107$:
+ 99 ; ../_ulong2fs.c: 104: a >>= 1;
+ 00003C 04 0C [ 1] 100 srl (0x0c, sp)
+ 00003E 06 0D [ 1] 101 rrc (0x0d, sp)
+ 000040 06 0E [ 1] 102 rrc (0x0e, sp)
+ 000042 06 0F [ 1] 103 rrc (0x0f, sp)
+ 104 ; ../_ulong2fs.c: 105: exp++;
+ 000044 4C [ 1] 105 inc a
+ 000045 20 DB [ 2] 106 jra 00108$
+ 000047 107 00110$:
+ 108 ; ../_ulong2fs.c: 108: a &= ~HIDDEN ;
+ 000047 88 [ 1] 109 push a
+ 000048 16 0F [ 2] 110 ldw y, (0x0f, sp)
+ 00004A 7B 0E [ 1] 111 ld a, (0x0e, sp)
+ 00004C A4 7F [ 1] 112 and a, #0x7f
+ 00004E 97 [ 1] 113 ld xl, a
+ 00004F 7B 0D [ 1] 114 ld a, (0x0d, sp)
+ 000051 95 [ 1] 115 ld xh, a
+ 000052 84 [ 1] 116 pop a
+ 000053 17 0E [ 2] 117 ldw (0x0e, sp), y
+ 000055 1F 0C [ 2] 118 ldw (0x0c, sp), x
+ 119 ; ../_ulong2fs.c: 110: fl.l = PACK(0,(unsigned long)exp, a);
+ 000057 5F [ 1] 120 clrw x
+ 000058 97 [ 1] 121 ld xl, a
+ 000059 0F 08 [ 1] 122 clr (0x08, sp)
+ 00005B 0F 07 [ 1] 123 clr (0x07, sp)
+ 00005D A6 07 [ 1] 124 ld a, #0x07
+ 00005F 125 00151$:
+ 00005F 58 [ 2] 126 sllw x
+ 000060 4A [ 1] 127 dec a
+ 000061 26 FC [ 1] 128 jrne 00151$
+ 000063 7B 08 [ 1] 129 ld a, (0x08, sp)
+ 000065 1A 0F [ 1] 130 or a, (0x0f, sp)
+ 000067 90 97 [ 1] 131 ld yl, a
+ 000069 7B 07 [ 1] 132 ld a, (0x07, sp)
+ 00006B 1A 0E [ 1] 133 or a, (0x0e, sp)
+ 00006D 90 95 [ 1] 134 ld yh, a
+ 00006F 9F [ 1] 135 ld a, xl
+ 000070 1A 0D [ 1] 136 or a, (0x0d, sp)
+ 000072 02 [ 1] 137 rlwa x
+ 000073 1A 0C [ 1] 138 or a, (0x0c, sp)
+ 000075 95 [ 1] 139 ld xh, a
+ 000076 17 03 [ 2] 140 ldw (0x03, sp), y
+ 000078 1F 01 [ 2] 141 ldw (0x01, sp), x
+ 142 ; ../_ulong2fs.c: 112: return (fl.f);
+ 00007A 1E 03 [ 2] 143 ldw x, (0x03, sp)
+ 00007C 16 01 [ 2] 144 ldw y, (0x01, sp)
+ 00007E 145 00111$:
+ 146 ; ../_ulong2fs.c: 113: }
+ 00007E 5B 08 [ 2] 147 addw sp, #8
+ 000080 87 [ 5] 148 retf
+ 149 .area CODE
+ 150 .area CONST
+ 151 .area INITIALIZER
+ 152 .area CABS (ABS)
diff --git a/device/lib/stm8-large/_ulong2fs.rel b/device/lib/stm8-large/_ulong2fs.rel
new file mode 100644
index 0000000..bc922c3
--- /dev/null
+++ b/device/lib/stm8-large/_ulong2fs.rel
@@ -0,0 +1,67 @@
+XH3
+H B areas 2 global symbols
+M _ulong2fs
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 81 flags 0 addr 0
+S ___ulong2fs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 1E 0E 26 08 1E 0C 26 04 90 5F 20
+R 00 00 00 09
+T 00 00 0D 70
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E A6 96
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 1E 0C A3 00 80 24 0B 08 0F 09 0E 09 0D
+R 00 00 00 09
+T 00 00 1D 09 0C 4A 20 EE
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 0D 0C 27 21 88 7B 10 44 84 24 0F 1E 0E
+R 00 00 00 09
+T 00 00 2F 1C 00 02 16 0C 24 02 90 5C
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 1F 0E 17 0C
+R 00 00 00 09
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 04 0C 06 0D 06 0E 06 0F 4C 20 DB
+R 00 00 00 09
+T 00 00 47
+R 00 00 00 09
+T 00 00 47 88 16 0F 7B 0E A4 7F 97 7B 0D 95 84 17
+R 00 00 00 09
+T 00 00 54 0E 1F 0C 5F 97 0F 08 0F 07 A6 07
+R 00 00 00 09
+T 00 00 5F
+R 00 00 00 09
+T 00 00 5F 58 4A 26 FC 7B 08 1A 0F 90 97 7B 07 1A
+R 00 00 00 09
+T 00 00 6C 0E 90 95 9F 1A 0D 02 1A 0C 95 17 03 1F
+R 00 00 00 09
+T 00 00 79 01 1E 03 16 01
+R 00 00 00 09
+T 00 00 7E
+R 00 00 00 09
+T 00 00 7E 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/_ulong2fs.sym b/device/lib/stm8-large/_ulong2fs.sym
new file mode 100644
index 0000000..2072ea2
--- /dev/null
+++ b/device/lib/stm8-large/_ulong2fs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___ulong2fs 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 81 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/abs.asm b/device/lib/stm8-large/abs.asm
new file mode 100644
index 0000000..cb00499
--- /dev/null
+++ b/device/lib/stm8-large/abs.asm
@@ -0,0 +1,68 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module abs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _abs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../abs.c: 54: int abs(int j)
+; -----------------------------------------
+; function abs
+; -----------------------------------------
+_abs:
+; ../abs.c: 56: return (j < 0) ? -j : j;
+ tnz (0x04, sp)
+ jrpl 00103$
+ ldw x, (0x04, sp)
+ negw x
+ .byte 0xc5
+00103$:
+ ldw x, (0x04, sp)
+00104$:
+; ../abs.c: 57: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/abs.lst b/device/lib/stm8-large/abs.lst
new file mode 100644
index 0000000..54346a8
--- /dev/null
+++ b/device/lib/stm8-large/abs.lst
@@ -0,0 +1,68 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module abs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _abs
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../abs.c: 54: int abs(int j)
+ 50 ; -----------------------------------------
+ 51 ; function abs
+ 52 ; -----------------------------------------
+ 000000 53 _abs:
+ 54 ; ../abs.c: 56: return (j < 0) ? -j : j;
+ 000000 0D 04 [ 1] 55 tnz (0x04, sp)
+ 000002 2A 04 [ 1] 56 jrpl 00103$
+ 000004 1E 04 [ 2] 57 ldw x, (0x04, sp)
+ 000006 50 [ 2] 58 negw x
+ 000007 C5 59 .byte 0xc5
+ 000008 60 00103$:
+ 000008 1E 04 [ 2] 61 ldw x, (0x04, sp)
+ 00000A 62 00104$:
+ 63 ; ../abs.c: 57: }
+ 00000A 87 [ 5] 64 retf
+ 65 .area CODE
+ 66 .area CONST
+ 67 .area INITIALIZER
+ 68 .area CABS (ABS)
diff --git a/device/lib/stm8-large/abs.rel b/device/lib/stm8-large/abs.rel
new file mode 100644
index 0000000..975f702
--- /dev/null
+++ b/device/lib/stm8-large/abs.rel
@@ -0,0 +1,29 @@
+XH3
+H B areas 2 global symbols
+M abs
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size B flags 0 addr 0
+S _abs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 0D 04 2A 04 1E 04 50 C5
+R 00 00 00 09
+T 00 00 08
+R 00 00 00 09
+T 00 00 08 1E 04
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/abs.sym b/device/lib/stm8-large/abs.sym
new file mode 100644
index 0000000..bd3f17a
--- /dev/null
+++ b/device/lib/stm8-large/abs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _abs 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/acosf.asm b/device/lib/stm8-large/acosf.asm
new file mode 100644
index 0000000..9c9c273
--- /dev/null
+++ b/device/lib/stm8-large/acosf.asm
@@ -0,0 +1,113 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module acosf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _asincosf
+ .globl _acosf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../acosf.c: 36: float acosf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function acosf
+; -----------------------------------------
+_acosf:
+; ../acosf.c: 38: if (x == 1.0) return 0.0;
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fseq
+ addw sp, #8
+ tnz a
+ jreq 00108$
+ clrw x
+ clrw y
+ jra 00110$
+00108$:
+; ../acosf.c: 39: else if (x ==-1.0) return PI;
+ clrw x
+ pushw x
+ push #0x80
+ push #0xbf
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fseq
+ addw sp, #8
+ tnz a
+ jreq 00105$
+ ldw x, #0x0fdb
+ ldw y, #0x4049
+ jra 00110$
+00105$:
+; ../acosf.c: 40: else if (x == 0.0) return HALF_PI;
+ ldw x, (0x06, sp)
+ jrne 00102$
+ ldw x, (0x04, sp)
+ sllw x
+ jrne 00102$
+ ldw x, #0x0fdb
+ ldw y, #0x3fc9
+ jra 00110$
+00102$:
+; ../acosf.c: 41: else return asincosf(x, true);
+ push #0x01
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _asincosf
+ addw sp, #5
+00110$:
+; ../acosf.c: 42: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/acosf.lst b/device/lib/stm8-large/acosf.lst
new file mode 100644
index 0000000..1556282
--- /dev/null
+++ b/device/lib/stm8-large/acosf.lst
@@ -0,0 +1,113 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module acosf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _asincosf
+ 12 .globl _acosf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../acosf.c: 36: float acosf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function acosf
+ 53 ; -----------------------------------------
+ 000000 54 _acosf:
+ 55 ; ../acosf.c: 38: if (x == 1.0) return 0.0;
+ 000000 5F [ 1] 56 clrw x
+ 000001 89 [ 2] 57 pushw x
+ 000002 4B 80 [ 1] 58 push #0x80
+ 000004 4B 3F [ 1] 59 push #0x3f
+ 000006 1E 0A [ 2] 60 ldw x, (0x0a, sp)
+ 000008 89 [ 2] 61 pushw x
+ 000009 1E 0A [ 2] 62 ldw x, (0x0a, sp)
+ 00000B 89 [ 2] 63 pushw x
+ 00000C 8Ds00r00r00 [ 5] 64 callf ___fseq
+ 000010 5B 08 [ 2] 65 addw sp, #8
+ 000012 4D [ 1] 66 tnz a
+ 000013 27 05 [ 1] 67 jreq 00108$
+ 000015 5F [ 1] 68 clrw x
+ 000016 90 5F [ 1] 69 clrw y
+ 000018 20 3E [ 2] 70 jra 00110$
+ 00001A 71 00108$:
+ 72 ; ../acosf.c: 39: else if (x ==-1.0) return PI;
+ 00001A 5F [ 1] 73 clrw x
+ 00001B 89 [ 2] 74 pushw x
+ 00001C 4B 80 [ 1] 75 push #0x80
+ 00001E 4B BF [ 1] 76 push #0xbf
+ 000020 1E 0A [ 2] 77 ldw x, (0x0a, sp)
+ 000022 89 [ 2] 78 pushw x
+ 000023 1E 0A [ 2] 79 ldw x, (0x0a, sp)
+ 000025 89 [ 2] 80 pushw x
+ 000026 8Ds00r00r00 [ 5] 81 callf ___fseq
+ 00002A 5B 08 [ 2] 82 addw sp, #8
+ 00002C 4D [ 1] 83 tnz a
+ 00002D 27 09 [ 1] 84 jreq 00105$
+ 00002F AE 0F DB [ 2] 85 ldw x, #0x0fdb
+ 000032 90 AE 40 49 [ 2] 86 ldw y, #0x4049
+ 000036 20 20 [ 2] 87 jra 00110$
+ 000038 88 00105$:
+ 89 ; ../acosf.c: 40: else if (x == 0.0) return HALF_PI;
+ 000038 1E 06 [ 2] 90 ldw x, (0x06, sp)
+ 00003A 26 0E [ 1] 91 jrne 00102$
+ 00003C 1E 04 [ 2] 92 ldw x, (0x04, sp)
+ 00003E 58 [ 2] 93 sllw x
+ 00003F 26 09 [ 1] 94 jrne 00102$
+ 000041 AE 0F DB [ 2] 95 ldw x, #0x0fdb
+ 000044 90 AE 3F C9 [ 2] 96 ldw y, #0x3fc9
+ 000048 20 0E [ 2] 97 jra 00110$
+ 00004A 98 00102$:
+ 99 ; ../acosf.c: 41: else return asincosf(x, true);
+ 00004A 4B 01 [ 1] 100 push #0x01
+ 00004C 1E 07 [ 2] 101 ldw x, (0x07, sp)
+ 00004E 89 [ 2] 102 pushw x
+ 00004F 1E 07 [ 2] 103 ldw x, (0x07, sp)
+ 000051 89 [ 2] 104 pushw x
+ 000052 8Ds00r00r00 [ 5] 105 callf _asincosf
+ 000056 5B 05 [ 2] 106 addw sp, #5
+ 000058 107 00110$:
+ 108 ; ../acosf.c: 42: }
+ 000058 87 [ 5] 109 retf
+ 110 .area CODE
+ 111 .area CONST
+ 112 .area INITIALIZER
+ 113 .area CABS (ABS)
diff --git a/device/lib/stm8-large/acosf.rel b/device/lib/stm8-large/acosf.rel
new file mode 100644
index 0000000..f2b1689
--- /dev/null
+++ b/device/lib/stm8-large/acosf.rel
@@ -0,0 +1,49 @@
+XH3
+H B areas 4 global symbols
+M acosf
+O -mstm8
+S ___fseq Ref000000
+S .__.ABS. Def000000
+S _asincosf Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 59 flags 0 addr 0
+S _acosf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 5F 89 4B 80 4B 3F 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 08 4D 27 05 5F 90 5F 20 3E
+R 00 00 00 09 82 03 00 00
+T 00 00 1A
+R 00 00 00 09
+T 00 00 1A 5F 89 4B 80 4B BF 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 27 00 00 00 5B 08 4D 27 09 AE 0F DB 90 AE
+R 00 00 00 09 82 03 00 00
+T 00 00 34 40 49 20 20
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 1E 06 26 0E 1E 04 58 26 09 AE 0F DB 90
+R 00 00 00 09
+T 00 00 45 AE 3F C9 20 0E
+R 00 00 00 09
+T 00 00 4A
+R 00 00 00 09
+T 00 00 4A 4B 01 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 53 00 00 00 5B 05
+R 00 00 00 09 82 03 00 02
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/acosf.sym b/device/lib/stm8-large/acosf.sym
new file mode 100644
index 0000000..32ba183
--- /dev/null
+++ b/device/lib/stm8-large/acosf.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fseq ****** GX
+ 9 _acosf 000000 GR
+ _asincosf ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 59 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/aligned_alloc.asm b/device/lib/stm8-large/aligned_alloc.asm
new file mode 100644
index 0000000..5a0f00d
--- /dev/null
+++ b/device/lib/stm8-large/aligned_alloc.asm
@@ -0,0 +1,65 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module aligned_alloc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _malloc
+ .globl _aligned_alloc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ./../../include/stdlib.h: 86: inline void *aligned_alloc(size_t alignment, size_t size)
+; -----------------------------------------
+; function aligned_alloc
+; -----------------------------------------
+_aligned_alloc:
+; ./../../include/stdlib.h: 89: return malloc(size);
+ ldw x, (0x06, sp)
+ pushw x
+ callf _malloc
+ addw sp, #2
+; ./../../include/stdlib.h: 90: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/aligned_alloc.lst b/device/lib/stm8-large/aligned_alloc.lst
new file mode 100644
index 0000000..f57dd9e
--- /dev/null
+++ b/device/lib/stm8-large/aligned_alloc.lst
@@ -0,0 +1,65 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module aligned_alloc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _malloc
+ 12 .globl _aligned_alloc
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ./../../include/stdlib.h: 86: inline void *aligned_alloc(size_t alignment, size_t size)
+ 51 ; -----------------------------------------
+ 52 ; function aligned_alloc
+ 53 ; -----------------------------------------
+ 000000 54 _aligned_alloc:
+ 55 ; ./../../include/stdlib.h: 89: return malloc(size);
+ 000000 1E 06 [ 2] 56 ldw x, (0x06, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 8Ds00r00r00 [ 5] 58 callf _malloc
+ 000007 5B 02 [ 2] 59 addw sp, #2
+ 60 ; ./../../include/stdlib.h: 90: }
+ 000009 87 [ 5] 61 retf
+ 62 .area CODE
+ 63 .area CONST
+ 64 .area INITIALIZER
+ 65 .area CABS (ABS)
diff --git a/device/lib/stm8-large/aligned_alloc.rel b/device/lib/stm8-large/aligned_alloc.rel
new file mode 100644
index 0000000..8176835
--- /dev/null
+++ b/device/lib/stm8-large/aligned_alloc.rel
@@ -0,0 +1,22 @@
+XH3
+H B areas 3 global symbols
+M aligned_alloc
+O -mstm8
+S _malloc Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size A flags 0 addr 0
+S _aligned_alloc Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 06 89 8D 00 00 00 5B 02 87
+R 00 00 00 09 82 07 00 00
diff --git a/device/lib/stm8-large/aligned_alloc.sym b/device/lib/stm8-large/aligned_alloc.sym
new file mode 100644
index 0000000..ca773d9
--- /dev/null
+++ b/device/lib/stm8-large/aligned_alloc.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _aligned_alloc 000000 GR
+ _malloc ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/asincosf.asm b/device/lib/stm8-large/asincosf.asm
new file mode 100644
index 0000000..3902bdd
--- /dev/null
+++ b/device/lib/stm8-large/asincosf.asm
@@ -0,0 +1,445 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module asincosf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _asincosf
+ .globl _ldexpf
+ .globl _fabsf
+ .globl _sqrtf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../asincosf.c: 47: float asincosf(float x, bool isacos)
+; -----------------------------------------
+; function asincosf
+; -----------------------------------------
+_asincosf:
+ sub sp, #17
+; ../asincosf.c: 51: bool quartPI = isacos;
+ ld a, (0x19, sp)
+ ld (0x11, sp), a
+; ../asincosf.c: 56: y = fabsf(x);
+ ldw x, (0x17, sp)
+ pushw x
+ ldw x, (0x17, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../asincosf.c: 57: if (y < EPS)
+ clrw x
+ pushw x
+ push #0x80
+ push #0x39
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ ld (0x10, sp), a
+ jreq 00107$
+; ../asincosf.c: 59: r = y;
+ ldw y, (0x03, sp)
+ ldw (0x0f, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0d, sp), y
+ jpf 00108$
+00107$:
+; ../asincosf.c: 63: if (y > 0.5)
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00104$
+; ../asincosf.c: 65: quartPI = !isacos;
+ ld a, (0x11, sp)
+ sub a, #0x01
+ clr a
+ rlc a
+ ld (0x11, sp), a
+; ../asincosf.c: 66: if (y > 1.0)
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00102$
+; ../asincosf.c: 68: errno = EDOM;
+ ldw x, #0x0021
+ ldw _errno+0, x
+; ../asincosf.c: 69: return 0.0;
+ clrw x
+ clrw y
+ jpf 00117$
+00102$:
+; ../asincosf.c: 71: g = (0.5 - y) + 0.5;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fssub
+ addw sp, #8
+; ../asincosf.c: 72: g = ldexpf(g, -1);
+ push #0xff
+ push #0xff
+ pushw x
+ pushw y
+ callf _ldexpf
+ addw sp, #6
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../asincosf.c: 73: y = sqrtf(g);
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _sqrtf
+ addw sp, #4
+; ../asincosf.c: 74: y = -(y + y);
+ pushw x
+ pushw y
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ sllw y
+ ccf
+ rrcw y
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+ jra 00105$
+00104$:
+; ../asincosf.c: 78: g = y * y;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+00105$:
+; ../asincosf.c: 80: r = y + y * ((P(g) * g) / Q(g));
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ push #0x65
+ push #0x20
+ push #0x01
+ push #0xbf
+ callf ___fsmul
+ addw sp, #8
+ push #0x6b
+ push #0x16
+ push #0x6f
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ push #0x0b
+ push #0x8d
+ push #0xb1
+ push #0xc0
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ push #0xf0
+ push #0x50
+ push #0xb3
+ push #0x40
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+00108$:
+; ../asincosf.c: 82: i = quartPI;
+ ld a, (0x11, sp)
+; ../asincosf.c: 85: if (x < 0.0)
+ push a
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x1c, sp)
+ pushw x
+ ldw x, (0x1c, sp)
+ pushw x
+; ../asincosf.c: 86: r = (b[i] + r) + b[i];
+ callf ___fslt
+ addw sp, #8
+ ld (0x12, sp), a
+ pop a
+ exg a, xl
+ ld a, #0x04
+ exg a, xl
+ mul x, a
+ ldw (0x0b, sp), x
+; ../asincosf.c: 83: if (isacos)
+ tnz (0x19, sp)
+ jrne 00152$
+ jpf 00115$
+00152$:
+; ../asincosf.c: 85: if (x < 0.0)
+ tnz (0x11, sp)
+ jreq 00110$
+; ../asincosf.c: 86: r = (b[i] + r) + b[i];
+ ldw x, (0x0b, sp)
+ addw x, #(_asincosf_b_65536_26 + 0)
+ clr a
+ adc a, #((_asincosf_b_65536_26 + 0) >> 16)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x0b, sp), y
+ ldw x, (x)
+ ldw (0x09, sp), x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x12, sp), x
+ ldw (0x10, sp), y
+ popw y
+ ldw y, (0x0b, sp)
+ pushw y
+ ldw y, (0x0b, sp)
+ pushw y
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+ jpf 00116$
+00110$:
+; ../asincosf.c: 88: r = (a[i] - r) + a[i];
+ ldw x, (0x0b, sp)
+ addw x, #(_asincosf_a_65536_26 + 0)
+ clr a
+ adc a, #((_asincosf_a_65536_26 + 0) >> 16)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x0b, sp), y
+ ldw x, (x)
+ ldw (0x09, sp), x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x12, sp), x
+ ldw (0x10, sp), y
+ popw y
+ ldw y, (0x0b, sp)
+ pushw y
+ ldw y, (0x0b, sp)
+ pushw y
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+ jra 00116$
+00115$:
+; ../asincosf.c: 92: r = (a[i] + r) + a[i];
+ ldw x, (0x0b, sp)
+ addw x, #(_asincosf_a_65536_26 + 0)
+ clr a
+ adc a, #((_asincosf_a_65536_26 + 0) >> 16)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x0b, sp), y
+ ldw x, (x)
+ ldw (0x09, sp), x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x11, sp), x
+ ldw (0x0f, sp), y
+ popw y
+ ldw y, (0x0b, sp)
+ pushw y
+ ldw y, (0x0b, sp)
+ pushw y
+ ldw x, (0x13, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+; ../asincosf.c: 93: if (x < 0.0)
+ tnz (0x11, sp)
+ jreq 00116$
+; ../asincosf.c: 94: r = -r;
+ ldw y, (0x0f, sp)
+ ldw (0x0a, sp), y
+ ld a, (0x0e, sp)
+ ld (0x09, sp), a
+ ld a, (0x0d, sp)
+ xor a, #0x80
+ ld (0x0d, sp), a
+ ldw y, (0x0a, sp)
+ ldw (0x0f, sp), y
+ ld a, (0x09, sp)
+ ld (0x0e, sp), a
+00116$:
+; ../asincosf.c: 96: return r;
+ ldw x, (0x0f, sp)
+ ldw y, (0x0d, sp)
+00117$:
+; ../asincosf.c: 97: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+_asincosf_a_65536_26:
+ .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00
+ .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01
+_asincosf_b_65536_26:
+ .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00
+ .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/asincosf.lst b/device/lib/stm8-large/asincosf.lst
new file mode 100644
index 0000000..90b7da4
--- /dev/null
+++ b/device/lib/stm8-large/asincosf.lst
@@ -0,0 +1,445 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module asincosf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _asincosf
+ 12 .globl _ldexpf
+ 13 .globl _fabsf
+ 14 .globl _sqrtf
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area DATA
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../asincosf.c: 47: float asincosf(float x, bool isacos)
+ 53 ; -----------------------------------------
+ 54 ; function asincosf
+ 55 ; -----------------------------------------
+ 000000 56 _asincosf:
+ 000000 52 11 [ 2] 57 sub sp, #17
+ 58 ; ../asincosf.c: 51: bool quartPI = isacos;
+ 000002 7B 19 [ 1] 59 ld a, (0x19, sp)
+ 000004 6B 11 [ 1] 60 ld (0x11, sp), a
+ 61 ; ../asincosf.c: 56: y = fabsf(x);
+ 000006 1E 17 [ 2] 62 ldw x, (0x17, sp)
+ 000008 89 [ 2] 63 pushw x
+ 000009 1E 17 [ 2] 64 ldw x, (0x17, sp)
+ 00000B 89 [ 2] 65 pushw x
+ 00000C 8Ds00r00r00 [ 5] 66 callf _fabsf
+ 000010 5B 04 [ 2] 67 addw sp, #4
+ 000012 1F 03 [ 2] 68 ldw (0x03, sp), x
+ 000014 17 01 [ 2] 69 ldw (0x01, sp), y
+ 70 ; ../asincosf.c: 57: if (y < EPS)
+ 000016 5F [ 1] 71 clrw x
+ 000017 89 [ 2] 72 pushw x
+ 000018 4B 80 [ 1] 73 push #0x80
+ 00001A 4B 39 [ 1] 74 push #0x39
+ 00001C 1E 07 [ 2] 75 ldw x, (0x07, sp)
+ 00001E 89 [ 2] 76 pushw x
+ 00001F 1E 07 [ 2] 77 ldw x, (0x07, sp)
+ 000021 89 [ 2] 78 pushw x
+ 000022 8Ds00r00r00 [ 5] 79 callf ___fslt
+ 000026 5B 08 [ 2] 80 addw sp, #8
+ 000028 6B 10 [ 1] 81 ld (0x10, sp), a
+ 00002A 27 0C [ 1] 82 jreq 00107$
+ 83 ; ../asincosf.c: 59: r = y;
+ 00002C 16 03 [ 2] 84 ldw y, (0x03, sp)
+ 00002E 17 0F [ 2] 85 ldw (0x0f, sp), y
+ 000030 16 01 [ 2] 86 ldw y, (0x01, sp)
+ 000032 17 0D [ 2] 87 ldw (0x0d, sp), y
+ 000034 ACs00r01r78 [ 2] 88 jpf 00108$
+ 000038 89 00107$:
+ 90 ; ../asincosf.c: 63: if (y > 0.5)
+ 000038 1E 03 [ 2] 91 ldw x, (0x03, sp)
+ 00003A 89 [ 2] 92 pushw x
+ 00003B 1E 03 [ 2] 93 ldw x, (0x03, sp)
+ 00003D 89 [ 2] 94 pushw x
+ 00003E 5F [ 1] 95 clrw x
+ 00003F 89 [ 2] 96 pushw x
+ 000040 4B 00 [ 1] 97 push #0x00
+ 000042 4B 3F [ 1] 98 push #0x3f
+ 000044 8Ds00r00r00 [ 5] 99 callf ___fslt
+ 000048 5B 08 [ 2] 100 addw sp, #8
+ 00004A 4D [ 1] 101 tnz a
+ 00004B 27 70 [ 1] 102 jreq 00104$
+ 103 ; ../asincosf.c: 65: quartPI = !isacos;
+ 00004D 7B 11 [ 1] 104 ld a, (0x11, sp)
+ 00004F A0 01 [ 1] 105 sub a, #0x01
+ 000051 4F [ 1] 106 clr a
+ 000052 49 [ 1] 107 rlc a
+ 000053 6B 11 [ 1] 108 ld (0x11, sp), a
+ 109 ; ../asincosf.c: 66: if (y > 1.0)
+ 000055 1E 03 [ 2] 110 ldw x, (0x03, sp)
+ 000057 89 [ 2] 111 pushw x
+ 000058 1E 03 [ 2] 112 ldw x, (0x03, sp)
+ 00005A 89 [ 2] 113 pushw x
+ 00005B 5F [ 1] 114 clrw x
+ 00005C 89 [ 2] 115 pushw x
+ 00005D 4B 80 [ 1] 116 push #0x80
+ 00005F 4B 3F [ 1] 117 push #0x3f
+ 000061 8Ds00r00r00 [ 5] 118 callf ___fslt
+ 000065 5B 08 [ 2] 119 addw sp, #8
+ 000067 4D [ 1] 120 tnz a
+ 000068 27 0D [ 1] 121 jreq 00102$
+ 122 ; ../asincosf.c: 68: errno = EDOM;
+ 00006A AE 00 21 [ 2] 123 ldw x, #0x0021
+ 00006D CFu00u00 [ 2] 124 ldw _errno+0, x
+ 125 ; ../asincosf.c: 69: return 0.0;
+ 000070 5F [ 1] 126 clrw x
+ 000071 90 5F [ 1] 127 clrw y
+ 000073 ACs00r02r91 [ 2] 128 jpf 00117$
+ 000077 129 00102$:
+ 130 ; ../asincosf.c: 71: g = (0.5 - y) + 0.5;
+ 000077 1E 03 [ 2] 131 ldw x, (0x03, sp)
+ 000079 89 [ 2] 132 pushw x
+ 00007A 1E 03 [ 2] 133 ldw x, (0x03, sp)
+ 00007C 89 [ 2] 134 pushw x
+ 00007D 5F [ 1] 135 clrw x
+ 00007E 89 [ 2] 136 pushw x
+ 00007F 4B 80 [ 1] 137 push #0x80
+ 000081 4B 3F [ 1] 138 push #0x3f
+ 000083 8Ds00r00r00 [ 5] 139 callf ___fssub
+ 000087 5B 08 [ 2] 140 addw sp, #8
+ 141 ; ../asincosf.c: 72: g = ldexpf(g, -1);
+ 000089 4B FF [ 1] 142 push #0xff
+ 00008B 4B FF [ 1] 143 push #0xff
+ 00008D 89 [ 2] 144 pushw x
+ 00008E 90 89 [ 2] 145 pushw y
+ 000090 8Ds00r00r00 [ 5] 146 callf _ldexpf
+ 000094 5B 06 [ 2] 147 addw sp, #6
+ 000096 1F 07 [ 2] 148 ldw (0x07, sp), x
+ 000098 17 05 [ 2] 149 ldw (0x05, sp), y
+ 150 ; ../asincosf.c: 73: y = sqrtf(g);
+ 00009A 1E 07 [ 2] 151 ldw x, (0x07, sp)
+ 00009C 89 [ 2] 152 pushw x
+ 00009D 1E 07 [ 2] 153 ldw x, (0x07, sp)
+ 00009F 89 [ 2] 154 pushw x
+ 0000A0 8Ds00r00r00 [ 5] 155 callf _sqrtf
+ 0000A4 5B 04 [ 2] 156 addw sp, #4
+ 157 ; ../asincosf.c: 74: y = -(y + y);
+ 0000A6 89 [ 2] 158 pushw x
+ 0000A7 90 89 [ 2] 159 pushw y
+ 0000A9 89 [ 2] 160 pushw x
+ 0000AA 90 89 [ 2] 161 pushw y
+ 0000AC 8Ds00r00r00 [ 5] 162 callf ___fsadd
+ 0000B0 5B 08 [ 2] 163 addw sp, #8
+ 0000B2 90 58 [ 2] 164 sllw y
+ 0000B4 8C [ 1] 165 ccf
+ 0000B5 90 56 [ 2] 166 rrcw y
+ 0000B7 1F 03 [ 2] 167 ldw (0x03, sp), x
+ 0000B9 17 01 [ 2] 168 ldw (0x01, sp), y
+ 0000BB 20 16 [ 2] 169 jra 00105$
+ 0000BD 170 00104$:
+ 171 ; ../asincosf.c: 78: g = y * y;
+ 0000BD 1E 03 [ 2] 172 ldw x, (0x03, sp)
+ 0000BF 89 [ 2] 173 pushw x
+ 0000C0 1E 03 [ 2] 174 ldw x, (0x03, sp)
+ 0000C2 89 [ 2] 175 pushw x
+ 0000C3 1E 07 [ 2] 176 ldw x, (0x07, sp)
+ 0000C5 89 [ 2] 177 pushw x
+ 0000C6 1E 07 [ 2] 178 ldw x, (0x07, sp)
+ 0000C8 89 [ 2] 179 pushw x
+ 0000C9 8Ds00r00r00 [ 5] 180 callf ___fsmul
+ 0000CD 5B 08 [ 2] 181 addw sp, #8
+ 0000CF 1F 07 [ 2] 182 ldw (0x07, sp), x
+ 0000D1 17 05 [ 2] 183 ldw (0x05, sp), y
+ 0000D3 184 00105$:
+ 185 ; ../asincosf.c: 80: r = y + y * ((P(g) * g) / Q(g));
+ 0000D3 1E 07 [ 2] 186 ldw x, (0x07, sp)
+ 0000D5 89 [ 2] 187 pushw x
+ 0000D6 1E 07 [ 2] 188 ldw x, (0x07, sp)
+ 0000D8 89 [ 2] 189 pushw x
+ 0000D9 4B 65 [ 1] 190 push #0x65
+ 0000DB 4B 20 [ 1] 191 push #0x20
+ 0000DD 4B 01 [ 1] 192 push #0x01
+ 0000DF 4B BF [ 1] 193 push #0xbf
+ 0000E1 8Ds00r00r00 [ 5] 194 callf ___fsmul
+ 0000E5 5B 08 [ 2] 195 addw sp, #8
+ 0000E7 4B 6B [ 1] 196 push #0x6b
+ 0000E9 4B 16 [ 1] 197 push #0x16
+ 0000EB 4B 6F [ 1] 198 push #0x6f
+ 0000ED 4B 3F [ 1] 199 push #0x3f
+ 0000EF 89 [ 2] 200 pushw x
+ 0000F0 90 89 [ 2] 201 pushw y
+ 0000F2 8Ds00r00r00 [ 5] 202 callf ___fsadd
+ 0000F6 5B 08 [ 2] 203 addw sp, #8
+ 0000F8 1F 0F [ 2] 204 ldw (0x0f, sp), x
+ 0000FA 1E 07 [ 2] 205 ldw x, (0x07, sp)
+ 0000FC 89 [ 2] 206 pushw x
+ 0000FD 1E 07 [ 2] 207 ldw x, (0x07, sp)
+ 0000FF 89 [ 2] 208 pushw x
+ 000100 1E 13 [ 2] 209 ldw x, (0x13, sp)
+ 000102 89 [ 2] 210 pushw x
+ 000103 90 89 [ 2] 211 pushw y
+ 000105 8Ds00r00r00 [ 5] 212 callf ___fsmul
+ 000109 5B 08 [ 2] 213 addw sp, #8
+ 00010B 1F 0B [ 2] 214 ldw (0x0b, sp), x
+ 00010D 17 09 [ 2] 215 ldw (0x09, sp), y
+ 00010F 4B 0B [ 1] 216 push #0x0b
+ 000111 4B 8D [ 1] 217 push #0x8d
+ 000113 4B B1 [ 1] 218 push #0xb1
+ 000115 4B C0 [ 1] 219 push #0xc0
+ 000117 1E 0B [ 2] 220 ldw x, (0x0b, sp)
+ 000119 89 [ 2] 221 pushw x
+ 00011A 1E 0B [ 2] 222 ldw x, (0x0b, sp)
+ 00011C 89 [ 2] 223 pushw x
+ 00011D 8Ds00r00r00 [ 5] 224 callf ___fsadd
+ 000121 5B 08 [ 2] 225 addw sp, #8
+ 000123 1F 0F [ 2] 226 ldw (0x0f, sp), x
+ 000125 1E 07 [ 2] 227 ldw x, (0x07, sp)
+ 000127 89 [ 2] 228 pushw x
+ 000128 1E 07 [ 2] 229 ldw x, (0x07, sp)
+ 00012A 89 [ 2] 230 pushw x
+ 00012B 1E 13 [ 2] 231 ldw x, (0x13, sp)
+ 00012D 89 [ 2] 232 pushw x
+ 00012E 90 89 [ 2] 233 pushw y
+ 000130 8Ds00r00r00 [ 5] 234 callf ___fsmul
+ 000134 5B 08 [ 2] 235 addw sp, #8
+ 000136 4B F0 [ 1] 236 push #0xf0
+ 000138 4B 50 [ 1] 237 push #0x50
+ 00013A 4B B3 [ 1] 238 push #0xb3
+ 00013C 4B 40 [ 1] 239 push #0x40
+ 00013E 89 [ 2] 240 pushw x
+ 00013F 90 89 [ 2] 241 pushw y
+ 000141 8Ds00r00r00 [ 5] 242 callf ___fsadd
+ 000145 5B 08 [ 2] 243 addw sp, #8
+ 000147 89 [ 2] 244 pushw x
+ 000148 90 89 [ 2] 245 pushw y
+ 00014A 1E 0F [ 2] 246 ldw x, (0x0f, sp)
+ 00014C 89 [ 2] 247 pushw x
+ 00014D 1E 0F [ 2] 248 ldw x, (0x0f, sp)
+ 00014F 89 [ 2] 249 pushw x
+ 000150 8Ds00r00r00 [ 5] 250 callf ___fsdiv
+ 000154 5B 08 [ 2] 251 addw sp, #8
+ 000156 89 [ 2] 252 pushw x
+ 000157 90 89 [ 2] 253 pushw y
+ 000159 1E 07 [ 2] 254 ldw x, (0x07, sp)
+ 00015B 89 [ 2] 255 pushw x
+ 00015C 1E 07 [ 2] 256 ldw x, (0x07, sp)
+ 00015E 89 [ 2] 257 pushw x
+ 00015F 8Ds00r00r00 [ 5] 258 callf ___fsmul
+ 000163 5B 08 [ 2] 259 addw sp, #8
+ 000165 89 [ 2] 260 pushw x
+ 000166 90 89 [ 2] 261 pushw y
+ 000168 1E 07 [ 2] 262 ldw x, (0x07, sp)
+ 00016A 89 [ 2] 263 pushw x
+ 00016B 1E 07 [ 2] 264 ldw x, (0x07, sp)
+ 00016D 89 [ 2] 265 pushw x
+ 00016E 8Ds00r00r00 [ 5] 266 callf ___fsadd
+ 000172 5B 08 [ 2] 267 addw sp, #8
+ 000174 1F 0F [ 2] 268 ldw (0x0f, sp), x
+ 000176 17 0D [ 2] 269 ldw (0x0d, sp), y
+ 000178 270 00108$:
+ 271 ; ../asincosf.c: 82: i = quartPI;
+ 000178 7B 11 [ 1] 272 ld a, (0x11, sp)
+ 273 ; ../asincosf.c: 85: if (x < 0.0)
+ 00017A 88 [ 1] 274 push a
+ 00017B 5F [ 1] 275 clrw x
+ 00017C 89 [ 2] 276 pushw x
+ 00017D 5F [ 1] 277 clrw x
+ 00017E 89 [ 2] 278 pushw x
+ 00017F 1E 1C [ 2] 279 ldw x, (0x1c, sp)
+ 000181 89 [ 2] 280 pushw x
+ 000182 1E 1C [ 2] 281 ldw x, (0x1c, sp)
+ 000184 89 [ 2] 282 pushw x
+ 283 ; ../asincosf.c: 86: r = (b[i] + r) + b[i];
+ 000185 8Ds00r00r00 [ 5] 284 callf ___fslt
+ 000189 5B 08 [ 2] 285 addw sp, #8
+ 00018B 6B 12 [ 1] 286 ld (0x12, sp), a
+ 00018D 84 [ 1] 287 pop a
+ 00018E 41 [ 1] 288 exg a, xl
+ 00018F A6 04 [ 1] 289 ld a, #0x04
+ 000191 41 [ 1] 290 exg a, xl
+ 000192 42 [ 4] 291 mul x, a
+ 000193 1F 0B [ 2] 292 ldw (0x0b, sp), x
+ 293 ; ../asincosf.c: 83: if (isacos)
+ 000195 0D 19 [ 1] 294 tnz (0x19, sp)
+ 000197 26 04 [ 1] 295 jrne 00152$
+ 000199 ACs00r02r2F [ 2] 296 jpf 00115$
+ 00019D 297 00152$:
+ 298 ; ../asincosf.c: 85: if (x < 0.0)
+ 00019D 0D 11 [ 1] 299 tnz (0x11, sp)
+ 00019F 27 48 [ 1] 300 jreq 00110$
+ 301 ; ../asincosf.c: 86: r = (b[i] + r) + b[i];
+ 0001A1 1E 0B [ 2] 302 ldw x, (0x0b, sp)
+ 0001A3 1Cr00r08 [ 2] 303 addw x, #(_asincosf_b_65536_26 + 0)
+ 0001A6 4F [ 1] 304 clr a
+ 0001A7 A9s00 [ 1] 305 adc a, #((_asincosf_b_65536_26 + 0) >> 16)
+ 0001A9 90 93 [ 1] 306 ldw y, x
+ 0001AB 90 EE 02 [ 2] 307 ldw y, (0x2, y)
+ 0001AE 17 0B [ 2] 308 ldw (0x0b, sp), y
+ 0001B0 FE [ 2] 309 ldw x, (x)
+ 0001B1 1F 09 [ 2] 310 ldw (0x09, sp), x
+ 0001B3 90 89 [ 2] 311 pushw y
+ 0001B5 1E 11 [ 2] 312 ldw x, (0x11, sp)
+ 0001B7 89 [ 2] 313 pushw x
+ 0001B8 1E 11 [ 2] 314 ldw x, (0x11, sp)
+ 0001BA 89 [ 2] 315 pushw x
+ 0001BB 1E 11 [ 2] 316 ldw x, (0x11, sp)
+ 0001BD 89 [ 2] 317 pushw x
+ 0001BE 1E 11 [ 2] 318 ldw x, (0x11, sp)
+ 0001C0 89 [ 2] 319 pushw x
+ 0001C1 8Ds00r00r00 [ 5] 320 callf ___fsadd
+ 0001C5 5B 08 [ 2] 321 addw sp, #8
+ 0001C7 1F 12 [ 2] 322 ldw (0x12, sp), x
+ 0001C9 17 10 [ 2] 323 ldw (0x10, sp), y
+ 0001CB 90 85 [ 2] 324 popw y
+ 0001CD 16 0B [ 2] 325 ldw y, (0x0b, sp)
+ 0001CF 90 89 [ 2] 326 pushw y
+ 0001D1 16 0B [ 2] 327 ldw y, (0x0b, sp)
+ 0001D3 90 89 [ 2] 328 pushw y
+ 0001D5 1E 14 [ 2] 329 ldw x, (0x14, sp)
+ 0001D7 89 [ 2] 330 pushw x
+ 0001D8 1E 14 [ 2] 331 ldw x, (0x14, sp)
+ 0001DA 89 [ 2] 332 pushw x
+ 0001DB 8Ds00r00r00 [ 5] 333 callf ___fsadd
+ 0001DF 5B 08 [ 2] 334 addw sp, #8
+ 0001E1 1F 0F [ 2] 335 ldw (0x0f, sp), x
+ 0001E3 17 0D [ 2] 336 ldw (0x0d, sp), y
+ 0001E5 ACs00r02r8D [ 2] 337 jpf 00116$
+ 0001E9 338 00110$:
+ 339 ; ../asincosf.c: 88: r = (a[i] - r) + a[i];
+ 0001E9 1E 0B [ 2] 340 ldw x, (0x0b, sp)
+ 0001EB 1Cr00r00 [ 2] 341 addw x, #(_asincosf_a_65536_26 + 0)
+ 0001EE 4F [ 1] 342 clr a
+ 0001EF A9s00 [ 1] 343 adc a, #((_asincosf_a_65536_26 + 0) >> 16)
+ 0001F1 90 93 [ 1] 344 ldw y, x
+ 0001F3 90 EE 02 [ 2] 345 ldw y, (0x2, y)
+ 0001F6 17 0B [ 2] 346 ldw (0x0b, sp), y
+ 0001F8 FE [ 2] 347 ldw x, (x)
+ 0001F9 1F 09 [ 2] 348 ldw (0x09, sp), x
+ 0001FB 90 89 [ 2] 349 pushw y
+ 0001FD 1E 11 [ 2] 350 ldw x, (0x11, sp)
+ 0001FF 89 [ 2] 351 pushw x
+ 000200 1E 11 [ 2] 352 ldw x, (0x11, sp)
+ 000202 89 [ 2] 353 pushw x
+ 000203 1E 11 [ 2] 354 ldw x, (0x11, sp)
+ 000205 89 [ 2] 355 pushw x
+ 000206 1E 11 [ 2] 356 ldw x, (0x11, sp)
+ 000208 89 [ 2] 357 pushw x
+ 000209 8Ds00r00r00 [ 5] 358 callf ___fssub
+ 00020D 5B 08 [ 2] 359 addw sp, #8
+ 00020F 1F 12 [ 2] 360 ldw (0x12, sp), x
+ 000211 17 10 [ 2] 361 ldw (0x10, sp), y
+ 000213 90 85 [ 2] 362 popw y
+ 000215 16 0B [ 2] 363 ldw y, (0x0b, sp)
+ 000217 90 89 [ 2] 364 pushw y
+ 000219 16 0B [ 2] 365 ldw y, (0x0b, sp)
+ 00021B 90 89 [ 2] 366 pushw y
+ 00021D 1E 14 [ 2] 367 ldw x, (0x14, sp)
+ 00021F 89 [ 2] 368 pushw x
+ 000220 1E 14 [ 2] 369 ldw x, (0x14, sp)
+ 000222 89 [ 2] 370 pushw x
+ 000223 8Ds00r00r00 [ 5] 371 callf ___fsadd
+ 000227 5B 08 [ 2] 372 addw sp, #8
+ 000229 1F 0F [ 2] 373 ldw (0x0f, sp), x
+ 00022B 17 0D [ 2] 374 ldw (0x0d, sp), y
+ 00022D 20 5E [ 2] 375 jra 00116$
+ 00022F 376 00115$:
+ 377 ; ../asincosf.c: 92: r = (a[i] + r) + a[i];
+ 00022F 1E 0B [ 2] 378 ldw x, (0x0b, sp)
+ 000231 1Cr00r00 [ 2] 379 addw x, #(_asincosf_a_65536_26 + 0)
+ 000234 4F [ 1] 380 clr a
+ 000235 A9s00 [ 1] 381 adc a, #((_asincosf_a_65536_26 + 0) >> 16)
+ 000237 90 93 [ 1] 382 ldw y, x
+ 000239 90 EE 02 [ 2] 383 ldw y, (0x2, y)
+ 00023C 17 0B [ 2] 384 ldw (0x0b, sp), y
+ 00023E FE [ 2] 385 ldw x, (x)
+ 00023F 1F 09 [ 2] 386 ldw (0x09, sp), x
+ 000241 90 89 [ 2] 387 pushw y
+ 000243 1E 11 [ 2] 388 ldw x, (0x11, sp)
+ 000245 89 [ 2] 389 pushw x
+ 000246 1E 11 [ 2] 390 ldw x, (0x11, sp)
+ 000248 89 [ 2] 391 pushw x
+ 000249 1E 11 [ 2] 392 ldw x, (0x11, sp)
+ 00024B 89 [ 2] 393 pushw x
+ 00024C 1E 11 [ 2] 394 ldw x, (0x11, sp)
+ 00024E 89 [ 2] 395 pushw x
+ 00024F 8Ds00r00r00 [ 5] 396 callf ___fsadd
+ 000253 5B 08 [ 2] 397 addw sp, #8
+ 000255 1F 11 [ 2] 398 ldw (0x11, sp), x
+ 000257 17 0F [ 2] 399 ldw (0x0f, sp), y
+ 000259 90 85 [ 2] 400 popw y
+ 00025B 16 0B [ 2] 401 ldw y, (0x0b, sp)
+ 00025D 90 89 [ 2] 402 pushw y
+ 00025F 16 0B [ 2] 403 ldw y, (0x0b, sp)
+ 000261 90 89 [ 2] 404 pushw y
+ 000263 1E 13 [ 2] 405 ldw x, (0x13, sp)
+ 000265 89 [ 2] 406 pushw x
+ 000266 1E 13 [ 2] 407 ldw x, (0x13, sp)
+ 000268 89 [ 2] 408 pushw x
+ 000269 8Ds00r00r00 [ 5] 409 callf ___fsadd
+ 00026D 5B 08 [ 2] 410 addw sp, #8
+ 00026F 1F 0F [ 2] 411 ldw (0x0f, sp), x
+ 000271 17 0D [ 2] 412 ldw (0x0d, sp), y
+ 413 ; ../asincosf.c: 93: if (x < 0.0)
+ 000273 0D 11 [ 1] 414 tnz (0x11, sp)
+ 000275 27 16 [ 1] 415 jreq 00116$
+ 416 ; ../asincosf.c: 94: r = -r;
+ 000277 16 0F [ 2] 417 ldw y, (0x0f, sp)
+ 000279 17 0A [ 2] 418 ldw (0x0a, sp), y
+ 00027B 7B 0E [ 1] 419 ld a, (0x0e, sp)
+ 00027D 6B 09 [ 1] 420 ld (0x09, sp), a
+ 00027F 7B 0D [ 1] 421 ld a, (0x0d, sp)
+ 000281 A8 80 [ 1] 422 xor a, #0x80
+ 000283 6B 0D [ 1] 423 ld (0x0d, sp), a
+ 000285 16 0A [ 2] 424 ldw y, (0x0a, sp)
+ 000287 17 0F [ 2] 425 ldw (0x0f, sp), y
+ 000289 7B 09 [ 1] 426 ld a, (0x09, sp)
+ 00028B 6B 0E [ 1] 427 ld (0x0e, sp), a
+ 00028D 428 00116$:
+ 429 ; ../asincosf.c: 96: return r;
+ 00028D 1E 0F [ 2] 430 ldw x, (0x0f, sp)
+ 00028F 16 0D [ 2] 431 ldw y, (0x0d, sp)
+ 000291 432 00117$:
+ 433 ; ../asincosf.c: 97: }
+ 000291 5B 11 [ 2] 434 addw sp, #17
+ 000293 87 [ 5] 435 retf
+ 436 .area CODE
+ 437 .area CONST
+ 000000 438 _asincosf_a_65536_26:
+ 000000 00 00 00 00 439 .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00
+ 000004 3F 49 0F DB 440 .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01
+ 000008 441 _asincosf_b_65536_26:
+ 000008 3F C9 0F DB 442 .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00
+ 00000C 3F 49 0F DB 443 .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01
+ 444 .area INITIALIZER
+ 445 .area CABS (ABS)
diff --git a/device/lib/stm8-large/asincosf.rel b/device/lib/stm8-large/asincosf.rel
new file mode 100644
index 0000000..c37ed67
--- /dev/null
+++ b/device/lib/stm8-large/asincosf.rel
@@ -0,0 +1,176 @@
+XH3
+H B areas B global symbols
+M asincosf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _errno Ref000000
+S _sqrtf Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _fabsf Ref000000
+S _ldexpf Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 10 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 294 flags 0 addr 0
+S _asincosf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 7B 19 6B 11 1E 17 89 1E 17 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 04 1F 03 17 01 5F 89 4B 80
+R 00 00 00 09 82 03 00 07
+T 00 00 1A 4B 39 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 23 00 00 00 5B 08 6B 10 27 0C 16 03 17 0F
+R 00 00 00 09 82 03 00 04
+T 00 00 30 16 01 17 0D AC 00 01 78
+R 00 00 00 09 80 08 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 1E 03 89 1E 03 89 5F 89 4B 00 4B 3F 8D
+R 00 00 00 09
+T 00 00 45 00 00 00 5B 08 4D 27 70 7B 11 A0 01 4F
+R 00 00 00 09 82 03 00 04
+T 00 00 52 49 6B 11 1E 03 89 1E 03 89 5F 89 4B 80
+R 00 00 00 09
+T 00 00 5F 4B 3F 8D 00 00 00 5B 08 4D 27 0D AE
+R 00 00 00 09 82 06 00 04
+T 00 00 6B 00 21 CF 00 00 5F 90 5F AC
+R 00 00 00 09 12 06 00 02
+T 00 00 74 00 02 91
+R 00 00 00 09 80 03 00 09
+T 00 00 77
+R 00 00 00 09
+T 00 00 77 1E 03 89 1E 03 89 5F 89 4B 80 4B 3F 8D
+R 00 00 00 09
+T 00 00 84 00 00 00 5B 08 4B FF 4B FF 89 90 89 8D
+R 00 00 00 09 82 03 00 00
+T 00 00 91 00 00 00 5B 06 1F 07 17 05 1E 07 89 1E
+R 00 00 00 09 82 03 00 08
+T 00 00 9E 07 89 8D 00 00 00 5B 04 89 90 89 89 90
+R 00 00 00 09 82 06 00 03
+T 00 00 AB 89 8D 00 00 00 5B 08 90 58 8C 90 56 1F
+R 00 00 00 09 82 05 00 06
+T 00 00 B8 03 17 01 20 16
+R 00 00 00 09
+T 00 00 BD
+R 00 00 00 09
+T 00 00 BD 1E 03 89 1E 03 89 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 CA 00 00 00 5B 08 1F 07 17 05
+R 00 00 00 09 82 03 00 01
+T 00 00 D3
+R 00 00 00 09
+T 00 00 D3 1E 07 89 1E 07 89 4B 65 4B 20 4B 01 4B
+R 00 00 00 09
+T 00 00 E0 BF 8D 00 00 00 5B 08 4B 6B 4B 16 4B 6F
+R 00 00 00 09 82 05 00 01
+T 00 00 ED 4B 3F 89 90 89 8D 00 00 00 5B 08 1F 0F
+R 00 00 00 09 82 09 00 06
+T 00 00 FA 1E 07 89 1E 07 89 1E 13 89 90 89 8D
+R 00 00 00 09
+T 00 01 06 00 00 00 5B 08 1F 0B 17 09 4B 0B 4B 8D
+R 00 00 00 09 82 03 00 01
+T 00 01 13 4B B1 4B C0 1E 0B 89 1E 0B 89 8D
+R 00 00 00 09
+T 00 01 1E 00 00 00 5B 08 1F 0F 1E 07 89 1E 07 89
+R 00 00 00 09 82 03 00 06
+T 00 01 2B 1E 13 89 90 89 8D 00 00 00 5B 08 4B F0
+R 00 00 00 09 82 09 00 01
+T 00 01 38 4B 50 4B B3 4B 40 89 90 89 8D
+R 00 00 00 09
+T 00 01 42 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F
+R 00 00 00 09 82 03 00 06
+T 00 01 4F 89 8D 00 00 00 5B 08 89 90 89 1E 07 89
+R 00 00 00 09 82 05 00 09
+T 00 01 5C 1E 07 89 8D 00 00 00 5B 08 89 90 89 1E
+R 00 00 00 09 82 07 00 01
+T 00 01 69 07 89 1E 07 89 8D 00 00 00 5B 08 1F 0F
+R 00 00 00 09 82 09 00 06
+T 00 01 76 17 0D
+R 00 00 00 09
+T 00 01 78
+R 00 00 00 09
+T 00 01 78 7B 11 88 5F 89 5F 89 1E 1C 89 1E 1C 89
+R 00 00 00 09
+T 00 01 85 8D 00 00 00 5B 08 6B 12 84 41 A6 04 41
+R 00 00 00 09 82 04 00 04
+T 00 01 92 42 1F 0B 0D 19 26 04 AC
+R 00 00 00 09
+T 00 01 9A 00 02 2F
+R 00 00 00 09 80 03 00 09
+T 00 01 9D
+R 00 00 00 09
+T 00 01 9D 0D 11 27 48 1E 0B 1C 00 08 4F A9
+R 00 00 00 09 00 0A 00 07
+T 00 01 A8 00 00 08 90 93 90 EE 02 17 0B FE 1F 09
+R 00 00 00 09 F3 01 03 00 07
+T 00 01 B3 90 89 1E 11 89 1E 11 89 1E 11 89 1E 11
+R 00 00 00 09
+T 00 01 C0 89 8D 00 00 00 5B 08 1F 12 17 10 90 85
+R 00 00 00 09 82 05 00 06
+T 00 01 CD 16 0B 90 89 16 0B 90 89 1E 14 89 1E 14
+R 00 00 00 09
+T 00 01 DA 89 8D 00 00 00 5B 08 1F 0F 17 0D AC
+R 00 00 00 09 82 05 00 06
+T 00 01 E6 00 02 8D
+R 00 00 00 09 80 03 00 09
+T 00 01 E9
+R 00 00 00 09
+T 00 01 E9 1E 0B 1C 00 00 4F A9 00 00 00 90 93 90
+R 00 00 00 09 00 06 00 07 F3 01 0A 00 07
+T 00 01 F4 EE 02 17 0B FE 1F 09 90 89 1E 11 89 1E
+R 00 00 00 09
+T 00 02 01 11 89 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 02 0A 00 00 00 5B 08 1F 12 17 10 90 85 16 0B
+R 00 00 00 09 82 03 00 00
+T 00 02 17 90 89 16 0B 90 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 02 24 00 00 00 5B 08 1F 0F 17 0D 20 5E
+R 00 00 00 09 82 03 00 06
+T 00 02 2F
+R 00 00 00 09
+T 00 02 2F 1E 0B 1C 00 00 4F A9 00 00 00 90 93 90
+R 00 00 00 09 00 06 00 07 F3 01 0A 00 07
+T 00 02 3A EE 02 17 0B FE 1F 09 90 89 1E 11 89 1E
+R 00 00 00 09
+T 00 02 47 11 89 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 02 50 00 00 00 5B 08 1F 11 17 0F 90 85 16 0B
+R 00 00 00 09 82 03 00 06
+T 00 02 5D 90 89 16 0B 90 89 1E 13 89 1E 13 89 8D
+R 00 00 00 09
+T 00 02 6A 00 00 00 5B 08 1F 0F 17 0D 0D 11 27 16
+R 00 00 00 09 82 03 00 06
+T 00 02 77 16 0F 17 0A 7B 0E 6B 09 7B 0D A8 80 6B
+R 00 00 00 09
+T 00 02 84 0D 16 0A 17 0F 7B 09 6B 0E
+R 00 00 00 09
+T 00 02 8D
+R 00 00 00 09
+T 00 02 8D 1E 0F 16 0D
+R 00 00 00 09
+T 00 02 91
+R 00 00 00 09
+T 00 02 91 5B 11 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 00 00 00 00 3F 49 0F DB
+R 00 00 00 07
+T 00 00 08
+R 00 00 00 07
+T 00 00 08 3F C9 0F DB 3F 49 0F DB
+R 00 00 00 07
diff --git a/device/lib/stm8-large/asincosf.sym b/device/lib/stm8-large/asincosf.sym
new file mode 100644
index 0000000..d4fb243
--- /dev/null
+++ b/device/lib/stm8-large/asincosf.sym
@@ -0,0 +1,40 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ 9 _asincosf 000000 GR
+ 7 _asincosf_a_65536_26 000000 R
+ 7 _asincosf_b_65536_26 000008 R
+ _errno ****** GX
+ _fabsf ****** GX
+ _ldexpf ****** GX
+ _sqrtf ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 10 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 294 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/asinf.asm b/device/lib/stm8-large/asinf.asm
new file mode 100644
index 0000000..d8e4682
--- /dev/null
+++ b/device/lib/stm8-large/asinf.asm
@@ -0,0 +1,113 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module asinf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _asincosf
+ .globl _asinf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../asinf.c: 36: float asinf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function asinf
+; -----------------------------------------
+_asinf:
+; ../asinf.c: 38: if (x == 1.0) return HALF_PI;
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fseq
+ addw sp, #8
+ tnz a
+ jreq 00108$
+ ldw x, #0x0fdb
+ ldw y, #0x3fc9
+ jra 00110$
+00108$:
+; ../asinf.c: 39: else if (x ==-1.0) return -HALF_PI;
+ clrw x
+ pushw x
+ push #0x80
+ push #0xbf
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fseq
+ addw sp, #8
+ tnz a
+ jreq 00105$
+ ldw x, #0x0fdb
+ ldw y, #0xbfc9
+ jra 00110$
+00105$:
+; ../asinf.c: 40: else if (x == 0.0) return 0.0;
+ ldw x, (0x06, sp)
+ jrne 00102$
+ ldw x, (0x04, sp)
+ sllw x
+ jrne 00102$
+ clrw x
+ clrw y
+ jra 00110$
+00102$:
+; ../asinf.c: 41: else return asincosf(x, false);
+ push #0x00
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _asincosf
+ addw sp, #5
+00110$:
+; ../asinf.c: 42: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/asinf.lst b/device/lib/stm8-large/asinf.lst
new file mode 100644
index 0000000..aa3d0eb
--- /dev/null
+++ b/device/lib/stm8-large/asinf.lst
@@ -0,0 +1,113 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module asinf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _asincosf
+ 12 .globl _asinf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../asinf.c: 36: float asinf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function asinf
+ 53 ; -----------------------------------------
+ 000000 54 _asinf:
+ 55 ; ../asinf.c: 38: if (x == 1.0) return HALF_PI;
+ 000000 5F [ 1] 56 clrw x
+ 000001 89 [ 2] 57 pushw x
+ 000002 4B 80 [ 1] 58 push #0x80
+ 000004 4B 3F [ 1] 59 push #0x3f
+ 000006 1E 0A [ 2] 60 ldw x, (0x0a, sp)
+ 000008 89 [ 2] 61 pushw x
+ 000009 1E 0A [ 2] 62 ldw x, (0x0a, sp)
+ 00000B 89 [ 2] 63 pushw x
+ 00000C 8Ds00r00r00 [ 5] 64 callf ___fseq
+ 000010 5B 08 [ 2] 65 addw sp, #8
+ 000012 4D [ 1] 66 tnz a
+ 000013 27 09 [ 1] 67 jreq 00108$
+ 000015 AE 0F DB [ 2] 68 ldw x, #0x0fdb
+ 000018 90 AE 3F C9 [ 2] 69 ldw y, #0x3fc9
+ 00001C 20 3A [ 2] 70 jra 00110$
+ 00001E 71 00108$:
+ 72 ; ../asinf.c: 39: else if (x ==-1.0) return -HALF_PI;
+ 00001E 5F [ 1] 73 clrw x
+ 00001F 89 [ 2] 74 pushw x
+ 000020 4B 80 [ 1] 75 push #0x80
+ 000022 4B BF [ 1] 76 push #0xbf
+ 000024 1E 0A [ 2] 77 ldw x, (0x0a, sp)
+ 000026 89 [ 2] 78 pushw x
+ 000027 1E 0A [ 2] 79 ldw x, (0x0a, sp)
+ 000029 89 [ 2] 80 pushw x
+ 00002A 8Ds00r00r00 [ 5] 81 callf ___fseq
+ 00002E 5B 08 [ 2] 82 addw sp, #8
+ 000030 4D [ 1] 83 tnz a
+ 000031 27 09 [ 1] 84 jreq 00105$
+ 000033 AE 0F DB [ 2] 85 ldw x, #0x0fdb
+ 000036 90 AE BF C9 [ 2] 86 ldw y, #0xbfc9
+ 00003A 20 1C [ 2] 87 jra 00110$
+ 00003C 88 00105$:
+ 89 ; ../asinf.c: 40: else if (x == 0.0) return 0.0;
+ 00003C 1E 06 [ 2] 90 ldw x, (0x06, sp)
+ 00003E 26 0A [ 1] 91 jrne 00102$
+ 000040 1E 04 [ 2] 92 ldw x, (0x04, sp)
+ 000042 58 [ 2] 93 sllw x
+ 000043 26 05 [ 1] 94 jrne 00102$
+ 000045 5F [ 1] 95 clrw x
+ 000046 90 5F [ 1] 96 clrw y
+ 000048 20 0E [ 2] 97 jra 00110$
+ 00004A 98 00102$:
+ 99 ; ../asinf.c: 41: else return asincosf(x, false);
+ 00004A 4B 00 [ 1] 100 push #0x00
+ 00004C 1E 07 [ 2] 101 ldw x, (0x07, sp)
+ 00004E 89 [ 2] 102 pushw x
+ 00004F 1E 07 [ 2] 103 ldw x, (0x07, sp)
+ 000051 89 [ 2] 104 pushw x
+ 000052 8Ds00r00r00 [ 5] 105 callf _asincosf
+ 000056 5B 05 [ 2] 106 addw sp, #5
+ 000058 107 00110$:
+ 108 ; ../asinf.c: 42: }
+ 000058 87 [ 5] 109 retf
+ 110 .area CODE
+ 111 .area CONST
+ 112 .area INITIALIZER
+ 113 .area CABS (ABS)
diff --git a/device/lib/stm8-large/asinf.rel b/device/lib/stm8-large/asinf.rel
new file mode 100644
index 0000000..3822b74
--- /dev/null
+++ b/device/lib/stm8-large/asinf.rel
@@ -0,0 +1,51 @@
+XH3
+H B areas 4 global symbols
+M asinf
+O -mstm8
+S ___fseq Ref000000
+S .__.ABS. Def000000
+S _asincosf Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 59 flags 0 addr 0
+S _asinf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 5F 89 4B 80 4B 3F 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 08 4D 27 09 AE 0F DB 90 AE
+R 00 00 00 09 82 03 00 00
+T 00 00 1A 3F C9 20 3A
+R 00 00 00 09
+T 00 00 1E
+R 00 00 00 09
+T 00 00 1E 5F 89 4B 80 4B BF 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 00 2B 00 00 00 5B 08 4D 27 09 AE 0F DB 90 AE
+R 00 00 00 09 82 03 00 00
+T 00 00 38 BF C9 20 1C
+R 00 00 00 09
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 1E 06 26 0A 1E 04 58 26 05 5F 90 5F 20
+R 00 00 00 09
+T 00 00 49 0E
+R 00 00 00 09
+T 00 00 4A
+R 00 00 00 09
+T 00 00 4A 4B 00 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 53 00 00 00 5B 05
+R 00 00 00 09 82 03 00 02
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/asinf.sym b/device/lib/stm8-large/asinf.sym
new file mode 100644
index 0000000..1ac49ed
--- /dev/null
+++ b/device/lib/stm8-large/asinf.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fseq ****** GX
+ _asincosf ****** GX
+ 9 _asinf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 59 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/atan2f.asm b/device/lib/stm8-large/atan2f.asm
new file mode 100644
index 0000000..0cfdee3
--- /dev/null
+++ b/device/lib/stm8-large/atan2f.asm
@@ -0,0 +1,236 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module atan2f
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _fabsf
+ .globl _atanf
+ .globl _atan2f
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../atan2f.c: 34: float atan2f(float x, float y)
+; -----------------------------------------
+; function atan2f
+; -----------------------------------------
+_atan2f:
+ sub sp, #10
+; ../atan2f.c: 38: if ((x==0.0) && (y==0.0))
+ ldw x, (0x10, sp)
+ jrne 00102$
+ ldw x, (0x0e, sp)
+ sllw x
+ jrne 00102$
+ ldw x, (0x14, sp)
+ jrne 00102$
+ ldw x, (0x12, sp)
+ sllw x
+ jrne 00102$
+; ../atan2f.c: 40: errno=EDOM;
+ ldw x, #0x0021
+ ldw _errno+0, x
+; ../atan2f.c: 41: return 0.0;
+ clrw x
+ clrw y
+ jpf 00109$
+00102$:
+; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x))
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ ldw (0x04, sp), x
+ ldw (0x02, sp), y
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI);
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x))
+ callf ___fslt
+ addw sp, #8
+ ld (0x0a, sp), a
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ ld (0x09, sp), a
+ jrne 00107$
+; ../atan2f.c: 46: r=atanf(x/y);
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ callf _atanf
+ addw sp, #4
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI);
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jrne 00150$
+ jpf 00108$
+00150$:
+ tnz (0x0a, sp)
+ jrne 00111$
+ ldw x, #0x0fdb
+ ldw (0x04, sp), x
+ ldw x, #0x4049
+ ldw (0x02, sp), x
+ jra 00112$
+00111$:
+ ldw x, #0x0fdb
+ ldw (0x04, sp), x
+ ldw x, #0xc049
+ ldw (0x02, sp), x
+00112$:
+ ldw x, (0x04, sp)
+ pushw x
+ ldw x, (0x04, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x08, sp), x
+ ldw (0x06, sp), y
+ jra 00108$
+00107$:
+; ../atan2f.c: 51: r=-atanf(y/x);
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ callf _atanf
+ addw sp, #4
+ exgw x, y
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+; ../atan2f.c: 52: r+=(x<0.0?-HALF_PI:HALF_PI);
+ ld a, (0x0a, sp)
+ jreq 00113$
+ ldw x, #0x0fdb
+ ldw (0x04, sp), x
+ ldw x, #0xbfc9
+ jra 00114$
+00113$:
+ ldw x, #0x0fdb
+ ldw (0x04, sp), x
+ ldw x, #0x3fc9
+00114$:
+ ldw y, (0x04, sp)
+ pushw y
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x08, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x06, sp), y
+00108$:
+; ../atan2f.c: 54: return r;
+ ldw x, (0x08, sp)
+ ldw y, (0x06, sp)
+00109$:
+; ../atan2f.c: 55: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/atan2f.lst b/device/lib/stm8-large/atan2f.lst
new file mode 100644
index 0000000..9a4c5ab
--- /dev/null
+++ b/device/lib/stm8-large/atan2f.lst
@@ -0,0 +1,236 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module atan2f
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _fabsf
+ 12 .globl _atanf
+ 13 .globl _atan2f
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../atan2f.c: 34: float atan2f(float x, float y)
+ 52 ; -----------------------------------------
+ 53 ; function atan2f
+ 54 ; -----------------------------------------
+ 000000 55 _atan2f:
+ 000000 52 0A [ 2] 56 sub sp, #10
+ 57 ; ../atan2f.c: 38: if ((x==0.0) && (y==0.0))
+ 000002 1E 10 [ 2] 58 ldw x, (0x10, sp)
+ 000004 26 1B [ 1] 59 jrne 00102$
+ 000006 1E 0E [ 2] 60 ldw x, (0x0e, sp)
+ 000008 58 [ 2] 61 sllw x
+ 000009 26 16 [ 1] 62 jrne 00102$
+ 00000B 1E 14 [ 2] 63 ldw x, (0x14, sp)
+ 00000D 26 12 [ 1] 64 jrne 00102$
+ 00000F 1E 12 [ 2] 65 ldw x, (0x12, sp)
+ 000011 58 [ 2] 66 sllw x
+ 000012 26 0D [ 1] 67 jrne 00102$
+ 68 ; ../atan2f.c: 40: errno=EDOM;
+ 000014 AE 00 21 [ 2] 69 ldw x, #0x0021
+ 000017 CFu00u00 [ 2] 70 ldw _errno+0, x
+ 71 ; ../atan2f.c: 41: return 0.0;
+ 00001A 5F [ 1] 72 clrw x
+ 00001B 90 5F [ 1] 73 clrw y
+ 00001D ACs00r01r2B [ 2] 74 jpf 00109$
+ 000021 75 00102$:
+ 76 ; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x))
+ 000021 1E 14 [ 2] 77 ldw x, (0x14, sp)
+ 000023 89 [ 2] 78 pushw x
+ 000024 1E 14 [ 2] 79 ldw x, (0x14, sp)
+ 000026 89 [ 2] 80 pushw x
+ 000027 8Ds00r00r00 [ 5] 81 callf _fabsf
+ 00002B 5B 04 [ 2] 82 addw sp, #4
+ 00002D 1F 04 [ 2] 83 ldw (0x04, sp), x
+ 00002F 17 02 [ 2] 84 ldw (0x02, sp), y
+ 000031 1E 10 [ 2] 85 ldw x, (0x10, sp)
+ 000033 89 [ 2] 86 pushw x
+ 000034 1E 10 [ 2] 87 ldw x, (0x10, sp)
+ 000036 89 [ 2] 88 pushw x
+ 000037 8Ds00r00r00 [ 5] 89 callf _fabsf
+ 00003B 5B 04 [ 2] 90 addw sp, #4
+ 00003D 1F 08 [ 2] 91 ldw (0x08, sp), x
+ 00003F 17 06 [ 2] 92 ldw (0x06, sp), y
+ 93 ; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI);
+ 000041 5F [ 1] 94 clrw x
+ 000042 89 [ 2] 95 pushw x
+ 000043 5F [ 1] 96 clrw x
+ 000044 89 [ 2] 97 pushw x
+ 000045 1E 14 [ 2] 98 ldw x, (0x14, sp)
+ 000047 89 [ 2] 99 pushw x
+ 000048 1E 14 [ 2] 100 ldw x, (0x14, sp)
+ 00004A 89 [ 2] 101 pushw x
+ 102 ; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x))
+ 00004B 8Ds00r00r00 [ 5] 103 callf ___fslt
+ 00004F 5B 08 [ 2] 104 addw sp, #8
+ 000051 6B 0A [ 1] 105 ld (0x0a, sp), a
+ 000053 1E 08 [ 2] 106 ldw x, (0x08, sp)
+ 000055 89 [ 2] 107 pushw x
+ 000056 1E 08 [ 2] 108 ldw x, (0x08, sp)
+ 000058 89 [ 2] 109 pushw x
+ 000059 1E 08 [ 2] 110 ldw x, (0x08, sp)
+ 00005B 89 [ 2] 111 pushw x
+ 00005C 1E 08 [ 2] 112 ldw x, (0x08, sp)
+ 00005E 89 [ 2] 113 pushw x
+ 00005F 8Ds00r00r00 [ 5] 114 callf ___fslt
+ 000063 5B 08 [ 2] 115 addw sp, #8
+ 000065 6B 09 [ 1] 116 ld (0x09, sp), a
+ 000067 26 68 [ 1] 117 jrne 00107$
+ 118 ; ../atan2f.c: 46: r=atanf(x/y);
+ 000069 1E 14 [ 2] 119 ldw x, (0x14, sp)
+ 00006B 89 [ 2] 120 pushw x
+ 00006C 1E 14 [ 2] 121 ldw x, (0x14, sp)
+ 00006E 89 [ 2] 122 pushw x
+ 00006F 1E 14 [ 2] 123 ldw x, (0x14, sp)
+ 000071 89 [ 2] 124 pushw x
+ 000072 1E 14 [ 2] 125 ldw x, (0x14, sp)
+ 000074 89 [ 2] 126 pushw x
+ 000075 8Ds00r00r00 [ 5] 127 callf ___fsdiv
+ 000079 5B 08 [ 2] 128 addw sp, #8
+ 00007B 89 [ 2] 129 pushw x
+ 00007C 90 89 [ 2] 130 pushw y
+ 00007E 8Ds00r00r00 [ 5] 131 callf _atanf
+ 000082 5B 04 [ 2] 132 addw sp, #4
+ 000084 1F 08 [ 2] 133 ldw (0x08, sp), x
+ 000086 17 06 [ 2] 134 ldw (0x06, sp), y
+ 135 ; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI);
+ 000088 5F [ 1] 136 clrw x
+ 000089 89 [ 2] 137 pushw x
+ 00008A 5F [ 1] 138 clrw x
+ 00008B 89 [ 2] 139 pushw x
+ 00008C 1E 18 [ 2] 140 ldw x, (0x18, sp)
+ 00008E 89 [ 2] 141 pushw x
+ 00008F 1E 18 [ 2] 142 ldw x, (0x18, sp)
+ 000091 89 [ 2] 143 pushw x
+ 000092 8Ds00r00r00 [ 5] 144 callf ___fslt
+ 000096 5B 08 [ 2] 145 addw sp, #8
+ 000098 4D [ 1] 146 tnz a
+ 000099 26 04 [ 1] 147 jrne 00150$
+ 00009B ACs00r01r27 [ 2] 148 jpf 00108$
+ 00009F 149 00150$:
+ 00009F 0D 0A [ 1] 150 tnz (0x0a, sp)
+ 0000A1 26 0C [ 1] 151 jrne 00111$
+ 0000A3 AE 0F DB [ 2] 152 ldw x, #0x0fdb
+ 0000A6 1F 04 [ 2] 153 ldw (0x04, sp), x
+ 0000A8 AE 40 49 [ 2] 154 ldw x, #0x4049
+ 0000AB 1F 02 [ 2] 155 ldw (0x02, sp), x
+ 0000AD 20 0A [ 2] 156 jra 00112$
+ 0000AF 157 00111$:
+ 0000AF AE 0F DB [ 2] 158 ldw x, #0x0fdb
+ 0000B2 1F 04 [ 2] 159 ldw (0x04, sp), x
+ 0000B4 AE C0 49 [ 2] 160 ldw x, #0xc049
+ 0000B7 1F 02 [ 2] 161 ldw (0x02, sp), x
+ 0000B9 162 00112$:
+ 0000B9 1E 04 [ 2] 163 ldw x, (0x04, sp)
+ 0000BB 89 [ 2] 164 pushw x
+ 0000BC 1E 04 [ 2] 165 ldw x, (0x04, sp)
+ 0000BE 89 [ 2] 166 pushw x
+ 0000BF 1E 0C [ 2] 167 ldw x, (0x0c, sp)
+ 0000C1 89 [ 2] 168 pushw x
+ 0000C2 1E 0C [ 2] 169 ldw x, (0x0c, sp)
+ 0000C4 89 [ 2] 170 pushw x
+ 0000C5 8Ds00r00r00 [ 5] 171 callf ___fsadd
+ 0000C9 5B 08 [ 2] 172 addw sp, #8
+ 0000CB 1F 08 [ 2] 173 ldw (0x08, sp), x
+ 0000CD 17 06 [ 2] 174 ldw (0x06, sp), y
+ 0000CF 20 56 [ 2] 175 jra 00108$
+ 0000D1 176 00107$:
+ 177 ; ../atan2f.c: 51: r=-atanf(y/x);
+ 0000D1 1E 10 [ 2] 178 ldw x, (0x10, sp)
+ 0000D3 89 [ 2] 179 pushw x
+ 0000D4 1E 10 [ 2] 180 ldw x, (0x10, sp)
+ 0000D6 89 [ 2] 181 pushw x
+ 0000D7 1E 18 [ 2] 182 ldw x, (0x18, sp)
+ 0000D9 89 [ 2] 183 pushw x
+ 0000DA 1E 18 [ 2] 184 ldw x, (0x18, sp)
+ 0000DC 89 [ 2] 185 pushw x
+ 0000DD 8Ds00r00r00 [ 5] 186 callf ___fsdiv
+ 0000E1 5B 08 [ 2] 187 addw sp, #8
+ 0000E3 89 [ 2] 188 pushw x
+ 0000E4 90 89 [ 2] 189 pushw y
+ 0000E6 8Ds00r00r00 [ 5] 190 callf _atanf
+ 0000EA 5B 04 [ 2] 191 addw sp, #4
+ 0000EC 51 [ 1] 192 exgw x, y
+ 0000ED 58 [ 2] 193 sllw x
+ 0000EE 8C [ 1] 194 ccf
+ 0000EF 56 [ 2] 195 rrcw x
+ 0000F0 17 08 [ 2] 196 ldw (0x08, sp), y
+ 0000F2 1F 06 [ 2] 197 ldw (0x06, sp), x
+ 198 ; ../atan2f.c: 52: r+=(x<0.0?-HALF_PI:HALF_PI);
+ 0000F4 7B 0A [ 1] 199 ld a, (0x0a, sp)
+ 0000F6 27 0A [ 1] 200 jreq 00113$
+ 0000F8 AE 0F DB [ 2] 201 ldw x, #0x0fdb
+ 0000FB 1F 04 [ 2] 202 ldw (0x04, sp), x
+ 0000FD AE BF C9 [ 2] 203 ldw x, #0xbfc9
+ 000100 20 08 [ 2] 204 jra 00114$
+ 000102 205 00113$:
+ 000102 AE 0F DB [ 2] 206 ldw x, #0x0fdb
+ 000105 1F 04 [ 2] 207 ldw (0x04, sp), x
+ 000107 AE 3F C9 [ 2] 208 ldw x, #0x3fc9
+ 00010A 209 00114$:
+ 00010A 16 04 [ 2] 210 ldw y, (0x04, sp)
+ 00010C 90 89 [ 2] 211 pushw y
+ 00010E 89 [ 2] 212 pushw x
+ 00010F 1E 0C [ 2] 213 ldw x, (0x0c, sp)
+ 000111 89 [ 2] 214 pushw x
+ 000112 1E 0C [ 2] 215 ldw x, (0x0c, sp)
+ 000114 89 [ 2] 216 pushw x
+ 000115 8Ds00r00r00 [ 5] 217 callf ___fsadd
+ 000119 5B 08 [ 2] 218 addw sp, #8
+ 00011B 1F 03 [ 2] 219 ldw (0x03, sp), x
+ 00011D 17 01 [ 2] 220 ldw (0x01, sp), y
+ 00011F 16 03 [ 2] 221 ldw y, (0x03, sp)
+ 000121 17 08 [ 2] 222 ldw (0x08, sp), y
+ 000123 16 01 [ 2] 223 ldw y, (0x01, sp)
+ 000125 17 06 [ 2] 224 ldw (0x06, sp), y
+ 000127 225 00108$:
+ 226 ; ../atan2f.c: 54: return r;
+ 000127 1E 08 [ 2] 227 ldw x, (0x08, sp)
+ 000129 16 06 [ 2] 228 ldw y, (0x06, sp)
+ 00012B 229 00109$:
+ 230 ; ../atan2f.c: 55: }
+ 00012B 5B 0A [ 2] 231 addw sp, #10
+ 00012D 87 [ 5] 232 retf
+ 233 .area CODE
+ 234 .area CONST
+ 235 .area INITIALIZER
+ 236 .area CABS (ABS)
diff --git a/device/lib/stm8-large/atan2f.rel b/device/lib/stm8-large/atan2f.rel
new file mode 100644
index 0000000..2704fe8
--- /dev/null
+++ b/device/lib/stm8-large/atan2f.rel
@@ -0,0 +1,103 @@
+XH3
+H B areas 8 global symbols
+M atan2f
+O -mstm8
+S _errno Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _fabsf Ref000000
+S _atanf Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 12E flags 0 addr 0
+S _atan2f Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 1E 10 26 1B 1E 0E 58 26 16 1E 14
+R 00 00 00 09
+T 00 00 0D 26 12 1E 12 58 26 0D AE 00 21 CF 00 00
+R 00 00 00 09 12 0E 00 00
+T 00 00 1A 5F 90 5F AC 00 01 2B
+R 00 00 00 09 80 07 00 09
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 1E 14 89 1E 14 89 8D 00 00 00 5B 04 1F
+R 00 00 00 09 82 0A 00 04
+T 00 00 2E 04 17 02 1E 10 89 1E 10 89 8D
+R 00 00 00 09
+T 00 00 38 00 00 00 5B 04 1F 08 17 06 5F 89 5F 89
+R 00 00 00 09 82 03 00 04
+T 00 00 45 1E 14 89 1E 14 89 8D 00 00 00 5B 08 6B
+R 00 00 00 09 82 0A 00 01
+T 00 00 52 0A 1E 08 89 1E 08 89 1E 08 89 1E 08 89
+R 00 00 00 09
+T 00 00 5F 8D 00 00 00 5B 08 6B 09 26 68 1E 14 89
+R 00 00 00 09 82 04 00 01
+T 00 00 6C 1E 14 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 76 00 00 00 5B 08 89 90 89 8D
+R 00 00 00 09 82 03 00 06
+T 00 00 7F 00 00 00 5B 04 1F 08 17 06 5F 89 5F 89
+R 00 00 00 09 82 03 00 05
+T 00 00 8C 1E 18 89 1E 18 89 8D 00 00 00 5B 08 4D
+R 00 00 00 09 82 0A 00 01
+T 00 00 99 26 04 AC 00 01 27
+R 00 00 00 09 80 06 00 09
+T 00 00 9F
+R 00 00 00 09
+T 00 00 9F 0D 0A 26 0C AE 0F DB 1F 04 AE 40 49 1F
+R 00 00 00 09
+T 00 00 AC 02 20 0A
+R 00 00 00 09
+T 00 00 AF
+R 00 00 00 09
+T 00 00 AF AE 0F DB 1F 04 AE C0 49 1F 02
+R 00 00 00 09
+T 00 00 B9
+R 00 00 00 09
+T 00 00 B9 1E 04 89 1E 04 89 1E 0C 89 1E 0C 89 8D
+R 00 00 00 09
+T 00 00 C6 00 00 00 5B 08 1F 08 17 06 20 56
+R 00 00 00 09 82 03 00 03
+T 00 00 D1
+R 00 00 00 09
+T 00 00 D1 1E 10 89 1E 10 89 1E 18 89 1E 18 89 8D
+R 00 00 00 09
+T 00 00 DE 00 00 00 5B 08 89 90 89 8D
+R 00 00 00 09 82 03 00 06
+T 00 00 E7 00 00 00 5B 04 51 58 8C 56 17 08 1F 06
+R 00 00 00 09 82 03 00 05
+T 00 00 F4 7B 0A 27 0A AE 0F DB 1F 04 AE BF C9 20
+R 00 00 00 09
+T 00 01 01 08
+R 00 00 00 09
+T 00 01 02
+R 00 00 00 09
+T 00 01 02 AE 0F DB 1F 04 AE 3F C9
+R 00 00 00 09
+T 00 01 0A
+R 00 00 00 09
+T 00 01 0A 16 04 90 89 89 1E 0C 89 1E 0C 89 8D
+R 00 00 00 09
+T 00 01 16 00 00 00 5B 08 1F 03 17 01 16 03 17 08
+R 00 00 00 09 82 03 00 03
+T 00 01 23 16 01 17 06
+R 00 00 00 09
+T 00 01 27
+R 00 00 00 09
+T 00 01 27 1E 08 16 06
+R 00 00 00 09
+T 00 01 2B
+R 00 00 00 09
+T 00 01 2B 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/atan2f.sym b/device/lib/stm8-large/atan2f.sym
new file mode 100644
index 0000000..4fc2a31
--- /dev/null
+++ b/device/lib/stm8-large/atan2f.sym
@@ -0,0 +1,35 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ 9 _atan2f 000000 GR
+ _atanf ****** GX
+ _errno ****** GX
+ _fabsf ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 12E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/atanf.asm b/device/lib/stm8-large/atanf.asm
new file mode 100644
index 0000000..3e7b8f9
--- /dev/null
+++ b/device/lib/stm8-large/atanf.asm
@@ -0,0 +1,340 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module atanf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _fabsf
+ .globl _atanf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../atanf.c: 55: float atanf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function atanf
+; -----------------------------------------
+_atanf:
+ sub sp, #14
+; ../atanf.c: 58: int n=0;
+ clrw x
+ ldw (0x01, sp), x
+; ../atanf.c: 61: f=fabsf(x);
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../atanf.c: 62: if(f>1.0)
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00102$
+; ../atanf.c: 64: f=1.0/f;
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fsdiv
+ addw sp, #8
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../atanf.c: 65: n=2;
+ ldw x, #0x0002
+ ldw (0x01, sp), x
+00102$:
+; ../atanf.c: 67: if(f>K1)
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ push #0xa3
+ push #0x30
+ push #0x89
+ push #0x3e
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00104$
+; ../atanf.c: 69: f=((K2*f-1.0)+f)/(K3+f);
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ push #0xaf
+ push #0x67
+ push #0x3b
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x80
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fssub
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ push #0xd7
+ push #0xb3
+ push #0xdd
+ push #0x3f
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../atanf.c: 73: n++;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x01, sp), x
+00104$:
+; ../atanf.c: 75: if(fabsf(f)<EPS) r=f;
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ push #0x00
+ push #0x00
+ push #0x80
+ push #0x39
+ pushw x
+ pushw y
+ callf ___fslt
+ addw sp, #8
+ ld (0x0e, sp), a
+ jreq 00106$
+ ldw y, (0x05, sp)
+ ldw (0x0d, sp), y
+ ldw y, (0x03, sp)
+ ldw (0x0b, sp), y
+ jpf 00107$
+00106$:
+; ../atanf.c: 78: g=f*f;
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../atanf.c: 79: r=f+P(g,f)/Q(g);
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0x91
+ push #0x86
+ push #0x50
+ push #0xbd
+ callf ___fsmul
+ addw sp, #8
+ push #0xf6
+ push #0x10
+ push #0xf1
+ push #0xbe
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ push #0xd3
+ push #0xcc
+ push #0xb4
+ push #0x3f
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+00107$:
+; ../atanf.c: 81: if(n>1) r=-r;
+ ldw x, (0x01, sp)
+ cpw x, #0x0001
+ jrsle 00109$
+ ldw y, (0x0d, sp)
+ ldw x, (0x0b, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x0d, sp), y
+ ldw (0x0b, sp), x
+00109$:
+; ../atanf.c: 82: r+=a[n];
+ ldw x, (0x01, sp)
+ sllw x
+ sllw x
+ addw x, #(_atanf_a_65536_26 + 0)
+ clr a
+ adc a, #((_atanf_a_65536_26 + 0) >> 16)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ pushw y
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+; ../atanf.c: 83: if(x<0.0) r=-r;
+ pushw x
+ pushw y
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x00
+ ld a, (0x1d, sp)
+ push a
+ ld a, (0x1d, sp)
+ push a
+ ld a, (0x1d, sp)
+ push a
+ ld a, (0x1d, sp)
+ push a
+ callf ___fslt
+ addw sp, #8
+ popw y
+ popw x
+ tnz a
+ jreq 00111$
+ sllw y
+ ccf
+ rrcw y
+00111$:
+; ../atanf.c: 84: return r;
+; ../atanf.c: 85: }
+ addw sp, #14
+ retf
+ .area CODE
+ .area CONST
+_atanf_a_65536_26:
+ .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00
+ .byte #0x3f, #0x06, #0x0a, #0x92 ; 5.235988e-01
+ .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00
+ .byte #0x3f, #0x86, #0x0a, #0x92 ; 1.047198e+00
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/atanf.lst b/device/lib/stm8-large/atanf.lst
new file mode 100644
index 0000000..c1bd7a3
--- /dev/null
+++ b/device/lib/stm8-large/atanf.lst
@@ -0,0 +1,340 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module atanf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _fabsf
+ 12 .globl _atanf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../atanf.c: 55: float atanf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function atanf
+ 53 ; -----------------------------------------
+ 000000 54 _atanf:
+ 000000 52 0E [ 2] 55 sub sp, #14
+ 56 ; ../atanf.c: 58: int n=0;
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 59 ; ../atanf.c: 61: f=fabsf(x);
+ 000005 1E 14 [ 2] 60 ldw x, (0x14, sp)
+ 000007 89 [ 2] 61 pushw x
+ 000008 1E 14 [ 2] 62 ldw x, (0x14, sp)
+ 00000A 89 [ 2] 63 pushw x
+ 00000B 8Ds00r00r00 [ 5] 64 callf _fabsf
+ 00000F 5B 04 [ 2] 65 addw sp, #4
+ 000011 1F 05 [ 2] 66 ldw (0x05, sp), x
+ 000013 17 03 [ 2] 67 ldw (0x03, sp), y
+ 68 ; ../atanf.c: 62: if(f>1.0)
+ 000015 1E 05 [ 2] 69 ldw x, (0x05, sp)
+ 000017 89 [ 2] 70 pushw x
+ 000018 1E 05 [ 2] 71 ldw x, (0x05, sp)
+ 00001A 89 [ 2] 72 pushw x
+ 00001B 5F [ 1] 73 clrw x
+ 00001C 89 [ 2] 74 pushw x
+ 00001D 4B 80 [ 1] 75 push #0x80
+ 00001F 4B 3F [ 1] 76 push #0x3f
+ 000021 8Ds00r00r00 [ 5] 77 callf ___fslt
+ 000025 5B 08 [ 2] 78 addw sp, #8
+ 000027 4D [ 1] 79 tnz a
+ 000028 27 1B [ 1] 80 jreq 00102$
+ 81 ; ../atanf.c: 64: f=1.0/f;
+ 00002A 1E 05 [ 2] 82 ldw x, (0x05, sp)
+ 00002C 89 [ 2] 83 pushw x
+ 00002D 1E 05 [ 2] 84 ldw x, (0x05, sp)
+ 00002F 89 [ 2] 85 pushw x
+ 000030 5F [ 1] 86 clrw x
+ 000031 89 [ 2] 87 pushw x
+ 000032 4B 80 [ 1] 88 push #0x80
+ 000034 4B 3F [ 1] 89 push #0x3f
+ 000036 8Ds00r00r00 [ 5] 90 callf ___fsdiv
+ 00003A 5B 08 [ 2] 91 addw sp, #8
+ 00003C 1F 05 [ 2] 92 ldw (0x05, sp), x
+ 00003E 17 03 [ 2] 93 ldw (0x03, sp), y
+ 94 ; ../atanf.c: 65: n=2;
+ 000040 AE 00 02 [ 2] 95 ldw x, #0x0002
+ 000043 1F 01 [ 2] 96 ldw (0x01, sp), x
+ 000045 97 00102$:
+ 98 ; ../atanf.c: 67: if(f>K1)
+ 000045 1E 05 [ 2] 99 ldw x, (0x05, sp)
+ 000047 89 [ 2] 100 pushw x
+ 000048 1E 05 [ 2] 101 ldw x, (0x05, sp)
+ 00004A 89 [ 2] 102 pushw x
+ 00004B 4B A3 [ 1] 103 push #0xa3
+ 00004D 4B 30 [ 1] 104 push #0x30
+ 00004F 4B 89 [ 1] 105 push #0x89
+ 000051 4B 3E [ 1] 106 push #0x3e
+ 000053 8Ds00r00r00 [ 5] 107 callf ___fslt
+ 000057 5B 08 [ 2] 108 addw sp, #8
+ 000059 4D [ 1] 109 tnz a
+ 00005A 27 68 [ 1] 110 jreq 00104$
+ 111 ; ../atanf.c: 69: f=((K2*f-1.0)+f)/(K3+f);
+ 00005C 1E 05 [ 2] 112 ldw x, (0x05, sp)
+ 00005E 89 [ 2] 113 pushw x
+ 00005F 1E 05 [ 2] 114 ldw x, (0x05, sp)
+ 000061 89 [ 2] 115 pushw x
+ 000062 4B AF [ 1] 116 push #0xaf
+ 000064 4B 67 [ 1] 117 push #0x67
+ 000066 4B 3B [ 1] 118 push #0x3b
+ 000068 4B 3F [ 1] 119 push #0x3f
+ 00006A 8Ds00r00r00 [ 5] 120 callf ___fsmul
+ 00006E 5B 08 [ 2] 121 addw sp, #8
+ 000070 4B 00 [ 1] 122 push #0x00
+ 000072 4B 00 [ 1] 123 push #0x00
+ 000074 4B 80 [ 1] 124 push #0x80
+ 000076 4B 3F [ 1] 125 push #0x3f
+ 000078 89 [ 2] 126 pushw x
+ 000079 90 89 [ 2] 127 pushw y
+ 00007B 8Ds00r00r00 [ 5] 128 callf ___fssub
+ 00007F 5B 08 [ 2] 129 addw sp, #8
+ 000081 1F 0D [ 2] 130 ldw (0x0d, sp), x
+ 000083 1E 05 [ 2] 131 ldw x, (0x05, sp)
+ 000085 89 [ 2] 132 pushw x
+ 000086 1E 05 [ 2] 133 ldw x, (0x05, sp)
+ 000088 89 [ 2] 134 pushw x
+ 000089 1E 11 [ 2] 135 ldw x, (0x11, sp)
+ 00008B 89 [ 2] 136 pushw x
+ 00008C 90 89 [ 2] 137 pushw y
+ 00008E 8Ds00r00r00 [ 5] 138 callf ___fsadd
+ 000092 5B 08 [ 2] 139 addw sp, #8
+ 000094 1F 0D [ 2] 140 ldw (0x0d, sp), x
+ 000096 17 0B [ 2] 141 ldw (0x0b, sp), y
+ 000098 4B D7 [ 1] 142 push #0xd7
+ 00009A 4B B3 [ 1] 143 push #0xb3
+ 00009C 4B DD [ 1] 144 push #0xdd
+ 00009E 4B 3F [ 1] 145 push #0x3f
+ 0000A0 1E 09 [ 2] 146 ldw x, (0x09, sp)
+ 0000A2 89 [ 2] 147 pushw x
+ 0000A3 1E 09 [ 2] 148 ldw x, (0x09, sp)
+ 0000A5 89 [ 2] 149 pushw x
+ 0000A6 8Ds00r00r00 [ 5] 150 callf ___fsadd
+ 0000AA 5B 08 [ 2] 151 addw sp, #8
+ 0000AC 89 [ 2] 152 pushw x
+ 0000AD 90 89 [ 2] 153 pushw y
+ 0000AF 1E 11 [ 2] 154 ldw x, (0x11, sp)
+ 0000B1 89 [ 2] 155 pushw x
+ 0000B2 1E 11 [ 2] 156 ldw x, (0x11, sp)
+ 0000B4 89 [ 2] 157 pushw x
+ 0000B5 8Ds00r00r00 [ 5] 158 callf ___fsdiv
+ 0000B9 5B 08 [ 2] 159 addw sp, #8
+ 0000BB 1F 05 [ 2] 160 ldw (0x05, sp), x
+ 0000BD 17 03 [ 2] 161 ldw (0x03, sp), y
+ 162 ; ../atanf.c: 73: n++;
+ 0000BF 1E 01 [ 2] 163 ldw x, (0x01, sp)
+ 0000C1 5C [ 1] 164 incw x
+ 0000C2 1F 01 [ 2] 165 ldw (0x01, sp), x
+ 0000C4 166 00104$:
+ 167 ; ../atanf.c: 75: if(fabsf(f)<EPS) r=f;
+ 0000C4 1E 05 [ 2] 168 ldw x, (0x05, sp)
+ 0000C6 89 [ 2] 169 pushw x
+ 0000C7 1E 05 [ 2] 170 ldw x, (0x05, sp)
+ 0000C9 89 [ 2] 171 pushw x
+ 0000CA 8Ds00r00r00 [ 5] 172 callf _fabsf
+ 0000CE 5B 04 [ 2] 173 addw sp, #4
+ 0000D0 4B 00 [ 1] 174 push #0x00
+ 0000D2 4B 00 [ 1] 175 push #0x00
+ 0000D4 4B 80 [ 1] 176 push #0x80
+ 0000D6 4B 39 [ 1] 177 push #0x39
+ 0000D8 89 [ 2] 178 pushw x
+ 0000D9 90 89 [ 2] 179 pushw y
+ 0000DB 8Ds00r00r00 [ 5] 180 callf ___fslt
+ 0000DF 5B 08 [ 2] 181 addw sp, #8
+ 0000E1 6B 0E [ 1] 182 ld (0x0e, sp), a
+ 0000E3 27 0C [ 1] 183 jreq 00106$
+ 0000E5 16 05 [ 2] 184 ldw y, (0x05, sp)
+ 0000E7 17 0D [ 2] 185 ldw (0x0d, sp), y
+ 0000E9 16 03 [ 2] 186 ldw y, (0x03, sp)
+ 0000EB 17 0B [ 2] 187 ldw (0x0b, sp), y
+ 0000ED ACs00r01r8C [ 2] 188 jpf 00107$
+ 0000F1 189 00106$:
+ 190 ; ../atanf.c: 78: g=f*f;
+ 0000F1 1E 05 [ 2] 191 ldw x, (0x05, sp)
+ 0000F3 89 [ 2] 192 pushw x
+ 0000F4 1E 05 [ 2] 193 ldw x, (0x05, sp)
+ 0000F6 89 [ 2] 194 pushw x
+ 0000F7 1E 09 [ 2] 195 ldw x, (0x09, sp)
+ 0000F9 89 [ 2] 196 pushw x
+ 0000FA 1E 09 [ 2] 197 ldw x, (0x09, sp)
+ 0000FC 89 [ 2] 198 pushw x
+ 0000FD 8Ds00r00r00 [ 5] 199 callf ___fsmul
+ 000101 5B 08 [ 2] 200 addw sp, #8
+ 000103 1F 09 [ 2] 201 ldw (0x09, sp), x
+ 000105 17 07 [ 2] 202 ldw (0x07, sp), y
+ 203 ; ../atanf.c: 79: r=f+P(g,f)/Q(g);
+ 000107 1E 09 [ 2] 204 ldw x, (0x09, sp)
+ 000109 89 [ 2] 205 pushw x
+ 00010A 1E 09 [ 2] 206 ldw x, (0x09, sp)
+ 00010C 89 [ 2] 207 pushw x
+ 00010D 4B 91 [ 1] 208 push #0x91
+ 00010F 4B 86 [ 1] 209 push #0x86
+ 000111 4B 50 [ 1] 210 push #0x50
+ 000113 4B BD [ 1] 211 push #0xbd
+ 000115 8Ds00r00r00 [ 5] 212 callf ___fsmul
+ 000119 5B 08 [ 2] 213 addw sp, #8
+ 00011B 4B F6 [ 1] 214 push #0xf6
+ 00011D 4B 10 [ 1] 215 push #0x10
+ 00011F 4B F1 [ 1] 216 push #0xf1
+ 000121 4B BE [ 1] 217 push #0xbe
+ 000123 89 [ 2] 218 pushw x
+ 000124 90 89 [ 2] 219 pushw y
+ 000126 8Ds00r00r00 [ 5] 220 callf ___fsadd
+ 00012A 5B 08 [ 2] 221 addw sp, #8
+ 00012C 1F 0D [ 2] 222 ldw (0x0d, sp), x
+ 00012E 1E 09 [ 2] 223 ldw x, (0x09, sp)
+ 000130 89 [ 2] 224 pushw x
+ 000131 1E 09 [ 2] 225 ldw x, (0x09, sp)
+ 000133 89 [ 2] 226 pushw x
+ 000134 1E 11 [ 2] 227 ldw x, (0x11, sp)
+ 000136 89 [ 2] 228 pushw x
+ 000137 90 89 [ 2] 229 pushw y
+ 000139 8Ds00r00r00 [ 5] 230 callf ___fsmul
+ 00013D 5B 08 [ 2] 231 addw sp, #8
+ 00013F 1F 0D [ 2] 232 ldw (0x0d, sp), x
+ 000141 1E 05 [ 2] 233 ldw x, (0x05, sp)
+ 000143 89 [ 2] 234 pushw x
+ 000144 1E 05 [ 2] 235 ldw x, (0x05, sp)
+ 000146 89 [ 2] 236 pushw x
+ 000147 1E 11 [ 2] 237 ldw x, (0x11, sp)
+ 000149 89 [ 2] 238 pushw x
+ 00014A 90 89 [ 2] 239 pushw y
+ 00014C 8Ds00r00r00 [ 5] 240 callf ___fsmul
+ 000150 5B 08 [ 2] 241 addw sp, #8
+ 000152 1F 0D [ 2] 242 ldw (0x0d, sp), x
+ 000154 17 0B [ 2] 243 ldw (0x0b, sp), y
+ 000156 4B D3 [ 1] 244 push #0xd3
+ 000158 4B CC [ 1] 245 push #0xcc
+ 00015A 4B B4 [ 1] 246 push #0xb4
+ 00015C 4B 3F [ 1] 247 push #0x3f
+ 00015E 1E 0D [ 2] 248 ldw x, (0x0d, sp)
+ 000160 89 [ 2] 249 pushw x
+ 000161 1E 0D [ 2] 250 ldw x, (0x0d, sp)
+ 000163 89 [ 2] 251 pushw x
+ 000164 8Ds00r00r00 [ 5] 252 callf ___fsadd
+ 000168 5B 08 [ 2] 253 addw sp, #8
+ 00016A 89 [ 2] 254 pushw x
+ 00016B 90 89 [ 2] 255 pushw y
+ 00016D 1E 11 [ 2] 256 ldw x, (0x11, sp)
+ 00016F 89 [ 2] 257 pushw x
+ 000170 1E 11 [ 2] 258 ldw x, (0x11, sp)
+ 000172 89 [ 2] 259 pushw x
+ 000173 8Ds00r00r00 [ 5] 260 callf ___fsdiv
+ 000177 5B 08 [ 2] 261 addw sp, #8
+ 000179 89 [ 2] 262 pushw x
+ 00017A 90 89 [ 2] 263 pushw y
+ 00017C 1E 09 [ 2] 264 ldw x, (0x09, sp)
+ 00017E 89 [ 2] 265 pushw x
+ 00017F 1E 09 [ 2] 266 ldw x, (0x09, sp)
+ 000181 89 [ 2] 267 pushw x
+ 000182 8Ds00r00r00 [ 5] 268 callf ___fsadd
+ 000186 5B 08 [ 2] 269 addw sp, #8
+ 000188 1F 0D [ 2] 270 ldw (0x0d, sp), x
+ 00018A 17 0B [ 2] 271 ldw (0x0b, sp), y
+ 00018C 272 00107$:
+ 273 ; ../atanf.c: 81: if(n>1) r=-r;
+ 00018C 1E 01 [ 2] 274 ldw x, (0x01, sp)
+ 00018E A3 00 01 [ 2] 275 cpw x, #0x0001
+ 000191 2D 0B [ 1] 276 jrsle 00109$
+ 000193 16 0D [ 2] 277 ldw y, (0x0d, sp)
+ 000195 1E 0B [ 2] 278 ldw x, (0x0b, sp)
+ 000197 58 [ 2] 279 sllw x
+ 000198 8C [ 1] 280 ccf
+ 000199 56 [ 2] 281 rrcw x
+ 00019A 17 0D [ 2] 282 ldw (0x0d, sp), y
+ 00019C 1F 0B [ 2] 283 ldw (0x0b, sp), x
+ 00019E 284 00109$:
+ 285 ; ../atanf.c: 82: r+=a[n];
+ 00019E 1E 01 [ 2] 286 ldw x, (0x01, sp)
+ 0001A0 58 [ 2] 287 sllw x
+ 0001A1 58 [ 2] 288 sllw x
+ 0001A2 1Cr00r00 [ 2] 289 addw x, #(_atanf_a_65536_26 + 0)
+ 0001A5 4F [ 1] 290 clr a
+ 0001A6 A9s00 [ 1] 291 adc a, #((_atanf_a_65536_26 + 0) >> 16)
+ 0001A8 90 93 [ 1] 292 ldw y, x
+ 0001AA 90 EE 02 [ 2] 293 ldw y, (0x2, y)
+ 0001AD FE [ 2] 294 ldw x, (x)
+ 0001AE 90 89 [ 2] 295 pushw y
+ 0001B0 89 [ 2] 296 pushw x
+ 0001B1 1E 11 [ 2] 297 ldw x, (0x11, sp)
+ 0001B3 89 [ 2] 298 pushw x
+ 0001B4 1E 11 [ 2] 299 ldw x, (0x11, sp)
+ 0001B6 89 [ 2] 300 pushw x
+ 0001B7 8Ds00r00r00 [ 5] 301 callf ___fsadd
+ 0001BB 5B 08 [ 2] 302 addw sp, #8
+ 303 ; ../atanf.c: 83: if(x<0.0) r=-r;
+ 0001BD 89 [ 2] 304 pushw x
+ 0001BE 90 89 [ 2] 305 pushw y
+ 0001C0 4B 00 [ 1] 306 push #0x00
+ 0001C2 4B 00 [ 1] 307 push #0x00
+ 0001C4 4B 00 [ 1] 308 push #0x00
+ 0001C6 4B 00 [ 1] 309 push #0x00
+ 0001C8 7B 1D [ 1] 310 ld a, (0x1d, sp)
+ 0001CA 88 [ 1] 311 push a
+ 0001CB 7B 1D [ 1] 312 ld a, (0x1d, sp)
+ 0001CD 88 [ 1] 313 push a
+ 0001CE 7B 1D [ 1] 314 ld a, (0x1d, sp)
+ 0001D0 88 [ 1] 315 push a
+ 0001D1 7B 1D [ 1] 316 ld a, (0x1d, sp)
+ 0001D3 88 [ 1] 317 push a
+ 0001D4 8Ds00r00r00 [ 5] 318 callf ___fslt
+ 0001D8 5B 08 [ 2] 319 addw sp, #8
+ 0001DA 90 85 [ 2] 320 popw y
+ 0001DC 85 [ 2] 321 popw x
+ 0001DD 4D [ 1] 322 tnz a
+ 0001DE 27 05 [ 1] 323 jreq 00111$
+ 0001E0 90 58 [ 2] 324 sllw y
+ 0001E2 8C [ 1] 325 ccf
+ 0001E3 90 56 [ 2] 326 rrcw y
+ 0001E5 327 00111$:
+ 328 ; ../atanf.c: 84: return r;
+ 329 ; ../atanf.c: 85: }
+ 0001E5 5B 0E [ 2] 330 addw sp, #14
+ 0001E7 87 [ 5] 331 retf
+ 332 .area CODE
+ 333 .area CONST
+ 000000 334 _atanf_a_65536_26:
+ 000000 00 00 00 00 335 .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00
+ 000004 3F 06 0A 92 336 .byte #0x3f, #0x06, #0x0a, #0x92 ; 5.235988e-01
+ 000008 3F C9 0F DB 337 .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00
+ 00000C 3F 86 0A 92 338 .byte #0x3f, #0x86, #0x0a, #0x92 ; 1.047198e+00
+ 339 .area INITIALIZER
+ 340 .area CABS (ABS)
diff --git a/device/lib/stm8-large/atanf.rel b/device/lib/stm8-large/atanf.rel
new file mode 100644
index 0000000..61fad2a
--- /dev/null
+++ b/device/lib/stm8-large/atanf.rel
@@ -0,0 +1,131 @@
+XH3
+H B areas 8 global symbols
+M atanf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _fabsf Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 10 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1E8 flags 0 addr 0
+S _atanf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0E 5F 1F 01 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 0C 00 00 00 5B 04 1F 05 17 03 1E 05 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 00 19 05 89 5F 89 4B 80 4B 3F 8D
+R 00 00 00 09
+T 00 00 22 00 00 00 5B 08 4D 27 1B 1E 05 89 1E 05
+R 00 00 00 09 82 03 00 02
+T 00 00 2F 89 5F 89 4B 80 4B 3F 8D
+R 00 00 00 09
+T 00 00 37 00 00 00 5B 08 1F 05 17 03 AE 00 02 1F
+R 00 00 00 09 82 03 00 06
+T 00 00 44 01
+R 00 00 00 09
+T 00 00 45
+R 00 00 00 09
+T 00 00 45 1E 05 89 1E 05 89 4B A3 4B 30 4B 89 4B
+R 00 00 00 09
+T 00 00 52 3E 8D 00 00 00 5B 08 4D 27 68 1E 05 89
+R 00 00 00 09 82 05 00 02
+T 00 00 5F 1E 05 89 4B AF 4B 67 4B 3B 4B 3F 8D
+R 00 00 00 09
+T 00 00 6B 00 00 00 5B 08 4B 00 4B 00 4B 80 4B 3F
+R 00 00 00 09 82 03 00 01
+T 00 00 78 89 90 89 8D 00 00 00 5B 08 1F 0D 1E 05
+R 00 00 00 09 82 07 00 00
+T 00 00 85 89 1E 05 89 1E 11 89 90 89 8D
+R 00 00 00 09
+T 00 00 8F 00 00 00 5B 08 1F 0D 17 0B 4B D7 4B B3
+R 00 00 00 09 82 03 00 04
+T 00 00 9C 4B DD 4B 3F 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 00 A7 00 00 00 5B 08 89 90 89 1E 11 89 1E 11
+R 00 00 00 09 82 03 00 04
+T 00 00 B4 89 8D 00 00 00 5B 08 1F 05 17 03 1E 01
+R 00 00 00 09 82 05 00 06
+T 00 00 C1 5C 1F 01
+R 00 00 00 09
+T 00 00 C4
+R 00 00 00 09
+T 00 00 C4 1E 05 89 1E 05 89 8D 00 00 00 5B 04 4B
+R 00 00 00 09 82 0A 00 05
+T 00 00 D1 00 4B 00 4B 80 4B 39 89 90 89 8D
+R 00 00 00 09
+T 00 00 DC 00 00 00 5B 08 6B 0E 27 0C 16 05 17 0D
+R 00 00 00 09 82 03 00 02
+T 00 00 E9 16 03 17 0B AC 00 01 8C
+R 00 00 00 09 80 08 00 09
+T 00 00 F1
+R 00 00 00 09
+T 00 00 F1 1E 05 89 1E 05 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 00 FE 00 00 00 5B 08 1F 09 17 07 1E 09 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 0B 09 89 4B 91 4B 86 4B 50 4B BD 8D
+R 00 00 00 09
+T 00 01 16 00 00 00 5B 08 4B F6 4B 10 4B F1 4B BE
+R 00 00 00 09 82 03 00 01
+T 00 01 23 89 90 89 8D 00 00 00 5B 08 1F 0D 1E 09
+R 00 00 00 09 82 07 00 04
+T 00 01 30 89 1E 09 89 1E 11 89 90 89 8D
+R 00 00 00 09
+T 00 01 3A 00 00 00 5B 08 1F 0D 1E 05 89 1E 05 89
+R 00 00 00 09 82 03 00 01
+T 00 01 47 1E 11 89 90 89 8D 00 00 00 5B 08 1F 0D
+R 00 00 00 09 82 09 00 01
+T 00 01 54 17 0B 4B D3 4B CC 4B B4 4B 3F 1E 0D 89
+R 00 00 00 09
+T 00 01 61 1E 0D 89 8D 00 00 00 5B 08 89 90 89 1E
+R 00 00 00 09 82 07 00 04
+T 00 01 6E 11 89 1E 11 89 8D 00 00 00 5B 08 89 90
+R 00 00 00 09 82 09 00 06
+T 00 01 7B 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 01 83 00 00 00 5B 08 1F 0D 17 0B
+R 00 00 00 09 82 03 00 04
+T 00 01 8C
+R 00 00 00 09
+T 00 01 8C 1E 01 A3 00 01 2D 0B 16 0D 1E 0B 58 8C
+R 00 00 00 09
+T 00 01 99 56 17 0D 1F 0B
+R 00 00 00 09
+T 00 01 9E
+R 00 00 00 09
+T 00 01 9E 1E 01 58 58 1C 00 00 4F A9 00 00 00 90
+R 00 00 00 09 00 08 00 07 F3 01 0C 00 07
+T 00 01 A9 93 90 EE 02 FE 90 89 89 1E 11 89 1E 11
+R 00 00 00 09
+T 00 01 B6 89 8D 00 00 00 5B 08 89 90 89 4B 00 4B
+R 00 00 00 09 82 05 00 04
+T 00 01 C3 00 4B 00 4B 00 7B 1D 88 7B 1D 88 7B 1D
+R 00 00 00 09
+T 00 01 D0 88 7B 1D 88 8D 00 00 00 5B 08 90 85 85
+R 00 00 00 09 82 08 00 02
+T 00 01 DD 4D 27 05 90 58 8C 90 56
+R 00 00 00 09
+T 00 01 E5
+R 00 00 00 09
+T 00 01 E5 5B 0E 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 00 00 00 00 3F 06 0A 92 3F C9 0F DB 3F
+R 00 00 00 07
+T 00 00 0D 86 0A 92
+R 00 00 00 07
diff --git a/device/lib/stm8-large/atanf.sym b/device/lib/stm8-large/atanf.sym
new file mode 100644
index 0000000..aa83852
--- /dev/null
+++ b/device/lib/stm8-large/atanf.sym
@@ -0,0 +1,35 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ 9 _atanf 000000 GR
+ 7 _atanf_a_65536_26 000000 R
+ _fabsf ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 10 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1E8 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/atoi.asm b/device/lib/stm8-large/atoi.asm
new file mode 100644
index 0000000..af5aa3a
--- /dev/null
+++ b/device/lib/stm8-large/atoi.asm
@@ -0,0 +1,145 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module atoi
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _atoi
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../atoi.c: 34: int atoi(const char *nptr)
+; -----------------------------------------
+; function atoi
+; -----------------------------------------
+_atoi:
+ sub sp, #7
+; ../atoi.c: 36: int ret = 0;
+ clrw x
+ ldw (0x04, sp), x
+; ../atoi.c: 39: while (isblank (*nptr))
+ ldw y, (0x0b, sp)
+00101$:
+ ld a, (y)
+ ld (0x03, sp), a
+; ../atoi.c: 40: nptr++;
+ ldw x, y
+ incw x
+ ldw (0x06, sp), x
+; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ cp a, #0x20
+ jreq 00115$
+ cp a, #0x09
+ jrne 00131$
+00115$:
+; ../atoi.c: 40: nptr++;
+ ldw y, (0x06, sp)
+ jra 00101$
+00131$:
+ ldw (0x0b, sp), y
+; ../atoi.c: 42: neg = (*nptr == '-');
+ ld a, (0x03, sp)
+ sub a, #0x2d
+ jrne 00168$
+ inc a
+ .byte 0x21
+00168$:
+ clr a
+00169$:
+; ../atoi.c: 44: if (*nptr == '-' || *nptr == '+')
+ ld (0x02, sp), a
+ jrne 00104$
+ ld a, (0x03, sp)
+ cp a, #0x2b
+ jrne 00129$
+00104$:
+; ../atoi.c: 45: nptr++;
+ ldw y, (0x06, sp)
+ ldw (0x0b, sp), y
+; ../atoi.c: 47: while (isdigit (*nptr))
+00129$:
+ ldw y, (0x0b, sp)
+ ldw (0x06, sp), y
+00107$:
+ ldw x, (0x06, sp)
+ ld a, (x)
+ ld (0x03, sp), a
+; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ ld (0x01, sp), a
+ cp a, #0x30
+ jrc 00109$
+ ld a, (0x01, sp)
+ cp a, #0x39
+ jrugt 00109$
+; ../atoi.c: 48: ret = ret * 10 + (*(nptr++) - '0');
+ ldw x, (0x04, sp)
+ sllw x
+ sllw x
+ addw x, (0x04, sp)
+ sllw x
+ ldw (0x04, sp), x
+ ldw x, (0x06, sp)
+ incw x
+ ldw (0x06, sp), x
+ clrw x
+ ld a, (0x03, sp)
+ ld xl, a
+ subw x, #0x0030
+ addw x, (0x04, sp)
+ ldw (0x04, sp), x
+ jra 00107$
+00109$:
+; ../atoi.c: 50: return (neg ? -ret : ret); // Since -INT_MIN is INT_MIN in sdcc, the result value always turns out ok.
+ tnz (0x02, sp)
+ jreq 00120$
+ ldw x, (0x04, sp)
+ negw x
+ .byte 0xc5
+00120$:
+ ldw x, (0x04, sp)
+00121$:
+; ../atoi.c: 51: }
+ addw sp, #7
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/atoi.lst b/device/lib/stm8-large/atoi.lst
new file mode 100644
index 0000000..f6c7c4a
--- /dev/null
+++ b/device/lib/stm8-large/atoi.lst
@@ -0,0 +1,145 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module atoi
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _atoi
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../atoi.c: 34: int atoi(const char *nptr)
+ 50 ; -----------------------------------------
+ 51 ; function atoi
+ 52 ; -----------------------------------------
+ 000000 53 _atoi:
+ 000000 52 07 [ 2] 54 sub sp, #7
+ 55 ; ../atoi.c: 36: int ret = 0;
+ 000002 5F [ 1] 56 clrw x
+ 000003 1F 04 [ 2] 57 ldw (0x04, sp), x
+ 58 ; ../atoi.c: 39: while (isblank (*nptr))
+ 000005 16 0B [ 2] 59 ldw y, (0x0b, sp)
+ 000007 60 00101$:
+ 000007 90 F6 [ 1] 61 ld a, (y)
+ 000009 6B 03 [ 1] 62 ld (0x03, sp), a
+ 63 ; ../atoi.c: 40: nptr++;
+ 00000B 93 [ 1] 64 ldw x, y
+ 00000C 5C [ 1] 65 incw x
+ 00000D 1F 06 [ 2] 66 ldw (0x06, sp), x
+ 67 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ 00000F A1 20 [ 1] 68 cp a, #0x20
+ 000011 27 04 [ 1] 69 jreq 00115$
+ 000013 A1 09 [ 1] 70 cp a, #0x09
+ 000015 26 04 [ 1] 71 jrne 00131$
+ 000017 72 00115$:
+ 73 ; ../atoi.c: 40: nptr++;
+ 000017 16 06 [ 2] 74 ldw y, (0x06, sp)
+ 000019 20 EC [ 2] 75 jra 00101$
+ 00001B 76 00131$:
+ 00001B 17 0B [ 2] 77 ldw (0x0b, sp), y
+ 78 ; ../atoi.c: 42: neg = (*nptr == '-');
+ 00001D 7B 03 [ 1] 79 ld a, (0x03, sp)
+ 00001F A0 2D [ 1] 80 sub a, #0x2d
+ 000021 26 02 [ 1] 81 jrne 00168$
+ 000023 4C [ 1] 82 inc a
+ 000024 21 83 .byte 0x21
+ 000025 84 00168$:
+ 000025 4F [ 1] 85 clr a
+ 000026 86 00169$:
+ 87 ; ../atoi.c: 44: if (*nptr == '-' || *nptr == '+')
+ 000026 6B 02 [ 1] 88 ld (0x02, sp), a
+ 000028 26 06 [ 1] 89 jrne 00104$
+ 00002A 7B 03 [ 1] 90 ld a, (0x03, sp)
+ 00002C A1 2B [ 1] 91 cp a, #0x2b
+ 00002E 26 04 [ 1] 92 jrne 00129$
+ 000030 93 00104$:
+ 94 ; ../atoi.c: 45: nptr++;
+ 000030 16 06 [ 2] 95 ldw y, (0x06, sp)
+ 000032 17 0B [ 2] 96 ldw (0x0b, sp), y
+ 97 ; ../atoi.c: 47: while (isdigit (*nptr))
+ 000034 98 00129$:
+ 000034 16 0B [ 2] 99 ldw y, (0x0b, sp)
+ 000036 17 06 [ 2] 100 ldw (0x06, sp), y
+ 000038 101 00107$:
+ 000038 1E 06 [ 2] 102 ldw x, (0x06, sp)
+ 00003A F6 [ 1] 103 ld a, (x)
+ 00003B 6B 03 [ 1] 104 ld (0x03, sp), a
+ 105 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ 00003D 6B 01 [ 1] 106 ld (0x01, sp), a
+ 00003F A1 30 [ 1] 107 cp a, #0x30
+ 000041 25 23 [ 1] 108 jrc 00109$
+ 000043 7B 01 [ 1] 109 ld a, (0x01, sp)
+ 000045 A1 39 [ 1] 110 cp a, #0x39
+ 000047 22 1D [ 1] 111 jrugt 00109$
+ 112 ; ../atoi.c: 48: ret = ret * 10 + (*(nptr++) - '0');
+ 000049 1E 04 [ 2] 113 ldw x, (0x04, sp)
+ 00004B 58 [ 2] 114 sllw x
+ 00004C 58 [ 2] 115 sllw x
+ 00004D 72 FB 04 [ 2] 116 addw x, (0x04, sp)
+ 000050 58 [ 2] 117 sllw x
+ 000051 1F 04 [ 2] 118 ldw (0x04, sp), x
+ 000053 1E 06 [ 2] 119 ldw x, (0x06, sp)
+ 000055 5C [ 1] 120 incw x
+ 000056 1F 06 [ 2] 121 ldw (0x06, sp), x
+ 000058 5F [ 1] 122 clrw x
+ 000059 7B 03 [ 1] 123 ld a, (0x03, sp)
+ 00005B 97 [ 1] 124 ld xl, a
+ 00005C 1D 00 30 [ 2] 125 subw x, #0x0030
+ 00005F 72 FB 04 [ 2] 126 addw x, (0x04, sp)
+ 000062 1F 04 [ 2] 127 ldw (0x04, sp), x
+ 000064 20 D2 [ 2] 128 jra 00107$
+ 000066 129 00109$:
+ 130 ; ../atoi.c: 50: return (neg ? -ret : ret); // Since -INT_MIN is INT_MIN in sdcc, the result value always turns out ok.
+ 000066 0D 02 [ 1] 131 tnz (0x02, sp)
+ 000068 27 04 [ 1] 132 jreq 00120$
+ 00006A 1E 04 [ 2] 133 ldw x, (0x04, sp)
+ 00006C 50 [ 2] 134 negw x
+ 00006D C5 135 .byte 0xc5
+ 00006E 136 00120$:
+ 00006E 1E 04 [ 2] 137 ldw x, (0x04, sp)
+ 000070 138 00121$:
+ 139 ; ../atoi.c: 51: }
+ 000070 5B 07 [ 2] 140 addw sp, #7
+ 000072 87 [ 5] 141 retf
+ 142 .area CODE
+ 143 .area CONST
+ 144 .area INITIALIZER
+ 145 .area CABS (ABS)
diff --git a/device/lib/stm8-large/atoi.rel b/device/lib/stm8-large/atoi.rel
new file mode 100644
index 0000000..75f009f
--- /dev/null
+++ b/device/lib/stm8-large/atoi.rel
@@ -0,0 +1,73 @@
+XH3
+H B areas 2 global symbols
+M atoi
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 73 flags 0 addr 0
+S _atoi Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 07 5F 1F 04 16 0B
+R 00 00 00 09
+T 00 00 07
+R 00 00 00 09
+T 00 00 07 90 F6 6B 03 93 5C 1F 06 A1 20 27 04 A1
+R 00 00 00 09
+T 00 00 14 09 26 04
+R 00 00 00 09
+T 00 00 17
+R 00 00 00 09
+T 00 00 17 16 06 20 EC
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 17 0B 7B 03 A0 2D 26 02 4C 21
+R 00 00 00 09
+T 00 00 25
+R 00 00 00 09
+T 00 00 25 4F
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 6B 02 26 06 7B 03 A1 2B 26 04
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 16 06 17 0B
+R 00 00 00 09
+T 00 00 34
+R 00 00 00 09
+T 00 00 34 16 0B 17 06
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 1E 06 F6 6B 03 6B 01 A1 30 25 23 7B 01
+R 00 00 00 09
+T 00 00 45 A1 39 22 1D 1E 04 58 58 72 FB 04 58 1F
+R 00 00 00 09
+T 00 00 52 04 1E 06 5C 1F 06 5F 7B 03 97 1D 00 30
+R 00 00 00 09
+T 00 00 5F 72 FB 04 1F 04 20 D2
+R 00 00 00 09
+T 00 00 66
+R 00 00 00 09
+T 00 00 66 0D 02 27 04 1E 04 50 C5
+R 00 00 00 09
+T 00 00 6E
+R 00 00 00 09
+T 00 00 6E 1E 04
+R 00 00 00 09
+T 00 00 70
+R 00 00 00 09
+T 00 00 70 5B 07 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/atoi.sym b/device/lib/stm8-large/atoi.sym
new file mode 100644
index 0000000..dd8a1af
--- /dev/null
+++ b/device/lib/stm8-large/atoi.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _atoi 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 73 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/atol.asm b/device/lib/stm8-large/atol.asm
new file mode 100644
index 0000000..e62e190
--- /dev/null
+++ b/device/lib/stm8-large/atol.asm
@@ -0,0 +1,177 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module atol
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _atol
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../atol.c: 34: long int atol(const char *nptr)
+; -----------------------------------------
+; function atol
+; -----------------------------------------
+_atol:
+ sub sp, #9
+; ../atol.c: 36: long int ret = 0;
+ clrw x
+ ldw (0x03, sp), x
+ ldw (0x01, sp), x
+; ../atol.c: 39: while (isblank (*nptr))
+ ldw y, (0x0d, sp)
+ ldw (0x07, sp), y
+00101$:
+ ldw x, (0x07, sp)
+ ld a, (x)
+ ld (0x09, sp), a
+; ../atol.c: 40: nptr++;
+ ldw x, (0x07, sp)
+ incw x
+; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ cp a, #0x20
+ jreq 00115$
+ cp a, #0x09
+ jrne 00131$
+00115$:
+; ../atol.c: 40: nptr++;
+ ldw (0x07, sp), x
+ jra 00101$
+00131$:
+ ldw y, (0x07, sp)
+ ldw (0x0d, sp), y
+; ../atol.c: 42: neg = (*nptr == '-');
+ ld a, (0x09, sp)
+ sub a, #0x2d
+ jrne 00168$
+ inc a
+ .byte 0x21
+00168$:
+ clr a
+00169$:
+; ../atol.c: 44: if (*nptr == '-' || *nptr == '+')
+ ld (0x05, sp), a
+ jrne 00104$
+ ld a, (0x09, sp)
+ cp a, #0x2b
+ jrne 00129$
+00104$:
+; ../atol.c: 45: nptr++;
+ ldw (0x0d, sp), x
+; ../atol.c: 47: while (isdigit (*nptr))
+00129$:
+ ldw y, (0x0d, sp)
+ ldw (0x08, sp), y
+00107$:
+ ldw x, (0x08, sp)
+ ld a, (x)
+ ld (0x06, sp), a
+; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ ld (0x07, sp), a
+ cp a, #0x30
+ jrc 00109$
+ ld a, (0x07, sp)
+ cp a, #0x39
+ jrugt 00109$
+; ../atol.c: 48: ret = ret * 10 + (*(nptr++) - '0');
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ push #0x0a
+ clrw x
+ pushw x
+ push #0x00
+ callf __mullong
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+ ldw x, (0x08, sp)
+ incw x
+ ldw (0x08, sp), x
+ clrw x
+ ld a, (0x06, sp)
+ ld xl, a
+ subw x, #0x0030
+ exgw x, y
+ clrw x
+ tnzw y
+ jrpl 00177$
+ decw x
+00177$:
+ addw y, (0x03, sp)
+ ld a, xl
+ adc a, (0x02, sp)
+ rlwa x
+ adc a, (0x01, sp)
+ ld xh, a
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+ jra 00107$
+00109$:
+; ../atol.c: 50: return (neg ? -ret : ret); // Since -LONG_MIN is LONG_MIN in sdcc, the result value always turns out ok.
+ tnz (0x05, sp)
+ jreq 00120$
+ ldw y, (0x03, sp)
+ negw y
+ ldw x, (0x01, sp)
+ jrnc 00179$
+ incw x
+00179$:
+ negw x
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+ jra 00121$
+00120$:
+ ldw y, (0x03, sp)
+ ldw (0x08, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x06, sp), y
+00121$:
+ ldw x, (0x08, sp)
+ ldw y, (0x06, sp)
+; ../atol.c: 51: }
+ addw sp, #9
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/atol.lst b/device/lib/stm8-large/atol.lst
new file mode 100644
index 0000000..bc7afe6
--- /dev/null
+++ b/device/lib/stm8-large/atol.lst
@@ -0,0 +1,177 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module atol
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _atol
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../atol.c: 34: long int atol(const char *nptr)
+ 50 ; -----------------------------------------
+ 51 ; function atol
+ 52 ; -----------------------------------------
+ 000000 53 _atol:
+ 000000 52 09 [ 2] 54 sub sp, #9
+ 55 ; ../atol.c: 36: long int ret = 0;
+ 000002 5F [ 1] 56 clrw x
+ 000003 1F 03 [ 2] 57 ldw (0x03, sp), x
+ 000005 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 59 ; ../atol.c: 39: while (isblank (*nptr))
+ 000007 16 0D [ 2] 60 ldw y, (0x0d, sp)
+ 000009 17 07 [ 2] 61 ldw (0x07, sp), y
+ 00000B 62 00101$:
+ 00000B 1E 07 [ 2] 63 ldw x, (0x07, sp)
+ 00000D F6 [ 1] 64 ld a, (x)
+ 00000E 6B 09 [ 1] 65 ld (0x09, sp), a
+ 66 ; ../atol.c: 40: nptr++;
+ 000010 1E 07 [ 2] 67 ldw x, (0x07, sp)
+ 000012 5C [ 1] 68 incw x
+ 69 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ 000013 A1 20 [ 1] 70 cp a, #0x20
+ 000015 27 04 [ 1] 71 jreq 00115$
+ 000017 A1 09 [ 1] 72 cp a, #0x09
+ 000019 26 04 [ 1] 73 jrne 00131$
+ 00001B 74 00115$:
+ 75 ; ../atol.c: 40: nptr++;
+ 00001B 1F 07 [ 2] 76 ldw (0x07, sp), x
+ 00001D 20 EC [ 2] 77 jra 00101$
+ 00001F 78 00131$:
+ 00001F 16 07 [ 2] 79 ldw y, (0x07, sp)
+ 000021 17 0D [ 2] 80 ldw (0x0d, sp), y
+ 81 ; ../atol.c: 42: neg = (*nptr == '-');
+ 000023 7B 09 [ 1] 82 ld a, (0x09, sp)
+ 000025 A0 2D [ 1] 83 sub a, #0x2d
+ 000027 26 02 [ 1] 84 jrne 00168$
+ 000029 4C [ 1] 85 inc a
+ 00002A 21 86 .byte 0x21
+ 00002B 87 00168$:
+ 00002B 4F [ 1] 88 clr a
+ 00002C 89 00169$:
+ 90 ; ../atol.c: 44: if (*nptr == '-' || *nptr == '+')
+ 00002C 6B 05 [ 1] 91 ld (0x05, sp), a
+ 00002E 26 06 [ 1] 92 jrne 00104$
+ 000030 7B 09 [ 1] 93 ld a, (0x09, sp)
+ 000032 A1 2B [ 1] 94 cp a, #0x2b
+ 000034 26 02 [ 1] 95 jrne 00129$
+ 000036 96 00104$:
+ 97 ; ../atol.c: 45: nptr++;
+ 000036 1F 0D [ 2] 98 ldw (0x0d, sp), x
+ 99 ; ../atol.c: 47: while (isdigit (*nptr))
+ 000038 100 00129$:
+ 000038 16 0D [ 2] 101 ldw y, (0x0d, sp)
+ 00003A 17 08 [ 2] 102 ldw (0x08, sp), y
+ 00003C 103 00107$:
+ 00003C 1E 08 [ 2] 104 ldw x, (0x08, sp)
+ 00003E F6 [ 1] 105 ld a, (x)
+ 00003F 6B 06 [ 1] 106 ld (0x06, sp), a
+ 107 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ 000041 6B 07 [ 1] 108 ld (0x07, sp), a
+ 000043 A1 30 [ 1] 109 cp a, #0x30
+ 000045 25 3F [ 1] 110 jrc 00109$
+ 000047 7B 07 [ 1] 111 ld a, (0x07, sp)
+ 000049 A1 39 [ 1] 112 cp a, #0x39
+ 00004B 22 39 [ 1] 113 jrugt 00109$
+ 114 ; ../atol.c: 48: ret = ret * 10 + (*(nptr++) - '0');
+ 00004D 1E 03 [ 2] 115 ldw x, (0x03, sp)
+ 00004F 89 [ 2] 116 pushw x
+ 000050 1E 03 [ 2] 117 ldw x, (0x03, sp)
+ 000052 89 [ 2] 118 pushw x
+ 000053 4B 0A [ 1] 119 push #0x0a
+ 000055 5F [ 1] 120 clrw x
+ 000056 89 [ 2] 121 pushw x
+ 000057 4B 00 [ 1] 122 push #0x00
+ 000059 8Ds00r00r00 [ 5] 123 callf __mullong
+ 00005D 5B 08 [ 2] 124 addw sp, #8
+ 00005F 1F 03 [ 2] 125 ldw (0x03, sp), x
+ 000061 17 01 [ 2] 126 ldw (0x01, sp), y
+ 000063 1E 08 [ 2] 127 ldw x, (0x08, sp)
+ 000065 5C [ 1] 128 incw x
+ 000066 1F 08 [ 2] 129 ldw (0x08, sp), x
+ 000068 5F [ 1] 130 clrw x
+ 000069 7B 06 [ 1] 131 ld a, (0x06, sp)
+ 00006B 97 [ 1] 132 ld xl, a
+ 00006C 1D 00 30 [ 2] 133 subw x, #0x0030
+ 00006F 51 [ 1] 134 exgw x, y
+ 000070 5F [ 1] 135 clrw x
+ 000071 90 5D [ 2] 136 tnzw y
+ 000073 2A 01 [ 1] 137 jrpl 00177$
+ 000075 5A [ 2] 138 decw x
+ 000076 139 00177$:
+ 000076 72 F9 03 [ 2] 140 addw y, (0x03, sp)
+ 000079 9F [ 1] 141 ld a, xl
+ 00007A 19 02 [ 1] 142 adc a, (0x02, sp)
+ 00007C 02 [ 1] 143 rlwa x
+ 00007D 19 01 [ 1] 144 adc a, (0x01, sp)
+ 00007F 95 [ 1] 145 ld xh, a
+ 000080 17 03 [ 2] 146 ldw (0x03, sp), y
+ 000082 1F 01 [ 2] 147 ldw (0x01, sp), x
+ 000084 20 B6 [ 2] 148 jra 00107$
+ 000086 149 00109$:
+ 150 ; ../atol.c: 50: return (neg ? -ret : ret); // Since -LONG_MIN is LONG_MIN in sdcc, the result value always turns out ok.
+ 000086 0D 05 [ 1] 151 tnz (0x05, sp)
+ 000088 27 10 [ 1] 152 jreq 00120$
+ 00008A 16 03 [ 2] 153 ldw y, (0x03, sp)
+ 00008C 90 50 [ 2] 154 negw y
+ 00008E 1E 01 [ 2] 155 ldw x, (0x01, sp)
+ 000090 24 01 [ 1] 156 jrnc 00179$
+ 000092 5C [ 1] 157 incw x
+ 000093 158 00179$:
+ 000093 50 [ 2] 159 negw x
+ 000094 17 08 [ 2] 160 ldw (0x08, sp), y
+ 000096 1F 06 [ 2] 161 ldw (0x06, sp), x
+ 000098 20 08 [ 2] 162 jra 00121$
+ 00009A 163 00120$:
+ 00009A 16 03 [ 2] 164 ldw y, (0x03, sp)
+ 00009C 17 08 [ 2] 165 ldw (0x08, sp), y
+ 00009E 16 01 [ 2] 166 ldw y, (0x01, sp)
+ 0000A0 17 06 [ 2] 167 ldw (0x06, sp), y
+ 0000A2 168 00121$:
+ 0000A2 1E 08 [ 2] 169 ldw x, (0x08, sp)
+ 0000A4 16 06 [ 2] 170 ldw y, (0x06, sp)
+ 171 ; ../atol.c: 51: }
+ 0000A6 5B 09 [ 2] 172 addw sp, #9
+ 0000A8 87 [ 5] 173 retf
+ 174 .area CODE
+ 175 .area CONST
+ 176 .area INITIALIZER
+ 177 .area CABS (ABS)
diff --git a/device/lib/stm8-large/atol.rel b/device/lib/stm8-large/atol.rel
new file mode 100644
index 0000000..5bdc8ab
--- /dev/null
+++ b/device/lib/stm8-large/atol.rel
@@ -0,0 +1,86 @@
+XH3
+H B areas 3 global symbols
+M atol
+O -mstm8
+S .__.ABS. Def000000
+S __mullong Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size A9 flags 0 addr 0
+S _atol Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 09 5F 1F 03 1F 01 16 0D 17 07
+R 00 00 00 09
+T 00 00 0B
+R 00 00 00 09
+T 00 00 0B 1E 07 F6 6B 09 1E 07 5C A1 20 27 04 A1
+R 00 00 00 09
+T 00 00 18 09 26 04
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 1F 07 20 EC
+R 00 00 00 09
+T 00 00 1F
+R 00 00 00 09
+T 00 00 1F 16 07 17 0D 7B 09 A0 2D 26 02 4C 21
+R 00 00 00 09
+T 00 00 2B
+R 00 00 00 09
+T 00 00 2B 4F
+R 00 00 00 09
+T 00 00 2C
+R 00 00 00 09
+T 00 00 2C 6B 05 26 06 7B 09 A1 2B 26 02
+R 00 00 00 09
+T 00 00 36
+R 00 00 00 09
+T 00 00 36 1F 0D
+R 00 00 00 09
+T 00 00 38
+R 00 00 00 09
+T 00 00 38 16 0D 17 08
+R 00 00 00 09
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 1E 08 F6 6B 06 6B 07 A1 30 25 3F 7B 07
+R 00 00 00 09
+T 00 00 49 A1 39 22 39 1E 03 89 1E 03 89 4B 0A 5F
+R 00 00 00 09
+T 00 00 56 89 4B 00 8D 00 00 00 5B 08 1F 03 17 01
+R 00 00 00 09 82 07 00 01
+T 00 00 63 1E 08 5C 1F 08 5F 7B 06 97 1D 00 30 51
+R 00 00 00 09
+T 00 00 70 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 00 76
+R 00 00 00 09
+T 00 00 76 72 F9 03 9F 19 02 02 19 01 95 17 03 1F
+R 00 00 00 09
+T 00 00 83 01 20 B6
+R 00 00 00 09
+T 00 00 86
+R 00 00 00 09
+T 00 00 86 0D 05 27 10 16 03 90 50 1E 01 24 01 5C
+R 00 00 00 09
+T 00 00 93
+R 00 00 00 09
+T 00 00 93 50 17 08 1F 06 20 08
+R 00 00 00 09
+T 00 00 9A
+R 00 00 00 09
+T 00 00 9A 16 03 17 08 16 01 17 06
+R 00 00 00 09
+T 00 00 A2
+R 00 00 00 09
+T 00 00 A2 1E 08 16 06 5B 09 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/atol.sym b/device/lib/stm8-large/atol.sym
new file mode 100644
index 0000000..ac92aa8
--- /dev/null
+++ b/device/lib/stm8-large/atol.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __mullong ****** GX
+ 9 _atol 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size A9 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/atoll.asm b/device/lib/stm8-large/atoll.asm
new file mode 100644
index 0000000..c64dace
--- /dev/null
+++ b/device/lib/stm8-large/atoll.asm
@@ -0,0 +1,51 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module atoll
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/atoll.lst b/device/lib/stm8-large/atoll.lst
new file mode 100644
index 0000000..fe5b8cd
--- /dev/null
+++ b/device/lib/stm8-large/atoll.lst
@@ -0,0 +1,51 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module atoll
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 ;--------------------------------------------------------
+ 12 ; ram data
+ 13 ;--------------------------------------------------------
+ 14 .area DATA
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area INITIALIZED
+ 19 ;--------------------------------------------------------
+ 20 ; absolute external ram data
+ 21 ;--------------------------------------------------------
+ 22 .area DABS (ABS)
+ 23
+ 24 ; default segment ordering for linker
+ 25 .area HOME
+ 26 .area GSINIT
+ 27 .area GSFINAL
+ 28 .area CONST
+ 29 .area INITIALIZER
+ 30 .area CODE
+ 31
+ 32 ;--------------------------------------------------------
+ 33 ; global & static initialisations
+ 34 ;--------------------------------------------------------
+ 35 .area HOME
+ 36 .area GSINIT
+ 37 .area GSFINAL
+ 38 .area GSINIT
+ 39 ;--------------------------------------------------------
+ 40 ; Home
+ 41 ;--------------------------------------------------------
+ 42 .area HOME
+ 43 .area HOME
+ 44 ;--------------------------------------------------------
+ 45 ; code
+ 46 ;--------------------------------------------------------
+ 47 .area CODE
+ 48 .area CODE
+ 49 .area CONST
+ 50 .area INITIALIZER
+ 51 .area CABS (ABS)
diff --git a/device/lib/stm8-large/atoll.rel b/device/lib/stm8-large/atoll.rel
new file mode 100644
index 0000000..23c8fda
--- /dev/null
+++ b/device/lib/stm8-large/atoll.rel
@@ -0,0 +1,16 @@
+XH3
+H B areas 1 global symbols
+M atoll
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 0 flags 0 addr 0
+A CABS size 0 flags 8 addr 0
diff --git a/device/lib/stm8-large/atoll.sym b/device/lib/stm8-large/atoll.sym
new file mode 100644
index 0000000..141f02b
--- /dev/null
+++ b/device/lib/stm8-large/atoll.sym
@@ -0,0 +1,28 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 0 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/bsearch.asm b/device/lib/stm8-large/bsearch.asm
new file mode 100644
index 0000000..26ed868
--- /dev/null
+++ b/device/lib/stm8-large/bsearch.asm
@@ -0,0 +1,124 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module bsearch
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _bsearch
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../bsearch.c: 31: void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant)
+; -----------------------------------------
+; function bsearch
+; -----------------------------------------
+_bsearch:
+ sub sp, #10
+; ../bsearch.c: 33: for(const char *left = base; nmemb;)
+ ldw x, (0x10, sp)
+ ldw (0x01, sp), x
+00109$:
+; ../bsearch.c: 35: const char *middle = left + nmemb / 2 * size;
+ ldw x, (0x12, sp)
+ jreq 00107$
+ srlw x
+ ldw (0x03, sp), x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ callf __mulint
+ addw sp, #4
+ addw x, (0x01, sp)
+; ../bsearch.c: 36: int c = (*compar)(key, middle);
+ ldw (0x05, sp), x
+ ldw (0x07, sp), x
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ push #(00134$)
+ push #(00134$ >> 8)
+ push #(00134$ >> 16)
+ ldw x, (0x1e, sp)
+ pushw x
+ ld a, (0x1f, sp)
+ push a
+ retf
+00134$:
+ addw sp, #4
+ ldw (0x09, sp), x
+; ../bsearch.c: 38: if(c < 0)
+ tnz (0x09, sp)
+ jrpl 00105$
+; ../bsearch.c: 39: nmemb = nmemb / 2;
+ ldw y, (0x03, sp)
+ ldw (0x12, sp), y
+ jra 00109$
+00105$:
+; ../bsearch.c: 40: else if(c > 0)
+ ldw x, (0x09, sp)
+ cpw x, #0x0000
+ jrsle 00102$
+; ../bsearch.c: 42: left = middle + size;
+ ldw x, (0x05, sp)
+ addw x, (0x14, sp)
+ ldw (0x01, sp), x
+; ../bsearch.c: 43: nmemb = (nmemb - 1) / 2;
+ ldw x, (0x12, sp)
+ decw x
+ srlw x
+ ldw (0x12, sp), x
+ jra 00109$
+00102$:
+; ../bsearch.c: 46: return(middle);
+ ldw x, (0x07, sp)
+; ../bsearch.c: 49: return(0);
+ .byte 0x21
+00107$:
+ clrw x
+00111$:
+; ../bsearch.c: 50: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/bsearch.lst b/device/lib/stm8-large/bsearch.lst
new file mode 100644
index 0000000..48dff07
--- /dev/null
+++ b/device/lib/stm8-large/bsearch.lst
@@ -0,0 +1,124 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module bsearch
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _bsearch
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../bsearch.c: 31: void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant)
+ 50 ; -----------------------------------------
+ 51 ; function bsearch
+ 52 ; -----------------------------------------
+ 000000 53 _bsearch:
+ 000000 52 0A [ 2] 54 sub sp, #10
+ 55 ; ../bsearch.c: 33: for(const char *left = base; nmemb;)
+ 000002 1E 10 [ 2] 56 ldw x, (0x10, sp)
+ 000004 1F 01 [ 2] 57 ldw (0x01, sp), x
+ 000006 58 00109$:
+ 59 ; ../bsearch.c: 35: const char *middle = left + nmemb / 2 * size;
+ 000006 1E 12 [ 2] 60 ldw x, (0x12, sp)
+ 000008 27 4E [ 1] 61 jreq 00107$
+ 00000A 54 [ 2] 62 srlw x
+ 00000B 1F 03 [ 2] 63 ldw (0x03, sp), x
+ 00000D 1E 14 [ 2] 64 ldw x, (0x14, sp)
+ 00000F 89 [ 2] 65 pushw x
+ 000010 1E 05 [ 2] 66 ldw x, (0x05, sp)
+ 000012 89 [ 2] 67 pushw x
+ 000013 8Ds00r00r00 [ 5] 68 callf __mulint
+ 000017 5B 04 [ 2] 69 addw sp, #4
+ 000019 72 FB 01 [ 2] 70 addw x, (0x01, sp)
+ 71 ; ../bsearch.c: 36: int c = (*compar)(key, middle);
+ 00001C 1F 05 [ 2] 72 ldw (0x05, sp), x
+ 00001E 1F 07 [ 2] 73 ldw (0x07, sp), x
+ 000020 89 [ 2] 74 pushw x
+ 000021 1E 10 [ 2] 75 ldw x, (0x10, sp)
+ 000023 89 [ 2] 76 pushw x
+ 000024 4Br31 [ 1] 77 push #(00134$)
+ 000026 4Bs00 [ 1] 78 push #(00134$ >> 8)
+ 000028 4Bs00 [ 1] 79 push #(00134$ >> 16)
+ 00002A 1E 1E [ 2] 80 ldw x, (0x1e, sp)
+ 00002C 89 [ 2] 81 pushw x
+ 00002D 7B 1F [ 1] 82 ld a, (0x1f, sp)
+ 00002F 88 [ 1] 83 push a
+ 000030 87 [ 5] 84 retf
+ 000031 85 00134$:
+ 000031 5B 04 [ 2] 86 addw sp, #4
+ 000033 1F 09 [ 2] 87 ldw (0x09, sp), x
+ 88 ; ../bsearch.c: 38: if(c < 0)
+ 000035 0D 09 [ 1] 89 tnz (0x09, sp)
+ 000037 2A 06 [ 1] 90 jrpl 00105$
+ 91 ; ../bsearch.c: 39: nmemb = nmemb / 2;
+ 000039 16 03 [ 2] 92 ldw y, (0x03, sp)
+ 00003B 17 12 [ 2] 93 ldw (0x12, sp), y
+ 00003D 20 C7 [ 2] 94 jra 00109$
+ 00003F 95 00105$:
+ 96 ; ../bsearch.c: 40: else if(c > 0)
+ 00003F 1E 09 [ 2] 97 ldw x, (0x09, sp)
+ 000041 A3 00 00 [ 2] 98 cpw x, #0x0000
+ 000044 2D 0F [ 1] 99 jrsle 00102$
+ 100 ; ../bsearch.c: 42: left = middle + size;
+ 000046 1E 05 [ 2] 101 ldw x, (0x05, sp)
+ 000048 72 FB 14 [ 2] 102 addw x, (0x14, sp)
+ 00004B 1F 01 [ 2] 103 ldw (0x01, sp), x
+ 104 ; ../bsearch.c: 43: nmemb = (nmemb - 1) / 2;
+ 00004D 1E 12 [ 2] 105 ldw x, (0x12, sp)
+ 00004F 5A [ 2] 106 decw x
+ 000050 54 [ 2] 107 srlw x
+ 000051 1F 12 [ 2] 108 ldw (0x12, sp), x
+ 000053 20 B1 [ 2] 109 jra 00109$
+ 000055 110 00102$:
+ 111 ; ../bsearch.c: 46: return(middle);
+ 000055 1E 07 [ 2] 112 ldw x, (0x07, sp)
+ 113 ; ../bsearch.c: 49: return(0);
+ 000057 21 114 .byte 0x21
+ 000058 115 00107$:
+ 000058 5F [ 1] 116 clrw x
+ 000059 117 00111$:
+ 118 ; ../bsearch.c: 50: }
+ 000059 5B 0A [ 2] 119 addw sp, #10
+ 00005B 87 [ 5] 120 retf
+ 121 .area CODE
+ 122 .area CONST
+ 123 .area INITIALIZER
+ 124 .area CABS (ABS)
diff --git a/device/lib/stm8-large/bsearch.rel b/device/lib/stm8-large/bsearch.rel
new file mode 100644
index 0000000..26f194c
--- /dev/null
+++ b/device/lib/stm8-large/bsearch.rel
@@ -0,0 +1,56 @@
+XH3
+H B areas 3 global symbols
+M bsearch
+O -mstm8
+S __mulint Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 5C flags 0 addr 0
+S _bsearch Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 1E 10 1F 01
+R 00 00 00 09
+T 00 00 06
+R 00 00 00 09
+T 00 00 06 1E 12 27 4E 54 1F 03 1E 14 89 1E 05 89
+R 00 00 00 09
+T 00 00 13 8D 00 00 00 5B 04 72 FB 01 1F 05 1F 07
+R 00 00 00 09 82 04 00 00
+T 00 00 20 89 1E 10 89 4B 00 00 31 4B 00 00 31 4B
+R 00 00 00 09 F1 01 08 00 09 F1 81 0C 00 09
+T 00 00 29 00 00 31 1E 1E 89 7B 1F 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 5B 04 1F 09 0D 09 2A 06 16 03 17 12 20
+R 00 00 00 09
+T 00 00 3E C7
+R 00 00 00 09
+T 00 00 3F
+R 00 00 00 09
+T 00 00 3F 1E 09 A3 00 00 2D 0F 1E 05 72 FB 14 1F
+R 00 00 00 09
+T 00 00 4C 01 1E 12 5A 54 1F 12 20 B1
+R 00 00 00 09
+T 00 00 55
+R 00 00 00 09
+T 00 00 55 1E 07 21
+R 00 00 00 09
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 5F
+R 00 00 00 09
+T 00 00 59
+R 00 00 00 09
+T 00 00 59 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/bsearch.sym b/device/lib/stm8-large/bsearch.sym
new file mode 100644
index 0000000..1ef62ca
--- /dev/null
+++ b/device/lib/stm8-large/bsearch.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __mulint ****** GX
+ 9 _bsearch 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 5C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/btowc.asm b/device/lib/stm8-large/btowc.asm
new file mode 100644
index 0000000..84037c8
--- /dev/null
+++ b/device/lib/stm8-large/btowc.asm
@@ -0,0 +1,76 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module btowc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _btowc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../btowc.c: 35: wint_t btowc(int c)
+; -----------------------------------------
+; function btowc
+; -----------------------------------------
+_btowc:
+; ../btowc.c: 37: if(c & 0x80)
+ tnz (0x05, sp)
+ jrpl 00102$
+; ../btowc.c: 38: return WEOF;
+ clrw x
+ decw x
+ ldw y, x
+ jra 00103$
+00102$:
+; ../btowc.c: 39: return c;
+ ldw x, (0x04, sp)
+ clrw y
+ tnzw x
+ jrpl 00111$
+ decw y
+00111$:
+00103$:
+; ../btowc.c: 40: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/btowc.lst b/device/lib/stm8-large/btowc.lst
new file mode 100644
index 0000000..e2462ba
--- /dev/null
+++ b/device/lib/stm8-large/btowc.lst
@@ -0,0 +1,76 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module btowc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _btowc
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../btowc.c: 35: wint_t btowc(int c)
+ 50 ; -----------------------------------------
+ 51 ; function btowc
+ 52 ; -----------------------------------------
+ 000000 53 _btowc:
+ 54 ; ../btowc.c: 37: if(c & 0x80)
+ 000000 0D 05 [ 1] 55 tnz (0x05, sp)
+ 000002 2A 06 [ 1] 56 jrpl 00102$
+ 57 ; ../btowc.c: 38: return WEOF;
+ 000004 5F [ 1] 58 clrw x
+ 000005 5A [ 2] 59 decw x
+ 000006 90 93 [ 1] 60 ldw y, x
+ 000008 20 09 [ 2] 61 jra 00103$
+ 00000A 62 00102$:
+ 63 ; ../btowc.c: 39: return c;
+ 00000A 1E 04 [ 2] 64 ldw x, (0x04, sp)
+ 00000C 90 5F [ 1] 65 clrw y
+ 00000E 5D [ 2] 66 tnzw x
+ 00000F 2A 02 [ 1] 67 jrpl 00111$
+ 000011 90 5A [ 2] 68 decw y
+ 000013 69 00111$:
+ 000013 70 00103$:
+ 71 ; ../btowc.c: 40: }
+ 000013 87 [ 5] 72 retf
+ 73 .area CODE
+ 74 .area CONST
+ 75 .area INITIALIZER
+ 76 .area CABS (ABS)
diff --git a/device/lib/stm8-large/btowc.rel b/device/lib/stm8-large/btowc.rel
new file mode 100644
index 0000000..4497e3e
--- /dev/null
+++ b/device/lib/stm8-large/btowc.rel
@@ -0,0 +1,31 @@
+XH3
+H B areas 2 global symbols
+M btowc
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 14 flags 0 addr 0
+S _btowc Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 0D 05 2A 06 5F 5A 90 93 20 09
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 1E 04 90 5F 5D 2A 02 90 5A
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/btowc.sym b/device/lib/stm8-large/btowc.sym
new file mode 100644
index 0000000..7597e19
--- /dev/null
+++ b/device/lib/stm8-large/btowc.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _btowc 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 14 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/c16rtomb.asm b/device/lib/stm8-large/c16rtomb.asm
new file mode 100644
index 0000000..c56c8c2
--- /dev/null
+++ b/device/lib/stm8-large/c16rtomb.asm
@@ -0,0 +1,209 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module c16rtomb
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wctomb
+ .globl _c16rtomb
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_c16rtomb_sps_65536_36:
+ .ds 3
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../c16rtomb.c: 35: size_t c16rtomb(char *restrict s, char16_t c16, mbstate_t *restrict ps)
+; -----------------------------------------
+; function c16rtomb
+; -----------------------------------------
+_c16rtomb:
+ sub sp, #12
+; ../c16rtomb.c: 41: if(!s)
+ ldw x, (0x10, sp)
+ jrne 00102$
+; ../c16rtomb.c: 42: s = buf;
+ ldw x, sp
+ incw x
+ ldw (0x10, sp), x
+00102$:
+; ../c16rtomb.c: 44: if(!ps)
+ ldw x, (0x14, sp)
+ jrne 00104$
+; ../c16rtomb.c: 45: ps = &sps;
+ ldw x, #(_c16rtomb_sps_65536_36 + 0)
+ ldw (0x14, sp), x
+00104$:
+; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0;
+ ldw y, (0x14, sp)
+ ldw x, y
+ incw x
+ ldw (0x05, sp), x
+ ldw x, y
+ incw x
+ incw x
+ ldw (0x07, sp), x
+; ../c16rtomb.c: 47: if (!c16) // 0 always resets conversion state.
+ ldw x, (0x12, sp)
+ jrne 00119$
+; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0;
+ ldw x, (0x07, sp)
+ clr (x)
+ ldw x, (0x05, sp)
+ clr (x)
+; ../c16rtomb.c: 50: codepoint = 0;
+ clrw x
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), x
+ jpf 00120$
+00119$:
+; ../c16rtomb.c: 52: else if(ps->c[1] || ps->c[2]) // We already have the high surrogate. Now get the low surrogate
+ ldw x, (0x05, sp)
+ ld a, (x)
+ ld yl, a
+ tnz a
+ jrne 00114$
+ ldw x, (0x07, sp)
+ ld a, (x)
+ jreq 00115$
+00114$:
+; ../c16rtomb.c: 56: if(c16 < 0xdc00 || c16 > 0xdfff)
+ ldw x, (0x12, sp)
+ cpw x, #0xdc00
+ jrnc 00169$
+ jpf 00121$
+00169$:
+ ldw x, (0x12, sp)
+ cpw x, #0xdfff
+ jrugt 00121$
+; ../c16rtomb.c: 59: high_surrogate = ps->c[1] + (ps->c[2] << 8);
+ exg a, yl
+ ld (0x0a, sp), a
+ exg a, yl
+ clr (0x09, sp)
+ ldw y, (0x07, sp)
+ ld a, (y)
+ ld xh, a
+ clr (0x0c, sp)
+ ld a, (0x0c, sp)
+ ld xl, a
+ addw x, (0x09, sp)
+; ../c16rtomb.c: 60: ps->c[1] = ps->c[2] = 0;
+ ldw y, (0x07, sp)
+ clr (y)
+ ldw y, (0x05, sp)
+ clr (y)
+; ../c16rtomb.c: 61: codepoint = (high_surrogate << 10) - (0xd800 << 10) + c16 - 0xdc00 + 0x10000;
+ clr a
+ rlwa x
+ sllw x
+ sllw x
+ addw x, (0x12, sp)
+ ldw (0x0b, sp), x
+ clr (0x0a, sp)
+ clr (0x09, sp)
+ ldw x, (0x0b, sp)
+ addw x, #0x2400
+ ldw y, (0x09, sp)
+ jrnc 00171$
+ incw y
+00171$:
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ jra 00120$
+00115$:
+; ../c16rtomb.c: 63: else if(c16 < 0xd7ff || c16 >= 0xe000) // Basic multilingual plane.
+ ldw x, (0x12, sp)
+ cpw x, #0xd7ff
+ jrc 00110$
+ cpw x, #0xe000
+ jrc 00111$
+00110$:
+; ../c16rtomb.c: 64: codepoint = c16;
+ ldw y, (0x12, sp)
+ clrw x
+ ldw (0x0b, sp), y
+ ldw (0x09, sp), x
+ jra 00120$
+00111$:
+; ../c16rtomb.c: 67: if(c16 > 0xdbff)
+ ldw x, (0x12, sp)
+ cpw x, #0xdbff
+ jrugt 00121$
+; ../c16rtomb.c: 70: ps->c[1] = c16 & 0xff;
+ ld a, (0x13, sp)
+ ldw x, (0x05, sp)
+ ld (x), a
+; ../c16rtomb.c: 71: ps->c[2] = c16 >> 8;
+ ld a, (0x12, sp)
+ ld (0x0c, sp), a
+ clr (0x0b, sp)
+ ld a, (0x0c, sp)
+ ldw x, (0x07, sp)
+ ld (x), a
+; ../c16rtomb.c: 72: return(0);
+ clrw x
+ jra 00122$
+00120$:
+; ../c16rtomb.c: 75: return(wctomb(s, codepoint));
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf _wctomb
+ addw sp, #6
+ jra 00122$
+; ../c16rtomb.c: 77: eilseq:
+00121$:
+; ../c16rtomb.c: 78: errno = EILSEQ;
+ ldw x, #0x0054
+ ldw _errno+0, x
+; ../c16rtomb.c: 79: return(-1);
+ clrw x
+ decw x
+00122$:
+; ../c16rtomb.c: 80: }
+ addw sp, #12
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/c16rtomb.lst b/device/lib/stm8-large/c16rtomb.lst
new file mode 100644
index 0000000..c7106e4
--- /dev/null
+++ b/device/lib/stm8-large/c16rtomb.lst
@@ -0,0 +1,209 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module c16rtomb
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wctomb
+ 12 .globl _c16rtomb
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 000000 17 _c16rtomb_sps_65536_36:
+ 000000 18 .ds 3
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../c16rtomb.c: 35: size_t c16rtomb(char *restrict s, char16_t c16, mbstate_t *restrict ps)
+ 53 ; -----------------------------------------
+ 54 ; function c16rtomb
+ 55 ; -----------------------------------------
+ 000000 56 _c16rtomb:
+ 000000 52 0C [ 2] 57 sub sp, #12
+ 58 ; ../c16rtomb.c: 41: if(!s)
+ 000002 1E 10 [ 2] 59 ldw x, (0x10, sp)
+ 000004 26 04 [ 1] 60 jrne 00102$
+ 61 ; ../c16rtomb.c: 42: s = buf;
+ 000006 96 [ 1] 62 ldw x, sp
+ 000007 5C [ 1] 63 incw x
+ 000008 1F 10 [ 2] 64 ldw (0x10, sp), x
+ 00000A 65 00102$:
+ 66 ; ../c16rtomb.c: 44: if(!ps)
+ 00000A 1E 14 [ 2] 67 ldw x, (0x14, sp)
+ 00000C 26 05 [ 1] 68 jrne 00104$
+ 69 ; ../c16rtomb.c: 45: ps = &sps;
+ 00000E AEr00r00 [ 2] 70 ldw x, #(_c16rtomb_sps_65536_36 + 0)
+ 000011 1F 14 [ 2] 71 ldw (0x14, sp), x
+ 000013 72 00104$:
+ 73 ; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0;
+ 000013 16 14 [ 2] 74 ldw y, (0x14, sp)
+ 000015 93 [ 1] 75 ldw x, y
+ 000016 5C [ 1] 76 incw x
+ 000017 1F 05 [ 2] 77 ldw (0x05, sp), x
+ 000019 93 [ 1] 78 ldw x, y
+ 00001A 5C [ 1] 79 incw x
+ 00001B 5C [ 1] 80 incw x
+ 00001C 1F 07 [ 2] 81 ldw (0x07, sp), x
+ 82 ; ../c16rtomb.c: 47: if (!c16) // 0 always resets conversion state.
+ 00001E 1E 12 [ 2] 83 ldw x, (0x12, sp)
+ 000020 26 0F [ 1] 84 jrne 00119$
+ 85 ; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0;
+ 000022 1E 07 [ 2] 86 ldw x, (0x07, sp)
+ 000024 7F [ 1] 87 clr (x)
+ 000025 1E 05 [ 2] 88 ldw x, (0x05, sp)
+ 000027 7F [ 1] 89 clr (x)
+ 90 ; ../c16rtomb.c: 50: codepoint = 0;
+ 000028 5F [ 1] 91 clrw x
+ 000029 1F 0B [ 2] 92 ldw (0x0b, sp), x
+ 00002B 1F 09 [ 2] 93 ldw (0x09, sp), x
+ 00002D ACs00r00rB8 [ 2] 94 jpf 00120$
+ 000031 95 00119$:
+ 96 ; ../c16rtomb.c: 52: else if(ps->c[1] || ps->c[2]) // We already have the high surrogate. Now get the low surrogate
+ 000031 1E 05 [ 2] 97 ldw x, (0x05, sp)
+ 000033 F6 [ 1] 98 ld a, (x)
+ 000034 90 97 [ 1] 99 ld yl, a
+ 000036 4D [ 1] 100 tnz a
+ 000037 26 05 [ 1] 101 jrne 00114$
+ 000039 1E 07 [ 2] 102 ldw x, (0x07, sp)
+ 00003B F6 [ 1] 103 ld a, (x)
+ 00003C 27 4B [ 1] 104 jreq 00115$
+ 00003E 105 00114$:
+ 106 ; ../c16rtomb.c: 56: if(c16 < 0xdc00 || c16 > 0xdfff)
+ 00003E 1E 12 [ 2] 107 ldw x, (0x12, sp)
+ 000040 A3 DC 00 [ 2] 108 cpw x, #0xdc00
+ 000043 24 04 [ 1] 109 jrnc 00169$
+ 000045 ACs00r00rC9 [ 2] 110 jpf 00121$
+ 000049 111 00169$:
+ 000049 1E 12 [ 2] 112 ldw x, (0x12, sp)
+ 00004B A3 DF FF [ 2] 113 cpw x, #0xdfff
+ 00004E 22 79 [ 1] 114 jrugt 00121$
+ 115 ; ../c16rtomb.c: 59: high_surrogate = ps->c[1] + (ps->c[2] << 8);
+ 000050 61 [ 1] 116 exg a, yl
+ 000051 6B 0A [ 1] 117 ld (0x0a, sp), a
+ 000053 61 [ 1] 118 exg a, yl
+ 000054 0F 09 [ 1] 119 clr (0x09, sp)
+ 000056 16 07 [ 2] 120 ldw y, (0x07, sp)
+ 000058 90 F6 [ 1] 121 ld a, (y)
+ 00005A 95 [ 1] 122 ld xh, a
+ 00005B 0F 0C [ 1] 123 clr (0x0c, sp)
+ 00005D 7B 0C [ 1] 124 ld a, (0x0c, sp)
+ 00005F 97 [ 1] 125 ld xl, a
+ 000060 72 FB 09 [ 2] 126 addw x, (0x09, sp)
+ 127 ; ../c16rtomb.c: 60: ps->c[1] = ps->c[2] = 0;
+ 000063 16 07 [ 2] 128 ldw y, (0x07, sp)
+ 000065 90 7F [ 1] 129 clr (y)
+ 000067 16 05 [ 2] 130 ldw y, (0x05, sp)
+ 000069 90 7F [ 1] 131 clr (y)
+ 132 ; ../c16rtomb.c: 61: codepoint = (high_surrogate << 10) - (0xd800 << 10) + c16 - 0xdc00 + 0x10000;
+ 00006B 4F [ 1] 133 clr a
+ 00006C 02 [ 1] 134 rlwa x
+ 00006D 58 [ 2] 135 sllw x
+ 00006E 58 [ 2] 136 sllw x
+ 00006F 72 FB 12 [ 2] 137 addw x, (0x12, sp)
+ 000072 1F 0B [ 2] 138 ldw (0x0b, sp), x
+ 000074 0F 0A [ 1] 139 clr (0x0a, sp)
+ 000076 0F 09 [ 1] 140 clr (0x09, sp)
+ 000078 1E 0B [ 2] 141 ldw x, (0x0b, sp)
+ 00007A 1C 24 00 [ 2] 142 addw x, #0x2400
+ 00007D 16 09 [ 2] 143 ldw y, (0x09, sp)
+ 00007F 24 02 [ 1] 144 jrnc 00171$
+ 000081 90 5C [ 1] 145 incw y
+ 000083 146 00171$:
+ 000083 1F 0B [ 2] 147 ldw (0x0b, sp), x
+ 000085 17 09 [ 2] 148 ldw (0x09, sp), y
+ 000087 20 2F [ 2] 149 jra 00120$
+ 000089 150 00115$:
+ 151 ; ../c16rtomb.c: 63: else if(c16 < 0xd7ff || c16 >= 0xe000) // Basic multilingual plane.
+ 000089 1E 12 [ 2] 152 ldw x, (0x12, sp)
+ 00008B A3 D7 FF [ 2] 153 cpw x, #0xd7ff
+ 00008E 25 05 [ 1] 154 jrc 00110$
+ 000090 A3 E0 00 [ 2] 155 cpw x, #0xe000
+ 000093 25 09 [ 1] 156 jrc 00111$
+ 000095 157 00110$:
+ 158 ; ../c16rtomb.c: 64: codepoint = c16;
+ 000095 16 12 [ 2] 159 ldw y, (0x12, sp)
+ 000097 5F [ 1] 160 clrw x
+ 000098 17 0B [ 2] 161 ldw (0x0b, sp), y
+ 00009A 1F 09 [ 2] 162 ldw (0x09, sp), x
+ 00009C 20 1A [ 2] 163 jra 00120$
+ 00009E 164 00111$:
+ 165 ; ../c16rtomb.c: 67: if(c16 > 0xdbff)
+ 00009E 1E 12 [ 2] 166 ldw x, (0x12, sp)
+ 0000A0 A3 DB FF [ 2] 167 cpw x, #0xdbff
+ 0000A3 22 24 [ 1] 168 jrugt 00121$
+ 169 ; ../c16rtomb.c: 70: ps->c[1] = c16 & 0xff;
+ 0000A5 7B 13 [ 1] 170 ld a, (0x13, sp)
+ 0000A7 1E 05 [ 2] 171 ldw x, (0x05, sp)
+ 0000A9 F7 [ 1] 172 ld (x), a
+ 173 ; ../c16rtomb.c: 71: ps->c[2] = c16 >> 8;
+ 0000AA 7B 12 [ 1] 174 ld a, (0x12, sp)
+ 0000AC 6B 0C [ 1] 175 ld (0x0c, sp), a
+ 0000AE 0F 0B [ 1] 176 clr (0x0b, sp)
+ 0000B0 7B 0C [ 1] 177 ld a, (0x0c, sp)
+ 0000B2 1E 07 [ 2] 178 ldw x, (0x07, sp)
+ 0000B4 F7 [ 1] 179 ld (x), a
+ 180 ; ../c16rtomb.c: 72: return(0);
+ 0000B5 5F [ 1] 181 clrw x
+ 0000B6 20 19 [ 2] 182 jra 00122$
+ 0000B8 183 00120$:
+ 184 ; ../c16rtomb.c: 75: return(wctomb(s, codepoint));
+ 0000B8 1E 0B [ 2] 185 ldw x, (0x0b, sp)
+ 0000BA 89 [ 2] 186 pushw x
+ 0000BB 1E 0B [ 2] 187 ldw x, (0x0b, sp)
+ 0000BD 89 [ 2] 188 pushw x
+ 0000BE 1E 14 [ 2] 189 ldw x, (0x14, sp)
+ 0000C0 89 [ 2] 190 pushw x
+ 0000C1 8Ds00r00r00 [ 5] 191 callf _wctomb
+ 0000C5 5B 06 [ 2] 192 addw sp, #6
+ 0000C7 20 08 [ 2] 193 jra 00122$
+ 194 ; ../c16rtomb.c: 77: eilseq:
+ 0000C9 195 00121$:
+ 196 ; ../c16rtomb.c: 78: errno = EILSEQ;
+ 0000C9 AE 00 54 [ 2] 197 ldw x, #0x0054
+ 0000CC CFu00u00 [ 2] 198 ldw _errno+0, x
+ 199 ; ../c16rtomb.c: 79: return(-1);
+ 0000CF 5F [ 1] 200 clrw x
+ 0000D0 5A [ 2] 201 decw x
+ 0000D1 202 00122$:
+ 203 ; ../c16rtomb.c: 80: }
+ 0000D1 5B 0C [ 2] 204 addw sp, #12
+ 0000D3 87 [ 5] 205 retf
+ 206 .area CODE
+ 207 .area CONST
+ 208 .area INITIALIZER
+ 209 .area CABS (ABS)
diff --git a/device/lib/stm8-large/c16rtomb.rel b/device/lib/stm8-large/c16rtomb.rel
new file mode 100644
index 0000000..bd2a742
--- /dev/null
+++ b/device/lib/stm8-large/c16rtomb.rel
@@ -0,0 +1,93 @@
+XH3
+H B areas 4 global symbols
+M c16rtomb
+O -mstm8
+S _errno Ref000000
+S .__.ABS. Def000000
+S _wctomb Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 3 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size D4 flags 0 addr 0
+S _c16rtomb Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0C 1E 10 26 04 96 5C 1F 10
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 1E 14 26 05 AE 00 00 1F 14
+R 00 00 00 09 00 08 00 01
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 16 14 93 5C 1F 05 93 5C 5C 1F 07 1E 12
+R 00 00 00 09
+T 00 00 20 26 0F 1E 07 7F 1E 05 7F 5F 1F 0B 1F 09
+R 00 00 00 09
+T 00 00 2D AC 00 00 B8
+R 00 00 00 09 80 04 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 1E 05 F6 90 97 4D 26 05 1E 07 F6 27 4B
+R 00 00 00 09
+T 00 00 3E
+R 00 00 00 09
+T 00 00 3E 1E 12 A3 DC 00 24 04 AC
+R 00 00 00 09
+T 00 00 46 00 00 C9
+R 00 00 00 09 80 03 00 09
+T 00 00 49
+R 00 00 00 09
+T 00 00 49 1E 12 A3 DF FF 22 79 61 6B 0A 61 0F 09
+R 00 00 00 09
+T 00 00 56 16 07 90 F6 95 0F 0C 7B 0C 97 72 FB 09
+R 00 00 00 09
+T 00 00 63 16 07 90 7F 16 05 90 7F 4F 02 58 58 72
+R 00 00 00 09
+T 00 00 70 FB 12 1F 0B 0F 0A 0F 09 1E 0B 1C 24 00
+R 00 00 00 09
+T 00 00 7D 16 09 24 02 90 5C
+R 00 00 00 09
+T 00 00 83
+R 00 00 00 09
+T 00 00 83 1F 0B 17 09 20 2F
+R 00 00 00 09
+T 00 00 89
+R 00 00 00 09
+T 00 00 89 1E 12 A3 D7 FF 25 05 A3 E0 00 25 09
+R 00 00 00 09
+T 00 00 95
+R 00 00 00 09
+T 00 00 95 16 12 5F 17 0B 1F 09 20 1A
+R 00 00 00 09
+T 00 00 9E
+R 00 00 00 09
+T 00 00 9E 1E 12 A3 DB FF 22 24 7B 13 1E 05 F7 7B
+R 00 00 00 09
+T 00 00 AB 12 6B 0C 0F 0B 7B 0C 1E 07 F7 5F 20 19
+R 00 00 00 09
+T 00 00 B8
+R 00 00 00 09
+T 00 00 B8 1E 0B 89 1E 0B 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 C2 00 00 00 5B 06 20 08
+R 00 00 00 09 82 03 00 02
+T 00 00 C9
+R 00 00 00 09
+T 00 00 C9 AE 00 54 CF 00 00 5F 5A
+R 00 00 00 09 12 07 00 00
+T 00 00 D1
+R 00 00 00 09
+T 00 00 D1 5B 0C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/c16rtomb.sym b/device/lib/stm8-large/c16rtomb.sym
new file mode 100644
index 0000000..f262f5f
--- /dev/null
+++ b/device/lib/stm8-large/c16rtomb.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _c16rtomb 000000 GR
+ 1 _c16rtomb_sps_65536_36 000000 R
+ _errno ****** GX
+ _wctomb ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 3 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size D4 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/c16stombs.asm b/device/lib/stm8-large/c16stombs.asm
new file mode 100644
index 0000000..fd5b3fd
--- /dev/null
+++ b/device/lib/stm8-large/c16stombs.asm
@@ -0,0 +1,209 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module c16stombs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___memcpy
+ .globl _wctomb
+ .globl ___c16stombs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../c16stombs.c: 44: size_t __c16stombs(char *restrict s, const char16_t *restrict c16s, size_t n)
+; -----------------------------------------
+; function __c16stombs
+; -----------------------------------------
+___c16stombs:
+ sub sp, #18
+; ../c16stombs.c: 46: size_t m = 0;
+ clrw x
+ ldw (0x09, sp), x
+; ../c16stombs.c: 87: return(m);
+00119$:
+; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane
+ ldw y, (0x18, sp)
+ ldw (0x0b, sp), y
+ ldw x, y
+ ldw x, (x)
+ ldw (0x03, sp), x
+; ../c16stombs.c: 57: c16s++;
+ ldw x, (0x0b, sp)
+ incw x
+ incw x
+ ldw (0x0d, sp), x
+; ../c16stombs.c: 56: codepoint = c16s[0];
+ ldw y, (0x03, sp)
+ ldw (0x11, sp), y
+ clr (0x10, sp)
+ clr (0x0f, sp)
+; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane
+ ldw x, (0x03, sp)
+ cpw x, #0xd800
+ jrc 00106$
+ cpw x, #0xe000
+ jrc 00107$
+00106$:
+; ../c16stombs.c: 56: codepoint = c16s[0];
+; ../c16stombs.c: 57: c16s++;
+ ldw x, (0x0d, sp)
+ ldw (0x18, sp), x
+ jra 00108$
+00107$:
+; ../c16stombs.c: 59: else if(c16s[0] > 0xdbff || c16s[1] < 0xdc00 || c16s[1] > 0xdfff) // Unpaired surrogate
+ ldw x, (0x03, sp)
+ cpw x, #0xdbff
+ jrugt 00101$
+ ldw x, (0x0d, sp)
+ ldw x, (x)
+ cpw x, #0xdc00
+ jrc 00101$
+ cpw x, #0xdfff
+ jrule 00102$
+00101$:
+; ../c16stombs.c: 60: return(-1);
+ clrw x
+ decw x
+ jpf 00121$
+00102$:
+; ../c16stombs.c: 63: codepoint = ((unsigned long)(c16s[0]) << 10) -(0xd800ul << 10) + (unsigned long)(c16s[1]) - 0xdc00ul + 0x10000ul;
+ ld a, #0x0a
+00168$:
+ sll (0x12, sp)
+ rlc (0x11, sp)
+ rlc (0x10, sp)
+ rlc (0x0f, sp)
+ dec a
+ jrne 00168$
+ ldw (0x03, sp), x
+ clrw x
+ ldw y, (0x03, sp)
+ addw y, (0x11, sp)
+ ld a, xl
+ adc a, (0x10, sp)
+ push a
+ ld a, xh
+ adc a, (0x10, sp)
+ ld xh, a
+ pop a
+ addw y, #0x2400
+ adc a, #0xa0
+ rlwa x
+ adc a, #0xfc
+ ld xh, a
+ ldw (0x11, sp), y
+ ldw (0x0f, sp), x
+; ../c16stombs.c: 64: c16s += 2;
+ ldw x, (0x0b, sp)
+ addw x, #0x0004
+ ldw (0x18, sp), x
+00108$:
+; ../c16stombs.c: 67: if(!codepoint)
+ ldw x, (0x11, sp)
+ jrne 00113$
+ ldw x, (0x0f, sp)
+ jrne 00113$
+; ../c16stombs.c: 69: if(m < n)
+ ldw x, (0x09, sp)
+ cpw x, (0x1a, sp)
+ jrnc 00118$
+; ../c16stombs.c: 70: *s = 0;
+ ldw x, (0x16, sp)
+ clr (x)
+; ../c16stombs.c: 71: break;
+ jra 00118$
+00113$:
+; ../c16stombs.c: 74: l = wctomb(b, codepoint);
+ ldw x, sp
+ addw x, #5
+ ldw (0x0d, sp), x
+ ldw y, (0x11, sp)
+ pushw y
+ ldw y, (0x11, sp)
+ pushw y
+ pushw x
+ callf _wctomb
+ addw sp, #6
+ ldw (0x0f, sp), x
+; ../c16stombs.c: 76: if(l < 0)
+ tnz (0x0f, sp)
+ jrpl 00115$
+; ../c16stombs.c: 77: return(-1);
+ clrw x
+ decw x
+ jra 00121$
+00115$:
+; ../c16stombs.c: 79: if(m + l > n)
+ ldw x, (0x0f, sp)
+ addw x, (0x09, sp)
+ ldw (0x11, sp), x
+ cpw x, (0x1a, sp)
+ jrugt 00118$
+; ../c16stombs.c: 82: memcpy(s, b, l);
+ ldw y, (0x0d, sp)
+ ldw x, (0x16, sp)
+ ld a, (0x10, sp)
+ push a
+ ld a, (0x10, sp)
+ push a
+ pushw y
+ pushw x
+ callf ___memcpy
+ addw sp, #6
+; ../c16stombs.c: 83: s += l;
+ ldw x, (0x16, sp)
+ addw x, (0x0f, sp)
+ ldw (0x16, sp), x
+; ../c16stombs.c: 84: m += l;
+ ldw x, (0x11, sp)
+ ldw (0x09, sp), x
+ jpf 00119$
+00118$:
+; ../c16stombs.c: 87: return(m);
+ ldw x, (0x09, sp)
+00121$:
+; ../c16stombs.c: 88: }
+ addw sp, #18
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/c16stombs.lst b/device/lib/stm8-large/c16stombs.lst
new file mode 100644
index 0000000..dd8c6fd
--- /dev/null
+++ b/device/lib/stm8-large/c16stombs.lst
@@ -0,0 +1,209 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module c16stombs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___memcpy
+ 12 .globl _wctomb
+ 13 .globl ___c16stombs
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../c16stombs.c: 44: size_t __c16stombs(char *restrict s, const char16_t *restrict c16s, size_t n)
+ 52 ; -----------------------------------------
+ 53 ; function __c16stombs
+ 54 ; -----------------------------------------
+ 000000 55 ___c16stombs:
+ 000000 52 12 [ 2] 56 sub sp, #18
+ 57 ; ../c16stombs.c: 46: size_t m = 0;
+ 000002 5F [ 1] 58 clrw x
+ 000003 1F 09 [ 2] 59 ldw (0x09, sp), x
+ 60 ; ../c16stombs.c: 87: return(m);
+ 000005 61 00119$:
+ 62 ; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane
+ 000005 16 18 [ 2] 63 ldw y, (0x18, sp)
+ 000007 17 0B [ 2] 64 ldw (0x0b, sp), y
+ 000009 93 [ 1] 65 ldw x, y
+ 00000A FE [ 2] 66 ldw x, (x)
+ 00000B 1F 03 [ 2] 67 ldw (0x03, sp), x
+ 68 ; ../c16stombs.c: 57: c16s++;
+ 00000D 1E 0B [ 2] 69 ldw x, (0x0b, sp)
+ 00000F 5C [ 1] 70 incw x
+ 000010 5C [ 1] 71 incw x
+ 000011 1F 0D [ 2] 72 ldw (0x0d, sp), x
+ 73 ; ../c16stombs.c: 56: codepoint = c16s[0];
+ 000013 16 03 [ 2] 74 ldw y, (0x03, sp)
+ 000015 17 11 [ 2] 75 ldw (0x11, sp), y
+ 000017 0F 10 [ 1] 76 clr (0x10, sp)
+ 000019 0F 0F [ 1] 77 clr (0x0f, sp)
+ 78 ; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane
+ 00001B 1E 03 [ 2] 79 ldw x, (0x03, sp)
+ 00001D A3 D8 00 [ 2] 80 cpw x, #0xd800
+ 000020 25 05 [ 1] 81 jrc 00106$
+ 000022 A3 E0 00 [ 2] 82 cpw x, #0xe000
+ 000025 25 06 [ 1] 83 jrc 00107$
+ 000027 84 00106$:
+ 85 ; ../c16stombs.c: 56: codepoint = c16s[0];
+ 86 ; ../c16stombs.c: 57: c16s++;
+ 000027 1E 0D [ 2] 87 ldw x, (0x0d, sp)
+ 000029 1F 18 [ 2] 88 ldw (0x18, sp), x
+ 00002B 20 4D [ 2] 89 jra 00108$
+ 00002D 90 00107$:
+ 91 ; ../c16stombs.c: 59: else if(c16s[0] > 0xdbff || c16s[1] < 0xdc00 || c16s[1] > 0xdfff) // Unpaired surrogate
+ 00002D 1E 03 [ 2] 92 ldw x, (0x03, sp)
+ 00002F A3 DB FF [ 2] 93 cpw x, #0xdbff
+ 000032 22 0D [ 1] 94 jrugt 00101$
+ 000034 1E 0D [ 2] 95 ldw x, (0x0d, sp)
+ 000036 FE [ 2] 96 ldw x, (x)
+ 000037 A3 DC 00 [ 2] 97 cpw x, #0xdc00
+ 00003A 25 05 [ 1] 98 jrc 00101$
+ 00003C A3 DF FF [ 2] 99 cpw x, #0xdfff
+ 00003F 23 06 [ 2] 100 jrule 00102$
+ 000041 101 00101$:
+ 102 ; ../c16stombs.c: 60: return(-1);
+ 000041 5F [ 1] 103 clrw x
+ 000042 5A [ 2] 104 decw x
+ 000043 ACs00r00rDB [ 2] 105 jpf 00121$
+ 000047 106 00102$:
+ 107 ; ../c16stombs.c: 63: codepoint = ((unsigned long)(c16s[0]) << 10) -(0xd800ul << 10) + (unsigned long)(c16s[1]) - 0xdc00ul + 0x10000ul;
+ 000047 A6 0A [ 1] 108 ld a, #0x0a
+ 000049 109 00168$:
+ 000049 08 12 [ 1] 110 sll (0x12, sp)
+ 00004B 09 11 [ 1] 111 rlc (0x11, sp)
+ 00004D 09 10 [ 1] 112 rlc (0x10, sp)
+ 00004F 09 0F [ 1] 113 rlc (0x0f, sp)
+ 000051 4A [ 1] 114 dec a
+ 000052 26 F5 [ 1] 115 jrne 00168$
+ 000054 1F 03 [ 2] 116 ldw (0x03, sp), x
+ 000056 5F [ 1] 117 clrw x
+ 000057 16 03 [ 2] 118 ldw y, (0x03, sp)
+ 000059 72 F9 11 [ 2] 119 addw y, (0x11, sp)
+ 00005C 9F [ 1] 120 ld a, xl
+ 00005D 19 10 [ 1] 121 adc a, (0x10, sp)
+ 00005F 88 [ 1] 122 push a
+ 000060 9E [ 1] 123 ld a, xh
+ 000061 19 10 [ 1] 124 adc a, (0x10, sp)
+ 000063 95 [ 1] 125 ld xh, a
+ 000064 84 [ 1] 126 pop a
+ 000065 72 A9 24 00 [ 2] 127 addw y, #0x2400
+ 000069 A9 A0 [ 1] 128 adc a, #0xa0
+ 00006B 02 [ 1] 129 rlwa x
+ 00006C A9 FC [ 1] 130 adc a, #0xfc
+ 00006E 95 [ 1] 131 ld xh, a
+ 00006F 17 11 [ 2] 132 ldw (0x11, sp), y
+ 000071 1F 0F [ 2] 133 ldw (0x0f, sp), x
+ 134 ; ../c16stombs.c: 64: c16s += 2;
+ 000073 1E 0B [ 2] 135 ldw x, (0x0b, sp)
+ 000075 1C 00 04 [ 2] 136 addw x, #0x0004
+ 000078 1F 18 [ 2] 137 ldw (0x18, sp), x
+ 00007A 138 00108$:
+ 139 ; ../c16stombs.c: 67: if(!codepoint)
+ 00007A 1E 11 [ 2] 140 ldw x, (0x11, sp)
+ 00007C 26 0F [ 1] 141 jrne 00113$
+ 00007E 1E 0F [ 2] 142 ldw x, (0x0f, sp)
+ 000080 26 0B [ 1] 143 jrne 00113$
+ 144 ; ../c16stombs.c: 69: if(m < n)
+ 000082 1E 09 [ 2] 145 ldw x, (0x09, sp)
+ 000084 13 1A [ 2] 146 cpw x, (0x1a, sp)
+ 000086 24 51 [ 1] 147 jrnc 00118$
+ 148 ; ../c16stombs.c: 70: *s = 0;
+ 000088 1E 16 [ 2] 149 ldw x, (0x16, sp)
+ 00008A 7F [ 1] 150 clr (x)
+ 151 ; ../c16stombs.c: 71: break;
+ 00008B 20 4C [ 2] 152 jra 00118$
+ 00008D 153 00113$:
+ 154 ; ../c16stombs.c: 74: l = wctomb(b, codepoint);
+ 00008D 96 [ 1] 155 ldw x, sp
+ 00008E 1C 00 05 [ 2] 156 addw x, #5
+ 000091 1F 0D [ 2] 157 ldw (0x0d, sp), x
+ 000093 16 11 [ 2] 158 ldw y, (0x11, sp)
+ 000095 90 89 [ 2] 159 pushw y
+ 000097 16 11 [ 2] 160 ldw y, (0x11, sp)
+ 000099 90 89 [ 2] 161 pushw y
+ 00009B 89 [ 2] 162 pushw x
+ 00009C 8Ds00r00r00 [ 5] 163 callf _wctomb
+ 0000A0 5B 06 [ 2] 164 addw sp, #6
+ 0000A2 1F 0F [ 2] 165 ldw (0x0f, sp), x
+ 166 ; ../c16stombs.c: 76: if(l < 0)
+ 0000A4 0D 0F [ 1] 167 tnz (0x0f, sp)
+ 0000A6 2A 04 [ 1] 168 jrpl 00115$
+ 169 ; ../c16stombs.c: 77: return(-1);
+ 0000A8 5F [ 1] 170 clrw x
+ 0000A9 5A [ 2] 171 decw x
+ 0000AA 20 2F [ 2] 172 jra 00121$
+ 0000AC 173 00115$:
+ 174 ; ../c16stombs.c: 79: if(m + l > n)
+ 0000AC 1E 0F [ 2] 175 ldw x, (0x0f, sp)
+ 0000AE 72 FB 09 [ 2] 176 addw x, (0x09, sp)
+ 0000B1 1F 11 [ 2] 177 ldw (0x11, sp), x
+ 0000B3 13 1A [ 2] 178 cpw x, (0x1a, sp)
+ 0000B5 22 22 [ 1] 179 jrugt 00118$
+ 180 ; ../c16stombs.c: 82: memcpy(s, b, l);
+ 0000B7 16 0D [ 2] 181 ldw y, (0x0d, sp)
+ 0000B9 1E 16 [ 2] 182 ldw x, (0x16, sp)
+ 0000BB 7B 10 [ 1] 183 ld a, (0x10, sp)
+ 0000BD 88 [ 1] 184 push a
+ 0000BE 7B 10 [ 1] 185 ld a, (0x10, sp)
+ 0000C0 88 [ 1] 186 push a
+ 0000C1 90 89 [ 2] 187 pushw y
+ 0000C3 89 [ 2] 188 pushw x
+ 0000C4 8Ds00r00r00 [ 5] 189 callf ___memcpy
+ 0000C8 5B 06 [ 2] 190 addw sp, #6
+ 191 ; ../c16stombs.c: 83: s += l;
+ 0000CA 1E 16 [ 2] 192 ldw x, (0x16, sp)
+ 0000CC 72 FB 0F [ 2] 193 addw x, (0x0f, sp)
+ 0000CF 1F 16 [ 2] 194 ldw (0x16, sp), x
+ 195 ; ../c16stombs.c: 84: m += l;
+ 0000D1 1E 11 [ 2] 196 ldw x, (0x11, sp)
+ 0000D3 1F 09 [ 2] 197 ldw (0x09, sp), x
+ 0000D5 ACs00r00r05 [ 2] 198 jpf 00119$
+ 0000D9 199 00118$:
+ 200 ; ../c16stombs.c: 87: return(m);
+ 0000D9 1E 09 [ 2] 201 ldw x, (0x09, sp)
+ 0000DB 202 00121$:
+ 203 ; ../c16stombs.c: 88: }
+ 0000DB 5B 12 [ 2] 204 addw sp, #18
+ 0000DD 87 [ 5] 205 retf
+ 206 .area CODE
+ 207 .area CONST
+ 208 .area INITIALIZER
+ 209 .area CABS (ABS)
diff --git a/device/lib/stm8-large/c16stombs.rel b/device/lib/stm8-large/c16stombs.rel
new file mode 100644
index 0000000..e877590
--- /dev/null
+++ b/device/lib/stm8-large/c16stombs.rel
@@ -0,0 +1,91 @@
+XH3
+H B areas 4 global symbols
+M c16stombs
+O -mstm8
+S .__.ABS. Def000000
+S ___memcpy Ref000000
+S _wctomb Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size DE flags 0 addr 0
+S ___c16stombs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 12 5F 1F 09
+R 00 00 00 09
+T 00 00 05
+R 00 00 00 09
+T 00 00 05 16 18 17 0B 93 FE 1F 03 1E 0B 5C 5C 1F
+R 00 00 00 09
+T 00 00 12 0D 16 03 17 11 0F 10 0F 0F 1E 03 A3
+R 00 00 00 09
+T 00 00 1E D8 00 25 05 A3 E0 00 25 06
+R 00 00 00 09
+T 00 00 27
+R 00 00 00 09
+T 00 00 27 1E 0D 1F 18 20 4D
+R 00 00 00 09
+T 00 00 2D
+R 00 00 00 09
+T 00 00 2D 1E 03 A3 DB FF 22 0D 1E 0D FE A3 DC 00
+R 00 00 00 09
+T 00 00 3A 25 05 A3 DF FF 23 06
+R 00 00 00 09
+T 00 00 41
+R 00 00 00 09
+T 00 00 41 5F 5A AC 00 00 DB
+R 00 00 00 09 80 06 00 09
+T 00 00 47
+R 00 00 00 09
+T 00 00 47 A6 0A
+R 00 00 00 09
+T 00 00 49
+R 00 00 00 09
+T 00 00 49 08 12 09 11 09 10 09 0F 4A 26 F5 1F 03
+R 00 00 00 09
+T 00 00 56 5F 16 03 72 F9 11 9F 19 10 88 9E 19 10
+R 00 00 00 09
+T 00 00 63 95 84 72 A9 24 00 A9 A0 02 A9 FC 95 17
+R 00 00 00 09
+T 00 00 70 11 1F 0F 1E 0B 1C 00 04 1F 18
+R 00 00 00 09
+T 00 00 7A
+R 00 00 00 09
+T 00 00 7A 1E 11 26 0F 1E 0F 26 0B 1E 09 13 1A 24
+R 00 00 00 09
+T 00 00 87 51 1E 16 7F 20 4C
+R 00 00 00 09
+T 00 00 8D
+R 00 00 00 09
+T 00 00 8D 96 1C 00 05 1F 0D 16 11 90 89 16 11 90
+R 00 00 00 09
+T 00 00 9A 89 89 8D 00 00 00 5B 06 1F 0F 0D 0F 2A
+R 00 00 00 09 82 06 00 02
+T 00 00 A7 04 5F 5A 20 2F
+R 00 00 00 09
+T 00 00 AC
+R 00 00 00 09
+T 00 00 AC 1E 0F 72 FB 09 1F 11 13 1A 22 22 16 0D
+R 00 00 00 09
+T 00 00 B9 1E 16 7B 10 88 7B 10 88 90 89 89 8D
+R 00 00 00 09
+T 00 00 C5 00 00 00 5B 06 1E 16 72 FB 0F 1F 16 1E
+R 00 00 00 09 82 03 00 01
+T 00 00 D2 11 1F 09 AC 00 00 05
+R 00 00 00 09 80 07 00 09
+T 00 00 D9
+R 00 00 00 09
+T 00 00 D9 1E 09
+R 00 00 00 09
+T 00 00 DB
+R 00 00 00 09
+T 00 00 DB 5B 12 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/c16stombs.sym b/device/lib/stm8-large/c16stombs.sym
new file mode 100644
index 0000000..ccbb8df
--- /dev/null
+++ b/device/lib/stm8-large/c16stombs.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___c16stombs 000000 GR
+ ___memcpy ****** GX
+ _wctomb ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size DE flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/c32rtomb.asm b/device/lib/stm8-large/c32rtomb.asm
new file mode 100644
index 0000000..06daa41
--- /dev/null
+++ b/device/lib/stm8-large/c32rtomb.asm
@@ -0,0 +1,69 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module c32rtomb
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wctomb
+ .globl _c32rtomb
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../c32rtomb.c: 33: size_t c32rtomb(char *restrict s, char32_t c32, mbstate_t *restrict ps)
+; -----------------------------------------
+; function c32rtomb
+; -----------------------------------------
+_c32rtomb:
+; ../c32rtomb.c: 36: return(wctomb(s, c32));
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ callf _wctomb
+ addw sp, #6
+; ../c32rtomb.c: 37: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/c32rtomb.lst b/device/lib/stm8-large/c32rtomb.lst
new file mode 100644
index 0000000..db880fd
--- /dev/null
+++ b/device/lib/stm8-large/c32rtomb.lst
@@ -0,0 +1,69 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module c32rtomb
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wctomb
+ 12 .globl _c32rtomb
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../c32rtomb.c: 33: size_t c32rtomb(char *restrict s, char32_t c32, mbstate_t *restrict ps)
+ 51 ; -----------------------------------------
+ 52 ; function c32rtomb
+ 53 ; -----------------------------------------
+ 000000 54 _c32rtomb:
+ 55 ; ../c32rtomb.c: 36: return(wctomb(s, c32));
+ 000000 1E 08 [ 2] 56 ldw x, (0x08, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 1E 08 [ 2] 58 ldw x, (0x08, sp)
+ 000005 89 [ 2] 59 pushw x
+ 000006 1E 08 [ 2] 60 ldw x, (0x08, sp)
+ 000008 89 [ 2] 61 pushw x
+ 000009 8Ds00r00r00 [ 5] 62 callf _wctomb
+ 00000D 5B 06 [ 2] 63 addw sp, #6
+ 64 ; ../c32rtomb.c: 37: }
+ 00000F 87 [ 5] 65 retf
+ 66 .area CODE
+ 67 .area CONST
+ 68 .area INITIALIZER
+ 69 .area CABS (ABS)
diff --git a/device/lib/stm8-large/c32rtomb.rel b/device/lib/stm8-large/c32rtomb.rel
new file mode 100644
index 0000000..3c13630
--- /dev/null
+++ b/device/lib/stm8-large/c32rtomb.rel
@@ -0,0 +1,24 @@
+XH3
+H B areas 3 global symbols
+M c32rtomb
+O -mstm8
+S .__.ABS. Def000000
+S _wctomb Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 10 flags 0 addr 0
+S _c32rtomb Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 08 89 1E 08 89 1E 08 89 8D
+R 00 00 00 09
+T 00 00 0A 00 00 00 5B 06 87
+R 00 00 00 09 82 03 00 01
diff --git a/device/lib/stm8-large/c32rtomb.sym b/device/lib/stm8-large/c32rtomb.sym
new file mode 100644
index 0000000..0774db6
--- /dev/null
+++ b/device/lib/stm8-large/c32rtomb.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _c32rtomb 000000 GR
+ _wctomb ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 10 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/calloc.asm b/device/lib/stm8-large/calloc.asm
new file mode 100644
index 0000000..9bd8176
--- /dev/null
+++ b/device/lib/stm8-large/calloc.asm
@@ -0,0 +1,103 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module calloc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _memset
+ .globl _malloc
+ .globl _calloc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../calloc.c: 44: void *calloc (size_t nmemb, size_t size)
+; -----------------------------------------
+; function calloc
+; -----------------------------------------
+_calloc:
+ sub sp, #6
+; ../calloc.c: 49: unsigned long msize = (unsigned long)nmemb * (unsigned long)size;
+ ldw x, (0x0a, sp)
+ ldw y, (0x0c, sp)
+ pushw y
+ pushw x
+ callf ___muluint2ulong
+ addw sp, #4
+ ldw (0x05, sp), x
+; ../calloc.c: 54: if (msize > SIZE_MAX)
+ ldw (0x03, sp), y
+ ldw x, y
+ jreq 00102$
+; ../calloc.c: 55: return(0);
+ clrw x
+ jra 00105$
+00102$:
+; ../calloc.c: 57: if (ptr = malloc(msize))
+ ldw y, (0x05, sp)
+ ldw (0x01, sp), y
+ ldw x, y
+ pushw x
+ callf _malloc
+ addw sp, #2
+ ldw (0x03, sp), x
+ ldw (0x05, sp), x
+ ldw x, (0x03, sp)
+ jreq 00104$
+; ../calloc.c: 58: memset(ptr, 0, msize);
+ ldw x, (0x01, sp)
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf _memset
+ addw sp, #6
+00104$:
+; ../calloc.c: 60: return(ptr);
+ ldw x, (0x05, sp)
+00105$:
+; ../calloc.c: 61: }
+ addw sp, #6
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/calloc.lst b/device/lib/stm8-large/calloc.lst
new file mode 100644
index 0000000..7085a21
--- /dev/null
+++ b/device/lib/stm8-large/calloc.lst
@@ -0,0 +1,103 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module calloc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _memset
+ 12 .globl _malloc
+ 13 .globl _calloc
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../calloc.c: 44: void *calloc (size_t nmemb, size_t size)
+ 52 ; -----------------------------------------
+ 53 ; function calloc
+ 54 ; -----------------------------------------
+ 000000 55 _calloc:
+ 000000 52 06 [ 2] 56 sub sp, #6
+ 57 ; ../calloc.c: 49: unsigned long msize = (unsigned long)nmemb * (unsigned long)size;
+ 000002 1E 0A [ 2] 58 ldw x, (0x0a, sp)
+ 000004 16 0C [ 2] 59 ldw y, (0x0c, sp)
+ 000006 90 89 [ 2] 60 pushw y
+ 000008 89 [ 2] 61 pushw x
+ 000009 8Ds00r00r00 [ 5] 62 callf ___muluint2ulong
+ 00000D 5B 04 [ 2] 63 addw sp, #4
+ 00000F 1F 05 [ 2] 64 ldw (0x05, sp), x
+ 65 ; ../calloc.c: 54: if (msize > SIZE_MAX)
+ 000011 17 03 [ 2] 66 ldw (0x03, sp), y
+ 000013 93 [ 1] 67 ldw x, y
+ 000014 27 03 [ 1] 68 jreq 00102$
+ 69 ; ../calloc.c: 55: return(0);
+ 000016 5F [ 1] 70 clrw x
+ 000017 20 24 [ 2] 71 jra 00105$
+ 000019 72 00102$:
+ 73 ; ../calloc.c: 57: if (ptr = malloc(msize))
+ 000019 16 05 [ 2] 74 ldw y, (0x05, sp)
+ 00001B 17 01 [ 2] 75 ldw (0x01, sp), y
+ 00001D 93 [ 1] 76 ldw x, y
+ 00001E 89 [ 2] 77 pushw x
+ 00001F 8Ds00r00r00 [ 5] 78 callf _malloc
+ 000023 5B 02 [ 2] 79 addw sp, #2
+ 000025 1F 03 [ 2] 80 ldw (0x03, sp), x
+ 000027 1F 05 [ 2] 81 ldw (0x05, sp), x
+ 000029 1E 03 [ 2] 82 ldw x, (0x03, sp)
+ 00002B 27 0E [ 1] 83 jreq 00104$
+ 84 ; ../calloc.c: 58: memset(ptr, 0, msize);
+ 00002D 1E 01 [ 2] 85 ldw x, (0x01, sp)
+ 00002F 89 [ 2] 86 pushw x
+ 000030 5F [ 1] 87 clrw x
+ 000031 89 [ 2] 88 pushw x
+ 000032 1E 09 [ 2] 89 ldw x, (0x09, sp)
+ 000034 89 [ 2] 90 pushw x
+ 000035 8Ds00r00r00 [ 5] 91 callf _memset
+ 000039 5B 06 [ 2] 92 addw sp, #6
+ 00003B 93 00104$:
+ 94 ; ../calloc.c: 60: return(ptr);
+ 00003B 1E 05 [ 2] 95 ldw x, (0x05, sp)
+ 00003D 96 00105$:
+ 97 ; ../calloc.c: 61: }
+ 00003D 5B 06 [ 2] 98 addw sp, #6
+ 00003F 87 [ 5] 99 retf
+ 100 .area CODE
+ 101 .area CONST
+ 102 .area INITIALIZER
+ 103 .area CABS (ABS)
diff --git a/device/lib/stm8-large/calloc.rel b/device/lib/stm8-large/calloc.rel
new file mode 100644
index 0000000..2495db6
--- /dev/null
+++ b/device/lib/stm8-large/calloc.rel
@@ -0,0 +1,44 @@
+XH3
+H B areas 5 global symbols
+M calloc
+O -mstm8
+S ___muluint2ulong Ref000000
+S _malloc Ref000000
+S .__.ABS. Def000000
+S _memset Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 40 flags 0 addr 0
+S _calloc Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 1E 0A 16 0C 90 89 89 8D
+R 00 00 00 09
+T 00 00 0A 00 00 00 5B 04 1F 05 17 03 93 27 03 5F
+R 00 00 00 09 82 03 00 00
+T 00 00 17 20 24
+R 00 00 00 09
+T 00 00 19
+R 00 00 00 09
+T 00 00 19 16 05 17 01 93 89 8D 00 00 00 5B 02 1F
+R 00 00 00 09 82 0A 00 01
+T 00 00 26 03 1F 05 1E 03 27 0E 1E 01 89 5F 89 1E
+R 00 00 00 09
+T 00 00 33 09 89 8D 00 00 00 5B 06
+R 00 00 00 09 82 06 00 03
+T 00 00 3B
+R 00 00 00 09
+T 00 00 3B 1E 05
+R 00 00 00 09
+T 00 00 3D
+R 00 00 00 09
+T 00 00 3D 5B 06 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/calloc.sym b/device/lib/stm8-large/calloc.sym
new file mode 100644
index 0000000..367fa97
--- /dev/null
+++ b/device/lib/stm8-large/calloc.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___muluint2ulong ****** GX
+ 9 _calloc 000000 GR
+ _malloc ****** GX
+ _memset ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 40 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/ceilf.asm b/device/lib/stm8-large/ceilf.asm
new file mode 100644
index 0000000..4e600e2
--- /dev/null
+++ b/device/lib/stm8-large/ceilf.asm
@@ -0,0 +1,127 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module ceilf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _ceilf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../ceilf.c: 33: float ceilf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function ceilf
+; -----------------------------------------
+_ceilf:
+ sub sp, #8
+; ../ceilf.c: 36: r=x;
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ callf ___fs2slong
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../ceilf.c: 38: return r;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ callf ___slong2fs
+ addw sp, #4
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../ceilf.c: 37: if (r<0)
+ tnz (0x01, sp)
+ jrpl 00102$
+; ../ceilf.c: 38: return r;
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+ jra 00104$
+00102$:
+; ../ceilf.c: 40: return (r+((r<x)?1:0));
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00106$
+ clrw x
+ incw x
+ .byte 0x21
+00106$:
+ clrw x
+00107$:
+ exgw x, y
+ clrw x
+ tnzw y
+ jrpl 00120$
+ decw x
+00120$:
+ addw y, (0x03, sp)
+ ld a, xl
+ adc a, (0x02, sp)
+ rlwa x
+ adc a, (0x01, sp)
+ ld xh, a
+ pushw y
+ pushw x
+ callf ___slong2fs
+ addw sp, #4
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+00104$:
+; ../ceilf.c: 41: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/ceilf.lst b/device/lib/stm8-large/ceilf.lst
new file mode 100644
index 0000000..9d83703
--- /dev/null
+++ b/device/lib/stm8-large/ceilf.lst
@@ -0,0 +1,127 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module ceilf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _ceilf
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../ceilf.c: 33: float ceilf(float x) _FLOAT_FUNC_REENTRANT
+ 50 ; -----------------------------------------
+ 51 ; function ceilf
+ 52 ; -----------------------------------------
+ 000000 53 _ceilf:
+ 000000 52 08 [ 2] 54 sub sp, #8
+ 55 ; ../ceilf.c: 36: r=x;
+ 000002 1E 0E [ 2] 56 ldw x, (0x0e, sp)
+ 000004 89 [ 2] 57 pushw x
+ 000005 1E 0E [ 2] 58 ldw x, (0x0e, sp)
+ 000007 89 [ 2] 59 pushw x
+ 000008 8Ds00r00r00 [ 5] 60 callf ___fs2slong
+ 00000C 5B 04 [ 2] 61 addw sp, #4
+ 00000E 1F 03 [ 2] 62 ldw (0x03, sp), x
+ 000010 17 01 [ 2] 63 ldw (0x01, sp), y
+ 64 ; ../ceilf.c: 38: return r;
+ 000012 1E 03 [ 2] 65 ldw x, (0x03, sp)
+ 000014 89 [ 2] 66 pushw x
+ 000015 1E 03 [ 2] 67 ldw x, (0x03, sp)
+ 000017 89 [ 2] 68 pushw x
+ 000018 8Ds00r00r00 [ 5] 69 callf ___slong2fs
+ 00001C 5B 04 [ 2] 70 addw sp, #4
+ 00001E 1F 07 [ 2] 71 ldw (0x07, sp), x
+ 000020 17 05 [ 2] 72 ldw (0x05, sp), y
+ 73 ; ../ceilf.c: 37: if (r<0)
+ 000022 0D 01 [ 1] 74 tnz (0x01, sp)
+ 000024 2A 06 [ 1] 75 jrpl 00102$
+ 76 ; ../ceilf.c: 38: return r;
+ 000026 1E 07 [ 2] 77 ldw x, (0x07, sp)
+ 000028 16 05 [ 2] 78 ldw y, (0x05, sp)
+ 00002A 20 3B [ 2] 79 jra 00104$
+ 00002C 80 00102$:
+ 81 ; ../ceilf.c: 40: return (r+((r<x)?1:0));
+ 00002C 1E 0E [ 2] 82 ldw x, (0x0e, sp)
+ 00002E 89 [ 2] 83 pushw x
+ 00002F 1E 0E [ 2] 84 ldw x, (0x0e, sp)
+ 000031 89 [ 2] 85 pushw x
+ 000032 1E 0B [ 2] 86 ldw x, (0x0b, sp)
+ 000034 89 [ 2] 87 pushw x
+ 000035 1E 0B [ 2] 88 ldw x, (0x0b, sp)
+ 000037 89 [ 2] 89 pushw x
+ 000038 8Ds00r00r00 [ 5] 90 callf ___fslt
+ 00003C 5B 08 [ 2] 91 addw sp, #8
+ 00003E 4D [ 1] 92 tnz a
+ 00003F 27 03 [ 1] 93 jreq 00106$
+ 000041 5F [ 1] 94 clrw x
+ 000042 5C [ 1] 95 incw x
+ 000043 21 96 .byte 0x21
+ 000044 97 00106$:
+ 000044 5F [ 1] 98 clrw x
+ 000045 99 00107$:
+ 000045 51 [ 1] 100 exgw x, y
+ 000046 5F [ 1] 101 clrw x
+ 000047 90 5D [ 2] 102 tnzw y
+ 000049 2A 01 [ 1] 103 jrpl 00120$
+ 00004B 5A [ 2] 104 decw x
+ 00004C 105 00120$:
+ 00004C 72 F9 03 [ 2] 106 addw y, (0x03, sp)
+ 00004F 9F [ 1] 107 ld a, xl
+ 000050 19 02 [ 1] 108 adc a, (0x02, sp)
+ 000052 02 [ 1] 109 rlwa x
+ 000053 19 01 [ 1] 110 adc a, (0x01, sp)
+ 000055 95 [ 1] 111 ld xh, a
+ 000056 90 89 [ 2] 112 pushw y
+ 000058 89 [ 2] 113 pushw x
+ 000059 8Ds00r00r00 [ 5] 114 callf ___slong2fs
+ 00005D 5B 04 [ 2] 115 addw sp, #4
+ 00005F 1F 07 [ 2] 116 ldw (0x07, sp), x
+ 000061 17 05 [ 2] 117 ldw (0x05, sp), y
+ 000063 1E 07 [ 2] 118 ldw x, (0x07, sp)
+ 000065 16 05 [ 2] 119 ldw y, (0x05, sp)
+ 000067 120 00104$:
+ 121 ; ../ceilf.c: 41: }
+ 000067 5B 08 [ 2] 122 addw sp, #8
+ 000069 87 [ 5] 123 retf
+ 124 .area CODE
+ 125 .area CONST
+ 126 .area INITIALIZER
+ 127 .area CABS (ABS)
diff --git a/device/lib/stm8-large/ceilf.rel b/device/lib/stm8-large/ceilf.rel
new file mode 100644
index 0000000..2ad7fdc
--- /dev/null
+++ b/device/lib/stm8-large/ceilf.rel
@@ -0,0 +1,56 @@
+XH3
+H B areas 5 global symbols
+M ceilf
+O -mstm8
+S ___slong2fs Ref000000
+S ___fs2slong Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 6A flags 0 addr 0
+S _ceilf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 1E 0E 89 1E 0E 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 00 16 03 89 8D 00 00 00 5B 04 1F 07 17 05 0D
+R 00 00 00 09 82 06 00 00
+T 00 00 23 01 2A 06 1E 07 16 05 20 3B
+R 00 00 00 09
+T 00 00 2C
+R 00 00 00 09
+T 00 00 2C 1E 0E 89 1E 0E 89 1E 0B 89 1E 0B 89 8D
+R 00 00 00 09
+T 00 00 39 00 00 00 5B 08 4D 27 03 5F 5C 21
+R 00 00 00 09 82 03 00 02
+T 00 00 44
+R 00 00 00 09
+T 00 00 44 5F
+R 00 00 00 09
+T 00 00 45
+R 00 00 00 09
+T 00 00 45 51 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 00 4C
+R 00 00 00 09
+T 00 00 4C 72 F9 03 9F 19 02 02 19 01 95 90 89 89
+R 00 00 00 09
+T 00 00 59 8D 00 00 00 5B 04 1F 07 17 05 1E 07 16
+R 00 00 00 09 82 04 00 00
+T 00 00 66 05
+R 00 00 00 09
+T 00 00 67
+R 00 00 00 09
+T 00 00 67 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/ceilf.sym b/device/lib/stm8-large/ceilf.sym
new file mode 100644
index 0000000..3a7c75b
--- /dev/null
+++ b/device/lib/stm8-large/ceilf.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fs2slong ****** GX
+ ___fslt ****** GX
+ ___slong2fs ****** GX
+ 9 _ceilf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 6A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/cosf.asm b/device/lib/stm8-large/cosf.asm
new file mode 100644
index 0000000..e85814a
--- /dev/null
+++ b/device/lib/stm8-large/cosf.asm
@@ -0,0 +1,79 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module cosf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _sincosf
+ .globl _cosf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../cosf.c: 36: float cosf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function cosf
+; -----------------------------------------
+_cosf:
+; ../cosf.c: 38: if (x==0.0) return 1.0;
+ ldw x, (0x06, sp)
+ jrne 00102$
+ ldw x, (0x04, sp)
+ sllw x
+ jrne 00102$
+ clrw x
+ ldw y, #0x3f80
+ jra 00103$
+00102$:
+; ../cosf.c: 39: return sincosf(x, 1);
+ push #0x01
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _sincosf
+ addw sp, #5
+00103$:
+; ../cosf.c: 40: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/cosf.lst b/device/lib/stm8-large/cosf.lst
new file mode 100644
index 0000000..ccc0dd1
--- /dev/null
+++ b/device/lib/stm8-large/cosf.lst
@@ -0,0 +1,79 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module cosf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _sincosf
+ 12 .globl _cosf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../cosf.c: 36: float cosf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function cosf
+ 53 ; -----------------------------------------
+ 000000 54 _cosf:
+ 55 ; ../cosf.c: 38: if (x==0.0) return 1.0;
+ 000000 1E 06 [ 2] 56 ldw x, (0x06, sp)
+ 000002 26 0C [ 1] 57 jrne 00102$
+ 000004 1E 04 [ 2] 58 ldw x, (0x04, sp)
+ 000006 58 [ 2] 59 sllw x
+ 000007 26 07 [ 1] 60 jrne 00102$
+ 000009 5F [ 1] 61 clrw x
+ 00000A 90 AE 3F 80 [ 2] 62 ldw y, #0x3f80
+ 00000E 20 0E [ 2] 63 jra 00103$
+ 000010 64 00102$:
+ 65 ; ../cosf.c: 39: return sincosf(x, 1);
+ 000010 4B 01 [ 1] 66 push #0x01
+ 000012 1E 07 [ 2] 67 ldw x, (0x07, sp)
+ 000014 89 [ 2] 68 pushw x
+ 000015 1E 07 [ 2] 69 ldw x, (0x07, sp)
+ 000017 89 [ 2] 70 pushw x
+ 000018 8Ds00r00r00 [ 5] 71 callf _sincosf
+ 00001C 5B 05 [ 2] 72 addw sp, #5
+ 00001E 73 00103$:
+ 74 ; ../cosf.c: 40: }
+ 00001E 87 [ 5] 75 retf
+ 76 .area CODE
+ 77 .area CONST
+ 78 .area INITIALIZER
+ 79 .area CABS (ABS)
diff --git a/device/lib/stm8-large/cosf.rel b/device/lib/stm8-large/cosf.rel
new file mode 100644
index 0000000..1b4037d
--- /dev/null
+++ b/device/lib/stm8-large/cosf.rel
@@ -0,0 +1,34 @@
+XH3
+H B areas 3 global symbols
+M cosf
+O -mstm8
+S _sincosf Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1F flags 0 addr 0
+S _cosf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 06 26 0C 1E 04 58 26 07 5F 90 AE
+R 00 00 00 09
+T 00 00 0C 3F 80 20 0E
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 4B 01 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 19 00 00 00 5B 05
+R 00 00 00 09 82 03 00 00
+T 00 00 1E
+R 00 00 00 09
+T 00 00 1E 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/cosf.sym b/device/lib/stm8-large/cosf.sym
new file mode 100644
index 0000000..32a1ed9
--- /dev/null
+++ b/device/lib/stm8-large/cosf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _cosf 000000 GR
+ _sincosf ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/coshf.asm b/device/lib/stm8-large/coshf.asm
new file mode 100644
index 0000000..557774e
--- /dev/null
+++ b/device/lib/stm8-large/coshf.asm
@@ -0,0 +1,68 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module coshf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _sincoshf
+ .globl _coshf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../coshf.c: 36: float coshf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function coshf
+; -----------------------------------------
+_coshf:
+; ../coshf.c: 38: return sincoshf(x, 1);
+ push #0x01
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _sincoshf
+ addw sp, #5
+; ../coshf.c: 39: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/coshf.lst b/device/lib/stm8-large/coshf.lst
new file mode 100644
index 0000000..a7aba92
--- /dev/null
+++ b/device/lib/stm8-large/coshf.lst
@@ -0,0 +1,68 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module coshf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _sincoshf
+ 12 .globl _coshf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../coshf.c: 36: float coshf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function coshf
+ 53 ; -----------------------------------------
+ 000000 54 _coshf:
+ 55 ; ../coshf.c: 38: return sincoshf(x, 1);
+ 000000 4B 01 [ 1] 56 push #0x01
+ 000002 1E 07 [ 2] 57 ldw x, (0x07, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 07 [ 2] 59 ldw x, (0x07, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf _sincoshf
+ 00000C 5B 05 [ 2] 62 addw sp, #5
+ 63 ; ../coshf.c: 39: }
+ 00000E 87 [ 5] 64 retf
+ 65 .area CODE
+ 66 .area CONST
+ 67 .area INITIALIZER
+ 68 .area CABS (ABS)
diff --git a/device/lib/stm8-large/coshf.rel b/device/lib/stm8-large/coshf.rel
new file mode 100644
index 0000000..80949c7
--- /dev/null
+++ b/device/lib/stm8-large/coshf.rel
@@ -0,0 +1,24 @@
+XH3
+H B areas 3 global symbols
+M coshf
+O -mstm8
+S .__.ABS. Def000000
+S _sincoshf Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size F flags 0 addr 0
+S _coshf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 4B 01 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 05 87
+R 00 00 00 09 82 03 00 01
diff --git a/device/lib/stm8-large/coshf.sym b/device/lib/stm8-large/coshf.sym
new file mode 100644
index 0000000..7fe70ae
--- /dev/null
+++ b/device/lib/stm8-large/coshf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _coshf 000000 GR
+ _sincoshf ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/cotf.asm b/device/lib/stm8-large/cotf.asm
new file mode 100644
index 0000000..f64a1ff
--- /dev/null
+++ b/device/lib/stm8-large/cotf.asm
@@ -0,0 +1,116 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module cotf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _tancotf
+ .globl _fabsf
+ .globl _cotf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../cotf.c: 37: float cotf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function cotf
+; -----------------------------------------
+_cotf:
+; ../cotf.c: 41: y=fabsf(x);
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+; ../cotf.c: 42: if (y<1.0E-30) //This one requires more thinking...
+ push #0x60
+ push #0x42
+ push #0xa2
+ push #0x0d
+ pushw x
+ pushw y
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00105$
+; ../cotf.c: 44: errno = ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../cotf.c: 45: if (x<0.0)
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00102$
+; ../cotf.c: 46: return -HUGE_VALF;
+ clrw x
+ decw x
+ ldw y, #0xff7f
+ jra 00106$
+00102$:
+; ../cotf.c: 48: return +HUGE_VALF;
+ clrw x
+ decw x
+ ldw y, #0x7f7f
+ jra 00106$
+00105$:
+; ../cotf.c: 50: return tancotf(x, 1);
+ push #0x01
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _tancotf
+ addw sp, #5
+00106$:
+; ../cotf.c: 51: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/cotf.lst b/device/lib/stm8-large/cotf.lst
new file mode 100644
index 0000000..4004376
--- /dev/null
+++ b/device/lib/stm8-large/cotf.lst
@@ -0,0 +1,116 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module cotf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _tancotf
+ 12 .globl _fabsf
+ 13 .globl _cotf
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../cotf.c: 37: float cotf(float x) _FLOAT_FUNC_REENTRANT
+ 52 ; -----------------------------------------
+ 53 ; function cotf
+ 54 ; -----------------------------------------
+ 000000 55 _cotf:
+ 56 ; ../cotf.c: 41: y=fabsf(x);
+ 000000 1E 06 [ 2] 57 ldw x, (0x06, sp)
+ 000002 89 [ 2] 58 pushw x
+ 000003 1E 06 [ 2] 59 ldw x, (0x06, sp)
+ 000005 89 [ 2] 60 pushw x
+ 000006 8Ds00r00r00 [ 5] 61 callf _fabsf
+ 00000A 5B 04 [ 2] 62 addw sp, #4
+ 63 ; ../cotf.c: 42: if (y<1.0E-30) //This one requires more thinking...
+ 00000C 4B 60 [ 1] 64 push #0x60
+ 00000E 4B 42 [ 1] 65 push #0x42
+ 000010 4B A2 [ 1] 66 push #0xa2
+ 000012 4B 0D [ 1] 67 push #0x0d
+ 000014 89 [ 2] 68 pushw x
+ 000015 90 89 [ 2] 69 pushw y
+ 000017 8Ds00r00r00 [ 5] 70 callf ___fslt
+ 00001B 5B 08 [ 2] 71 addw sp, #8
+ 00001D 4D [ 1] 72 tnz a
+ 00001E 27 29 [ 1] 73 jreq 00105$
+ 74 ; ../cotf.c: 44: errno = ERANGE;
+ 000020 AE 00 22 [ 2] 75 ldw x, #0x0022
+ 000023 CFu00u00 [ 2] 76 ldw _errno+0, x
+ 77 ; ../cotf.c: 45: if (x<0.0)
+ 000026 5F [ 1] 78 clrw x
+ 000027 89 [ 2] 79 pushw x
+ 000028 5F [ 1] 80 clrw x
+ 000029 89 [ 2] 81 pushw x
+ 00002A 1E 0A [ 2] 82 ldw x, (0x0a, sp)
+ 00002C 89 [ 2] 83 pushw x
+ 00002D 1E 0A [ 2] 84 ldw x, (0x0a, sp)
+ 00002F 89 [ 2] 85 pushw x
+ 000030 8Ds00r00r00 [ 5] 86 callf ___fslt
+ 000034 5B 08 [ 2] 87 addw sp, #8
+ 000036 4D [ 1] 88 tnz a
+ 000037 27 08 [ 1] 89 jreq 00102$
+ 90 ; ../cotf.c: 46: return -HUGE_VALF;
+ 000039 5F [ 1] 91 clrw x
+ 00003A 5A [ 2] 92 decw x
+ 00003B 90 AE FF 7F [ 2] 93 ldw y, #0xff7f
+ 00003F 20 16 [ 2] 94 jra 00106$
+ 000041 95 00102$:
+ 96 ; ../cotf.c: 48: return +HUGE_VALF;
+ 000041 5F [ 1] 97 clrw x
+ 000042 5A [ 2] 98 decw x
+ 000043 90 AE 7F 7F [ 2] 99 ldw y, #0x7f7f
+ 000047 20 0E [ 2] 100 jra 00106$
+ 000049 101 00105$:
+ 102 ; ../cotf.c: 50: return tancotf(x, 1);
+ 000049 4B 01 [ 1] 103 push #0x01
+ 00004B 1E 07 [ 2] 104 ldw x, (0x07, sp)
+ 00004D 89 [ 2] 105 pushw x
+ 00004E 1E 07 [ 2] 106 ldw x, (0x07, sp)
+ 000050 89 [ 2] 107 pushw x
+ 000051 8Ds00r00r00 [ 5] 108 callf _tancotf
+ 000055 5B 05 [ 2] 109 addw sp, #5
+ 000057 110 00106$:
+ 111 ; ../cotf.c: 51: }
+ 000057 87 [ 5] 112 retf
+ 113 .area CODE
+ 114 .area CONST
+ 115 .area INITIALIZER
+ 116 .area CABS (ABS)
diff --git a/device/lib/stm8-large/cotf.rel b/device/lib/stm8-large/cotf.rel
new file mode 100644
index 0000000..70cba59
--- /dev/null
+++ b/device/lib/stm8-large/cotf.rel
@@ -0,0 +1,49 @@
+XH3
+H B areas 6 global symbols
+M cotf
+O -mstm8
+S _errno Ref000000
+S _tancotf Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S _fabsf Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 58 flags 0 addr 0
+S _cotf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 06 89 1E 06 89 8D 00 00 00 5B 04 4B
+R 00 00 00 09 82 0A 00 04
+T 00 00 0D 60 4B 42 4B A2 4B 0D 89 90 89 8D
+R 00 00 00 09
+T 00 00 18 00 00 00 5B 08 4D 27 29 AE 00 22 CF
+R 00 00 00 09 82 03 00 02
+T 00 00 24 00 00 5F 89 5F 89 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09 12 03 00 00
+T 00 00 31 00 00 00 5B 08 4D 27 08 5F 5A 90 AE
+R 00 00 00 09 82 03 00 02
+T 00 00 3D FF 7F 20 16
+R 00 00 00 09
+T 00 00 41
+R 00 00 00 09
+T 00 00 41 5F 5A 90 AE 7F 7F 20 0E
+R 00 00 00 09
+T 00 00 49
+R 00 00 00 09
+T 00 00 49 4B 01 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 52 00 00 00 5B 05
+R 00 00 00 09 82 03 00 01
+T 00 00 57
+R 00 00 00 09
+T 00 00 57 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/cotf.sym b/device/lib/stm8-large/cotf.sym
new file mode 100644
index 0000000..39b4cce
--- /dev/null
+++ b/device/lib/stm8-large/cotf.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fslt ****** GX
+ 9 _cotf 000000 GR
+ _errno ****** GX
+ _fabsf ****** GX
+ _tancotf ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 58 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/errno.asm b/device/lib/stm8-large/errno.asm
new file mode 100644
index 0000000..18c38d1
--- /dev/null
+++ b/device/lib/stm8-large/errno.asm
@@ -0,0 +1,54 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module errno
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _errno
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_errno::
+ .ds 2
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/errno.lst b/device/lib/stm8-large/errno.lst
new file mode 100644
index 0000000..0a57d0d
--- /dev/null
+++ b/device/lib/stm8-large/errno.lst
@@ -0,0 +1,54 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module errno
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _errno
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 000000 16 _errno::
+ 000000 17 .ds 2
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 .area CODE
+ 52 .area CONST
+ 53 .area INITIALIZER
+ 54 .area CABS (ABS)
diff --git a/device/lib/stm8-large/errno.rel b/device/lib/stm8-large/errno.rel
new file mode 100644
index 0000000..851b850
--- /dev/null
+++ b/device/lib/stm8-large/errno.rel
@@ -0,0 +1,21 @@
+XH3
+H B areas 2 global symbols
+M errno
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 2 flags 0 addr 0
+S _errno Def000000
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 0 flags 0 addr 0
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
diff --git a/device/lib/stm8-large/errno.sym b/device/lib/stm8-large/errno.sym
new file mode 100644
index 0000000..94d2e22
--- /dev/null
+++ b/device/lib/stm8-large/errno.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 1 _errno 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 2 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 0 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/expf.asm b/device/lib/stm8-large/expf.asm
new file mode 100644
index 0000000..ba3b300
--- /dev/null
+++ b/device/lib/stm8-large/expf.asm
@@ -0,0 +1,359 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module expf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _ldexpf
+ .globl _expf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../expf.c: 331: float expf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function expf
+; -----------------------------------------
+_expf:
+ sub sp, #15
+; ../expf.c: 337: if(x>=0.0)
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x19, sp)
+ pushw x
+ ldw x, (0x19, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jrne 00102$
+; ../expf.c: 338: { y=x; sign=0; }
+ ldw y, (0x15, sp)
+ ldw (0x0e, sp), y
+ ldw y, (0x13, sp)
+ ldw (0x0c, sp), y
+ clr (0x01, sp)
+ jra 00103$
+00102$:
+; ../expf.c: 340: { y=-x; sign=1; }
+ ldw y, (0x15, sp)
+ ldw x, (0x13, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x0e, sp), y
+ ldw (0x0c, sp), x
+ ld a, #0x01
+ ld (0x01, sp), a
+00103$:
+; ../expf.c: 342: if(y<EXPEPS) return 1.0;
+ push #0x95
+ push #0xbf
+ push #0xd6
+ push #0x33
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ ld (0x0b, sp), a
+ jreq 00105$
+ clrw x
+ ldw y, #0x3f80
+ jpf 00118$
+00105$:
+; ../expf.c: 344: if(y>BIGX)
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ push #0x18
+ push #0x72
+ push #0xb1
+ push #0x42
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00110$
+; ../expf.c: 346: if(sign)
+ tnz (0x01, sp)
+ jreq 00107$
+; ../expf.c: 348: errno=ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../expf.c: 350: ;
+ clrw x
+ decw x
+ ldw y, #0x7f7f
+ jpf 00118$
+00107$:
+; ../expf.c: 354: return 0.0;
+ clrw x
+ clrw y
+ jpf 00118$
+00110$:
+; ../expf.c: 358: z=y*K1;
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ push #0x3b
+ push #0xaa
+ push #0xb8
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0a, sp), x
+ ldw (0x08, sp), y
+; ../expf.c: 359: n=z;
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fs2sint
+ addw sp, #4
+ ldw (0x02, sp), x
+; ../expf.c: 361: if(n<0) --n;
+ tnz (0x02, sp)
+ jrpl 00112$
+ ldw x, (0x02, sp)
+ decw x
+ ldw (0x02, sp), x
+00112$:
+; ../expf.c: 362: if(z-n>=0.5) ++n;
+ ldw x, (0x02, sp)
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ pushw x
+ pushw y
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jrne 00114$
+ ldw x, (0x02, sp)
+ incw x
+ ldw (0x02, sp), x
+00114$:
+; ../expf.c: 363: xn=n;
+ ldw x, (0x02, sp)
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x0a, sp), x
+ ldw (0x08, sp), y
+; ../expf.c: 364: g=((y-xn*C1))-xn*C2;
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #0x00
+ push #0x80
+ push #0x31
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x0e, sp), x
+ ldw (0x0c, sp), y
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #0x83
+ push #0x80
+ push #0x5e
+ push #0xb9
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x06, sp), x
+ ldw (0x04, sp), y
+; ../expf.c: 365: z=g*g;
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0a, sp), x
+ ldw (0x08, sp), y
+; ../expf.c: 366: r=P(z)*g;
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #0x08
+ push #0x53
+ push #0x88
+ push #0x3b
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x80
+ push #0x3e
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0e, sp), x
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0e, sp), x
+ ldw (0x0c, sp), y
+; ../expf.c: 367: r=0.5+(r/(Q(z)-r));
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #0x5b
+ push #0xbf
+ push #0x4c
+ push #0x3d
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0a, sp), x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ pushw y
+ callf ___fssub
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0e, sp), x
+; ../expf.c: 369: n++;
+ ldw x, (0x02, sp)
+ incw x
+; ../expf.c: 370: z=ldexpf(r, n);
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ pushw y
+ callf _ldexpf
+ addw sp, #6
+; ../expf.c: 371: if(sign)
+ tnz (0x01, sp)
+ jreq 00116$
+; ../expf.c: 372: return 1.0/z;
+ pushw x
+ pushw y
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fsdiv
+ addw sp, #8
+; ../expf.c: 374: return z;
+00116$:
+00118$:
+; ../expf.c: 375: }
+ addw sp, #15
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/expf.lst b/device/lib/stm8-large/expf.lst
new file mode 100644
index 0000000..ef9c131
--- /dev/null
+++ b/device/lib/stm8-large/expf.lst
@@ -0,0 +1,359 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module expf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _ldexpf
+ 12 .globl _expf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../expf.c: 331: float expf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function expf
+ 53 ; -----------------------------------------
+ 000000 54 _expf:
+ 000000 52 0F [ 2] 55 sub sp, #15
+ 56 ; ../expf.c: 337: if(x>=0.0)
+ 000002 5F [ 1] 57 clrw x
+ 000003 89 [ 2] 58 pushw x
+ 000004 5F [ 1] 59 clrw x
+ 000005 89 [ 2] 60 pushw x
+ 000006 1E 19 [ 2] 61 ldw x, (0x19, sp)
+ 000008 89 [ 2] 62 pushw x
+ 000009 1E 19 [ 2] 63 ldw x, (0x19, sp)
+ 00000B 89 [ 2] 64 pushw x
+ 00000C 8Ds00r00r00 [ 5] 65 callf ___fslt
+ 000010 5B 08 [ 2] 66 addw sp, #8
+ 000012 4D [ 1] 67 tnz a
+ 000013 26 0C [ 1] 68 jrne 00102$
+ 69 ; ../expf.c: 338: { y=x; sign=0; }
+ 000015 16 15 [ 2] 70 ldw y, (0x15, sp)
+ 000017 17 0E [ 2] 71 ldw (0x0e, sp), y
+ 000019 16 13 [ 2] 72 ldw y, (0x13, sp)
+ 00001B 17 0C [ 2] 73 ldw (0x0c, sp), y
+ 00001D 0F 01 [ 1] 74 clr (0x01, sp)
+ 00001F 20 0F [ 2] 75 jra 00103$
+ 000021 76 00102$:
+ 77 ; ../expf.c: 340: { y=-x; sign=1; }
+ 000021 16 15 [ 2] 78 ldw y, (0x15, sp)
+ 000023 1E 13 [ 2] 79 ldw x, (0x13, sp)
+ 000025 58 [ 2] 80 sllw x
+ 000026 8C [ 1] 81 ccf
+ 000027 56 [ 2] 82 rrcw x
+ 000028 17 0E [ 2] 83 ldw (0x0e, sp), y
+ 00002A 1F 0C [ 2] 84 ldw (0x0c, sp), x
+ 00002C A6 01 [ 1] 85 ld a, #0x01
+ 00002E 6B 01 [ 1] 86 ld (0x01, sp), a
+ 000030 87 00103$:
+ 88 ; ../expf.c: 342: if(y<EXPEPS) return 1.0;
+ 000030 4B 95 [ 1] 89 push #0x95
+ 000032 4B BF [ 1] 90 push #0xbf
+ 000034 4B D6 [ 1] 91 push #0xd6
+ 000036 4B 33 [ 1] 92 push #0x33
+ 000038 1E 12 [ 2] 93 ldw x, (0x12, sp)
+ 00003A 89 [ 2] 94 pushw x
+ 00003B 1E 12 [ 2] 95 ldw x, (0x12, sp)
+ 00003D 89 [ 2] 96 pushw x
+ 00003E 8Ds00r00r00 [ 5] 97 callf ___fslt
+ 000042 5B 08 [ 2] 98 addw sp, #8
+ 000044 6B 0B [ 1] 99 ld (0x0b, sp), a
+ 000046 27 09 [ 1] 100 jreq 00105$
+ 000048 5F [ 1] 101 clrw x
+ 000049 90 AE 3F 80 [ 2] 102 ldw y, #0x3f80
+ 00004D ACs00r02r0C [ 2] 103 jpf 00118$
+ 000051 104 00105$:
+ 105 ; ../expf.c: 344: if(y>BIGX)
+ 000051 1E 0E [ 2] 106 ldw x, (0x0e, sp)
+ 000053 89 [ 2] 107 pushw x
+ 000054 1E 0E [ 2] 108 ldw x, (0x0e, sp)
+ 000056 89 [ 2] 109 pushw x
+ 000057 4B 18 [ 1] 110 push #0x18
+ 000059 4B 72 [ 1] 111 push #0x72
+ 00005B 4B B1 [ 1] 112 push #0xb1
+ 00005D 4B 42 [ 1] 113 push #0x42
+ 00005F 8Ds00r00r00 [ 5] 114 callf ___fslt
+ 000063 5B 08 [ 2] 115 addw sp, #8
+ 000065 4D [ 1] 116 tnz a
+ 000066 27 1B [ 1] 117 jreq 00110$
+ 118 ; ../expf.c: 346: if(sign)
+ 000068 0D 01 [ 1] 119 tnz (0x01, sp)
+ 00006A 27 10 [ 1] 120 jreq 00107$
+ 121 ; ../expf.c: 348: errno=ERANGE;
+ 00006C AE 00 22 [ 2] 122 ldw x, #0x0022
+ 00006F CFu00u00 [ 2] 123 ldw _errno+0, x
+ 124 ; ../expf.c: 350: ;
+ 000072 5F [ 1] 125 clrw x
+ 000073 5A [ 2] 126 decw x
+ 000074 90 AE 7F 7F [ 2] 127 ldw y, #0x7f7f
+ 000078 ACs00r02r0C [ 2] 128 jpf 00118$
+ 00007C 129 00107$:
+ 130 ; ../expf.c: 354: return 0.0;
+ 00007C 5F [ 1] 131 clrw x
+ 00007D 90 5F [ 1] 132 clrw y
+ 00007F ACs00r02r0C [ 2] 133 jpf 00118$
+ 000083 134 00110$:
+ 135 ; ../expf.c: 358: z=y*K1;
+ 000083 1E 0E [ 2] 136 ldw x, (0x0e, sp)
+ 000085 89 [ 2] 137 pushw x
+ 000086 1E 0E [ 2] 138 ldw x, (0x0e, sp)
+ 000088 89 [ 2] 139 pushw x
+ 000089 4B 3B [ 1] 140 push #0x3b
+ 00008B 4B AA [ 1] 141 push #0xaa
+ 00008D 4B B8 [ 1] 142 push #0xb8
+ 00008F 4B 3F [ 1] 143 push #0x3f
+ 000091 8Ds00r00r00 [ 5] 144 callf ___fsmul
+ 000095 5B 08 [ 2] 145 addw sp, #8
+ 000097 1F 0A [ 2] 146 ldw (0x0a, sp), x
+ 000099 17 08 [ 2] 147 ldw (0x08, sp), y
+ 148 ; ../expf.c: 359: n=z;
+ 00009B 1E 0A [ 2] 149 ldw x, (0x0a, sp)
+ 00009D 89 [ 2] 150 pushw x
+ 00009E 1E 0A [ 2] 151 ldw x, (0x0a, sp)
+ 0000A0 89 [ 2] 152 pushw x
+ 0000A1 8Ds00r00r00 [ 5] 153 callf ___fs2sint
+ 0000A5 5B 04 [ 2] 154 addw sp, #4
+ 0000A7 1F 02 [ 2] 155 ldw (0x02, sp), x
+ 156 ; ../expf.c: 361: if(n<0) --n;
+ 0000A9 0D 02 [ 1] 157 tnz (0x02, sp)
+ 0000AB 2A 05 [ 1] 158 jrpl 00112$
+ 0000AD 1E 02 [ 2] 159 ldw x, (0x02, sp)
+ 0000AF 5A [ 2] 160 decw x
+ 0000B0 1F 02 [ 2] 161 ldw (0x02, sp), x
+ 0000B2 162 00112$:
+ 163 ; ../expf.c: 362: if(z-n>=0.5) ++n;
+ 0000B2 1E 02 [ 2] 164 ldw x, (0x02, sp)
+ 0000B4 89 [ 2] 165 pushw x
+ 0000B5 8Ds00r00r00 [ 5] 166 callf ___sint2fs
+ 0000B9 5B 02 [ 2] 167 addw sp, #2
+ 0000BB 89 [ 2] 168 pushw x
+ 0000BC 90 89 [ 2] 169 pushw y
+ 0000BE 1E 0E [ 2] 170 ldw x, (0x0e, sp)
+ 0000C0 89 [ 2] 171 pushw x
+ 0000C1 1E 0E [ 2] 172 ldw x, (0x0e, sp)
+ 0000C3 89 [ 2] 173 pushw x
+ 0000C4 8Ds00r00r00 [ 5] 174 callf ___fssub
+ 0000C8 5B 08 [ 2] 175 addw sp, #8
+ 0000CA 4B 00 [ 1] 176 push #0x00
+ 0000CC 4B 00 [ 1] 177 push #0x00
+ 0000CE 4B 00 [ 1] 178 push #0x00
+ 0000D0 4B 3F [ 1] 179 push #0x3f
+ 0000D2 89 [ 2] 180 pushw x
+ 0000D3 90 89 [ 2] 181 pushw y
+ 0000D5 8Ds00r00r00 [ 5] 182 callf ___fslt
+ 0000D9 5B 08 [ 2] 183 addw sp, #8
+ 0000DB 4D [ 1] 184 tnz a
+ 0000DC 26 05 [ 1] 185 jrne 00114$
+ 0000DE 1E 02 [ 2] 186 ldw x, (0x02, sp)
+ 0000E0 5C [ 1] 187 incw x
+ 0000E1 1F 02 [ 2] 188 ldw (0x02, sp), x
+ 0000E3 189 00114$:
+ 190 ; ../expf.c: 363: xn=n;
+ 0000E3 1E 02 [ 2] 191 ldw x, (0x02, sp)
+ 0000E5 89 [ 2] 192 pushw x
+ 0000E6 8Ds00r00r00 [ 5] 193 callf ___sint2fs
+ 0000EA 5B 02 [ 2] 194 addw sp, #2
+ 0000EC 1F 0A [ 2] 195 ldw (0x0a, sp), x
+ 0000EE 17 08 [ 2] 196 ldw (0x08, sp), y
+ 197 ; ../expf.c: 364: g=((y-xn*C1))-xn*C2;
+ 0000F0 1E 0A [ 2] 198 ldw x, (0x0a, sp)
+ 0000F2 89 [ 2] 199 pushw x
+ 0000F3 1E 0A [ 2] 200 ldw x, (0x0a, sp)
+ 0000F5 89 [ 2] 201 pushw x
+ 0000F6 4B 00 [ 1] 202 push #0x00
+ 0000F8 4B 80 [ 1] 203 push #0x80
+ 0000FA 4B 31 [ 1] 204 push #0x31
+ 0000FC 4B 3F [ 1] 205 push #0x3f
+ 0000FE 8Ds00r00r00 [ 5] 206 callf ___fsmul
+ 000102 5B 08 [ 2] 207 addw sp, #8
+ 000104 89 [ 2] 208 pushw x
+ 000105 90 89 [ 2] 209 pushw y
+ 000107 1E 12 [ 2] 210 ldw x, (0x12, sp)
+ 000109 89 [ 2] 211 pushw x
+ 00010A 1E 12 [ 2] 212 ldw x, (0x12, sp)
+ 00010C 89 [ 2] 213 pushw x
+ 00010D 8Ds00r00r00 [ 5] 214 callf ___fssub
+ 000111 5B 08 [ 2] 215 addw sp, #8
+ 000113 1F 0E [ 2] 216 ldw (0x0e, sp), x
+ 000115 17 0C [ 2] 217 ldw (0x0c, sp), y
+ 000117 1E 0A [ 2] 218 ldw x, (0x0a, sp)
+ 000119 89 [ 2] 219 pushw x
+ 00011A 1E 0A [ 2] 220 ldw x, (0x0a, sp)
+ 00011C 89 [ 2] 221 pushw x
+ 00011D 4B 83 [ 1] 222 push #0x83
+ 00011F 4B 80 [ 1] 223 push #0x80
+ 000121 4B 5E [ 1] 224 push #0x5e
+ 000123 4B B9 [ 1] 225 push #0xb9
+ 000125 8Ds00r00r00 [ 5] 226 callf ___fsmul
+ 000129 5B 08 [ 2] 227 addw sp, #8
+ 00012B 89 [ 2] 228 pushw x
+ 00012C 90 89 [ 2] 229 pushw y
+ 00012E 1E 12 [ 2] 230 ldw x, (0x12, sp)
+ 000130 89 [ 2] 231 pushw x
+ 000131 1E 12 [ 2] 232 ldw x, (0x12, sp)
+ 000133 89 [ 2] 233 pushw x
+ 000134 8Ds00r00r00 [ 5] 234 callf ___fssub
+ 000138 5B 08 [ 2] 235 addw sp, #8
+ 00013A 1F 06 [ 2] 236 ldw (0x06, sp), x
+ 00013C 17 04 [ 2] 237 ldw (0x04, sp), y
+ 238 ; ../expf.c: 365: z=g*g;
+ 00013E 1E 06 [ 2] 239 ldw x, (0x06, sp)
+ 000140 89 [ 2] 240 pushw x
+ 000141 1E 06 [ 2] 241 ldw x, (0x06, sp)
+ 000143 89 [ 2] 242 pushw x
+ 000144 1E 0A [ 2] 243 ldw x, (0x0a, sp)
+ 000146 89 [ 2] 244 pushw x
+ 000147 1E 0A [ 2] 245 ldw x, (0x0a, sp)
+ 000149 89 [ 2] 246 pushw x
+ 00014A 8Ds00r00r00 [ 5] 247 callf ___fsmul
+ 00014E 5B 08 [ 2] 248 addw sp, #8
+ 000150 1F 0A [ 2] 249 ldw (0x0a, sp), x
+ 000152 17 08 [ 2] 250 ldw (0x08, sp), y
+ 251 ; ../expf.c: 366: r=P(z)*g;
+ 000154 1E 0A [ 2] 252 ldw x, (0x0a, sp)
+ 000156 89 [ 2] 253 pushw x
+ 000157 1E 0A [ 2] 254 ldw x, (0x0a, sp)
+ 000159 89 [ 2] 255 pushw x
+ 00015A 4B 08 [ 1] 256 push #0x08
+ 00015C 4B 53 [ 1] 257 push #0x53
+ 00015E 4B 88 [ 1] 258 push #0x88
+ 000160 4B 3B [ 1] 259 push #0x3b
+ 000162 8Ds00r00r00 [ 5] 260 callf ___fsmul
+ 000166 5B 08 [ 2] 261 addw sp, #8
+ 000168 4B 00 [ 1] 262 push #0x00
+ 00016A 4B 00 [ 1] 263 push #0x00
+ 00016C 4B 80 [ 1] 264 push #0x80
+ 00016E 4B 3E [ 1] 265 push #0x3e
+ 000170 89 [ 2] 266 pushw x
+ 000171 90 89 [ 2] 267 pushw y
+ 000173 8Ds00r00r00 [ 5] 268 callf ___fsadd
+ 000177 5B 08 [ 2] 269 addw sp, #8
+ 000179 1F 0E [ 2] 270 ldw (0x0e, sp), x
+ 00017B 1E 06 [ 2] 271 ldw x, (0x06, sp)
+ 00017D 89 [ 2] 272 pushw x
+ 00017E 1E 06 [ 2] 273 ldw x, (0x06, sp)
+ 000180 89 [ 2] 274 pushw x
+ 000181 1E 12 [ 2] 275 ldw x, (0x12, sp)
+ 000183 89 [ 2] 276 pushw x
+ 000184 90 89 [ 2] 277 pushw y
+ 000186 8Ds00r00r00 [ 5] 278 callf ___fsmul
+ 00018A 5B 08 [ 2] 279 addw sp, #8
+ 00018C 1F 0E [ 2] 280 ldw (0x0e, sp), x
+ 00018E 17 0C [ 2] 281 ldw (0x0c, sp), y
+ 282 ; ../expf.c: 367: r=0.5+(r/(Q(z)-r));
+ 000190 1E 0A [ 2] 283 ldw x, (0x0a, sp)
+ 000192 89 [ 2] 284 pushw x
+ 000193 1E 0A [ 2] 285 ldw x, (0x0a, sp)
+ 000195 89 [ 2] 286 pushw x
+ 000196 4B 5B [ 1] 287 push #0x5b
+ 000198 4B BF [ 1] 288 push #0xbf
+ 00019A 4B 4C [ 1] 289 push #0x4c
+ 00019C 4B 3D [ 1] 290 push #0x3d
+ 00019E 8Ds00r00r00 [ 5] 291 callf ___fsmul
+ 0001A2 5B 08 [ 2] 292 addw sp, #8
+ 0001A4 4B 00 [ 1] 293 push #0x00
+ 0001A6 4B 00 [ 1] 294 push #0x00
+ 0001A8 4B 00 [ 1] 295 push #0x00
+ 0001AA 4B 3F [ 1] 296 push #0x3f
+ 0001AC 89 [ 2] 297 pushw x
+ 0001AD 90 89 [ 2] 298 pushw y
+ 0001AF 8Ds00r00r00 [ 5] 299 callf ___fsadd
+ 0001B3 5B 08 [ 2] 300 addw sp, #8
+ 0001B5 1F 0A [ 2] 301 ldw (0x0a, sp), x
+ 0001B7 1E 0E [ 2] 302 ldw x, (0x0e, sp)
+ 0001B9 89 [ 2] 303 pushw x
+ 0001BA 1E 0E [ 2] 304 ldw x, (0x0e, sp)
+ 0001BC 89 [ 2] 305 pushw x
+ 0001BD 1E 0E [ 2] 306 ldw x, (0x0e, sp)
+ 0001BF 89 [ 2] 307 pushw x
+ 0001C0 90 89 [ 2] 308 pushw y
+ 0001C2 8Ds00r00r00 [ 5] 309 callf ___fssub
+ 0001C6 5B 08 [ 2] 310 addw sp, #8
+ 0001C8 89 [ 2] 311 pushw x
+ 0001C9 90 89 [ 2] 312 pushw y
+ 0001CB 1E 12 [ 2] 313 ldw x, (0x12, sp)
+ 0001CD 89 [ 2] 314 pushw x
+ 0001CE 1E 12 [ 2] 315 ldw x, (0x12, sp)
+ 0001D0 89 [ 2] 316 pushw x
+ 0001D1 8Ds00r00r00 [ 5] 317 callf ___fsdiv
+ 0001D5 5B 08 [ 2] 318 addw sp, #8
+ 0001D7 4B 00 [ 1] 319 push #0x00
+ 0001D9 4B 00 [ 1] 320 push #0x00
+ 0001DB 4B 00 [ 1] 321 push #0x00
+ 0001DD 4B 3F [ 1] 322 push #0x3f
+ 0001DF 89 [ 2] 323 pushw x
+ 0001E0 90 89 [ 2] 324 pushw y
+ 0001E2 8Ds00r00r00 [ 5] 325 callf ___fsadd
+ 0001E6 5B 08 [ 2] 326 addw sp, #8
+ 0001E8 1F 0E [ 2] 327 ldw (0x0e, sp), x
+ 328 ; ../expf.c: 369: n++;
+ 0001EA 1E 02 [ 2] 329 ldw x, (0x02, sp)
+ 0001EC 5C [ 1] 330 incw x
+ 331 ; ../expf.c: 370: z=ldexpf(r, n);
+ 0001ED 89 [ 2] 332 pushw x
+ 0001EE 1E 10 [ 2] 333 ldw x, (0x10, sp)
+ 0001F0 89 [ 2] 334 pushw x
+ 0001F1 90 89 [ 2] 335 pushw y
+ 0001F3 8Ds00r00r00 [ 5] 336 callf _ldexpf
+ 0001F7 5B 06 [ 2] 337 addw sp, #6
+ 338 ; ../expf.c: 371: if(sign)
+ 0001F9 0D 01 [ 1] 339 tnz (0x01, sp)
+ 0001FB 27 0F [ 1] 340 jreq 00116$
+ 341 ; ../expf.c: 372: return 1.0/z;
+ 0001FD 89 [ 2] 342 pushw x
+ 0001FE 90 89 [ 2] 343 pushw y
+ 000200 5F [ 1] 344 clrw x
+ 000201 89 [ 2] 345 pushw x
+ 000202 4B 80 [ 1] 346 push #0x80
+ 000204 4B 3F [ 1] 347 push #0x3f
+ 000206 8Ds00r00r00 [ 5] 348 callf ___fsdiv
+ 00020A 5B 08 [ 2] 349 addw sp, #8
+ 350 ; ../expf.c: 374: return z;
+ 00020C 351 00116$:
+ 00020C 352 00118$:
+ 353 ; ../expf.c: 375: }
+ 00020C 5B 0F [ 2] 354 addw sp, #15
+ 00020E 87 [ 5] 355 retf
+ 356 .area CODE
+ 357 .area CONST
+ 358 .area INITIALIZER
+ 359 .area CABS (ABS)
diff --git a/device/lib/stm8-large/expf.rel b/device/lib/stm8-large/expf.rel
new file mode 100644
index 0000000..def38dd
--- /dev/null
+++ b/device/lib/stm8-large/expf.rel
@@ -0,0 +1,138 @@
+XH3
+H B areas B global symbols
+M expf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _errno Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _ldexpf Ref000000
+S ___sint2fs Ref000000
+S ___fs2sint Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 20F flags 0 addr 0
+S _expf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0F 5F 89 5F 89 1E 19 89 1E 19 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 08 4D 26 0C 16 15 17 0E 16
+R 00 00 00 09 82 03 00 03
+T 00 00 1A 13 17 0C 0F 01 20 0F
+R 00 00 00 09
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 16 15 1E 13 58 8C 56 17 0E 1F 0C A6 01
+R 00 00 00 09
+T 00 00 2E 6B 01
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 4B 95 4B BF 4B D6 4B 33 1E 12 89 1E 12
+R 00 00 00 09
+T 00 00 3D 89 8D 00 00 00 5B 08 6B 0B 27 09 5F 90
+R 00 00 00 09 82 05 00 03
+T 00 00 4A AE 3F 80 AC 00 02 0C
+R 00 00 00 09 80 07 00 09
+T 00 00 51
+R 00 00 00 09
+T 00 00 51 1E 0E 89 1E 0E 89 4B 18 4B 72 4B B1 4B
+R 00 00 00 09
+T 00 00 5E 42 8D 00 00 00 5B 08 4D 27 1B 0D 01 27
+R 00 00 00 09 82 05 00 03
+T 00 00 6B 10 AE 00 22 CF 00 00 5F 5A 90 AE 7F 7F
+R 00 00 00 09 12 08 00 02
+T 00 00 78 AC 00 02 0C
+R 00 00 00 09 80 04 00 09
+T 00 00 7C
+R 00 00 00 09
+T 00 00 7C 5F 90 5F AC 00 02 0C
+R 00 00 00 09 80 07 00 09
+T 00 00 83
+R 00 00 00 09
+T 00 00 83 1E 0E 89 1E 0E 89 4B 3B 4B AA 4B B8 4B
+R 00 00 00 09
+T 00 00 90 3F 8D 00 00 00 5B 08 1F 0A 17 08 1E 0A
+R 00 00 00 09 82 05 00 01
+T 00 00 9D 89 1E 0A 89 8D 00 00 00 5B 04 1F 02 0D
+R 00 00 00 09 82 08 00 08
+T 00 00 AA 02 2A 05 1E 02 5A 1F 02
+R 00 00 00 09
+T 00 00 B2
+R 00 00 00 09
+T 00 00 B2 1E 02 89 8D 00 00 00 5B 02 89 90 89 1E
+R 00 00 00 09 82 07 00 07
+T 00 00 BF 0E 89 1E 0E 89 8D 00 00 00 5B 08 4B 00
+R 00 00 00 09 82 09 00 00
+T 00 00 CC 4B 00 4B 00 4B 3F 89 90 89 8D
+R 00 00 00 09
+T 00 00 D6 00 00 00 5B 08 4D 26 05 1E 02 5C 1F 02
+R 00 00 00 09 82 03 00 03
+T 00 00 E3
+R 00 00 00 09
+T 00 00 E3 1E 02 89 8D 00 00 00 5B 02 1F 0A 17 08
+R 00 00 00 09 82 07 00 07
+T 00 00 F0 1E 0A 89 1E 0A 89 4B 00 4B 80 4B 31 4B
+R 00 00 00 09
+T 00 00 FD 3F 8D 00 00 00 5B 08 89 90 89 1E 12 89
+R 00 00 00 09 82 05 00 01
+T 00 01 0A 1E 12 89 8D 00 00 00 5B 08 1F 0E 17 0C
+R 00 00 00 09 82 07 00 00
+T 00 01 17 1E 0A 89 1E 0A 89 4B 83 4B 80 4B 5E 4B
+R 00 00 00 09
+T 00 01 24 B9 8D 00 00 00 5B 08 89 90 89 1E 12 89
+R 00 00 00 09 82 05 00 01
+T 00 01 31 1E 12 89 8D 00 00 00 5B 08 1F 06 17 04
+R 00 00 00 09 82 07 00 00
+T 00 01 3E 1E 06 89 1E 06 89 1E 0A 89 1E 0A 89 8D
+R 00 00 00 09
+T 00 01 4B 00 00 00 5B 08 1F 0A 17 08 1E 0A 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 58 0A 89 4B 08 4B 53 4B 88 4B 3B 8D
+R 00 00 00 09
+T 00 01 63 00 00 00 5B 08 4B 00 4B 00 4B 80 4B 3E
+R 00 00 00 09 82 03 00 01
+T 00 01 70 89 90 89 8D 00 00 00 5B 08 1F 0E 1E 06
+R 00 00 00 09 82 07 00 05
+T 00 01 7D 89 1E 06 89 1E 12 89 90 89 8D
+R 00 00 00 09
+T 00 01 87 00 00 00 5B 08 1F 0E 17 0C 1E 0A 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 94 0A 89 4B 5B 4B BF 4B 4C 4B 3D 8D
+R 00 00 00 09
+T 00 01 9F 00 00 00 5B 08 4B 00 4B 00 4B 00 4B 3F
+R 00 00 00 09 82 03 00 01
+T 00 01 AC 89 90 89 8D 00 00 00 5B 08 1F 0A 1E 0E
+R 00 00 00 09 82 07 00 05
+T 00 01 B9 89 1E 0E 89 1E 0E 89 90 89 8D
+R 00 00 00 09
+T 00 01 C3 00 00 00 5B 08 89 90 89 1E 12 89 1E 12
+R 00 00 00 09 82 03 00 00
+T 00 01 D0 89 8D 00 00 00 5B 08 4B 00 4B 00 4B 00
+R 00 00 00 09 82 05 00 09
+T 00 01 DD 4B 3F 89 90 89 8D 00 00 00 5B 08 1F 0E
+R 00 00 00 09 82 09 00 05
+T 00 01 EA 1E 02 5C 89 1E 10 89 90 89 8D
+R 00 00 00 09
+T 00 01 F4 00 00 00 5B 06 0D 01 27 0F 89 90 89 5F
+R 00 00 00 09 82 03 00 06
+T 00 02 01 89 4B 80 4B 3F 8D 00 00 00 5B 08
+R 00 00 00 09 82 09 00 09
+T 00 02 0C
+R 00 00 00 09
+T 00 02 0C
+R 00 00 00 09
+T 00 02 0C 5B 0F 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/expf.sym b/device/lib/stm8-large/expf.sym
new file mode 100644
index 0000000..a348a32
--- /dev/null
+++ b/device/lib/stm8-large/expf.sym
@@ -0,0 +1,38 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fs2sint ****** GX
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ ___sint2fs ****** GX
+ _errno ****** GX
+ 9 _expf 000000 GR
+ _ldexpf ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 20F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/fabsf.asm b/device/lib/stm8-large/fabsf.asm
new file mode 100644
index 0000000..0aa8996
--- /dev/null
+++ b/device/lib/stm8-large/fabsf.asm
@@ -0,0 +1,76 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module fabsf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _fabsf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../fabsf.c: 34: float fabsf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function fabsf
+; -----------------------------------------
+_fabsf:
+ sub sp, #4
+; ../fabsf.c: 38: fl.f = x;
+ ldw y, (0x0a, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x08, sp)
+ ldw (0x01, sp), y
+; ../fabsf.c: 39: fl.l &= 0x7fffffff;
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ sllw x
+ srlw x
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../fabsf.c: 40: return fl.f;
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+; ../fabsf.c: 41: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/fabsf.lst b/device/lib/stm8-large/fabsf.lst
new file mode 100644
index 0000000..94ef730
--- /dev/null
+++ b/device/lib/stm8-large/fabsf.lst
@@ -0,0 +1,76 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module fabsf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _fabsf
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../fabsf.c: 34: float fabsf(float x) _FLOAT_FUNC_REENTRANT
+ 50 ; -----------------------------------------
+ 51 ; function fabsf
+ 52 ; -----------------------------------------
+ 000000 53 _fabsf:
+ 000000 52 04 [ 2] 54 sub sp, #4
+ 55 ; ../fabsf.c: 38: fl.f = x;
+ 000002 16 0A [ 2] 56 ldw y, (0x0a, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 08 [ 2] 58 ldw y, (0x08, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../fabsf.c: 39: fl.l &= 0x7fffffff;
+ 00000A 16 03 [ 2] 61 ldw y, (0x03, sp)
+ 00000C 1E 01 [ 2] 62 ldw x, (0x01, sp)
+ 00000E 58 [ 2] 63 sllw x
+ 00000F 54 [ 2] 64 srlw x
+ 000010 17 03 [ 2] 65 ldw (0x03, sp), y
+ 000012 1F 01 [ 2] 66 ldw (0x01, sp), x
+ 67 ; ../fabsf.c: 40: return fl.f;
+ 000014 1E 03 [ 2] 68 ldw x, (0x03, sp)
+ 000016 16 01 [ 2] 69 ldw y, (0x01, sp)
+ 70 ; ../fabsf.c: 41: }
+ 000018 5B 04 [ 2] 71 addw sp, #4
+ 00001A 87 [ 5] 72 retf
+ 73 .area CODE
+ 74 .area CONST
+ 75 .area INITIALIZER
+ 76 .area CABS (ABS)
diff --git a/device/lib/stm8-large/fabsf.rel b/device/lib/stm8-large/fabsf.rel
new file mode 100644
index 0000000..4d13d50
--- /dev/null
+++ b/device/lib/stm8-large/fabsf.rel
@@ -0,0 +1,25 @@
+XH3
+H B areas 2 global symbols
+M fabsf
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1B flags 0 addr 0
+S _fabsf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 16 0A 17 03 16 08 17 01 16 03 1E
+R 00 00 00 09
+T 00 00 0D 01 58 54 17 03 1F 01 1E 03 16 01 5B 04
+R 00 00 00 09
+T 00 00 1A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/fabsf.sym b/device/lib/stm8-large/fabsf.sym
new file mode 100644
index 0000000..5d2c7b3
--- /dev/null
+++ b/device/lib/stm8-large/fabsf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _fabsf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/floorf.asm b/device/lib/stm8-large/floorf.asm
new file mode 100644
index 0000000..297cc3f
--- /dev/null
+++ b/device/lib/stm8-large/floorf.asm
@@ -0,0 +1,128 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module floorf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _floorf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../floorf.c: 33: float floorf (float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function floorf
+; -----------------------------------------
+_floorf:
+ sub sp, #8
+; ../floorf.c: 36: r=x;
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ callf ___fs2slong
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../floorf.c: 38: return (r+((r>x)?-1:0));
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ callf ___slong2fs
+ addw sp, #4
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../floorf.c: 37: if (r<=0)
+ clrw x
+ cpw x, (0x03, sp)
+ clr a
+ sbc a, (0x02, sp)
+ clr a
+ sbc a, (0x01, sp)
+ jrslt 00102$
+; ../floorf.c: 38: return (r+((r>x)?-1:0));
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00106$
+ clrw x
+ decw x
+ .byte 0x21
+00106$:
+ clrw x
+00107$:
+ exgw x, y
+ clrw x
+ tnzw y
+ jrpl 00120$
+ decw x
+00120$:
+ addw y, (0x03, sp)
+ ld a, xl
+ adc a, (0x02, sp)
+ rlwa x
+ adc a, (0x01, sp)
+ ld xh, a
+ pushw y
+ pushw x
+ callf ___slong2fs
+ addw sp, #4
+ jra 00104$
+00102$:
+; ../floorf.c: 40: return r;
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+00104$:
+; ../floorf.c: 41: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/floorf.lst b/device/lib/stm8-large/floorf.lst
new file mode 100644
index 0000000..86cd067
--- /dev/null
+++ b/device/lib/stm8-large/floorf.lst
@@ -0,0 +1,128 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module floorf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _floorf
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../floorf.c: 33: float floorf (float x) _FLOAT_FUNC_REENTRANT
+ 50 ; -----------------------------------------
+ 51 ; function floorf
+ 52 ; -----------------------------------------
+ 000000 53 _floorf:
+ 000000 52 08 [ 2] 54 sub sp, #8
+ 55 ; ../floorf.c: 36: r=x;
+ 000002 1E 0E [ 2] 56 ldw x, (0x0e, sp)
+ 000004 89 [ 2] 57 pushw x
+ 000005 1E 0E [ 2] 58 ldw x, (0x0e, sp)
+ 000007 89 [ 2] 59 pushw x
+ 000008 8Ds00r00r00 [ 5] 60 callf ___fs2slong
+ 00000C 5B 04 [ 2] 61 addw sp, #4
+ 00000E 1F 03 [ 2] 62 ldw (0x03, sp), x
+ 000010 17 01 [ 2] 63 ldw (0x01, sp), y
+ 64 ; ../floorf.c: 38: return (r+((r>x)?-1:0));
+ 000012 1E 03 [ 2] 65 ldw x, (0x03, sp)
+ 000014 89 [ 2] 66 pushw x
+ 000015 1E 03 [ 2] 67 ldw x, (0x03, sp)
+ 000017 89 [ 2] 68 pushw x
+ 000018 8Ds00r00r00 [ 5] 69 callf ___slong2fs
+ 00001C 5B 04 [ 2] 70 addw sp, #4
+ 00001E 1F 07 [ 2] 71 ldw (0x07, sp), x
+ 000020 17 05 [ 2] 72 ldw (0x05, sp), y
+ 73 ; ../floorf.c: 37: if (r<=0)
+ 000022 5F [ 1] 74 clrw x
+ 000023 13 03 [ 2] 75 cpw x, (0x03, sp)
+ 000025 4F [ 1] 76 clr a
+ 000026 12 02 [ 1] 77 sbc a, (0x02, sp)
+ 000028 4F [ 1] 78 clr a
+ 000029 12 01 [ 1] 79 sbc a, (0x01, sp)
+ 00002B 2F 35 [ 1] 80 jrslt 00102$
+ 81 ; ../floorf.c: 38: return (r+((r>x)?-1:0));
+ 00002D 1E 07 [ 2] 82 ldw x, (0x07, sp)
+ 00002F 89 [ 2] 83 pushw x
+ 000030 1E 07 [ 2] 84 ldw x, (0x07, sp)
+ 000032 89 [ 2] 85 pushw x
+ 000033 1E 12 [ 2] 86 ldw x, (0x12, sp)
+ 000035 89 [ 2] 87 pushw x
+ 000036 1E 12 [ 2] 88 ldw x, (0x12, sp)
+ 000038 89 [ 2] 89 pushw x
+ 000039 8Ds00r00r00 [ 5] 90 callf ___fslt
+ 00003D 5B 08 [ 2] 91 addw sp, #8
+ 00003F 4D [ 1] 92 tnz a
+ 000040 27 03 [ 1] 93 jreq 00106$
+ 000042 5F [ 1] 94 clrw x
+ 000043 5A [ 2] 95 decw x
+ 000044 21 96 .byte 0x21
+ 000045 97 00106$:
+ 000045 5F [ 1] 98 clrw x
+ 000046 99 00107$:
+ 000046 51 [ 1] 100 exgw x, y
+ 000047 5F [ 1] 101 clrw x
+ 000048 90 5D [ 2] 102 tnzw y
+ 00004A 2A 01 [ 1] 103 jrpl 00120$
+ 00004C 5A [ 2] 104 decw x
+ 00004D 105 00120$:
+ 00004D 72 F9 03 [ 2] 106 addw y, (0x03, sp)
+ 000050 9F [ 1] 107 ld a, xl
+ 000051 19 02 [ 1] 108 adc a, (0x02, sp)
+ 000053 02 [ 1] 109 rlwa x
+ 000054 19 01 [ 1] 110 adc a, (0x01, sp)
+ 000056 95 [ 1] 111 ld xh, a
+ 000057 90 89 [ 2] 112 pushw y
+ 000059 89 [ 2] 113 pushw x
+ 00005A 8Ds00r00r00 [ 5] 114 callf ___slong2fs
+ 00005E 5B 04 [ 2] 115 addw sp, #4
+ 000060 20 04 [ 2] 116 jra 00104$
+ 000062 117 00102$:
+ 118 ; ../floorf.c: 40: return r;
+ 000062 1E 07 [ 2] 119 ldw x, (0x07, sp)
+ 000064 16 05 [ 2] 120 ldw y, (0x05, sp)
+ 000066 121 00104$:
+ 122 ; ../floorf.c: 41: }
+ 000066 5B 08 [ 2] 123 addw sp, #8
+ 000068 87 [ 5] 124 retf
+ 125 .area CODE
+ 126 .area CONST
+ 127 .area INITIALIZER
+ 128 .area CABS (ABS)
diff --git a/device/lib/stm8-large/floorf.rel b/device/lib/stm8-large/floorf.rel
new file mode 100644
index 0000000..a11d7de
--- /dev/null
+++ b/device/lib/stm8-large/floorf.rel
@@ -0,0 +1,56 @@
+XH3
+H B areas 5 global symbols
+M floorf
+O -mstm8
+S ___slong2fs Ref000000
+S ___fs2slong Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 69 flags 0 addr 0
+S _floorf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 1E 0E 89 1E 0E 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 00 16 03 89 8D 00 00 00 5B 04 1F 07 17 05 5F
+R 00 00 00 09 82 06 00 00
+T 00 00 23 13 03 4F 12 02 4F 12 01 2F 35 1E 07 89
+R 00 00 00 09
+T 00 00 30 1E 07 89 1E 12 89 1E 12 89 8D
+R 00 00 00 09
+T 00 00 3A 00 00 00 5B 08 4D 27 03 5F 5A 21
+R 00 00 00 09 82 03 00 02
+T 00 00 45
+R 00 00 00 09
+T 00 00 45 5F
+R 00 00 00 09
+T 00 00 46
+R 00 00 00 09
+T 00 00 46 51 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 00 4D
+R 00 00 00 09
+T 00 00 4D 72 F9 03 9F 19 02 02 19 01 95 90 89 89
+R 00 00 00 09
+T 00 00 5A 8D 00 00 00 5B 04 20 04
+R 00 00 00 09 82 04 00 00
+T 00 00 62
+R 00 00 00 09
+T 00 00 62 1E 07 16 05
+R 00 00 00 09
+T 00 00 66
+R 00 00 00 09
+T 00 00 66 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/floorf.sym b/device/lib/stm8-large/floorf.sym
new file mode 100644
index 0000000..1547c13
--- /dev/null
+++ b/device/lib/stm8-large/floorf.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fs2slong ****** GX
+ ___fslt ****** GX
+ ___slong2fs ****** GX
+ 9 _floorf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 69 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/free.asm b/device/lib/stm8-large/free.asm
new file mode 100644
index 0000000..b50c3e6
--- /dev/null
+++ b/device/lib/stm8-large/free.asm
@@ -0,0 +1,144 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module free
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _free
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../free.c: 50: void free(void *ptr)
+; -----------------------------------------
+; function free
+; -----------------------------------------
+_free:
+ sub sp, #10
+; ../free.c: 55: if(!ptr)
+ ldw x, (0x0e, sp)
+; ../free.c: 56: return;
+ jreq 00113$
+; ../free.c: 58: prev_free = 0;
+ clrw x
+ ldw (0x01, sp), x
+; ../free.c: 59: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list
+ ldw x, ___sdcc_heap_free+0
+ ldw (0x09, sp), x
+ ldw x, #(___sdcc_heap_free + 0)
+ ldw (0x03, sp), x
+00111$:
+ ldw x, (0x09, sp)
+ jreq 00103$
+ ldw y, (0x0e, sp)
+ ldw (0x07, sp), y
+ ldw x, (0x09, sp)
+ cpw x, (0x07, sp)
+ jrnc 00103$
+ ldw y, (0x09, sp)
+ ldw (0x01, sp), y
+ ldw x, (0x09, sp)
+ incw x
+ incw x
+ ldw (0x03, sp), x
+ ldw x, (x)
+ ldw (0x09, sp), x
+ jra 00111$
+00103$:
+; ../free.c: 60: next_free = h;
+ ldw y, (0x09, sp)
+ ldw (0x05, sp), y
+; ../free.c: 62: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free));
+ ldw x, (0x0e, sp)
+ decw x
+ decw x
+; ../free.c: 65: h->next_free = next_free;
+ ldw (0x07, sp), x
+ incw x
+ incw x
+ ldw (0x09, sp), x
+ ldw y, (0x05, sp)
+ ldw (x), y
+; ../free.c: 66: *f = h;
+ ldw x, (0x03, sp)
+ ldw y, (0x07, sp)
+ ldw (x), y
+; ../free.c: 68: if(next_free == h->next) // Merge with next block
+ ldw x, (0x07, sp)
+ ldw x, (x)
+ cpw x, (0x05, sp)
+ jrne 00105$
+; ../free.c: 70: h->next_free = h->next->next_free;
+ ldw x, (0x2, x)
+ ldw y, (0x09, sp)
+ ldw (y), x
+; ../free.c: 71: h->next = h->next->next;
+ ldw x, (0x07, sp)
+ ldw x, (x)
+ ldw x, (x)
+ ldw y, (0x07, sp)
+ ldw (y), x
+00105$:
+; ../free.c: 74: if (prev_free && prev_free->next == h) // Merge with previous block
+ ldw x, (0x01, sp)
+ jreq 00113$
+ ldw x, (x)
+ cpw x, (0x07, sp)
+ jrne 00113$
+; ../free.c: 76: prev_free->next = h->next;
+ ldw x, (0x07, sp)
+ ldw x, (x)
+ ldw y, (0x01, sp)
+ ldw (y), x
+; ../free.c: 77: prev_free->next_free = h->next_free;
+ ldw x, (0x01, sp)
+ incw x
+ incw x
+ ldw y, (0x09, sp)
+ ldw y, (y)
+ ldw (x), y
+00113$:
+; ../free.c: 79: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/free.lst b/device/lib/stm8-large/free.lst
new file mode 100644
index 0000000..08639cb
--- /dev/null
+++ b/device/lib/stm8-large/free.lst
@@ -0,0 +1,144 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module free
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _free
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../free.c: 50: void free(void *ptr)
+ 50 ; -----------------------------------------
+ 51 ; function free
+ 52 ; -----------------------------------------
+ 000000 53 _free:
+ 000000 52 0A [ 2] 54 sub sp, #10
+ 55 ; ../free.c: 55: if(!ptr)
+ 000002 1E 0E [ 2] 56 ldw x, (0x0e, sp)
+ 57 ; ../free.c: 56: return;
+ 000004 27 6E [ 1] 58 jreq 00113$
+ 59 ; ../free.c: 58: prev_free = 0;
+ 000006 5F [ 1] 60 clrw x
+ 000007 1F 01 [ 2] 61 ldw (0x01, sp), x
+ 62 ; ../free.c: 59: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list
+ 000009 CEu00u00 [ 2] 63 ldw x, ___sdcc_heap_free+0
+ 00000C 1F 09 [ 2] 64 ldw (0x09, sp), x
+ 00000E AEr00r00 [ 2] 65 ldw x, #(___sdcc_heap_free + 0)
+ 000011 1F 03 [ 2] 66 ldw (0x03, sp), x
+ 000013 67 00111$:
+ 000013 1E 09 [ 2] 68 ldw x, (0x09, sp)
+ 000015 27 19 [ 1] 69 jreq 00103$
+ 000017 16 0E [ 2] 70 ldw y, (0x0e, sp)
+ 000019 17 07 [ 2] 71 ldw (0x07, sp), y
+ 00001B 1E 09 [ 2] 72 ldw x, (0x09, sp)
+ 00001D 13 07 [ 2] 73 cpw x, (0x07, sp)
+ 00001F 24 0F [ 1] 74 jrnc 00103$
+ 000021 16 09 [ 2] 75 ldw y, (0x09, sp)
+ 000023 17 01 [ 2] 76 ldw (0x01, sp), y
+ 000025 1E 09 [ 2] 77 ldw x, (0x09, sp)
+ 000027 5C [ 1] 78 incw x
+ 000028 5C [ 1] 79 incw x
+ 000029 1F 03 [ 2] 80 ldw (0x03, sp), x
+ 00002B FE [ 2] 81 ldw x, (x)
+ 00002C 1F 09 [ 2] 82 ldw (0x09, sp), x
+ 00002E 20 E3 [ 2] 83 jra 00111$
+ 000030 84 00103$:
+ 85 ; ../free.c: 60: next_free = h;
+ 000030 16 09 [ 2] 86 ldw y, (0x09, sp)
+ 000032 17 05 [ 2] 87 ldw (0x05, sp), y
+ 88 ; ../free.c: 62: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free));
+ 000034 1E 0E [ 2] 89 ldw x, (0x0e, sp)
+ 000036 5A [ 2] 90 decw x
+ 000037 5A [ 2] 91 decw x
+ 92 ; ../free.c: 65: h->next_free = next_free;
+ 000038 1F 07 [ 2] 93 ldw (0x07, sp), x
+ 00003A 5C [ 1] 94 incw x
+ 00003B 5C [ 1] 95 incw x
+ 00003C 1F 09 [ 2] 96 ldw (0x09, sp), x
+ 00003E 16 05 [ 2] 97 ldw y, (0x05, sp)
+ 000040 FF [ 2] 98 ldw (x), y
+ 99 ; ../free.c: 66: *f = h;
+ 000041 1E 03 [ 2] 100 ldw x, (0x03, sp)
+ 000043 16 07 [ 2] 101 ldw y, (0x07, sp)
+ 000045 FF [ 2] 102 ldw (x), y
+ 103 ; ../free.c: 68: if(next_free == h->next) // Merge with next block
+ 000046 1E 07 [ 2] 104 ldw x, (0x07, sp)
+ 000048 FE [ 2] 105 ldw x, (x)
+ 000049 13 05 [ 2] 106 cpw x, (0x05, sp)
+ 00004B 26 0E [ 1] 107 jrne 00105$
+ 108 ; ../free.c: 70: h->next_free = h->next->next_free;
+ 00004D EE 02 [ 2] 109 ldw x, (0x2, x)
+ 00004F 16 09 [ 2] 110 ldw y, (0x09, sp)
+ 000051 90 FF [ 2] 111 ldw (y), x
+ 112 ; ../free.c: 71: h->next = h->next->next;
+ 000053 1E 07 [ 2] 113 ldw x, (0x07, sp)
+ 000055 FE [ 2] 114 ldw x, (x)
+ 000056 FE [ 2] 115 ldw x, (x)
+ 000057 16 07 [ 2] 116 ldw y, (0x07, sp)
+ 000059 90 FF [ 2] 117 ldw (y), x
+ 00005B 118 00105$:
+ 119 ; ../free.c: 74: if (prev_free && prev_free->next == h) // Merge with previous block
+ 00005B 1E 01 [ 2] 120 ldw x, (0x01, sp)
+ 00005D 27 15 [ 1] 121 jreq 00113$
+ 00005F FE [ 2] 122 ldw x, (x)
+ 000060 13 07 [ 2] 123 cpw x, (0x07, sp)
+ 000062 26 10 [ 1] 124 jrne 00113$
+ 125 ; ../free.c: 76: prev_free->next = h->next;
+ 000064 1E 07 [ 2] 126 ldw x, (0x07, sp)
+ 000066 FE [ 2] 127 ldw x, (x)
+ 000067 16 01 [ 2] 128 ldw y, (0x01, sp)
+ 000069 90 FF [ 2] 129 ldw (y), x
+ 130 ; ../free.c: 77: prev_free->next_free = h->next_free;
+ 00006B 1E 01 [ 2] 131 ldw x, (0x01, sp)
+ 00006D 5C [ 1] 132 incw x
+ 00006E 5C [ 1] 133 incw x
+ 00006F 16 09 [ 2] 134 ldw y, (0x09, sp)
+ 000071 90 FE [ 2] 135 ldw y, (y)
+ 000073 FF [ 2] 136 ldw (x), y
+ 000074 137 00113$:
+ 138 ; ../free.c: 79: }
+ 000074 5B 0A [ 2] 139 addw sp, #10
+ 000076 87 [ 5] 140 retf
+ 141 .area CODE
+ 142 .area CONST
+ 143 .area INITIALIZER
+ 144 .area CABS (ABS)
diff --git a/device/lib/stm8-large/free.rel b/device/lib/stm8-large/free.rel
new file mode 100644
index 0000000..bc9374e
--- /dev/null
+++ b/device/lib/stm8-large/free.rel
@@ -0,0 +1,52 @@
+XH3
+H B areas 3 global symbols
+M free
+O -mstm8
+S .__.ABS. Def000000
+S ___sdcc_heap_free Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 77 flags 0 addr 0
+S _free Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 1E 0E 27 6E 5F 1F 01 CE 00 00 1F
+R 00 00 00 09 12 0D 00 01
+T 00 00 0D 09 AE 00 00 1F 03
+R 00 00 00 09 02 05 00 01
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 1E 09 27 19 16 0E 17 07 1E 09 13 07 24
+R 00 00 00 09
+T 00 00 20 0F 16 09 17 01 1E 09 5C 5C 1F 03 FE 1F
+R 00 00 00 09
+T 00 00 2D 09 20 E3
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 16 09 17 05 1E 0E 5A 5A 1F 07 5C 5C 1F
+R 00 00 00 09
+T 00 00 3D 09 16 05 FF 1E 03 16 07 FF 1E 07 FE 13
+R 00 00 00 09
+T 00 00 4A 05 26 0E EE 02 16 09 90 FF 1E 07 FE FE
+R 00 00 00 09
+T 00 00 57 16 07 90 FF
+R 00 00 00 09
+T 00 00 5B
+R 00 00 00 09
+T 00 00 5B 1E 01 27 15 FE 13 07 26 10 1E 07 FE 16
+R 00 00 00 09
+T 00 00 68 01 90 FF 1E 01 5C 5C 16 09 90 FE FF
+R 00 00 00 09
+T 00 00 74
+R 00 00 00 09
+T 00 00 74 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/free.sym b/device/lib/stm8-large/free.sym
new file mode 100644
index 0000000..0aea47f
--- /dev/null
+++ b/device/lib/stm8-large/free.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___sdcc_heap_free ****** GX
+ 9 _free 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 77 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/frexpf.asm b/device/lib/stm8-large/frexpf.asm
new file mode 100644
index 0000000..2bf9b5b
--- /dev/null
+++ b/device/lib/stm8-large/frexpf.asm
@@ -0,0 +1,128 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module frexpf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _frexpf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../frexpf.c: 34: float frexpf(float x, int *pw2)
+; -----------------------------------------
+; function frexpf
+; -----------------------------------------
+_frexpf:
+ sub sp, #8
+; ../frexpf.c: 39: fl.f=x;
+ ldw y, (0x0e, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x0c, sp)
+ ldw (0x01, sp), y
+; ../frexpf.c: 41: i = ( fl.l >> 23) & 0x000000ff;
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ clr a
+ tnzw x
+ jrpl 00103$
+ dec a
+00103$:
+ push a
+ rrwa x
+ rrwa y
+ ld a, (1, sp)
+ rrwa x
+ rrwa y
+ ld a, (1, sp)
+ rrwa x
+ rrwa y
+ sll a
+ rlcw y
+ rlcw x
+ pop a
+ clr a
+ clrw x
+; ../frexpf.c: 42: i -= 0x7e;
+ ld yh, a
+ subw y, #0x007e
+ ld a, xl
+ sbc a, #0x00
+ rlwa x
+ sbc a, #0x00
+ ldw (0x07, sp), y
+ exg a, xl
+ ld (0x06, sp), a
+ exg a, xl
+ ld (0x05, sp), a
+; ../frexpf.c: 43: *pw2 = i;
+ ldw x, (0x10, sp)
+ ldw y, (0x07, sp)
+ ldw (x), y
+; ../frexpf.c: 44: fl.l &= 0x807fffff; /* strip all exponent bits */
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ ld a, xl
+ and a, #0x7f
+ rlwa x
+ and a, #0x80
+ ld xh, a
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../frexpf.c: 45: fl.l |= 0x3f000000; /* mantissa between 0.5 and 1 */
+ ld a, (0x04, sp)
+ ld a, (0x03, sp)
+ ld a, (0x02, sp)
+ ld a, (0x01, sp)
+ ld a, xh
+ or a, #0x3f
+ ld xh, a
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../frexpf.c: 46: return(fl.f);
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+; ../frexpf.c: 47: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/frexpf.lst b/device/lib/stm8-large/frexpf.lst
new file mode 100644
index 0000000..99d64ea
--- /dev/null
+++ b/device/lib/stm8-large/frexpf.lst
@@ -0,0 +1,128 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module frexpf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _frexpf
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../frexpf.c: 34: float frexpf(float x, int *pw2)
+ 50 ; -----------------------------------------
+ 51 ; function frexpf
+ 52 ; -----------------------------------------
+ 000000 53 _frexpf:
+ 000000 52 08 [ 2] 54 sub sp, #8
+ 55 ; ../frexpf.c: 39: fl.f=x;
+ 000002 16 0E [ 2] 56 ldw y, (0x0e, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 0C [ 2] 58 ldw y, (0x0c, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../frexpf.c: 41: i = ( fl.l >> 23) & 0x000000ff;
+ 00000A 16 03 [ 2] 61 ldw y, (0x03, sp)
+ 00000C 1E 01 [ 2] 62 ldw x, (0x01, sp)
+ 00000E 4F [ 1] 63 clr a
+ 00000F 5D [ 2] 64 tnzw x
+ 000010 2A 01 [ 1] 65 jrpl 00103$
+ 000012 4A [ 1] 66 dec a
+ 000013 67 00103$:
+ 000013 88 [ 1] 68 push a
+ 000014 01 [ 1] 69 rrwa x
+ 000015 90 01 [ 1] 70 rrwa y
+ 000017 7B 01 [ 1] 71 ld a, (1, sp)
+ 000019 01 [ 1] 72 rrwa x
+ 00001A 90 01 [ 1] 73 rrwa y
+ 00001C 7B 01 [ 1] 74 ld a, (1, sp)
+ 00001E 01 [ 1] 75 rrwa x
+ 00001F 90 01 [ 1] 76 rrwa y
+ 000021 48 [ 1] 77 sll a
+ 000022 90 59 [ 2] 78 rlcw y
+ 000024 59 [ 2] 79 rlcw x
+ 000025 84 [ 1] 80 pop a
+ 000026 4F [ 1] 81 clr a
+ 000027 5F [ 1] 82 clrw x
+ 83 ; ../frexpf.c: 42: i -= 0x7e;
+ 000028 90 95 [ 1] 84 ld yh, a
+ 00002A 72 A2 00 7E [ 2] 85 subw y, #0x007e
+ 00002E 9F [ 1] 86 ld a, xl
+ 00002F A2 00 [ 1] 87 sbc a, #0x00
+ 000031 02 [ 1] 88 rlwa x
+ 000032 A2 00 [ 1] 89 sbc a, #0x00
+ 000034 17 07 [ 2] 90 ldw (0x07, sp), y
+ 000036 41 [ 1] 91 exg a, xl
+ 000037 6B 06 [ 1] 92 ld (0x06, sp), a
+ 000039 41 [ 1] 93 exg a, xl
+ 00003A 6B 05 [ 1] 94 ld (0x05, sp), a
+ 95 ; ../frexpf.c: 43: *pw2 = i;
+ 00003C 1E 10 [ 2] 96 ldw x, (0x10, sp)
+ 00003E 16 07 [ 2] 97 ldw y, (0x07, sp)
+ 000040 FF [ 2] 98 ldw (x), y
+ 99 ; ../frexpf.c: 44: fl.l &= 0x807fffff; /* strip all exponent bits */
+ 000041 16 03 [ 2] 100 ldw y, (0x03, sp)
+ 000043 1E 01 [ 2] 101 ldw x, (0x01, sp)
+ 000045 9F [ 1] 102 ld a, xl
+ 000046 A4 7F [ 1] 103 and a, #0x7f
+ 000048 02 [ 1] 104 rlwa x
+ 000049 A4 80 [ 1] 105 and a, #0x80
+ 00004B 95 [ 1] 106 ld xh, a
+ 00004C 17 03 [ 2] 107 ldw (0x03, sp), y
+ 00004E 1F 01 [ 2] 108 ldw (0x01, sp), x
+ 109 ; ../frexpf.c: 45: fl.l |= 0x3f000000; /* mantissa between 0.5 and 1 */
+ 000050 7B 04 [ 1] 110 ld a, (0x04, sp)
+ 000052 7B 03 [ 1] 111 ld a, (0x03, sp)
+ 000054 7B 02 [ 1] 112 ld a, (0x02, sp)
+ 000056 7B 01 [ 1] 113 ld a, (0x01, sp)
+ 000058 9E [ 1] 114 ld a, xh
+ 000059 AA 3F [ 1] 115 or a, #0x3f
+ 00005B 95 [ 1] 116 ld xh, a
+ 00005C 17 03 [ 2] 117 ldw (0x03, sp), y
+ 00005E 1F 01 [ 2] 118 ldw (0x01, sp), x
+ 119 ; ../frexpf.c: 46: return(fl.f);
+ 000060 1E 03 [ 2] 120 ldw x, (0x03, sp)
+ 000062 16 01 [ 2] 121 ldw y, (0x01, sp)
+ 122 ; ../frexpf.c: 47: }
+ 000064 5B 08 [ 2] 123 addw sp, #8
+ 000066 87 [ 5] 124 retf
+ 125 .area CODE
+ 126 .area CONST
+ 127 .area INITIALIZER
+ 128 .area CABS (ABS)
diff --git a/device/lib/stm8-large/frexpf.rel b/device/lib/stm8-large/frexpf.rel
new file mode 100644
index 0000000..e5bf4ac
--- /dev/null
+++ b/device/lib/stm8-large/frexpf.rel
@@ -0,0 +1,39 @@
+XH3
+H B areas 2 global symbols
+M frexpf
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 67 flags 0 addr 0
+S _frexpf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 16 0E 17 03 16 0C 17 01 16 03 1E
+R 00 00 00 09
+T 00 00 0D 01 4F 5D 2A 01 4A
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 88 01 90 01 7B 01 01 90 01 7B 01 01 90
+R 00 00 00 09
+T 00 00 20 01 48 90 59 59 84 4F 5F 90 95 72 A2
+R 00 00 00 09
+T 00 00 2C 00 7E 9F A2 00 02 A2 00 17 07 41 6B 06
+R 00 00 00 09
+T 00 00 39 41 6B 05 1E 10 16 07 FF 16 03 1E 01 9F
+R 00 00 00 09
+T 00 00 46 A4 7F 02 A4 80 95 17 03 1F 01 7B 04 7B
+R 00 00 00 09
+T 00 00 53 03 7B 02 7B 01 9E AA 3F 95 17 03 1F 01
+R 00 00 00 09
+T 00 00 60 1E 03 16 01 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/frexpf.sym b/device/lib/stm8-large/frexpf.sym
new file mode 100644
index 0000000..848eb1c
--- /dev/null
+++ b/device/lib/stm8-large/frexpf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _frexpf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 67 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/gets.asm b/device/lib/stm8-large/gets.asm
new file mode 100644
index 0000000..088877a
--- /dev/null
+++ b/device/lib/stm8-large/gets.asm
@@ -0,0 +1,148 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module gets
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _gets
+ .globl _putchar
+ .globl _getchar
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../gets.c: 32: gets (char *s)
+; -----------------------------------------
+; function gets
+; -----------------------------------------
+_gets:
+ sub sp, #2
+; ../gets.c: 35: unsigned int count = 0;
+ clrw x
+ ldw (0x01, sp), x
+; ../gets.c: 37: while (1)
+00109$:
+; ../gets.c: 39: c = getchar ();
+ callf _getchar
+ ld a, xl
+; ../gets.c: 40: switch(c)
+ cp a, #0x08
+ jreq 00101$
+; ../gets.c: 57: *s = 0;
+ ldw x, (0x06, sp)
+; ../gets.c: 40: switch(c)
+ cp a, #0x0a
+ jreq 00105$
+ cp a, #0x0d
+ jreq 00105$
+ jra 00106$
+; ../gets.c: 42: case '\b': /* backspace */
+00101$:
+; ../gets.c: 43: if (count)
+ ldw x, (0x01, sp)
+ jreq 00109$
+; ../gets.c: 45: putchar ('\b');
+ push #0x08
+ push #0x00
+ callf _putchar
+ addw sp, #2
+; ../gets.c: 46: putchar (' ');
+ push #0x20
+ push #0x00
+ callf _putchar
+ addw sp, #2
+; ../gets.c: 47: putchar ('\b');
+ push #0x08
+ push #0x00
+ callf _putchar
+ addw sp, #2
+; ../gets.c: 48: --s;
+ ldw x, (0x06, sp)
+ decw x
+ ldw (0x06, sp), x
+; ../gets.c: 49: --count;
+ ldw x, (0x01, sp)
+ decw x
+ ldw (0x01, sp), x
+; ../gets.c: 51: break;
+ jra 00109$
+; ../gets.c: 54: case '\r': /* CR or LF */
+00105$:
+; ../gets.c: 55: putchar ('\r');
+ pushw x
+ push #0x0d
+ push #0x00
+ callf _putchar
+ addw sp, #2
+ push #0x0a
+ push #0x00
+ callf _putchar
+ addw sp, #2
+ popw x
+; ../gets.c: 57: *s = 0;
+ clr (x)
+; ../gets.c: 58: return s;
+ jra 00111$
+; ../gets.c: 60: default:
+00106$:
+; ../gets.c: 61: *s++ = c;
+ ld (x), a
+ incw x
+ ldw (0x06, sp), x
+; ../gets.c: 62: ++count;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x01, sp), x
+; ../gets.c: 63: putchar (c);
+ clrw x
+ ld xl, a
+ pushw x
+ callf _putchar
+ addw sp, #2
+; ../gets.c: 65: }
+ jra 00109$
+00111$:
+; ../gets.c: 67: }
+ addw sp, #2
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/gets.lst b/device/lib/stm8-large/gets.lst
new file mode 100644
index 0000000..256779a
--- /dev/null
+++ b/device/lib/stm8-large/gets.lst
@@ -0,0 +1,148 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module gets
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _gets
+ 12 .globl _putchar
+ 13 .globl _getchar
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../gets.c: 32: gets (char *s)
+ 52 ; -----------------------------------------
+ 53 ; function gets
+ 54 ; -----------------------------------------
+ 000000 55 _gets:
+ 000000 52 02 [ 2] 56 sub sp, #2
+ 57 ; ../gets.c: 35: unsigned int count = 0;
+ 000002 5F [ 1] 58 clrw x
+ 000003 1F 01 [ 2] 59 ldw (0x01, sp), x
+ 60 ; ../gets.c: 37: while (1)
+ 000005 61 00109$:
+ 62 ; ../gets.c: 39: c = getchar ();
+ 000005 8Ds00r00r00 [ 5] 63 callf _getchar
+ 000009 9F [ 1] 64 ld a, xl
+ 65 ; ../gets.c: 40: switch(c)
+ 00000A A1 08 [ 1] 66 cp a, #0x08
+ 00000C 27 0C [ 1] 67 jreq 00101$
+ 68 ; ../gets.c: 57: *s = 0;
+ 00000E 1E 06 [ 2] 69 ldw x, (0x06, sp)
+ 70 ; ../gets.c: 40: switch(c)
+ 000010 A1 0A [ 1] 71 cp a, #0x0a
+ 000012 27 34 [ 1] 72 jreq 00105$
+ 000014 A1 0D [ 1] 73 cp a, #0x0d
+ 000016 27 30 [ 1] 74 jreq 00105$
+ 000018 20 47 [ 2] 75 jra 00106$
+ 76 ; ../gets.c: 42: case '\b': /* backspace */
+ 00001A 77 00101$:
+ 78 ; ../gets.c: 43: if (count)
+ 00001A 1E 01 [ 2] 79 ldw x, (0x01, sp)
+ 00001C 27 E7 [ 1] 80 jreq 00109$
+ 81 ; ../gets.c: 45: putchar ('\b');
+ 00001E 4B 08 [ 1] 82 push #0x08
+ 000020 4B 00 [ 1] 83 push #0x00
+ 000022 8Ds00r00r00 [ 5] 84 callf _putchar
+ 000026 5B 02 [ 2] 85 addw sp, #2
+ 86 ; ../gets.c: 46: putchar (' ');
+ 000028 4B 20 [ 1] 87 push #0x20
+ 00002A 4B 00 [ 1] 88 push #0x00
+ 00002C 8Ds00r00r00 [ 5] 89 callf _putchar
+ 000030 5B 02 [ 2] 90 addw sp, #2
+ 91 ; ../gets.c: 47: putchar ('\b');
+ 000032 4B 08 [ 1] 92 push #0x08
+ 000034 4B 00 [ 1] 93 push #0x00
+ 000036 8Ds00r00r00 [ 5] 94 callf _putchar
+ 00003A 5B 02 [ 2] 95 addw sp, #2
+ 96 ; ../gets.c: 48: --s;
+ 00003C 1E 06 [ 2] 97 ldw x, (0x06, sp)
+ 00003E 5A [ 2] 98 decw x
+ 00003F 1F 06 [ 2] 99 ldw (0x06, sp), x
+ 100 ; ../gets.c: 49: --count;
+ 000041 1E 01 [ 2] 101 ldw x, (0x01, sp)
+ 000043 5A [ 2] 102 decw x
+ 000044 1F 01 [ 2] 103 ldw (0x01, sp), x
+ 104 ; ../gets.c: 51: break;
+ 000046 20 BD [ 2] 105 jra 00109$
+ 106 ; ../gets.c: 54: case '\r': /* CR or LF */
+ 000048 107 00105$:
+ 108 ; ../gets.c: 55: putchar ('\r');
+ 000048 89 [ 2] 109 pushw x
+ 000049 4B 0D [ 1] 110 push #0x0d
+ 00004B 4B 00 [ 1] 111 push #0x00
+ 00004D 8Ds00r00r00 [ 5] 112 callf _putchar
+ 000051 5B 02 [ 2] 113 addw sp, #2
+ 000053 4B 0A [ 1] 114 push #0x0a
+ 000055 4B 00 [ 1] 115 push #0x00
+ 000057 8Ds00r00r00 [ 5] 116 callf _putchar
+ 00005B 5B 02 [ 2] 117 addw sp, #2
+ 00005D 85 [ 2] 118 popw x
+ 119 ; ../gets.c: 57: *s = 0;
+ 00005E 7F [ 1] 120 clr (x)
+ 121 ; ../gets.c: 58: return s;
+ 00005F 20 14 [ 2] 122 jra 00111$
+ 123 ; ../gets.c: 60: default:
+ 000061 124 00106$:
+ 125 ; ../gets.c: 61: *s++ = c;
+ 000061 F7 [ 1] 126 ld (x), a
+ 000062 5C [ 1] 127 incw x
+ 000063 1F 06 [ 2] 128 ldw (0x06, sp), x
+ 129 ; ../gets.c: 62: ++count;
+ 000065 1E 01 [ 2] 130 ldw x, (0x01, sp)
+ 000067 5C [ 1] 131 incw x
+ 000068 1F 01 [ 2] 132 ldw (0x01, sp), x
+ 133 ; ../gets.c: 63: putchar (c);
+ 00006A 5F [ 1] 134 clrw x
+ 00006B 97 [ 1] 135 ld xl, a
+ 00006C 89 [ 2] 136 pushw x
+ 00006D 8Ds00r00r00 [ 5] 137 callf _putchar
+ 000071 5B 02 [ 2] 138 addw sp, #2
+ 139 ; ../gets.c: 65: }
+ 000073 20 90 [ 2] 140 jra 00109$
+ 000075 141 00111$:
+ 142 ; ../gets.c: 67: }
+ 000075 5B 02 [ 2] 143 addw sp, #2
+ 000077 87 [ 5] 144 retf
+ 145 .area CODE
+ 146 .area CONST
+ 147 .area INITIALIZER
+ 148 .area CABS (ABS)
diff --git a/device/lib/stm8-large/gets.rel b/device/lib/stm8-large/gets.rel
new file mode 100644
index 0000000..be5f23e
--- /dev/null
+++ b/device/lib/stm8-large/gets.rel
@@ -0,0 +1,57 @@
+XH3
+H B areas 4 global symbols
+M gets
+O -mstm8
+S _putchar Ref000000
+S .__.ABS. Def000000
+S _getchar Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 78 flags 0 addr 0
+S _gets Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 5F 1F 01
+R 00 00 00 09
+T 00 00 05
+R 00 00 00 09
+T 00 00 05 8D 00 00 00 9F A1 08 27 0C 1E 06 A1 0A
+R 00 00 00 09 82 04 00 02
+T 00 00 12 27 34 A1 0D 27 30 20 47
+R 00 00 00 09
+T 00 00 1A
+R 00 00 00 09
+T 00 00 1A 1E 01 27 E7 4B 08 4B 00 8D
+R 00 00 00 09
+T 00 00 23 00 00 00 5B 02 4B 20 4B 00 8D
+R 00 00 00 09 82 03 00 00
+T 00 00 2D 00 00 00 5B 02 4B 08 4B 00 8D
+R 00 00 00 09 82 03 00 00
+T 00 00 37 00 00 00 5B 02 1E 06 5A 1F 06 1E 01 5A
+R 00 00 00 09 82 03 00 00
+T 00 00 44 1F 01 20 BD
+R 00 00 00 09
+T 00 00 48
+R 00 00 00 09
+T 00 00 48 89 4B 0D 4B 00 8D 00 00 00 5B 02 4B 0A
+R 00 00 00 09 82 09 00 00
+T 00 00 55 4B 00 8D 00 00 00 5B 02 85 7F 20 14
+R 00 00 00 09 82 06 00 00
+T 00 00 61
+R 00 00 00 09
+T 00 00 61 F7 5C 1F 06 1E 01 5C 1F 01 5F 97 89 8D
+R 00 00 00 09
+T 00 00 6E 00 00 00 5B 02 20 90
+R 00 00 00 09 82 03 00 00
+T 00 00 75
+R 00 00 00 09
+T 00 00 75 5B 02 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/gets.sym b/device/lib/stm8-large/gets.sym
new file mode 100644
index 0000000..c6b3c13
--- /dev/null
+++ b/device/lib/stm8-large/gets.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _getchar ****** GX
+ 9 _gets 000000 GR
+ _putchar ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 78 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/heap.lst b/device/lib/stm8-large/heap.lst
new file mode 100644
index 0000000..d9bea1b
--- /dev/null
+++ b/device/lib/stm8-large/heap.lst
@@ -0,0 +1,42 @@
+ 1 ;--------------------------------------------------------------------------
+ 2 ; heap.s
+ 3 ;
+ 4 ; Copyright (C) 2014, Ben Shi
+ 5 ;
+ 6 ; This library is free software; you can redistribute it and/or modify it
+ 7 ; under the terms of the GNU General Public License as published by the
+ 8 ; Free Software Foundation; either version 2, or (at your option) any
+ 9 ; later version.
+ 10 ;
+ 11 ; This library is distributed in the hope that it will be useful,
+ 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 14 ; GNU General Public License for more details.
+ 15 ;
+ 16 ; You should have received a copy of the GNU General Public License
+ 17 ; along with this library; see the file COPYING. If not, write to the
+ 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ 19 ; MA 02110-1301, USA.
+ 20 ;
+ 21 ; As a special exception, if you link this library with other files,
+ 22 ; some of which are compiled with SDCC, to produce an executable,
+ 23 ; this library does not by itself cause the resulting executable to
+ 24 ; be covered by the GNU General Public License. This exception does
+ 25 ; not however invalidate any other reasons why the executable file
+ 26 ; might be covered by the GNU General Public License.
+ 27 ;--------------------------------------------------------------------------
+ 28
+ 29 .globl ___sdcc_heap_init
+ 30 .globl ___sdcc_heap
+ 31 .globl ___sdcc_heap_end
+ 32
+ 33 .area GSINIT
+ 000000 8Ds00r00r00 [ 5] 34 callf ___sdcc_heap_init
+ 35
+ 36 .area DATA
+ 37 ; For now just allocate 1024 bytes for the heap.
+ 000000 38 ___sdcc_heap::
+ 000000 39 .ds 1023
+ 0003FF 40 ___sdcc_heap_end::
+ 0003FF 41 .ds 1
+ 42
diff --git a/device/lib/stm8-large/heap.rel b/device/lib/stm8-large/heap.rel
new file mode 100644
index 0000000..9f59f58
--- /dev/null
+++ b/device/lib/stm8-large/heap.rel
@@ -0,0 +1,19 @@
+XH3
+H 3 areas 4 global symbols
+S ___sdcc_heap_init Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A GSINIT size 4 flags 0 addr 0
+A DATA size 400 flags 0 addr 0
+S ___sdcc_heap_end Def0003FF
+S ___sdcc_heap Def000000
+T 00 00 00 8D 00 00 00
+R 00 00 00 01 82 04 00 00
+T 00 00 00
+R 00 00 00 02
+T 00 00 00
+R 00 00 00 02
+T 00 03 FF
+R 00 00 00 02
+T 00 03 FF
+R 00 00 00 02
diff --git a/device/lib/stm8-large/heap.s b/device/lib/stm8-large/heap.s
new file mode 100644
index 0000000..a1578fe
--- /dev/null
+++ b/device/lib/stm8-large/heap.s
@@ -0,0 +1,42 @@
+;--------------------------------------------------------------------------
+; heap.s
+;
+; Copyright (C) 2014, Ben Shi
+;
+; This library is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 2, or (at your option) any
+; later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this library; see the file COPYING. If not, write to the
+; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+; MA 02110-1301, USA.
+;
+; As a special exception, if you link this library with other files,
+; some of which are compiled with SDCC, to produce an executable,
+; this library does not by itself cause the resulting executable to
+; be covered by the GNU General Public License. This exception does
+; not however invalidate any other reasons why the executable file
+; might be covered by the GNU General Public License.
+;--------------------------------------------------------------------------
+
+ .globl ___sdcc_heap_init
+ .globl ___sdcc_heap
+ .globl ___sdcc_heap_end
+
+ .area GSINIT
+ callf ___sdcc_heap_init
+
+ .area DATA
+ ; For now just allocate 1024 bytes for the heap.
+___sdcc_heap::
+ .ds 1023
+___sdcc_heap_end::
+ .ds 1
+
diff --git a/device/lib/stm8-large/heap.sym b/device/lib/stm8-large/heap.sym
new file mode 100644
index 0000000..68c8cff
--- /dev/null
+++ b/device/lib/stm8-large/heap.sym
@@ -0,0 +1,18 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L
+ .__.H$L.= 000001 L | 2 ___sdcc_ 000000 GR | 2 ___sdcc_ 0003FF GR
+ ___sdcc_ ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 GSINIT size 4 flags 0
+ 2 DATA size 400 flags 0
+
diff --git a/device/lib/stm8-large/isalnum.asm b/device/lib/stm8-large/isalnum.asm
new file mode 100644
index 0000000..5e26eea
--- /dev/null
+++ b/device/lib/stm8-large/isalnum.asm
@@ -0,0 +1,83 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isalnum
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isalpha
+ .globl _isalnum
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isalnum.c: 37: int isalnum (int c)
+; -----------------------------------------
+; function isalnum
+; -----------------------------------------
+_isalnum:
+; ../isalnum.c: 39: return (isalpha (c) || isdigit (c));
+ ldw x, (0x04, sp)
+ pushw x
+ callf _isalpha
+ addw sp, #2
+ tnzw x
+ jrne 00105$
+ ldw x, (0x04, sp)
+; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ ld a, xl
+ cp a, #0x30
+ jrc 00109$
+ cp a, #0x39
+ jrule 00105$
+00109$:
+; ../isalnum.c: 39: return (isalpha (c) || isdigit (c));
+ clr a
+ .byte 0xc5
+00105$:
+ ld a, #0x01
+00106$:
+ clrw x
+ ld xl, a
+; ../isalnum.c: 40: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isalnum.lst b/device/lib/stm8-large/isalnum.lst
new file mode 100644
index 0000000..49f614d
--- /dev/null
+++ b/device/lib/stm8-large/isalnum.lst
@@ -0,0 +1,83 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isalnum
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isalpha
+ 12 .globl _isalnum
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../isalnum.c: 37: int isalnum (int c)
+ 51 ; -----------------------------------------
+ 52 ; function isalnum
+ 53 ; -----------------------------------------
+ 000000 54 _isalnum:
+ 55 ; ../isalnum.c: 39: return (isalpha (c) || isdigit (c));
+ 000000 1E 04 [ 2] 56 ldw x, (0x04, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 8Ds00r00r00 [ 5] 58 callf _isalpha
+ 000007 5B 02 [ 2] 59 addw sp, #2
+ 000009 5D [ 2] 60 tnzw x
+ 00000A 26 0D [ 1] 61 jrne 00105$
+ 00000C 1E 04 [ 2] 62 ldw x, (0x04, sp)
+ 63 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ 00000E 9F [ 1] 64 ld a, xl
+ 00000F A1 30 [ 1] 65 cp a, #0x30
+ 000011 25 04 [ 1] 66 jrc 00109$
+ 000013 A1 39 [ 1] 67 cp a, #0x39
+ 000015 23 02 [ 2] 68 jrule 00105$
+ 000017 69 00109$:
+ 70 ; ../isalnum.c: 39: return (isalpha (c) || isdigit (c));
+ 000017 4F [ 1] 71 clr a
+ 000018 C5 72 .byte 0xc5
+ 000019 73 00105$:
+ 000019 A6 01 [ 1] 74 ld a, #0x01
+ 00001B 75 00106$:
+ 00001B 5F [ 1] 76 clrw x
+ 00001C 97 [ 1] 77 ld xl, a
+ 78 ; ../isalnum.c: 40: }
+ 00001D 87 [ 5] 79 retf
+ 80 .area CODE
+ 81 .area CONST
+ 82 .area INITIALIZER
+ 83 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isalnum.rel b/device/lib/stm8-large/isalnum.rel
new file mode 100644
index 0000000..33988d6
--- /dev/null
+++ b/device/lib/stm8-large/isalnum.rel
@@ -0,0 +1,36 @@
+XH3
+H B areas 3 global symbols
+M isalnum
+O -mstm8
+S _isalpha Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1E flags 0 addr 0
+S _isalnum Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 89 8D 00 00 00 5B 02 5D 26 0D 1E
+R 00 00 00 09 82 07 00 00
+T 00 00 0D 04 9F A1 30 25 04 A1 39 23 02
+R 00 00 00 09
+T 00 00 17
+R 00 00 00 09
+T 00 00 17 4F C5
+R 00 00 00 09
+T 00 00 19
+R 00 00 00 09
+T 00 00 19 A6 01
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isalnum.sym b/device/lib/stm8-large/isalnum.sym
new file mode 100644
index 0000000..84aced9
--- /dev/null
+++ b/device/lib/stm8-large/isalnum.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isalnum 000000 GR
+ _isalpha ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isalpha.asm b/device/lib/stm8-large/isalpha.asm
new file mode 100644
index 0000000..f4547bb
--- /dev/null
+++ b/device/lib/stm8-large/isalpha.asm
@@ -0,0 +1,82 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isalpha
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isalpha
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isalpha.c: 37: int isalpha (int c)
+; -----------------------------------------
+; function isalpha
+; -----------------------------------------
+_isalpha:
+; ../isalpha.c: 39: return (isupper (c) || islower (c));
+ ldw x, (0x04, sp)
+; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z');
+ ld a, xl
+ cp a, #0x41
+ jrc 00110$
+ cp a, #0x5a
+ jrule 00106$
+00110$:
+; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z');
+ cp a, #0x61
+ jrc 00113$
+ cp a, #0x7a
+ jrule 00106$
+00113$:
+; ../isalpha.c: 39: return (isupper (c) || islower (c));
+ clr a
+ .byte 0xc5
+00106$:
+ ld a, #0x01
+00107$:
+ clrw x
+ ld xl, a
+; ../isalpha.c: 40: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isalpha.lst b/device/lib/stm8-large/isalpha.lst
new file mode 100644
index 0000000..eb8d146
--- /dev/null
+++ b/device/lib/stm8-large/isalpha.lst
@@ -0,0 +1,82 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isalpha
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isalpha
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isalpha.c: 37: int isalpha (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isalpha
+ 52 ; -----------------------------------------
+ 000000 53 _isalpha:
+ 54 ; ../isalpha.c: 39: return (isupper (c) || islower (c));
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 56 ; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z');
+ 000002 9F [ 1] 57 ld a, xl
+ 000003 A1 41 [ 1] 58 cp a, #0x41
+ 000005 25 04 [ 1] 59 jrc 00110$
+ 000007 A1 5A [ 1] 60 cp a, #0x5a
+ 000009 23 0A [ 2] 61 jrule 00106$
+ 00000B 62 00110$:
+ 63 ; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z');
+ 00000B A1 61 [ 1] 64 cp a, #0x61
+ 00000D 25 04 [ 1] 65 jrc 00113$
+ 00000F A1 7A [ 1] 66 cp a, #0x7a
+ 000011 23 02 [ 2] 67 jrule 00106$
+ 000013 68 00113$:
+ 69 ; ../isalpha.c: 39: return (isupper (c) || islower (c));
+ 000013 4F [ 1] 70 clr a
+ 000014 C5 71 .byte 0xc5
+ 000015 72 00106$:
+ 000015 A6 01 [ 1] 73 ld a, #0x01
+ 000017 74 00107$:
+ 000017 5F [ 1] 75 clrw x
+ 000018 97 [ 1] 76 ld xl, a
+ 77 ; ../isalpha.c: 40: }
+ 000019 87 [ 5] 78 retf
+ 79 .area CODE
+ 80 .area CONST
+ 81 .area INITIALIZER
+ 82 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isalpha.rel b/device/lib/stm8-large/isalpha.rel
new file mode 100644
index 0000000..f735c32
--- /dev/null
+++ b/device/lib/stm8-large/isalpha.rel
@@ -0,0 +1,37 @@
+XH3
+H B areas 2 global symbols
+M isalpha
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1A flags 0 addr 0
+S _isalpha Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 9F A1 41 25 04 A1 5A 23 0A
+R 00 00 00 09
+T 00 00 0B
+R 00 00 00 09
+T 00 00 0B A1 61 25 04 A1 7A 23 02
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 4F C5
+R 00 00 00 09
+T 00 00 15
+R 00 00 00 09
+T 00 00 15 A6 01
+R 00 00 00 09
+T 00 00 17
+R 00 00 00 09
+T 00 00 17 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isalpha.sym b/device/lib/stm8-large/isalpha.sym
new file mode 100644
index 0000000..45c6885
--- /dev/null
+++ b/device/lib/stm8-large/isalpha.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isalpha 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isblank.asm b/device/lib/stm8-large/isblank.asm
new file mode 100644
index 0000000..c3ce451
--- /dev/null
+++ b/device/lib/stm8-large/isblank.asm
@@ -0,0 +1,72 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isblank
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isblank
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ./../../include/ctype.h: 51: inline int isblank (int c)
+; -----------------------------------------
+; function isblank
+; -----------------------------------------
+_isblank:
+; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ ld a, (0x05, sp)
+ cp a, #0x20
+ jreq 00104$
+ cp a, #0x09
+ jreq 00104$
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ./../../include/ctype.h: 54: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isblank.lst b/device/lib/stm8-large/isblank.lst
new file mode 100644
index 0000000..6743603
--- /dev/null
+++ b/device/lib/stm8-large/isblank.lst
@@ -0,0 +1,72 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isblank
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isblank
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ./../../include/ctype.h: 51: inline int isblank (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isblank
+ 52 ; -----------------------------------------
+ 000000 53 _isblank:
+ 54 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ 000000 7B 05 [ 1] 55 ld a, (0x05, sp)
+ 000002 A1 20 [ 1] 56 cp a, #0x20
+ 000004 27 06 [ 1] 57 jreq 00104$
+ 000006 A1 09 [ 1] 58 cp a, #0x09
+ 000008 27 02 [ 1] 59 jreq 00104$
+ 00000A 4F [ 1] 60 clr a
+ 00000B C5 61 .byte 0xc5
+ 00000C 62 00104$:
+ 00000C A6 01 [ 1] 63 ld a, #0x01
+ 00000E 64 00105$:
+ 00000E 5F [ 1] 65 clrw x
+ 00000F 97 [ 1] 66 ld xl, a
+ 67 ; ./../../include/ctype.h: 54: }
+ 000010 87 [ 5] 68 retf
+ 69 .area CODE
+ 70 .area CONST
+ 71 .area INITIALIZER
+ 72 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isblank.rel b/device/lib/stm8-large/isblank.rel
new file mode 100644
index 0000000..41e3813
--- /dev/null
+++ b/device/lib/stm8-large/isblank.rel
@@ -0,0 +1,29 @@
+XH3
+H B areas 2 global symbols
+M isblank
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 11 flags 0 addr 0
+S _isblank Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 05 A1 20 27 06 A1 09 27 02 4F C5
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C A6 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isblank.sym b/device/lib/stm8-large/isblank.sym
new file mode 100644
index 0000000..9196205
--- /dev/null
+++ b/device/lib/stm8-large/isblank.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isblank 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 11 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/iscntrl.asm b/device/lib/stm8-large/iscntrl.asm
new file mode 100644
index 0000000..750cae4
--- /dev/null
+++ b/device/lib/stm8-large/iscntrl.asm
@@ -0,0 +1,72 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module iscntrl
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _iscntrl
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../iscntrl.c: 33: int iscntrl (int c)
+; -----------------------------------------
+; function iscntrl
+; -----------------------------------------
+_iscntrl:
+; ../iscntrl.c: 35: return (c < ' ' || c == 0x7f);
+ ldw x, (0x04, sp)
+ cpw x, #0x0020
+ jrslt 00104$
+ cpw x, #0x007f
+ jreq 00104$
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../iscntrl.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/iscntrl.lst b/device/lib/stm8-large/iscntrl.lst
new file mode 100644
index 0000000..7f44dc7
--- /dev/null
+++ b/device/lib/stm8-large/iscntrl.lst
@@ -0,0 +1,72 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module iscntrl
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _iscntrl
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../iscntrl.c: 33: int iscntrl (int c)
+ 50 ; -----------------------------------------
+ 51 ; function iscntrl
+ 52 ; -----------------------------------------
+ 000000 53 _iscntrl:
+ 54 ; ../iscntrl.c: 35: return (c < ' ' || c == 0x7f);
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 000002 A3 00 20 [ 2] 56 cpw x, #0x0020
+ 000005 2F 07 [ 1] 57 jrslt 00104$
+ 000007 A3 00 7F [ 2] 58 cpw x, #0x007f
+ 00000A 27 02 [ 1] 59 jreq 00104$
+ 00000C 4F [ 1] 60 clr a
+ 00000D C5 61 .byte 0xc5
+ 00000E 62 00104$:
+ 00000E A6 01 [ 1] 63 ld a, #0x01
+ 000010 64 00105$:
+ 000010 5F [ 1] 65 clrw x
+ 000011 97 [ 1] 66 ld xl, a
+ 67 ; ../iscntrl.c: 36: }
+ 000012 87 [ 5] 68 retf
+ 69 .area CODE
+ 70 .area CONST
+ 71 .area INITIALIZER
+ 72 .area CABS (ABS)
diff --git a/device/lib/stm8-large/iscntrl.rel b/device/lib/stm8-large/iscntrl.rel
new file mode 100644
index 0000000..41dc3c0
--- /dev/null
+++ b/device/lib/stm8-large/iscntrl.rel
@@ -0,0 +1,31 @@
+XH3
+H B areas 2 global symbols
+M iscntrl
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 13 flags 0 addr 0
+S _iscntrl Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 A3 00 20 2F 07 A3 00 7F 27 02 4F
+R 00 00 00 09
+T 00 00 0D C5
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E A6 01
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/iscntrl.sym b/device/lib/stm8-large/iscntrl.sym
new file mode 100644
index 0000000..95997e6
--- /dev/null
+++ b/device/lib/stm8-large/iscntrl.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _iscntrl 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 13 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isdigit.asm b/device/lib/stm8-large/isdigit.asm
new file mode 100644
index 0000000..41e73a0
--- /dev/null
+++ b/device/lib/stm8-large/isdigit.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isdigit
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isdigit
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ./../../include/ctype.h: 60: inline int isdigit (int c)
+; -----------------------------------------
+; function isdigit
+; -----------------------------------------
+_isdigit:
+; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ ld a, (0x05, sp)
+ cp a, #0x30
+ jrc 00103$
+ cp a, #0x39
+ jrule 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ./../../include/ctype.h: 63: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isdigit.lst b/device/lib/stm8-large/isdigit.lst
new file mode 100644
index 0000000..78c31b7
--- /dev/null
+++ b/device/lib/stm8-large/isdigit.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isdigit
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isdigit
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ./../../include/ctype.h: 60: inline int isdigit (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isdigit
+ 52 ; -----------------------------------------
+ 000000 53 _isdigit:
+ 54 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9');
+ 000000 7B 05 [ 1] 55 ld a, (0x05, sp)
+ 000002 A1 30 [ 1] 56 cp a, #0x30
+ 000004 25 04 [ 1] 57 jrc 00103$
+ 000006 A1 39 [ 1] 58 cp a, #0x39
+ 000008 23 02 [ 2] 59 jrule 00104$
+ 00000A 60 00103$:
+ 00000A 4F [ 1] 61 clr a
+ 00000B C5 62 .byte 0xc5
+ 00000C 63 00104$:
+ 00000C A6 01 [ 1] 64 ld a, #0x01
+ 00000E 65 00105$:
+ 00000E 5F [ 1] 66 clrw x
+ 00000F 97 [ 1] 67 ld xl, a
+ 68 ; ./../../include/ctype.h: 63: }
+ 000010 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isdigit.rel b/device/lib/stm8-large/isdigit.rel
new file mode 100644
index 0000000..288c463
--- /dev/null
+++ b/device/lib/stm8-large/isdigit.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M isdigit
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 11 flags 0 addr 0
+S _isdigit Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 05 A1 30 25 04 A1 39 23 02
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 4F C5
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C A6 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isdigit.sym b/device/lib/stm8-large/isdigit.sym
new file mode 100644
index 0000000..969a593
--- /dev/null
+++ b/device/lib/stm8-large/isdigit.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isdigit 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 11 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isgraph.asm b/device/lib/stm8-large/isgraph.asm
new file mode 100644
index 0000000..abeaf87
--- /dev/null
+++ b/device/lib/stm8-large/isgraph.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isgraph
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isgraph
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isgraph.c: 33: int isgraph (int c)
+; -----------------------------------------
+; function isgraph
+; -----------------------------------------
+_isgraph:
+; ../isgraph.c: 35: return (c > ' ' && c <= '~');
+ ldw x, (0x04, sp)
+ cpw x, #0x0020
+ jrsle 00103$
+ cpw x, #0x007e
+ jrsle 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../isgraph.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isgraph.lst b/device/lib/stm8-large/isgraph.lst
new file mode 100644
index 0000000..ed9eb73
--- /dev/null
+++ b/device/lib/stm8-large/isgraph.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isgraph
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isgraph
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isgraph.c: 33: int isgraph (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isgraph
+ 52 ; -----------------------------------------
+ 000000 53 _isgraph:
+ 54 ; ../isgraph.c: 35: return (c > ' ' && c <= '~');
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 000002 A3 00 20 [ 2] 56 cpw x, #0x0020
+ 000005 2D 05 [ 1] 57 jrsle 00103$
+ 000007 A3 00 7E [ 2] 58 cpw x, #0x007e
+ 00000A 2D 02 [ 1] 59 jrsle 00104$
+ 00000C 60 00103$:
+ 00000C 4F [ 1] 61 clr a
+ 00000D C5 62 .byte 0xc5
+ 00000E 63 00104$:
+ 00000E A6 01 [ 1] 64 ld a, #0x01
+ 000010 65 00105$:
+ 000010 5F [ 1] 66 clrw x
+ 000011 97 [ 1] 67 ld xl, a
+ 68 ; ../isgraph.c: 36: }
+ 000012 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isgraph.rel b/device/lib/stm8-large/isgraph.rel
new file mode 100644
index 0000000..f19324b
--- /dev/null
+++ b/device/lib/stm8-large/isgraph.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M isgraph
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 13 flags 0 addr 0
+S _isgraph Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 A3 00 20 2D 05 A3 00 7E 2D 02
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 4F C5
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E A6 01
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isgraph.sym b/device/lib/stm8-large/isgraph.sym
new file mode 100644
index 0000000..29f5059
--- /dev/null
+++ b/device/lib/stm8-large/isgraph.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isgraph 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 13 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isinf.asm b/device/lib/stm8-large/isinf.asm
new file mode 100644
index 0000000..e3ed63e
--- /dev/null
+++ b/device/lib/stm8-large/isinf.asm
@@ -0,0 +1,83 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isinf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isinf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isinf.c: 33: int isinf (float f)
+; -----------------------------------------
+; function isinf
+; -----------------------------------------
+_isinf:
+; ../isinf.c: 35: unsigned long *pl = (unsigned long *) &f;
+ ldw x, sp
+ addw x, #4
+; ../isinf.c: 36: return *pl == 0x7f800000 || *pl == 0xff800000;
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ tnzw y
+ jrne 00117$
+ cpw x, #0x7f80
+ jreq 00104$
+00117$:
+ tnzw y
+ jrne 00120$
+ cpw x, #0xff80
+ jreq 00104$
+00120$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../isinf.c: 37: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isinf.lst b/device/lib/stm8-large/isinf.lst
new file mode 100644
index 0000000..7883aa2
--- /dev/null
+++ b/device/lib/stm8-large/isinf.lst
@@ -0,0 +1,83 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isinf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isinf
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isinf.c: 33: int isinf (float f)
+ 50 ; -----------------------------------------
+ 51 ; function isinf
+ 52 ; -----------------------------------------
+ 000000 53 _isinf:
+ 54 ; ../isinf.c: 35: unsigned long *pl = (unsigned long *) &f;
+ 000000 96 [ 1] 55 ldw x, sp
+ 000001 1C 00 04 [ 2] 56 addw x, #4
+ 57 ; ../isinf.c: 36: return *pl == 0x7f800000 || *pl == 0xff800000;
+ 000004 90 93 [ 1] 58 ldw y, x
+ 000006 90 EE 02 [ 2] 59 ldw y, (0x2, y)
+ 000009 FE [ 2] 60 ldw x, (x)
+ 00000A 90 5D [ 2] 61 tnzw y
+ 00000C 26 05 [ 1] 62 jrne 00117$
+ 00000E A3 7F 80 [ 2] 63 cpw x, #0x7f80
+ 000011 27 0B [ 1] 64 jreq 00104$
+ 000013 65 00117$:
+ 000013 90 5D [ 2] 66 tnzw y
+ 000015 26 05 [ 1] 67 jrne 00120$
+ 000017 A3 FF 80 [ 2] 68 cpw x, #0xff80
+ 00001A 27 02 [ 1] 69 jreq 00104$
+ 00001C 70 00120$:
+ 00001C 4F [ 1] 71 clr a
+ 00001D C5 72 .byte 0xc5
+ 00001E 73 00104$:
+ 00001E A6 01 [ 1] 74 ld a, #0x01
+ 000020 75 00105$:
+ 000020 5F [ 1] 76 clrw x
+ 000021 97 [ 1] 77 ld xl, a
+ 78 ; ../isinf.c: 37: }
+ 000022 87 [ 5] 79 retf
+ 80 .area CODE
+ 81 .area CONST
+ 82 .area INITIALIZER
+ 83 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isinf.rel b/device/lib/stm8-large/isinf.rel
new file mode 100644
index 0000000..0e1c6ab
--- /dev/null
+++ b/device/lib/stm8-large/isinf.rel
@@ -0,0 +1,39 @@
+XH3
+H B areas 2 global symbols
+M isinf
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 23 flags 0 addr 0
+S _isinf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 96 1C 00 04 90 93 90 EE 02 FE 90 5D 26
+R 00 00 00 09
+T 00 00 0D 05 A3 7F 80 27 0B
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 90 5D 26 05 A3 FF 80 27 02
+R 00 00 00 09
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 4F C5
+R 00 00 00 09
+T 00 00 1E
+R 00 00 00 09
+T 00 00 1E A6 01
+R 00 00 00 09
+T 00 00 20
+R 00 00 00 09
+T 00 00 20 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isinf.sym b/device/lib/stm8-large/isinf.sym
new file mode 100644
index 0000000..bbf8f20
--- /dev/null
+++ b/device/lib/stm8-large/isinf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isinf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 23 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/islower.asm b/device/lib/stm8-large/islower.asm
new file mode 100644
index 0000000..98ad607
--- /dev/null
+++ b/device/lib/stm8-large/islower.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module islower
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _islower
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ./../../include/ctype.h: 69: inline int islower (int c)
+; -----------------------------------------
+; function islower
+; -----------------------------------------
+_islower:
+; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z');
+ ld a, (0x05, sp)
+ cp a, #0x61
+ jrc 00103$
+ cp a, #0x7a
+ jrule 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ./../../include/ctype.h: 72: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/islower.lst b/device/lib/stm8-large/islower.lst
new file mode 100644
index 0000000..c080ab7
--- /dev/null
+++ b/device/lib/stm8-large/islower.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module islower
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _islower
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ./../../include/ctype.h: 69: inline int islower (int c)
+ 50 ; -----------------------------------------
+ 51 ; function islower
+ 52 ; -----------------------------------------
+ 000000 53 _islower:
+ 54 ; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z');
+ 000000 7B 05 [ 1] 55 ld a, (0x05, sp)
+ 000002 A1 61 [ 1] 56 cp a, #0x61
+ 000004 25 04 [ 1] 57 jrc 00103$
+ 000006 A1 7A [ 1] 58 cp a, #0x7a
+ 000008 23 02 [ 2] 59 jrule 00104$
+ 00000A 60 00103$:
+ 00000A 4F [ 1] 61 clr a
+ 00000B C5 62 .byte 0xc5
+ 00000C 63 00104$:
+ 00000C A6 01 [ 1] 64 ld a, #0x01
+ 00000E 65 00105$:
+ 00000E 5F [ 1] 66 clrw x
+ 00000F 97 [ 1] 67 ld xl, a
+ 68 ; ./../../include/ctype.h: 72: }
+ 000010 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/islower.rel b/device/lib/stm8-large/islower.rel
new file mode 100644
index 0000000..66453c4
--- /dev/null
+++ b/device/lib/stm8-large/islower.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M islower
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 11 flags 0 addr 0
+S _islower Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 05 A1 61 25 04 A1 7A 23 02
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 4F C5
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C A6 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/islower.sym b/device/lib/stm8-large/islower.sym
new file mode 100644
index 0000000..1980d64
--- /dev/null
+++ b/device/lib/stm8-large/islower.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _islower 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 11 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isnan.asm b/device/lib/stm8-large/isnan.asm
new file mode 100644
index 0000000..164733d
--- /dev/null
+++ b/device/lib/stm8-large/isnan.asm
@@ -0,0 +1,85 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isnan
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isnan
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isnan.c: 33: int isnan (float f)
+; -----------------------------------------
+; function isnan
+; -----------------------------------------
+_isnan:
+ sub sp, #4
+; ../isnan.c: 35: unsigned long *pl = (unsigned long *) &f;
+ ldw x, sp
+ addw x, #8
+; ../isnan.c: 37: return (*pl & 0x7fffffff) > 0x7f800000;
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ldw (0x03, sp), y
+ exg a, xl
+ ld (0x02, sp), a
+ exg a, xl
+ ld a, xh
+ and a, #0x7f
+ ld (0x01, sp), a
+ clrw x
+ cpw x, (0x03, sp)
+ ld a, #0x80
+ sbc a, (0x02, sp)
+ ld a, #0x7f
+ sbc a, (0x01, sp)
+ clr a
+ rlc a
+ clrw x
+ ld xl, a
+; ../isnan.c: 38: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isnan.lst b/device/lib/stm8-large/isnan.lst
new file mode 100644
index 0000000..994b8e8
--- /dev/null
+++ b/device/lib/stm8-large/isnan.lst
@@ -0,0 +1,85 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isnan
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isnan
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isnan.c: 33: int isnan (float f)
+ 50 ; -----------------------------------------
+ 51 ; function isnan
+ 52 ; -----------------------------------------
+ 000000 53 _isnan:
+ 000000 52 04 [ 2] 54 sub sp, #4
+ 55 ; ../isnan.c: 35: unsigned long *pl = (unsigned long *) &f;
+ 000002 96 [ 1] 56 ldw x, sp
+ 000003 1C 00 08 [ 2] 57 addw x, #8
+ 58 ; ../isnan.c: 37: return (*pl & 0x7fffffff) > 0x7f800000;
+ 000006 90 93 [ 1] 59 ldw y, x
+ 000008 90 EE 02 [ 2] 60 ldw y, (0x2, y)
+ 00000B FE [ 2] 61 ldw x, (x)
+ 00000C 17 03 [ 2] 62 ldw (0x03, sp), y
+ 00000E 41 [ 1] 63 exg a, xl
+ 00000F 6B 02 [ 1] 64 ld (0x02, sp), a
+ 000011 41 [ 1] 65 exg a, xl
+ 000012 9E [ 1] 66 ld a, xh
+ 000013 A4 7F [ 1] 67 and a, #0x7f
+ 000015 6B 01 [ 1] 68 ld (0x01, sp), a
+ 000017 5F [ 1] 69 clrw x
+ 000018 13 03 [ 2] 70 cpw x, (0x03, sp)
+ 00001A A6 80 [ 1] 71 ld a, #0x80
+ 00001C 12 02 [ 1] 72 sbc a, (0x02, sp)
+ 00001E A6 7F [ 1] 73 ld a, #0x7f
+ 000020 12 01 [ 1] 74 sbc a, (0x01, sp)
+ 000022 4F [ 1] 75 clr a
+ 000023 49 [ 1] 76 rlc a
+ 000024 5F [ 1] 77 clrw x
+ 000025 97 [ 1] 78 ld xl, a
+ 79 ; ../isnan.c: 38: }
+ 000026 5B 04 [ 2] 80 addw sp, #4
+ 000028 87 [ 5] 81 retf
+ 82 .area CODE
+ 83 .area CONST
+ 84 .area INITIALIZER
+ 85 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isnan.rel b/device/lib/stm8-large/isnan.rel
new file mode 100644
index 0000000..413b83a
--- /dev/null
+++ b/device/lib/stm8-large/isnan.rel
@@ -0,0 +1,27 @@
+XH3
+H B areas 2 global symbols
+M isnan
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 29 flags 0 addr 0
+S _isnan Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 96 1C 00 08 90 93 90 EE 02 FE 17
+R 00 00 00 09
+T 00 00 0D 03 41 6B 02 41 9E A4 7F 6B 01 5F 13 03
+R 00 00 00 09
+T 00 00 1A A6 80 12 02 A6 7F 12 01 4F 49 5F 97 5B
+R 00 00 00 09
+T 00 00 27 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isnan.sym b/device/lib/stm8-large/isnan.sym
new file mode 100644
index 0000000..2894d02
--- /dev/null
+++ b/device/lib/stm8-large/isnan.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isnan 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 29 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isprint.asm b/device/lib/stm8-large/isprint.asm
new file mode 100644
index 0000000..49228b2
--- /dev/null
+++ b/device/lib/stm8-large/isprint.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isprint
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isprint
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isprint.c: 33: int isprint (int c)
+; -----------------------------------------
+; function isprint
+; -----------------------------------------
+_isprint:
+; ../isprint.c: 35: return (c >= ' ' && c <= '~');
+ ldw x, (0x04, sp)
+ cpw x, #0x0020
+ jrslt 00103$
+ cpw x, #0x007e
+ jrsle 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../isprint.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isprint.lst b/device/lib/stm8-large/isprint.lst
new file mode 100644
index 0000000..83b7972
--- /dev/null
+++ b/device/lib/stm8-large/isprint.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isprint
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isprint
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isprint.c: 33: int isprint (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isprint
+ 52 ; -----------------------------------------
+ 000000 53 _isprint:
+ 54 ; ../isprint.c: 35: return (c >= ' ' && c <= '~');
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 000002 A3 00 20 [ 2] 56 cpw x, #0x0020
+ 000005 2F 05 [ 1] 57 jrslt 00103$
+ 000007 A3 00 7E [ 2] 58 cpw x, #0x007e
+ 00000A 2D 02 [ 1] 59 jrsle 00104$
+ 00000C 60 00103$:
+ 00000C 4F [ 1] 61 clr a
+ 00000D C5 62 .byte 0xc5
+ 00000E 63 00104$:
+ 00000E A6 01 [ 1] 64 ld a, #0x01
+ 000010 65 00105$:
+ 000010 5F [ 1] 66 clrw x
+ 000011 97 [ 1] 67 ld xl, a
+ 68 ; ../isprint.c: 36: }
+ 000012 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isprint.rel b/device/lib/stm8-large/isprint.rel
new file mode 100644
index 0000000..013b6fa
--- /dev/null
+++ b/device/lib/stm8-large/isprint.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M isprint
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 13 flags 0 addr 0
+S _isprint Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 A3 00 20 2F 05 A3 00 7E 2D 02
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 4F C5
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E A6 01
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isprint.sym b/device/lib/stm8-large/isprint.sym
new file mode 100644
index 0000000..9f150ee
--- /dev/null
+++ b/device/lib/stm8-large/isprint.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isprint 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 13 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/ispunct.asm b/device/lib/stm8-large/ispunct.asm
new file mode 100644
index 0000000..c9a0b02
--- /dev/null
+++ b/device/lib/stm8-large/ispunct.asm
@@ -0,0 +1,89 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module ispunct
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isalnum
+ .globl _isspace
+ .globl _isprint
+ .globl _ispunct
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../ispunct.c: 33: int ispunct (int c)
+; -----------------------------------------
+; function ispunct
+; -----------------------------------------
+_ispunct:
+; ../ispunct.c: 35: return (isprint (c) && !isspace (c) && !isalnum (c));
+ ldw x, (0x04, sp)
+ pushw x
+ callf _isprint
+ addw sp, #2
+ tnzw x
+ jreq 00103$
+ ldw x, (0x04, sp)
+ pushw x
+ callf _isspace
+ addw sp, #2
+ tnzw x
+ jrne 00103$
+ ldw x, (0x04, sp)
+ pushw x
+ callf _isalnum
+ addw sp, #2
+ tnzw x
+ jreq 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../ispunct.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/ispunct.lst b/device/lib/stm8-large/ispunct.lst
new file mode 100644
index 0000000..eeb01a4
--- /dev/null
+++ b/device/lib/stm8-large/ispunct.lst
@@ -0,0 +1,89 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module ispunct
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isalnum
+ 12 .globl _isspace
+ 13 .globl _isprint
+ 14 .globl _ispunct
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area DATA
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../ispunct.c: 33: int ispunct (int c)
+ 53 ; -----------------------------------------
+ 54 ; function ispunct
+ 55 ; -----------------------------------------
+ 000000 56 _ispunct:
+ 57 ; ../ispunct.c: 35: return (isprint (c) && !isspace (c) && !isalnum (c));
+ 000000 1E 04 [ 2] 58 ldw x, (0x04, sp)
+ 000002 89 [ 2] 59 pushw x
+ 000003 8Ds00r00r00 [ 5] 60 callf _isprint
+ 000007 5B 02 [ 2] 61 addw sp, #2
+ 000009 5D [ 2] 62 tnzw x
+ 00000A 27 18 [ 1] 63 jreq 00103$
+ 00000C 1E 04 [ 2] 64 ldw x, (0x04, sp)
+ 00000E 89 [ 2] 65 pushw x
+ 00000F 8Ds00r00r00 [ 5] 66 callf _isspace
+ 000013 5B 02 [ 2] 67 addw sp, #2
+ 000015 5D [ 2] 68 tnzw x
+ 000016 26 0C [ 1] 69 jrne 00103$
+ 000018 1E 04 [ 2] 70 ldw x, (0x04, sp)
+ 00001A 89 [ 2] 71 pushw x
+ 00001B 8Ds00r00r00 [ 5] 72 callf _isalnum
+ 00001F 5B 02 [ 2] 73 addw sp, #2
+ 000021 5D [ 2] 74 tnzw x
+ 000022 27 02 [ 1] 75 jreq 00104$
+ 000024 76 00103$:
+ 000024 4F [ 1] 77 clr a
+ 000025 C5 78 .byte 0xc5
+ 000026 79 00104$:
+ 000026 A6 01 [ 1] 80 ld a, #0x01
+ 000028 81 00105$:
+ 000028 5F [ 1] 82 clrw x
+ 000029 97 [ 1] 83 ld xl, a
+ 84 ; ../ispunct.c: 36: }
+ 00002A 87 [ 5] 85 retf
+ 86 .area CODE
+ 87 .area CONST
+ 88 .area INITIALIZER
+ 89 .area CABS (ABS)
diff --git a/device/lib/stm8-large/ispunct.rel b/device/lib/stm8-large/ispunct.rel
new file mode 100644
index 0000000..dd5c47c
--- /dev/null
+++ b/device/lib/stm8-large/ispunct.rel
@@ -0,0 +1,40 @@
+XH3
+H B areas 5 global symbols
+M ispunct
+O -mstm8
+S _isspace Ref000000
+S _isalnum Ref000000
+S .__.ABS. Def000000
+S _isprint Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2B flags 0 addr 0
+S _ispunct Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 89 8D 00 00 00 5B 02 5D 27 18 1E
+R 00 00 00 09 82 07 00 03
+T 00 00 0D 04 89 8D 00 00 00 5B 02 5D 26 0C 1E 04
+R 00 00 00 09 82 06 00 00
+T 00 00 1A 89 8D 00 00 00 5B 02 5D 27 02
+R 00 00 00 09 82 05 00 01
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 4F C5
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 A6 01
+R 00 00 00 09
+T 00 00 28
+R 00 00 00 09
+T 00 00 28 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/ispunct.sym b/device/lib/stm8-large/ispunct.sym
new file mode 100644
index 0000000..4ddc6e4
--- /dev/null
+++ b/device/lib/stm8-large/ispunct.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _isalnum ****** GX
+ _isprint ****** GX
+ 9 _ispunct 000000 GR
+ _isspace ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isspace.asm b/device/lib/stm8-large/isspace.asm
new file mode 100644
index 0000000..ce3654c
--- /dev/null
+++ b/device/lib/stm8-large/isspace.asm
@@ -0,0 +1,85 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isspace
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isspace
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isspace.c: 37: int isspace (int c)
+; -----------------------------------------
+; function isspace
+; -----------------------------------------
+_isspace:
+; ../isspace.c: 39: return (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v');
+ ldw x, (0x04, sp)
+ cpw x, #0x0020
+ jreq 00104$
+ ldw x, (0x04, sp)
+ cpw x, #0x000c
+ jreq 00104$
+ ldw x, (0x04, sp)
+ cpw x, #0x000a
+ jreq 00104$
+ ldw x, (0x04, sp)
+ cpw x, #0x000d
+ jreq 00104$
+ ldw x, (0x04, sp)
+ cpw x, #0x0009
+ jreq 00104$
+ ldw x, (0x04, sp)
+ cpw x, #0x000b
+ jreq 00104$
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../isspace.c: 40: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isspace.lst b/device/lib/stm8-large/isspace.lst
new file mode 100644
index 0000000..bf987da
--- /dev/null
+++ b/device/lib/stm8-large/isspace.lst
@@ -0,0 +1,85 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isspace
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isspace
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isspace.c: 37: int isspace (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isspace
+ 52 ; -----------------------------------------
+ 000000 53 _isspace:
+ 54 ; ../isspace.c: 39: return (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v');
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 000002 A3 00 20 [ 2] 56 cpw x, #0x0020
+ 000005 27 25 [ 1] 57 jreq 00104$
+ 000007 1E 04 [ 2] 58 ldw x, (0x04, sp)
+ 000009 A3 00 0C [ 2] 59 cpw x, #0x000c
+ 00000C 27 1E [ 1] 60 jreq 00104$
+ 00000E 1E 04 [ 2] 61 ldw x, (0x04, sp)
+ 000010 A3 00 0A [ 2] 62 cpw x, #0x000a
+ 000013 27 17 [ 1] 63 jreq 00104$
+ 000015 1E 04 [ 2] 64 ldw x, (0x04, sp)
+ 000017 A3 00 0D [ 2] 65 cpw x, #0x000d
+ 00001A 27 10 [ 1] 66 jreq 00104$
+ 00001C 1E 04 [ 2] 67 ldw x, (0x04, sp)
+ 00001E A3 00 09 [ 2] 68 cpw x, #0x0009
+ 000021 27 09 [ 1] 69 jreq 00104$
+ 000023 1E 04 [ 2] 70 ldw x, (0x04, sp)
+ 000025 A3 00 0B [ 2] 71 cpw x, #0x000b
+ 000028 27 02 [ 1] 72 jreq 00104$
+ 00002A 4F [ 1] 73 clr a
+ 00002B C5 74 .byte 0xc5
+ 00002C 75 00104$:
+ 00002C A6 01 [ 1] 76 ld a, #0x01
+ 00002E 77 00105$:
+ 00002E 5F [ 1] 78 clrw x
+ 00002F 97 [ 1] 79 ld xl, a
+ 80 ; ../isspace.c: 40: }
+ 000030 87 [ 5] 81 retf
+ 82 .area CODE
+ 83 .area CONST
+ 84 .area INITIALIZER
+ 85 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isspace.rel b/device/lib/stm8-large/isspace.rel
new file mode 100644
index 0000000..0f585f7
--- /dev/null
+++ b/device/lib/stm8-large/isspace.rel
@@ -0,0 +1,35 @@
+XH3
+H B areas 2 global symbols
+M isspace
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 31 flags 0 addr 0
+S _isspace Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 A3 00 20 27 25 1E 04 A3 00 0C 27
+R 00 00 00 09
+T 00 00 0D 1E 1E 04 A3 00 0A 27 17 1E 04 A3 00 0D
+R 00 00 00 09
+T 00 00 1A 27 10 1E 04 A3 00 09 27 09 1E 04 A3
+R 00 00 00 09
+T 00 00 26 00 0B 27 02 4F C5
+R 00 00 00 09
+T 00 00 2C
+R 00 00 00 09
+T 00 00 2C A6 01
+R 00 00 00 09
+T 00 00 2E
+R 00 00 00 09
+T 00 00 2E 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isspace.sym b/device/lib/stm8-large/isspace.sym
new file mode 100644
index 0000000..2fb2f16
--- /dev/null
+++ b/device/lib/stm8-large/isspace.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isspace 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 31 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isupper.asm b/device/lib/stm8-large/isupper.asm
new file mode 100644
index 0000000..70822ab
--- /dev/null
+++ b/device/lib/stm8-large/isupper.asm
@@ -0,0 +1,73 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isupper
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isupper
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ./../../include/ctype.h: 78: inline int isupper (int c)
+; -----------------------------------------
+; function isupper
+; -----------------------------------------
+_isupper:
+; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z');
+ ld a, (0x05, sp)
+ cp a, #0x41
+ jrc 00103$
+ cp a, #0x5a
+ jrule 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ./../../include/ctype.h: 81: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isupper.lst b/device/lib/stm8-large/isupper.lst
new file mode 100644
index 0000000..ee1659c
--- /dev/null
+++ b/device/lib/stm8-large/isupper.lst
@@ -0,0 +1,73 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isupper
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isupper
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ./../../include/ctype.h: 78: inline int isupper (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isupper
+ 52 ; -----------------------------------------
+ 000000 53 _isupper:
+ 54 ; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z');
+ 000000 7B 05 [ 1] 55 ld a, (0x05, sp)
+ 000002 A1 41 [ 1] 56 cp a, #0x41
+ 000004 25 04 [ 1] 57 jrc 00103$
+ 000006 A1 5A [ 1] 58 cp a, #0x5a
+ 000008 23 02 [ 2] 59 jrule 00104$
+ 00000A 60 00103$:
+ 00000A 4F [ 1] 61 clr a
+ 00000B C5 62 .byte 0xc5
+ 00000C 63 00104$:
+ 00000C A6 01 [ 1] 64 ld a, #0x01
+ 00000E 65 00105$:
+ 00000E 5F [ 1] 66 clrw x
+ 00000F 97 [ 1] 67 ld xl, a
+ 68 ; ./../../include/ctype.h: 81: }
+ 000010 87 [ 5] 69 retf
+ 70 .area CODE
+ 71 .area CONST
+ 72 .area INITIALIZER
+ 73 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isupper.rel b/device/lib/stm8-large/isupper.rel
new file mode 100644
index 0000000..cd4fff4
--- /dev/null
+++ b/device/lib/stm8-large/isupper.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M isupper
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 11 flags 0 addr 0
+S _isupper Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 05 A1 41 25 04 A1 5A 23 02
+R 00 00 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 4F C5
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C A6 01
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isupper.sym b/device/lib/stm8-large/isupper.sym
new file mode 100644
index 0000000..36605ab
--- /dev/null
+++ b/device/lib/stm8-large/isupper.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isupper 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 11 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/isxdigit.asm b/device/lib/stm8-large/isxdigit.asm
new file mode 100644
index 0000000..8433f9e
--- /dev/null
+++ b/device/lib/stm8-large/isxdigit.asm
@@ -0,0 +1,85 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module isxdigit
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _isxdigit
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../isxdigit.c: 33: int isxdigit (int c)
+; -----------------------------------------
+; function isxdigit
+; -----------------------------------------
+_isxdigit:
+; ../isxdigit.c: 35: return (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F');
+ ldw x, (0x04, sp)
+ cpw x, #0x0030
+ jrslt 00111$
+ cpw x, #0x0039
+ jrsle 00104$
+00111$:
+ ldw x, (0x04, sp)
+ cpw x, #0x0061
+ jrslt 00108$
+ cpw x, #0x0066
+ jrsle 00104$
+00108$:
+ ldw x, (0x04, sp)
+ cpw x, #0x0041
+ jrslt 00103$
+ cpw x, #0x0046
+ jrsle 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../isxdigit.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/isxdigit.lst b/device/lib/stm8-large/isxdigit.lst
new file mode 100644
index 0000000..0c36aff
--- /dev/null
+++ b/device/lib/stm8-large/isxdigit.lst
@@ -0,0 +1,85 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module isxdigit
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _isxdigit
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../isxdigit.c: 33: int isxdigit (int c)
+ 50 ; -----------------------------------------
+ 51 ; function isxdigit
+ 52 ; -----------------------------------------
+ 000000 53 _isxdigit:
+ 54 ; ../isxdigit.c: 35: return (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F');
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 000002 A3 00 30 [ 2] 56 cpw x, #0x0030
+ 000005 2F 05 [ 1] 57 jrslt 00111$
+ 000007 A3 00 39 [ 2] 58 cpw x, #0x0039
+ 00000A 2D 1A [ 1] 59 jrsle 00104$
+ 00000C 60 00111$:
+ 00000C 1E 04 [ 2] 61 ldw x, (0x04, sp)
+ 00000E A3 00 61 [ 2] 62 cpw x, #0x0061
+ 000011 2F 05 [ 1] 63 jrslt 00108$
+ 000013 A3 00 66 [ 2] 64 cpw x, #0x0066
+ 000016 2D 0E [ 1] 65 jrsle 00104$
+ 000018 66 00108$:
+ 000018 1E 04 [ 2] 67 ldw x, (0x04, sp)
+ 00001A A3 00 41 [ 2] 68 cpw x, #0x0041
+ 00001D 2F 05 [ 1] 69 jrslt 00103$
+ 00001F A3 00 46 [ 2] 70 cpw x, #0x0046
+ 000022 2D 02 [ 1] 71 jrsle 00104$
+ 000024 72 00103$:
+ 000024 4F [ 1] 73 clr a
+ 000025 C5 74 .byte 0xc5
+ 000026 75 00104$:
+ 000026 A6 01 [ 1] 76 ld a, #0x01
+ 000028 77 00105$:
+ 000028 5F [ 1] 78 clrw x
+ 000029 97 [ 1] 79 ld xl, a
+ 80 ; ../isxdigit.c: 36: }
+ 00002A 87 [ 5] 81 retf
+ 82 .area CODE
+ 83 .area CONST
+ 84 .area INITIALIZER
+ 85 .area CABS (ABS)
diff --git a/device/lib/stm8-large/isxdigit.rel b/device/lib/stm8-large/isxdigit.rel
new file mode 100644
index 0000000..49baa05
--- /dev/null
+++ b/device/lib/stm8-large/isxdigit.rel
@@ -0,0 +1,41 @@
+XH3
+H B areas 2 global symbols
+M isxdigit
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2B flags 0 addr 0
+S _isxdigit Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 A3 00 30 2F 05 A3 00 39 2D 1A
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 1E 04 A3 00 61 2F 05 A3 00 66 2D 0E
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 1E 04 A3 00 41 2F 05 A3 00 46 2D 02
+R 00 00 00 09
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 4F C5
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 A6 01
+R 00 00 00 09
+T 00 00 28
+R 00 00 00 09
+T 00 00 28 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/isxdigit.sym b/device/lib/stm8-large/isxdigit.sym
new file mode 100644
index 0000000..a82eff3
--- /dev/null
+++ b/device/lib/stm8-large/isxdigit.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _isxdigit 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/labs.asm b/device/lib/stm8-large/labs.asm
new file mode 100644
index 0000000..3a6dde1
--- /dev/null
+++ b/device/lib/stm8-large/labs.asm
@@ -0,0 +1,74 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module labs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _labs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../labs.c: 63: long int labs(long int j)
+; -----------------------------------------
+; function labs
+; -----------------------------------------
+_labs:
+; ../labs.c: 65: return (j < 0) ? -j : j;
+ tnz (0x04, sp)
+ jrpl 00103$
+ ldw x, (0x06, sp)
+ negw x
+ ldw y, (0x04, sp)
+ jrnc 00111$
+ incw y
+00111$:
+ negw y
+ jra 00104$
+00103$:
+ ldw x, (0x06, sp)
+ ldw y, (0x04, sp)
+00104$:
+; ../labs.c: 66: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/labs.lst b/device/lib/stm8-large/labs.lst
new file mode 100644
index 0000000..ba9653a
--- /dev/null
+++ b/device/lib/stm8-large/labs.lst
@@ -0,0 +1,74 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module labs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _labs
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../labs.c: 63: long int labs(long int j)
+ 50 ; -----------------------------------------
+ 51 ; function labs
+ 52 ; -----------------------------------------
+ 000000 53 _labs:
+ 54 ; ../labs.c: 65: return (j < 0) ? -j : j;
+ 000000 0D 04 [ 1] 55 tnz (0x04, sp)
+ 000002 2A 0D [ 1] 56 jrpl 00103$
+ 000004 1E 06 [ 2] 57 ldw x, (0x06, sp)
+ 000006 50 [ 2] 58 negw x
+ 000007 16 04 [ 2] 59 ldw y, (0x04, sp)
+ 000009 24 02 [ 1] 60 jrnc 00111$
+ 00000B 90 5C [ 1] 61 incw y
+ 00000D 62 00111$:
+ 00000D 90 50 [ 2] 63 negw y
+ 00000F 20 04 [ 2] 64 jra 00104$
+ 000011 65 00103$:
+ 000011 1E 06 [ 2] 66 ldw x, (0x06, sp)
+ 000013 16 04 [ 2] 67 ldw y, (0x04, sp)
+ 000015 68 00104$:
+ 69 ; ../labs.c: 66: }
+ 000015 87 [ 5] 70 retf
+ 71 .area CODE
+ 72 .area CONST
+ 73 .area INITIALIZER
+ 74 .area CABS (ABS)
diff --git a/device/lib/stm8-large/labs.rel b/device/lib/stm8-large/labs.rel
new file mode 100644
index 0000000..2a1952b
--- /dev/null
+++ b/device/lib/stm8-large/labs.rel
@@ -0,0 +1,33 @@
+XH3
+H B areas 2 global symbols
+M labs
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 16 flags 0 addr 0
+S _labs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 0D 04 2A 0D 1E 06 50 16 04 24 02 90 5C
+R 00 00 00 09
+T 00 00 0D
+R 00 00 00 09
+T 00 00 0D 90 50 20 04
+R 00 00 00 09
+T 00 00 11
+R 00 00 00 09
+T 00 00 11 1E 06 16 04
+R 00 00 00 09
+T 00 00 15
+R 00 00 00 09
+T 00 00 15 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/labs.sym b/device/lib/stm8-large/labs.sym
new file mode 100644
index 0000000..f3505d2
--- /dev/null
+++ b/device/lib/stm8-large/labs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _labs 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 16 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/ldexpf.asm b/device/lib/stm8-large/ldexpf.asm
new file mode 100644
index 0000000..01af46b
--- /dev/null
+++ b/device/lib/stm8-large/ldexpf.asm
@@ -0,0 +1,155 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module ldexpf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _ldexpf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../ldexpf.c: 34: float ldexpf(float x, int pw2)
+; -----------------------------------------
+; function ldexpf
+; -----------------------------------------
+_ldexpf:
+ sub sp, #16
+; ../ldexpf.c: 39: fl.f = x;
+ ldw y, (0x16, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x14, sp)
+ ldw (0x01, sp), y
+; ../ldexpf.c: 41: e=(fl.l >> 23) & 0x000000ff;
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ clr a
+ tnzw x
+ jrpl 00103$
+ dec a
+00103$:
+ push a
+ rrwa x
+ rrwa y
+ ld a, (1, sp)
+ rrwa x
+ rrwa y
+ ld a, (1, sp)
+ rrwa x
+ rrwa y
+ sll a
+ rlcw y
+ rlcw x
+ pop a
+ clr a
+ clrw x
+ exg a, yl
+ ld (0x0c, sp), a
+ exg a, yl
+ ld (0x0b, sp), a
+ ldw (0x09, sp), x
+; ../ldexpf.c: 42: e+=pw2;
+ ldw x, (0x18, sp)
+ ldw (0x0f, sp), x
+ clrw x
+ tnz (0x0f, sp)
+ jrpl 00104$
+ decw x
+00104$:
+ ldw y, (0x0f, sp)
+ addw y, (0x0b, sp)
+ ld a, xl
+ adc a, (0x0a, sp)
+ rlwa x
+ adc a, (0x09, sp)
+; ../ldexpf.c: 43: fl.l= ((e & 0xff) << 23) | (fl.l & 0x807fffff);
+ clr a
+ ld yh, a
+ clrw x
+ exg a, xl
+ ld a, yl
+ exg a, xl
+ rlwa x
+ ld a, yh
+ rrwa x
+ clrw y
+ ld a, #0x07
+00105$:
+ sllw x
+ dec a
+ jrne 00105$
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+ ldw y, (0x03, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x09, sp), y
+ ld a, (0x0b, sp)
+ ld (0x0f, sp), a
+ ld a, (0x0c, sp)
+ ld (0x10, sp), a
+ ld a, (0x0a, sp)
+ and a, #0x7f
+ ld (0x0e, sp), a
+ ld a, (0x09, sp)
+ and a, #0x80
+ or a, (0x05, sp)
+ ld yh, a
+ ld a, (0x08, sp)
+ or a, (0x10, sp)
+ ld xl, a
+ ld a, (0x07, sp)
+ or a, (0x0f, sp)
+ ld xh, a
+ ld a, (0x06, sp)
+ or a, (0x0e, sp)
+ ld yl, a
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../ldexpf.c: 45: return(fl.f);
+ ldw x, (0x03, sp)
+ ldw y, (0x01, sp)
+; ../ldexpf.c: 46: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/ldexpf.lst b/device/lib/stm8-large/ldexpf.lst
new file mode 100644
index 0000000..06784a0
--- /dev/null
+++ b/device/lib/stm8-large/ldexpf.lst
@@ -0,0 +1,155 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module ldexpf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _ldexpf
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../ldexpf.c: 34: float ldexpf(float x, int pw2)
+ 50 ; -----------------------------------------
+ 51 ; function ldexpf
+ 52 ; -----------------------------------------
+ 000000 53 _ldexpf:
+ 000000 52 10 [ 2] 54 sub sp, #16
+ 55 ; ../ldexpf.c: 39: fl.f = x;
+ 000002 16 16 [ 2] 56 ldw y, (0x16, sp)
+ 000004 17 03 [ 2] 57 ldw (0x03, sp), y
+ 000006 16 14 [ 2] 58 ldw y, (0x14, sp)
+ 000008 17 01 [ 2] 59 ldw (0x01, sp), y
+ 60 ; ../ldexpf.c: 41: e=(fl.l >> 23) & 0x000000ff;
+ 00000A 16 03 [ 2] 61 ldw y, (0x03, sp)
+ 00000C 1E 01 [ 2] 62 ldw x, (0x01, sp)
+ 00000E 4F [ 1] 63 clr a
+ 00000F 5D [ 2] 64 tnzw x
+ 000010 2A 01 [ 1] 65 jrpl 00103$
+ 000012 4A [ 1] 66 dec a
+ 000013 67 00103$:
+ 000013 88 [ 1] 68 push a
+ 000014 01 [ 1] 69 rrwa x
+ 000015 90 01 [ 1] 70 rrwa y
+ 000017 7B 01 [ 1] 71 ld a, (1, sp)
+ 000019 01 [ 1] 72 rrwa x
+ 00001A 90 01 [ 1] 73 rrwa y
+ 00001C 7B 01 [ 1] 74 ld a, (1, sp)
+ 00001E 01 [ 1] 75 rrwa x
+ 00001F 90 01 [ 1] 76 rrwa y
+ 000021 48 [ 1] 77 sll a
+ 000022 90 59 [ 2] 78 rlcw y
+ 000024 59 [ 2] 79 rlcw x
+ 000025 84 [ 1] 80 pop a
+ 000026 4F [ 1] 81 clr a
+ 000027 5F [ 1] 82 clrw x
+ 000028 61 [ 1] 83 exg a, yl
+ 000029 6B 0C [ 1] 84 ld (0x0c, sp), a
+ 00002B 61 [ 1] 85 exg a, yl
+ 00002C 6B 0B [ 1] 86 ld (0x0b, sp), a
+ 00002E 1F 09 [ 2] 87 ldw (0x09, sp), x
+ 88 ; ../ldexpf.c: 42: e+=pw2;
+ 000030 1E 18 [ 2] 89 ldw x, (0x18, sp)
+ 000032 1F 0F [ 2] 90 ldw (0x0f, sp), x
+ 000034 5F [ 1] 91 clrw x
+ 000035 0D 0F [ 1] 92 tnz (0x0f, sp)
+ 000037 2A 01 [ 1] 93 jrpl 00104$
+ 000039 5A [ 2] 94 decw x
+ 00003A 95 00104$:
+ 00003A 16 0F [ 2] 96 ldw y, (0x0f, sp)
+ 00003C 72 F9 0B [ 2] 97 addw y, (0x0b, sp)
+ 00003F 9F [ 1] 98 ld a, xl
+ 000040 19 0A [ 1] 99 adc a, (0x0a, sp)
+ 000042 02 [ 1] 100 rlwa x
+ 000043 19 09 [ 1] 101 adc a, (0x09, sp)
+ 102 ; ../ldexpf.c: 43: fl.l= ((e & 0xff) << 23) | (fl.l & 0x807fffff);
+ 000045 4F [ 1] 103 clr a
+ 000046 90 95 [ 1] 104 ld yh, a
+ 000048 5F [ 1] 105 clrw x
+ 000049 41 [ 1] 106 exg a, xl
+ 00004A 90 9F [ 1] 107 ld a, yl
+ 00004C 41 [ 1] 108 exg a, xl
+ 00004D 02 [ 1] 109 rlwa x
+ 00004E 90 9E [ 1] 110 ld a, yh
+ 000050 01 [ 1] 111 rrwa x
+ 000051 90 5F [ 1] 112 clrw y
+ 000053 A6 07 [ 1] 113 ld a, #0x07
+ 000055 114 00105$:
+ 000055 58 [ 2] 115 sllw x
+ 000056 4A [ 1] 116 dec a
+ 000057 26 FC [ 1] 117 jrne 00105$
+ 000059 17 07 [ 2] 118 ldw (0x07, sp), y
+ 00005B 1F 05 [ 2] 119 ldw (0x05, sp), x
+ 00005D 16 03 [ 2] 120 ldw y, (0x03, sp)
+ 00005F 17 0B [ 2] 121 ldw (0x0b, sp), y
+ 000061 16 01 [ 2] 122 ldw y, (0x01, sp)
+ 000063 17 09 [ 2] 123 ldw (0x09, sp), y
+ 000065 7B 0B [ 1] 124 ld a, (0x0b, sp)
+ 000067 6B 0F [ 1] 125 ld (0x0f, sp), a
+ 000069 7B 0C [ 1] 126 ld a, (0x0c, sp)
+ 00006B 6B 10 [ 1] 127 ld (0x10, sp), a
+ 00006D 7B 0A [ 1] 128 ld a, (0x0a, sp)
+ 00006F A4 7F [ 1] 129 and a, #0x7f
+ 000071 6B 0E [ 1] 130 ld (0x0e, sp), a
+ 000073 7B 09 [ 1] 131 ld a, (0x09, sp)
+ 000075 A4 80 [ 1] 132 and a, #0x80
+ 000077 1A 05 [ 1] 133 or a, (0x05, sp)
+ 000079 90 95 [ 1] 134 ld yh, a
+ 00007B 7B 08 [ 1] 135 ld a, (0x08, sp)
+ 00007D 1A 10 [ 1] 136 or a, (0x10, sp)
+ 00007F 97 [ 1] 137 ld xl, a
+ 000080 7B 07 [ 1] 138 ld a, (0x07, sp)
+ 000082 1A 0F [ 1] 139 or a, (0x0f, sp)
+ 000084 95 [ 1] 140 ld xh, a
+ 000085 7B 06 [ 1] 141 ld a, (0x06, sp)
+ 000087 1A 0E [ 1] 142 or a, (0x0e, sp)
+ 000089 90 97 [ 1] 143 ld yl, a
+ 00008B 1F 03 [ 2] 144 ldw (0x03, sp), x
+ 00008D 17 01 [ 2] 145 ldw (0x01, sp), y
+ 146 ; ../ldexpf.c: 45: return(fl.f);
+ 00008F 1E 03 [ 2] 147 ldw x, (0x03, sp)
+ 000091 16 01 [ 2] 148 ldw y, (0x01, sp)
+ 149 ; ../ldexpf.c: 46: }
+ 000093 5B 10 [ 2] 150 addw sp, #16
+ 000095 87 [ 5] 151 retf
+ 152 .area CODE
+ 153 .area CONST
+ 154 .area INITIALIZER
+ 155 .area CABS (ABS)
diff --git a/device/lib/stm8-large/ldexpf.rel b/device/lib/stm8-large/ldexpf.rel
new file mode 100644
index 0000000..fddf435
--- /dev/null
+++ b/device/lib/stm8-large/ldexpf.rel
@@ -0,0 +1,51 @@
+XH3
+H B areas 2 global symbols
+M ldexpf
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 96 flags 0 addr 0
+S _ldexpf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 16 16 17 03 16 14 17 01 16 03 1E
+R 00 00 00 09
+T 00 00 0D 01 4F 5D 2A 01 4A
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 88 01 90 01 7B 01 01 90 01 7B 01 01 90
+R 00 00 00 09
+T 00 00 20 01 48 90 59 59 84 4F 5F 61 6B 0C 61 6B
+R 00 00 00 09
+T 00 00 2D 0B 1F 09 1E 18 1F 0F 5F 0D 0F 2A 01 5A
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A 16 0F 72 F9 0B 9F 19 0A 02 19 09 4F 90
+R 00 00 00 09
+T 00 00 47 95 5F 41 90 9F 41 02 90 9E 01 90 5F A6
+R 00 00 00 09
+T 00 00 54 07
+R 00 00 00 09
+T 00 00 55
+R 00 00 00 09
+T 00 00 55 58 4A 26 FC 17 07 1F 05 16 03 17 0B 16
+R 00 00 00 09
+T 00 00 62 01 17 09 7B 0B 6B 0F 7B 0C 6B 10 7B 0A
+R 00 00 00 09
+T 00 00 6F A4 7F 6B 0E 7B 09 A4 80 1A 05 90 95 7B
+R 00 00 00 09
+T 00 00 7C 08 1A 10 97 7B 07 1A 0F 95 7B 06 1A 0E
+R 00 00 00 09
+T 00 00 89 90 97 1F 03 17 01 1E 03 16 01 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/ldexpf.sym b/device/lib/stm8-large/ldexpf.sym
new file mode 100644
index 0000000..6eeb201
--- /dev/null
+++ b/device/lib/stm8-large/ldexpf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _ldexpf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 96 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/log10f.asm b/device/lib/stm8-large/log10f.asm
new file mode 100644
index 0000000..3f07752
--- /dev/null
+++ b/device/lib/stm8-large/log10f.asm
@@ -0,0 +1,75 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module log10f
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _logf
+ .globl _log10f
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../log10f.c: 34: float log10f(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function log10f
+; -----------------------------------------
+_log10f:
+; ../log10f.c: 36: return logf(x)*0.4342944819;
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ callf _logf
+ addw sp, #4
+ pushw x
+ pushw y
+ push #0xd9
+ push #0x5b
+ push #0xde
+ push #0x3e
+ callf ___fsmul
+ addw sp, #8
+; ../log10f.c: 37: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/log10f.lst b/device/lib/stm8-large/log10f.lst
new file mode 100644
index 0000000..76dbb46
--- /dev/null
+++ b/device/lib/stm8-large/log10f.lst
@@ -0,0 +1,75 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module log10f
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _logf
+ 12 .globl _log10f
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../log10f.c: 34: float log10f(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function log10f
+ 53 ; -----------------------------------------
+ 000000 54 _log10f:
+ 55 ; ../log10f.c: 36: return logf(x)*0.4342944819;
+ 000000 1E 06 [ 2] 56 ldw x, (0x06, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 1E 06 [ 2] 58 ldw x, (0x06, sp)
+ 000005 89 [ 2] 59 pushw x
+ 000006 8Ds00r00r00 [ 5] 60 callf _logf
+ 00000A 5B 04 [ 2] 61 addw sp, #4
+ 00000C 89 [ 2] 62 pushw x
+ 00000D 90 89 [ 2] 63 pushw y
+ 00000F 4B D9 [ 1] 64 push #0xd9
+ 000011 4B 5B [ 1] 65 push #0x5b
+ 000013 4B DE [ 1] 66 push #0xde
+ 000015 4B 3E [ 1] 67 push #0x3e
+ 000017 8Ds00r00r00 [ 5] 68 callf ___fsmul
+ 00001B 5B 08 [ 2] 69 addw sp, #8
+ 70 ; ../log10f.c: 37: }
+ 00001D 87 [ 5] 71 retf
+ 72 .area CODE
+ 73 .area CONST
+ 74 .area INITIALIZER
+ 75 .area CABS (ABS)
diff --git a/device/lib/stm8-large/log10f.rel b/device/lib/stm8-large/log10f.rel
new file mode 100644
index 0000000..174e5e4
--- /dev/null
+++ b/device/lib/stm8-large/log10f.rel
@@ -0,0 +1,27 @@
+XH3
+H B areas 4 global symbols
+M log10f
+O -mstm8
+S ___fsmul Ref000000
+S _logf Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1E flags 0 addr 0
+S _log10f Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 06 89 1E 06 89 8D 00 00 00 5B 04 89
+R 00 00 00 09 82 0A 00 01
+T 00 00 0D 90 89 4B D9 4B 5B 4B DE 4B 3E 8D
+R 00 00 00 09
+T 00 00 18 00 00 00 5B 08 87
+R 00 00 00 09 82 03 00 00
diff --git a/device/lib/stm8-large/log10f.sym b/device/lib/stm8-large/log10f.sym
new file mode 100644
index 0000000..e6e30f7
--- /dev/null
+++ b/device/lib/stm8-large/log10f.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsmul ****** GX
+ 9 _log10f 000000 GR
+ _logf ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1E flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/logf.asm b/device/lib/stm8-large/logf.asm
new file mode 100644
index 0000000..184b819
--- /dev/null
+++ b/device/lib/stm8-large/logf.asm
@@ -0,0 +1,341 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module logf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _frexpf
+ .globl _logf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../logf.c: 216: float logf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function logf
+; -----------------------------------------
+_logf:
+ sub sp, #14
+; ../logf.c: 226: if (x<=0.0)
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ ld (0x0e, sp), a
+ jrne 00102$
+; ../logf.c: 228: errno=EDOM;
+ ldw x, #0x0021
+ ldw _errno+0, x
+; ../logf.c: 229: return 0.0;
+ clrw x
+ clrw y
+ jpf 00106$
+00102$:
+; ../logf.c: 231: f=frexpf(x, &n);
+ ldw x, sp
+ incw x
+ pushw x
+ ldw x, (0x16, sp)
+ pushw x
+ ldw x, (0x16, sp)
+ pushw x
+ callf _frexpf
+ addw sp, #6
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../logf.c: 232: znum=f-0.5;
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../logf.c: 233: if (f>C0)
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ push #0xf3
+ push #0x04
+ push #0x35
+ push #0x3f
+ callf ___fslt
+ addw sp, #8
+ ld (0x0e, sp), a
+ jreq 00104$
+; ../logf.c: 235: znum-=0.5;
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../logf.c: 236: zden=(f*0.5)+0.5;
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ jra 00105$
+00104$:
+; ../logf.c: 240: n--;
+ ldw x, (0x01, sp)
+ decw x
+ ldw (0x01, sp), x
+; ../logf.c: 241: zden=znum*0.5+0.5;
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+00105$:
+; ../logf.c: 243: z=znum/zden;
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x03, sp), y
+; ../logf.c: 244: w=z*z;
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+; ../logf.c: 246: Rz=z+z*(w*A(w)/B(w));
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ push #0x3d
+ push #0x7e
+ push #0x0d
+ push #0xbf
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+ push #0x3a
+ push #0x3f
+ push #0xd4
+ push #0xc0
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x03, sp), y
+; ../logf.c: 247: xn=n;
+ ldw x, (0x01, sp)
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw y, (0x0d, sp)
+ ldw (0x09, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x07, sp), y
+; ../logf.c: 248: return ((xn*C2+Rz)+xn*C1);
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0x83
+ push #0x80
+ push #0x5e
+ push #0xb9
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0x00
+ push #0x80
+ push #0x31
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x0d, sp)
+ ldw y, (0x0b, sp)
+00106$:
+; ../logf.c: 249: }
+ addw sp, #14
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/logf.lst b/device/lib/stm8-large/logf.lst
new file mode 100644
index 0000000..1ad894a
--- /dev/null
+++ b/device/lib/stm8-large/logf.lst
@@ -0,0 +1,341 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module logf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _frexpf
+ 12 .globl _logf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../logf.c: 216: float logf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function logf
+ 53 ; -----------------------------------------
+ 000000 54 _logf:
+ 000000 52 0E [ 2] 55 sub sp, #14
+ 56 ; ../logf.c: 226: if (x<=0.0)
+ 000002 1E 14 [ 2] 57 ldw x, (0x14, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 14 [ 2] 59 ldw x, (0x14, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 5F [ 1] 61 clrw x
+ 000009 89 [ 2] 62 pushw x
+ 00000A 5F [ 1] 63 clrw x
+ 00000B 89 [ 2] 64 pushw x
+ 00000C 8Ds00r00r00 [ 5] 65 callf ___fslt
+ 000010 5B 08 [ 2] 66 addw sp, #8
+ 000012 6B 0E [ 1] 67 ld (0x0e, sp), a
+ 000014 26 0D [ 1] 68 jrne 00102$
+ 69 ; ../logf.c: 228: errno=EDOM;
+ 000016 AE 00 21 [ 2] 70 ldw x, #0x0021
+ 000019 CFu00u00 [ 2] 71 ldw _errno+0, x
+ 72 ; ../logf.c: 229: return 0.0;
+ 00001C 5F [ 1] 73 clrw x
+ 00001D 90 5F [ 1] 74 clrw y
+ 00001F ACs00r01rF2 [ 2] 75 jpf 00106$
+ 000023 76 00102$:
+ 77 ; ../logf.c: 231: f=frexpf(x, &n);
+ 000023 96 [ 1] 78 ldw x, sp
+ 000024 5C [ 1] 79 incw x
+ 000025 89 [ 2] 80 pushw x
+ 000026 1E 16 [ 2] 81 ldw x, (0x16, sp)
+ 000028 89 [ 2] 82 pushw x
+ 000029 1E 16 [ 2] 83 ldw x, (0x16, sp)
+ 00002B 89 [ 2] 84 pushw x
+ 00002C 8Ds00r00r00 [ 5] 85 callf _frexpf
+ 000030 5B 06 [ 2] 86 addw sp, #6
+ 000032 1F 05 [ 2] 87 ldw (0x05, sp), x
+ 000034 17 03 [ 2] 88 ldw (0x03, sp), y
+ 89 ; ../logf.c: 232: znum=f-0.5;
+ 000036 5F [ 1] 90 clrw x
+ 000037 89 [ 2] 91 pushw x
+ 000038 4B 00 [ 1] 92 push #0x00
+ 00003A 4B 3F [ 1] 93 push #0x3f
+ 00003C 1E 09 [ 2] 94 ldw x, (0x09, sp)
+ 00003E 89 [ 2] 95 pushw x
+ 00003F 1E 09 [ 2] 96 ldw x, (0x09, sp)
+ 000041 89 [ 2] 97 pushw x
+ 000042 8Ds00r00r00 [ 5] 98 callf ___fssub
+ 000046 5B 08 [ 2] 99 addw sp, #8
+ 000048 1F 09 [ 2] 100 ldw (0x09, sp), x
+ 00004A 17 07 [ 2] 101 ldw (0x07, sp), y
+ 102 ; ../logf.c: 233: if (f>C0)
+ 00004C 1E 05 [ 2] 103 ldw x, (0x05, sp)
+ 00004E 89 [ 2] 104 pushw x
+ 00004F 1E 05 [ 2] 105 ldw x, (0x05, sp)
+ 000051 89 [ 2] 106 pushw x
+ 000052 4B F3 [ 1] 107 push #0xf3
+ 000054 4B 04 [ 1] 108 push #0x04
+ 000056 4B 35 [ 1] 109 push #0x35
+ 000058 4B 3F [ 1] 110 push #0x3f
+ 00005A 8Ds00r00r00 [ 5] 111 callf ___fslt
+ 00005E 5B 08 [ 2] 112 addw sp, #8
+ 000060 6B 0E [ 1] 113 ld (0x0e, sp), a
+ 000062 27 3F [ 1] 114 jreq 00104$
+ 115 ; ../logf.c: 235: znum-=0.5;
+ 000064 5F [ 1] 116 clrw x
+ 000065 89 [ 2] 117 pushw x
+ 000066 4B 00 [ 1] 118 push #0x00
+ 000068 4B 3F [ 1] 119 push #0x3f
+ 00006A 1E 0D [ 2] 120 ldw x, (0x0d, sp)
+ 00006C 89 [ 2] 121 pushw x
+ 00006D 1E 0D [ 2] 122 ldw x, (0x0d, sp)
+ 00006F 89 [ 2] 123 pushw x
+ 000070 8Ds00r00r00 [ 5] 124 callf ___fssub
+ 000074 5B 08 [ 2] 125 addw sp, #8
+ 000076 1F 09 [ 2] 126 ldw (0x09, sp), x
+ 000078 17 07 [ 2] 127 ldw (0x07, sp), y
+ 128 ; ../logf.c: 236: zden=(f*0.5)+0.5;
+ 00007A 1E 05 [ 2] 129 ldw x, (0x05, sp)
+ 00007C 89 [ 2] 130 pushw x
+ 00007D 1E 05 [ 2] 131 ldw x, (0x05, sp)
+ 00007F 89 [ 2] 132 pushw x
+ 000080 5F [ 1] 133 clrw x
+ 000081 89 [ 2] 134 pushw x
+ 000082 4B 00 [ 1] 135 push #0x00
+ 000084 4B 3F [ 1] 136 push #0x3f
+ 000086 8Ds00r00r00 [ 5] 137 callf ___fsmul
+ 00008A 5B 08 [ 2] 138 addw sp, #8
+ 00008C 4B 00 [ 1] 139 push #0x00
+ 00008E 4B 00 [ 1] 140 push #0x00
+ 000090 4B 00 [ 1] 141 push #0x00
+ 000092 4B 3F [ 1] 142 push #0x3f
+ 000094 89 [ 2] 143 pushw x
+ 000095 90 89 [ 2] 144 pushw y
+ 000097 8Ds00r00r00 [ 5] 145 callf ___fsadd
+ 00009B 5B 08 [ 2] 146 addw sp, #8
+ 00009D 1F 0D [ 2] 147 ldw (0x0d, sp), x
+ 00009F 17 0B [ 2] 148 ldw (0x0b, sp), y
+ 0000A1 20 2C [ 2] 149 jra 00105$
+ 0000A3 150 00104$:
+ 151 ; ../logf.c: 240: n--;
+ 0000A3 1E 01 [ 2] 152 ldw x, (0x01, sp)
+ 0000A5 5A [ 2] 153 decw x
+ 0000A6 1F 01 [ 2] 154 ldw (0x01, sp), x
+ 155 ; ../logf.c: 241: zden=znum*0.5+0.5;
+ 0000A8 1E 09 [ 2] 156 ldw x, (0x09, sp)
+ 0000AA 89 [ 2] 157 pushw x
+ 0000AB 1E 09 [ 2] 158 ldw x, (0x09, sp)
+ 0000AD 89 [ 2] 159 pushw x
+ 0000AE 5F [ 1] 160 clrw x
+ 0000AF 89 [ 2] 161 pushw x
+ 0000B0 4B 00 [ 1] 162 push #0x00
+ 0000B2 4B 3F [ 1] 163 push #0x3f
+ 0000B4 8Ds00r00r00 [ 5] 164 callf ___fsmul
+ 0000B8 5B 08 [ 2] 165 addw sp, #8
+ 0000BA 4B 00 [ 1] 166 push #0x00
+ 0000BC 4B 00 [ 1] 167 push #0x00
+ 0000BE 4B 00 [ 1] 168 push #0x00
+ 0000C0 4B 3F [ 1] 169 push #0x3f
+ 0000C2 89 [ 2] 170 pushw x
+ 0000C3 90 89 [ 2] 171 pushw y
+ 0000C5 8Ds00r00r00 [ 5] 172 callf ___fsadd
+ 0000C9 5B 08 [ 2] 173 addw sp, #8
+ 0000CB 1F 0D [ 2] 174 ldw (0x0d, sp), x
+ 0000CD 17 0B [ 2] 175 ldw (0x0b, sp), y
+ 0000CF 176 00105$:
+ 177 ; ../logf.c: 243: z=znum/zden;
+ 0000CF 1E 0D [ 2] 178 ldw x, (0x0d, sp)
+ 0000D1 89 [ 2] 179 pushw x
+ 0000D2 1E 0D [ 2] 180 ldw x, (0x0d, sp)
+ 0000D4 89 [ 2] 181 pushw x
+ 0000D5 1E 0D [ 2] 182 ldw x, (0x0d, sp)
+ 0000D7 89 [ 2] 183 pushw x
+ 0000D8 1E 0D [ 2] 184 ldw x, (0x0d, sp)
+ 0000DA 89 [ 2] 185 pushw x
+ 0000DB 8Ds00r00r00 [ 5] 186 callf ___fsdiv
+ 0000DF 5B 08 [ 2] 187 addw sp, #8
+ 0000E1 1F 0D [ 2] 188 ldw (0x0d, sp), x
+ 0000E3 17 0B [ 2] 189 ldw (0x0b, sp), y
+ 0000E5 16 0D [ 2] 190 ldw y, (0x0d, sp)
+ 0000E7 17 05 [ 2] 191 ldw (0x05, sp), y
+ 0000E9 16 0B [ 2] 192 ldw y, (0x0b, sp)
+ 0000EB 17 03 [ 2] 193 ldw (0x03, sp), y
+ 194 ; ../logf.c: 244: w=z*z;
+ 0000ED 1E 05 [ 2] 195 ldw x, (0x05, sp)
+ 0000EF 89 [ 2] 196 pushw x
+ 0000F0 1E 05 [ 2] 197 ldw x, (0x05, sp)
+ 0000F2 89 [ 2] 198 pushw x
+ 0000F3 1E 09 [ 2] 199 ldw x, (0x09, sp)
+ 0000F5 89 [ 2] 200 pushw x
+ 0000F6 1E 09 [ 2] 201 ldw x, (0x09, sp)
+ 0000F8 89 [ 2] 202 pushw x
+ 0000F9 8Ds00r00r00 [ 5] 203 callf ___fsmul
+ 0000FD 5B 08 [ 2] 204 addw sp, #8
+ 0000FF 1F 0D [ 2] 205 ldw (0x0d, sp), x
+ 000101 17 0B [ 2] 206 ldw (0x0b, sp), y
+ 207 ; ../logf.c: 246: Rz=z+z*(w*A(w)/B(w));
+ 000103 1E 0D [ 2] 208 ldw x, (0x0d, sp)
+ 000105 89 [ 2] 209 pushw x
+ 000106 1E 0D [ 2] 210 ldw x, (0x0d, sp)
+ 000108 89 [ 2] 211 pushw x
+ 000109 4B 3D [ 1] 212 push #0x3d
+ 00010B 4B 7E [ 1] 213 push #0x7e
+ 00010D 4B 0D [ 1] 214 push #0x0d
+ 00010F 4B BF [ 1] 215 push #0xbf
+ 000111 8Ds00r00r00 [ 5] 216 callf ___fsmul
+ 000115 5B 08 [ 2] 217 addw sp, #8
+ 000117 1F 09 [ 2] 218 ldw (0x09, sp), x
+ 000119 17 07 [ 2] 219 ldw (0x07, sp), y
+ 00011B 4B 3A [ 1] 220 push #0x3a
+ 00011D 4B 3F [ 1] 221 push #0x3f
+ 00011F 4B D4 [ 1] 222 push #0xd4
+ 000121 4B C0 [ 1] 223 push #0xc0
+ 000123 1E 11 [ 2] 224 ldw x, (0x11, sp)
+ 000125 89 [ 2] 225 pushw x
+ 000126 1E 11 [ 2] 226 ldw x, (0x11, sp)
+ 000128 89 [ 2] 227 pushw x
+ 000129 8Ds00r00r00 [ 5] 228 callf ___fsadd
+ 00012D 5B 08 [ 2] 229 addw sp, #8
+ 00012F 1F 0D [ 2] 230 ldw (0x0d, sp), x
+ 000131 17 0B [ 2] 231 ldw (0x0b, sp), y
+ 000133 1E 0D [ 2] 232 ldw x, (0x0d, sp)
+ 000135 89 [ 2] 233 pushw x
+ 000136 1E 0D [ 2] 234 ldw x, (0x0d, sp)
+ 000138 89 [ 2] 235 pushw x
+ 000139 1E 0D [ 2] 236 ldw x, (0x0d, sp)
+ 00013B 89 [ 2] 237 pushw x
+ 00013C 1E 0D [ 2] 238 ldw x, (0x0d, sp)
+ 00013E 89 [ 2] 239 pushw x
+ 00013F 8Ds00r00r00 [ 5] 240 callf ___fsdiv
+ 000143 5B 08 [ 2] 241 addw sp, #8
+ 000145 1F 0D [ 2] 242 ldw (0x0d, sp), x
+ 000147 17 0B [ 2] 243 ldw (0x0b, sp), y
+ 000149 1E 0D [ 2] 244 ldw x, (0x0d, sp)
+ 00014B 89 [ 2] 245 pushw x
+ 00014C 1E 0D [ 2] 246 ldw x, (0x0d, sp)
+ 00014E 89 [ 2] 247 pushw x
+ 00014F 1E 09 [ 2] 248 ldw x, (0x09, sp)
+ 000151 89 [ 2] 249 pushw x
+ 000152 1E 09 [ 2] 250 ldw x, (0x09, sp)
+ 000154 89 [ 2] 251 pushw x
+ 000155 8Ds00r00r00 [ 5] 252 callf ___fsmul
+ 000159 5B 08 [ 2] 253 addw sp, #8
+ 00015B 1F 0D [ 2] 254 ldw (0x0d, sp), x
+ 00015D 17 0B [ 2] 255 ldw (0x0b, sp), y
+ 00015F 1E 0D [ 2] 256 ldw x, (0x0d, sp)
+ 000161 89 [ 2] 257 pushw x
+ 000162 1E 0D [ 2] 258 ldw x, (0x0d, sp)
+ 000164 89 [ 2] 259 pushw x
+ 000165 1E 09 [ 2] 260 ldw x, (0x09, sp)
+ 000167 89 [ 2] 261 pushw x
+ 000168 1E 09 [ 2] 262 ldw x, (0x09, sp)
+ 00016A 89 [ 2] 263 pushw x
+ 00016B 8Ds00r00r00 [ 5] 264 callf ___fsadd
+ 00016F 5B 08 [ 2] 265 addw sp, #8
+ 000171 1F 0D [ 2] 266 ldw (0x0d, sp), x
+ 000173 17 0B [ 2] 267 ldw (0x0b, sp), y
+ 000175 16 0D [ 2] 268 ldw y, (0x0d, sp)
+ 000177 17 05 [ 2] 269 ldw (0x05, sp), y
+ 000179 16 0B [ 2] 270 ldw y, (0x0b, sp)
+ 00017B 17 03 [ 2] 271 ldw (0x03, sp), y
+ 272 ; ../logf.c: 247: xn=n;
+ 00017D 1E 01 [ 2] 273 ldw x, (0x01, sp)
+ 00017F 89 [ 2] 274 pushw x
+ 000180 8Ds00r00r00 [ 5] 275 callf ___sint2fs
+ 000184 5B 02 [ 2] 276 addw sp, #2
+ 000186 1F 0D [ 2] 277 ldw (0x0d, sp), x
+ 000188 17 0B [ 2] 278 ldw (0x0b, sp), y
+ 00018A 16 0D [ 2] 279 ldw y, (0x0d, sp)
+ 00018C 17 09 [ 2] 280 ldw (0x09, sp), y
+ 00018E 16 0B [ 2] 281 ldw y, (0x0b, sp)
+ 000190 17 07 [ 2] 282 ldw (0x07, sp), y
+ 283 ; ../logf.c: 248: return ((xn*C2+Rz)+xn*C1);
+ 000192 1E 09 [ 2] 284 ldw x, (0x09, sp)
+ 000194 89 [ 2] 285 pushw x
+ 000195 1E 09 [ 2] 286 ldw x, (0x09, sp)
+ 000197 89 [ 2] 287 pushw x
+ 000198 4B 83 [ 1] 288 push #0x83
+ 00019A 4B 80 [ 1] 289 push #0x80
+ 00019C 4B 5E [ 1] 290 push #0x5e
+ 00019E 4B B9 [ 1] 291 push #0xb9
+ 0001A0 8Ds00r00r00 [ 5] 292 callf ___fsmul
+ 0001A4 5B 08 [ 2] 293 addw sp, #8
+ 0001A6 1F 0D [ 2] 294 ldw (0x0d, sp), x
+ 0001A8 17 0B [ 2] 295 ldw (0x0b, sp), y
+ 0001AA 1E 05 [ 2] 296 ldw x, (0x05, sp)
+ 0001AC 89 [ 2] 297 pushw x
+ 0001AD 1E 05 [ 2] 298 ldw x, (0x05, sp)
+ 0001AF 89 [ 2] 299 pushw x
+ 0001B0 1E 11 [ 2] 300 ldw x, (0x11, sp)
+ 0001B2 89 [ 2] 301 pushw x
+ 0001B3 1E 11 [ 2] 302 ldw x, (0x11, sp)
+ 0001B5 89 [ 2] 303 pushw x
+ 0001B6 8Ds00r00r00 [ 5] 304 callf ___fsadd
+ 0001BA 5B 08 [ 2] 305 addw sp, #8
+ 0001BC 1F 0D [ 2] 306 ldw (0x0d, sp), x
+ 0001BE 17 0B [ 2] 307 ldw (0x0b, sp), y
+ 0001C0 1E 09 [ 2] 308 ldw x, (0x09, sp)
+ 0001C2 89 [ 2] 309 pushw x
+ 0001C3 1E 09 [ 2] 310 ldw x, (0x09, sp)
+ 0001C5 89 [ 2] 311 pushw x
+ 0001C6 4B 00 [ 1] 312 push #0x00
+ 0001C8 4B 80 [ 1] 313 push #0x80
+ 0001CA 4B 31 [ 1] 314 push #0x31
+ 0001CC 4B 3F [ 1] 315 push #0x3f
+ 0001CE 8Ds00r00r00 [ 5] 316 callf ___fsmul
+ 0001D2 5B 08 [ 2] 317 addw sp, #8
+ 0001D4 1F 09 [ 2] 318 ldw (0x09, sp), x
+ 0001D6 17 07 [ 2] 319 ldw (0x07, sp), y
+ 0001D8 1E 09 [ 2] 320 ldw x, (0x09, sp)
+ 0001DA 89 [ 2] 321 pushw x
+ 0001DB 1E 09 [ 2] 322 ldw x, (0x09, sp)
+ 0001DD 89 [ 2] 323 pushw x
+ 0001DE 1E 11 [ 2] 324 ldw x, (0x11, sp)
+ 0001E0 89 [ 2] 325 pushw x
+ 0001E1 1E 11 [ 2] 326 ldw x, (0x11, sp)
+ 0001E3 89 [ 2] 327 pushw x
+ 0001E4 8Ds00r00r00 [ 5] 328 callf ___fsadd
+ 0001E8 5B 08 [ 2] 329 addw sp, #8
+ 0001EA 1F 0D [ 2] 330 ldw (0x0d, sp), x
+ 0001EC 17 0B [ 2] 331 ldw (0x0b, sp), y
+ 0001EE 1E 0D [ 2] 332 ldw x, (0x0d, sp)
+ 0001F0 16 0B [ 2] 333 ldw y, (0x0b, sp)
+ 0001F2 334 00106$:
+ 335 ; ../logf.c: 249: }
+ 0001F2 5B 0E [ 2] 336 addw sp, #14
+ 0001F4 87 [ 5] 337 retf
+ 338 .area CODE
+ 339 .area CONST
+ 340 .area INITIALIZER
+ 341 .area CABS (ABS)
diff --git a/device/lib/stm8-large/logf.rel b/device/lib/stm8-large/logf.rel
new file mode 100644
index 0000000..d4415a0
--- /dev/null
+++ b/device/lib/stm8-large/logf.rel
@@ -0,0 +1,123 @@
+XH3
+H B areas A global symbols
+M logf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _errno Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S ___sint2fs Ref000000
+S _frexpf Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1F5 flags 0 addr 0
+S _logf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0E 1E 14 89 1E 14 89 5F 89 5F 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 08 6B 0E 26 0D AE 00 21 CF
+R 00 00 00 09 82 03 00 03
+T 00 00 1A 00 00 5F 90 5F AC 00 01 F2
+R 00 00 00 09 12 03 00 02 80 09 00 09
+T 00 00 23
+R 00 00 00 09
+T 00 00 23 96 5C 89 1E 16 89 1E 16 89 8D
+R 00 00 00 09
+T 00 00 2D 00 00 00 5B 06 1F 05 17 03 5F 89 4B 00
+R 00 00 00 09 82 03 00 07
+T 00 00 3A 4B 3F 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 00 43 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E
+R 00 00 00 09 82 03 00 00
+T 00 00 50 05 89 4B F3 4B 04 4B 35 4B 3F 8D
+R 00 00 00 09
+T 00 00 5B 00 00 00 5B 08 6B 0E 27 3F 5F 89 4B 00
+R 00 00 00 09 82 03 00 03
+T 00 00 68 4B 3F 1E 0D 89 1E 0D 89 8D
+R 00 00 00 09
+T 00 00 71 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E
+R 00 00 00 09 82 03 00 00
+T 00 00 7E 05 89 5F 89 4B 00 4B 3F 8D
+R 00 00 00 09
+T 00 00 87 00 00 00 5B 08 4B 00 4B 00 4B 00 4B 3F
+R 00 00 00 09 82 03 00 01
+T 00 00 94 89 90 89 8D 00 00 00 5B 08 1F 0D 17 0B
+R 00 00 00 09 82 07 00 05
+T 00 00 A1 20 2C
+R 00 00 00 09
+T 00 00 A3
+R 00 00 00 09
+T 00 00 A3 1E 01 5A 1F 01 1E 09 89 1E 09 89 5F 89
+R 00 00 00 09
+T 00 00 B0 4B 00 4B 3F 8D 00 00 00 5B 08 4B 00 4B
+R 00 00 00 09 82 08 00 01
+T 00 00 BD 00 4B 00 4B 3F 89 90 89 8D
+R 00 00 00 09
+T 00 00 C6 00 00 00 5B 08 1F 0D 17 0B
+R 00 00 00 09 82 03 00 05
+T 00 00 CF
+R 00 00 00 09
+T 00 00 CF 1E 0D 89 1E 0D 89 1E 0D 89 1E 0D 89 8D
+R 00 00 00 09
+T 00 00 DC 00 00 00 5B 08 1F 0D 17 0B 16 0D 17 05
+R 00 00 00 09 82 03 00 08
+T 00 00 E9 16 0B 17 03 1E 05 89 1E 05 89 1E 09 89
+R 00 00 00 09
+T 00 00 F6 1E 09 89 8D 00 00 00 5B 08 1F 0D 17 0B
+R 00 00 00 09 82 07 00 01
+T 00 01 03 1E 0D 89 1E 0D 89 4B 3D 4B 7E 4B 0D 4B
+R 00 00 00 09
+T 00 01 10 BF 8D 00 00 00 5B 08 1F 09 17 07 4B 3A
+R 00 00 00 09 82 05 00 01
+T 00 01 1D 4B 3F 4B D4 4B C0 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 01 2A 00 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 01 37 0D 89 1E 0D 89 1E 0D 89 8D
+R 00 00 00 09
+T 00 01 40 00 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E
+R 00 00 00 09 82 03 00 08
+T 00 01 4D 0D 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 01 56 00 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 63 0D 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 01 6C 00 00 00 5B 08 1F 0D 17 0B 16 0D 17 05
+R 00 00 00 09 82 03 00 05
+T 00 01 79 16 0B 17 03 1E 01 89 8D
+R 00 00 00 09
+T 00 01 81 00 00 00 5B 02 1F 0D 17 0B 16 0D 17 09
+R 00 00 00 09 82 03 00 06
+T 00 01 8E 16 0B 17 07 1E 09 89 1E 09 89 4B 83 4B
+R 00 00 00 09
+T 00 01 9B 80 4B 5E 4B B9 8D 00 00 00 5B 08 1F 0D
+R 00 00 00 09 82 09 00 01
+T 00 01 A8 17 0B 1E 05 89 1E 05 89 1E 11 89 1E 11
+R 00 00 00 09
+T 00 01 B5 89 8D 00 00 00 5B 08 1F 0D 17 0B 1E 09
+R 00 00 00 09 82 05 00 05
+T 00 01 C2 89 1E 09 89 4B 00 4B 80 4B 31 4B 3F 8D
+R 00 00 00 09
+T 00 01 CF 00 00 00 5B 08 1F 09 17 07 1E 09 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 DC 09 89 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 01 E5 00 00 00 5B 08 1F 0D 17 0B 1E 0D 16 0B
+R 00 00 00 09 82 03 00 05
+T 00 01 F2
+R 00 00 00 09
+T 00 01 F2 5B 0E 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/logf.sym b/device/lib/stm8-large/logf.sym
new file mode 100644
index 0000000..cac8018
--- /dev/null
+++ b/device/lib/stm8-large/logf.sym
@@ -0,0 +1,37 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ ___sint2fs ****** GX
+ _errno ****** GX
+ _frexpf ****** GX
+ 9 _logf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1F5 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/malloc.asm b/device/lib/stm8-large/malloc.asm
new file mode 100644
index 0000000..603b5ed
--- /dev/null
+++ b/device/lib/stm8-large/malloc.asm
@@ -0,0 +1,182 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module malloc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___sdcc_heap_init
+ .globl ___sdcc_heap_free
+ .globl _malloc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+___sdcc_heap_free::
+ .ds 2
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../malloc.c: 65: void __sdcc_heap_init(void)
+; -----------------------------------------
+; function __sdcc_heap_init
+; -----------------------------------------
+___sdcc_heap_init:
+; ../malloc.c: 67: __sdcc_heap_free = HEAP_START;
+ ldw x, #(___sdcc_heap + 0)
+ ldw ___sdcc_heap_free+0, x
+; ../malloc.c: 68: __sdcc_heap_free->next = HEAP_END;
+ ldw x, #___sdcc_heap_end+0
+ ldw [___sdcc_heap_free+0], x
+; ../malloc.c: 69: __sdcc_heap_free->next_free = 0;
+ ldw x, ___sdcc_heap_free+0
+ incw x
+ incw x
+ clr (0x1, x)
+ clr (x)
+; ../malloc.c: 70: }
+ retf
+; ../malloc.c: 75: void *malloc(size_t size)
+; -----------------------------------------
+; function malloc
+; -----------------------------------------
+_malloc:
+ sub sp, #12
+; ../malloc.c: 86: if(!size || size + offsetof(struct header, next_free) < size)
+ ldw x, (0x10, sp)
+ jreq 00101$
+ incw x
+ incw x
+ cpw x, (0x10, sp)
+ jrnc 00102$
+00101$:
+; ../malloc.c: 87: return(0);
+ clrw x
+ jra 00115$
+00102$:
+; ../malloc.c: 88: size += offsetof(struct header, next_free);
+; ../malloc.c: 89: if(size < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks.
+ ldw (0x10, sp), x
+ cpw x, #0x0004
+ jrnc 00105$
+; ../malloc.c: 90: size = sizeof(struct header);
+ ldw x, #0x0004
+ ldw (0x10, sp), x
+00105$:
+; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free)
+ ldw x, ___sdcc_heap_free+0
+ ldw (0x01, sp), x
+ ldw x, #(___sdcc_heap_free + 0)
+ ldw (0x03, sp), x
+00113$:
+; ../malloc.c: 94: size_t blocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h;
+ ldw x, (0x01, sp)
+ jreq 00111$
+ ldw x, (x)
+ ldw (0x05, sp), x
+ ldw y, x
+ ldw x, (0x01, sp)
+ ldw (0x07, sp), x
+ subw y, (0x07, sp)
+; ../malloc.c: 101: newheader->next_free = h->next_free;
+ ldw x, (0x01, sp)
+ incw x
+ incw x
+ ldw (0x09, sp), x
+; ../malloc.c: 95: if(blocksize >= size) // Found free block of sufficient size.
+ exgw x, y
+ cpw x, (0x10, sp)
+ exgw x, y
+ jrc 00114$
+; ../malloc.c: 97: if(blocksize >= size + sizeof(struct header)) // It is worth creating a new free block
+ ldw x, (0x10, sp)
+ addw x, #0x0004
+ ldw (0x0b, sp), x
+ ldw x, y
+ cpw x, (0x0b, sp)
+ jrc 00107$
+; ../malloc.c: 99: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + size);
+ ldw x, (0x07, sp)
+ addw x, (0x10, sp)
+; ../malloc.c: 100: newheader->next = h->next;
+ ldw (0x0b, sp), x
+ ldw y, (0x05, sp)
+ ldw (x), y
+; ../malloc.c: 101: newheader->next_free = h->next_free;
+ ldw x, (0x0b, sp)
+ incw x
+ incw x
+ ldw y, (0x09, sp)
+ ldw y, (y)
+ ldw (x), y
+; ../malloc.c: 102: *f = newheader;
+ ldw x, (0x03, sp)
+ ldw y, (0x0b, sp)
+ ldw (x), y
+; ../malloc.c: 103: h->next = newheader;
+ ldw x, (0x01, sp)
+ ldw y, (0x0b, sp)
+ ldw (x), y
+ jra 00108$
+00107$:
+; ../malloc.c: 106: *f = h->next_free;
+ ldw x, (0x09, sp)
+ ldw x, (x)
+ ldw y, (0x03, sp)
+ ldw (y), x
+00108$:
+; ../malloc.c: 108: return(&(h->next_free));
+ ldw x, (0x09, sp)
+ jra 00115$
+00114$:
+; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free)
+ ldw y, (0x09, sp)
+ ldw (0x03, sp), y
+ ldw x, (0x09, sp)
+ ldw x, (x)
+ ldw (0x01, sp), x
+ jra 00113$
+00111$:
+; ../malloc.c: 112: return(0);
+ clrw x
+00115$:
+; ../malloc.c: 113: }
+ addw sp, #12
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/malloc.lst b/device/lib/stm8-large/malloc.lst
new file mode 100644
index 0000000..62ab9c5
--- /dev/null
+++ b/device/lib/stm8-large/malloc.lst
@@ -0,0 +1,182 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module malloc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___sdcc_heap_init
+ 12 .globl ___sdcc_heap_free
+ 13 .globl _malloc
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 000000 18 ___sdcc_heap_free::
+ 000000 19 .ds 2
+ 20 ;--------------------------------------------------------
+ 21 ; ram data
+ 22 ;--------------------------------------------------------
+ 23 .area INITIALIZED
+ 24 ;--------------------------------------------------------
+ 25 ; absolute external ram data
+ 26 ;--------------------------------------------------------
+ 27 .area DABS (ABS)
+ 28
+ 29 ; default segment ordering for linker
+ 30 .area HOME
+ 31 .area GSINIT
+ 32 .area GSFINAL
+ 33 .area CONST
+ 34 .area INITIALIZER
+ 35 .area CODE
+ 36
+ 37 ;--------------------------------------------------------
+ 38 ; global & static initialisations
+ 39 ;--------------------------------------------------------
+ 40 .area HOME
+ 41 .area GSINIT
+ 42 .area GSFINAL
+ 43 .area GSINIT
+ 44 ;--------------------------------------------------------
+ 45 ; Home
+ 46 ;--------------------------------------------------------
+ 47 .area HOME
+ 48 .area HOME
+ 49 ;--------------------------------------------------------
+ 50 ; code
+ 51 ;--------------------------------------------------------
+ 52 .area CODE
+ 53 ; ../malloc.c: 65: void __sdcc_heap_init(void)
+ 54 ; -----------------------------------------
+ 55 ; function __sdcc_heap_init
+ 56 ; -----------------------------------------
+ 000000 57 ___sdcc_heap_init:
+ 58 ; ../malloc.c: 67: __sdcc_heap_free = HEAP_START;
+ 000000 AEr00r00 [ 2] 59 ldw x, #(___sdcc_heap + 0)
+ 000003 CFu00u00 [ 2] 60 ldw ___sdcc_heap_free+0, x
+ 61 ; ../malloc.c: 68: __sdcc_heap_free->next = HEAP_END;
+ 000006 AEr00r00 [ 2] 62 ldw x, #___sdcc_heap_end+0
+ 000009 72 CFu00u00 [ 5] 63 ldw [___sdcc_heap_free+0], x
+ 64 ; ../malloc.c: 69: __sdcc_heap_free->next_free = 0;
+ 00000D CEu00u00 [ 2] 65 ldw x, ___sdcc_heap_free+0
+ 000010 5C [ 1] 66 incw x
+ 000011 5C [ 1] 67 incw x
+ 000012 6F 01 [ 1] 68 clr (0x1, x)
+ 000014 7F [ 1] 69 clr (x)
+ 70 ; ../malloc.c: 70: }
+ 000015 87 [ 5] 71 retf
+ 72 ; ../malloc.c: 75: void *malloc(size_t size)
+ 73 ; -----------------------------------------
+ 74 ; function malloc
+ 75 ; -----------------------------------------
+ 000016 76 _malloc:
+ 000016 52 0C [ 2] 77 sub sp, #12
+ 78 ; ../malloc.c: 86: if(!size || size + offsetof(struct header, next_free) < size)
+ 000018 1E 10 [ 2] 79 ldw x, (0x10, sp)
+ 00001A 27 06 [ 1] 80 jreq 00101$
+ 00001C 5C [ 1] 81 incw x
+ 00001D 5C [ 1] 82 incw x
+ 00001E 13 10 [ 2] 83 cpw x, (0x10, sp)
+ 000020 24 03 [ 1] 84 jrnc 00102$
+ 000022 85 00101$:
+ 86 ; ../malloc.c: 87: return(0);
+ 000022 5F [ 1] 87 clrw x
+ 000023 20 74 [ 2] 88 jra 00115$
+ 000025 89 00102$:
+ 90 ; ../malloc.c: 88: size += offsetof(struct header, next_free);
+ 91 ; ../malloc.c: 89: if(size < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks.
+ 000025 1F 10 [ 2] 92 ldw (0x10, sp), x
+ 000027 A3 00 04 [ 2] 93 cpw x, #0x0004
+ 00002A 24 05 [ 1] 94 jrnc 00105$
+ 95 ; ../malloc.c: 90: size = sizeof(struct header);
+ 00002C AE 00 04 [ 2] 96 ldw x, #0x0004
+ 00002F 1F 10 [ 2] 97 ldw (0x10, sp), x
+ 000031 98 00105$:
+ 99 ; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free)
+ 000031 CEu00u00 [ 2] 100 ldw x, ___sdcc_heap_free+0
+ 000034 1F 01 [ 2] 101 ldw (0x01, sp), x
+ 000036 AEr00r00 [ 2] 102 ldw x, #(___sdcc_heap_free + 0)
+ 000039 1F 03 [ 2] 103 ldw (0x03, sp), x
+ 00003B 104 00113$:
+ 105 ; ../malloc.c: 94: size_t blocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h;
+ 00003B 1E 01 [ 2] 106 ldw x, (0x01, sp)
+ 00003D 27 59 [ 1] 107 jreq 00111$
+ 00003F FE [ 2] 108 ldw x, (x)
+ 000040 1F 05 [ 2] 109 ldw (0x05, sp), x
+ 000042 90 93 [ 1] 110 ldw y, x
+ 000044 1E 01 [ 2] 111 ldw x, (0x01, sp)
+ 000046 1F 07 [ 2] 112 ldw (0x07, sp), x
+ 000048 72 F2 07 [ 2] 113 subw y, (0x07, sp)
+ 114 ; ../malloc.c: 101: newheader->next_free = h->next_free;
+ 00004B 1E 01 [ 2] 115 ldw x, (0x01, sp)
+ 00004D 5C [ 1] 116 incw x
+ 00004E 5C [ 1] 117 incw x
+ 00004F 1F 09 [ 2] 118 ldw (0x09, sp), x
+ 119 ; ../malloc.c: 95: if(blocksize >= size) // Found free block of sufficient size.
+ 000051 51 [ 1] 120 exgw x, y
+ 000052 13 10 [ 2] 121 cpw x, (0x10, sp)
+ 000054 51 [ 1] 122 exgw x, y
+ 000055 25 36 [ 1] 123 jrc 00114$
+ 124 ; ../malloc.c: 97: if(blocksize >= size + sizeof(struct header)) // It is worth creating a new free block
+ 000057 1E 10 [ 2] 125 ldw x, (0x10, sp)
+ 000059 1C 00 04 [ 2] 126 addw x, #0x0004
+ 00005C 1F 0B [ 2] 127 ldw (0x0b, sp), x
+ 00005E 93 [ 1] 128 ldw x, y
+ 00005F 13 0B [ 2] 129 cpw x, (0x0b, sp)
+ 000061 25 1F [ 1] 130 jrc 00107$
+ 131 ; ../malloc.c: 99: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + size);
+ 000063 1E 07 [ 2] 132 ldw x, (0x07, sp)
+ 000065 72 FB 10 [ 2] 133 addw x, (0x10, sp)
+ 134 ; ../malloc.c: 100: newheader->next = h->next;
+ 000068 1F 0B [ 2] 135 ldw (0x0b, sp), x
+ 00006A 16 05 [ 2] 136 ldw y, (0x05, sp)
+ 00006C FF [ 2] 137 ldw (x), y
+ 138 ; ../malloc.c: 101: newheader->next_free = h->next_free;
+ 00006D 1E 0B [ 2] 139 ldw x, (0x0b, sp)
+ 00006F 5C [ 1] 140 incw x
+ 000070 5C [ 1] 141 incw x
+ 000071 16 09 [ 2] 142 ldw y, (0x09, sp)
+ 000073 90 FE [ 2] 143 ldw y, (y)
+ 000075 FF [ 2] 144 ldw (x), y
+ 145 ; ../malloc.c: 102: *f = newheader;
+ 000076 1E 03 [ 2] 146 ldw x, (0x03, sp)
+ 000078 16 0B [ 2] 147 ldw y, (0x0b, sp)
+ 00007A FF [ 2] 148 ldw (x), y
+ 149 ; ../malloc.c: 103: h->next = newheader;
+ 00007B 1E 01 [ 2] 150 ldw x, (0x01, sp)
+ 00007D 16 0B [ 2] 151 ldw y, (0x0b, sp)
+ 00007F FF [ 2] 152 ldw (x), y
+ 000080 20 07 [ 2] 153 jra 00108$
+ 000082 154 00107$:
+ 155 ; ../malloc.c: 106: *f = h->next_free;
+ 000082 1E 09 [ 2] 156 ldw x, (0x09, sp)
+ 000084 FE [ 2] 157 ldw x, (x)
+ 000085 16 03 [ 2] 158 ldw y, (0x03, sp)
+ 000087 90 FF [ 2] 159 ldw (y), x
+ 000089 160 00108$:
+ 161 ; ../malloc.c: 108: return(&(h->next_free));
+ 000089 1E 09 [ 2] 162 ldw x, (0x09, sp)
+ 00008B 20 0C [ 2] 163 jra 00115$
+ 00008D 164 00114$:
+ 165 ; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free)
+ 00008D 16 09 [ 2] 166 ldw y, (0x09, sp)
+ 00008F 17 03 [ 2] 167 ldw (0x03, sp), y
+ 000091 1E 09 [ 2] 168 ldw x, (0x09, sp)
+ 000093 FE [ 2] 169 ldw x, (x)
+ 000094 1F 01 [ 2] 170 ldw (0x01, sp), x
+ 000096 20 A3 [ 2] 171 jra 00113$
+ 000098 172 00111$:
+ 173 ; ../malloc.c: 112: return(0);
+ 000098 5F [ 1] 174 clrw x
+ 000099 175 00115$:
+ 176 ; ../malloc.c: 113: }
+ 000099 5B 0C [ 2] 177 addw sp, #12
+ 00009B 87 [ 5] 178 retf
+ 179 .area CODE
+ 180 .area CONST
+ 181 .area INITIALIZER
+ 182 .area CABS (ABS)
diff --git a/device/lib/stm8-large/malloc.rel b/device/lib/stm8-large/malloc.rel
new file mode 100644
index 0000000..a56dc8c
--- /dev/null
+++ b/device/lib/stm8-large/malloc.rel
@@ -0,0 +1,83 @@
+XH3
+H B areas 6 global symbols
+M malloc
+O -mstm8
+S ___sdcc_heap_end Ref000000
+S .__.ABS. Def000000
+S ___sdcc_heap Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 2 flags 0 addr 0
+S ___sdcc_heap_free Def000000
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 9C flags 0 addr 0
+S ___sdcc_heap_init Def000000
+S _malloc Def000016
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 AE 00 00 CF 00 00 AE
+R 00 00 00 09 02 04 00 02 10 07 00 01
+T 00 00 07 00 00 72 CF 00 00 CE
+R 00 00 00 09 02 03 00 00 10 07 00 01
+T 00 00 0E 00 00 5C 5C 6F 01 7F 87
+R 00 00 00 09 10 03 00 01
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 52 0C 1E 10 27 06 5C 5C 13 10 24 03
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 5F 20 74
+R 00 00 00 09
+T 00 00 25
+R 00 00 00 09
+T 00 00 25 1F 10 A3 00 04 24 05 AE 00 04 1F 10
+R 00 00 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 CE 00 00 1F 01 AE 00 00 1F 03
+R 00 00 00 09 10 04 00 01 00 09 00 01
+T 00 00 3B
+R 00 00 00 09
+T 00 00 3B 1E 01 27 59 FE 1F 05 90 93 1E 01 1F 07
+R 00 00 00 09
+T 00 00 48 72 F2 07 1E 01 5C 5C 1F 09 51 13 10 51
+R 00 00 00 09
+T 00 00 55 25 36 1E 10 1C 00 04 1F 0B 93 13 0B 25
+R 00 00 00 09
+T 00 00 62 1F 1E 07 72 FB 10 1F 0B 16 05 FF 1E 0B
+R 00 00 00 09
+T 00 00 6F 5C 5C 16 09 90 FE FF 1E 03 16 0B FF 1E
+R 00 00 00 09
+T 00 00 7C 01 16 0B FF 20 07
+R 00 00 00 09
+T 00 00 82
+R 00 00 00 09
+T 00 00 82 1E 09 FE 16 03 90 FF
+R 00 00 00 09
+T 00 00 89
+R 00 00 00 09
+T 00 00 89 1E 09 20 0C
+R 00 00 00 09
+T 00 00 8D
+R 00 00 00 09
+T 00 00 8D 16 09 17 03 1E 09 FE 1F 01 20 A3
+R 00 00 00 09
+T 00 00 98
+R 00 00 00 09
+T 00 00 98 5F
+R 00 00 00 09
+T 00 00 99
+R 00 00 00 09
+T 00 00 99 5B 0C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/malloc.sym b/device/lib/stm8-large/malloc.sym
new file mode 100644
index 0000000..531452a
--- /dev/null
+++ b/device/lib/stm8-large/malloc.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___sdcc_heap ****** GX
+ ___sdcc_heap_end ****** GX
+ 1 ___sdcc_heap_free 000000 GR
+ 9 ___sdcc_heap_init 000000 GR
+ 9 _malloc 000016 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 2 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 9C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mblen.asm b/device/lib/stm8-large/mblen.asm
new file mode 100644
index 0000000..bf67c54
--- /dev/null
+++ b/device/lib/stm8-large/mblen.asm
@@ -0,0 +1,142 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mblen
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mblen
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mblen.c: 31: int mblen(const char *s, size_t n)
+; -----------------------------------------
+; function mblen
+; -----------------------------------------
+_mblen:
+ sub sp, #5
+; ../mblen.c: 36: if(!s)
+; ../mblen.c: 37: return(0);
+ ldw x, (0x09, sp)
+ jreq 00119$
+; ../mblen.c: 39: if(!n)
+; ../mblen.c: 40: return(-1);
+ ldw x, (0x0b, sp)
+ jrne 00104$
+ decw x
+ jra 00119$
+00104$:
+; ../mblen.c: 42: c = *s;
+ ldw y, (0x09, sp)
+ ld a, (y)
+; ../mblen.c: 44: if(!c)
+ ld xh, a
+ tnz a
+ jrne 00106$
+; ../mblen.c: 45: return(0);
+ clrw x
+ jra 00119$
+00106$:
+; ../mblen.c: 47: if(c <= 0x7f)
+ ld a, xh
+ cp a, #0x7f
+ jrugt 00126$
+; ../mblen.c: 48: return(1);
+ clrw x
+ incw x
+ jra 00119$
+; ../mblen.c: 50: while(c & 0x80)
+00126$:
+ clr a
+00109$:
+ tnzw x
+ jrpl 00111$
+; ../mblen.c: 52: c <<= 1;
+ rlwa x
+ sll a
+ rrwa x
+; ../mblen.c: 53: m++;
+ inc a
+ jra 00109$
+00111$:
+; ../mblen.c: 56: if(m > n)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+ ldw x, (0x01, sp)
+ cpw x, (0x0b, sp)
+ jrule 00129$
+; ../mblen.c: 57: return(-1);
+ clrw x
+ decw x
+ jra 00119$
+; ../mblen.c: 60: while(--m)
+00129$:
+ ld (0x05, sp), a
+00116$:
+ dec (0x05, sp)
+ tnz (0x05, sp)
+ jreq 00118$
+; ../mblen.c: 61: if((*++s & 0xc0) != 0x80)
+ incw y
+ ld a, (y)
+ ld (0x04, sp), a
+ clr (0x03, sp)
+ ld a, (0x04, sp)
+ and a, #0xc0
+ ld xl, a
+ clr a
+ ld xh, a
+ cpw x, #0x0080
+ jreq 00116$
+; ../mblen.c: 62: return(-1);
+ clrw x
+ decw x
+; ../mblen.c: 64: return(n);
+ .byte 0xc5
+00118$:
+ ldw x, (0x01, sp)
+00119$:
+; ../mblen.c: 65: }
+ addw sp, #5
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mblen.lst b/device/lib/stm8-large/mblen.lst
new file mode 100644
index 0000000..6976791
--- /dev/null
+++ b/device/lib/stm8-large/mblen.lst
@@ -0,0 +1,142 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mblen
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mblen
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../mblen.c: 31: int mblen(const char *s, size_t n)
+ 50 ; -----------------------------------------
+ 51 ; function mblen
+ 52 ; -----------------------------------------
+ 000000 53 _mblen:
+ 000000 52 05 [ 2] 54 sub sp, #5
+ 55 ; ../mblen.c: 36: if(!s)
+ 56 ; ../mblen.c: 37: return(0);
+ 000002 1E 09 [ 2] 57 ldw x, (0x09, sp)
+ 000004 27 54 [ 1] 58 jreq 00119$
+ 59 ; ../mblen.c: 39: if(!n)
+ 60 ; ../mblen.c: 40: return(-1);
+ 000006 1E 0B [ 2] 61 ldw x, (0x0b, sp)
+ 000008 26 03 [ 1] 62 jrne 00104$
+ 00000A 5A [ 2] 63 decw x
+ 00000B 20 4D [ 2] 64 jra 00119$
+ 00000D 65 00104$:
+ 66 ; ../mblen.c: 42: c = *s;
+ 00000D 16 09 [ 2] 67 ldw y, (0x09, sp)
+ 00000F 90 F6 [ 1] 68 ld a, (y)
+ 69 ; ../mblen.c: 44: if(!c)
+ 000011 95 [ 1] 70 ld xh, a
+ 000012 4D [ 1] 71 tnz a
+ 000013 26 03 [ 1] 72 jrne 00106$
+ 73 ; ../mblen.c: 45: return(0);
+ 000015 5F [ 1] 74 clrw x
+ 000016 20 42 [ 2] 75 jra 00119$
+ 000018 76 00106$:
+ 77 ; ../mblen.c: 47: if(c <= 0x7f)
+ 000018 9E [ 1] 78 ld a, xh
+ 000019 A1 7F [ 1] 79 cp a, #0x7f
+ 00001B 22 04 [ 1] 80 jrugt 00126$
+ 81 ; ../mblen.c: 48: return(1);
+ 00001D 5F [ 1] 82 clrw x
+ 00001E 5C [ 1] 83 incw x
+ 00001F 20 39 [ 2] 84 jra 00119$
+ 85 ; ../mblen.c: 50: while(c & 0x80)
+ 000021 86 00126$:
+ 000021 4F [ 1] 87 clr a
+ 000022 88 00109$:
+ 000022 5D [ 2] 89 tnzw x
+ 000023 2A 06 [ 1] 90 jrpl 00111$
+ 91 ; ../mblen.c: 52: c <<= 1;
+ 000025 02 [ 1] 92 rlwa x
+ 000026 48 [ 1] 93 sll a
+ 000027 01 [ 1] 94 rrwa x
+ 95 ; ../mblen.c: 53: m++;
+ 000028 4C [ 1] 96 inc a
+ 000029 20 F7 [ 2] 97 jra 00109$
+ 00002B 98 00111$:
+ 99 ; ../mblen.c: 56: if(m > n)
+ 00002B 6B 02 [ 1] 100 ld (0x02, sp), a
+ 00002D 0F 01 [ 1] 101 clr (0x01, sp)
+ 00002F 1E 01 [ 2] 102 ldw x, (0x01, sp)
+ 000031 13 0B [ 2] 103 cpw x, (0x0b, sp)
+ 000033 23 04 [ 2] 104 jrule 00129$
+ 105 ; ../mblen.c: 57: return(-1);
+ 000035 5F [ 1] 106 clrw x
+ 000036 5A [ 2] 107 decw x
+ 000037 20 21 [ 2] 108 jra 00119$
+ 109 ; ../mblen.c: 60: while(--m)
+ 000039 110 00129$:
+ 000039 6B 05 [ 1] 111 ld (0x05, sp), a
+ 00003B 112 00116$:
+ 00003B 0A 05 [ 1] 113 dec (0x05, sp)
+ 00003D 0D 05 [ 1] 114 tnz (0x05, sp)
+ 00003F 27 17 [ 1] 115 jreq 00118$
+ 116 ; ../mblen.c: 61: if((*++s & 0xc0) != 0x80)
+ 000041 90 5C [ 1] 117 incw y
+ 000043 90 F6 [ 1] 118 ld a, (y)
+ 000045 6B 04 [ 1] 119 ld (0x04, sp), a
+ 000047 0F 03 [ 1] 120 clr (0x03, sp)
+ 000049 7B 04 [ 1] 121 ld a, (0x04, sp)
+ 00004B A4 C0 [ 1] 122 and a, #0xc0
+ 00004D 97 [ 1] 123 ld xl, a
+ 00004E 4F [ 1] 124 clr a
+ 00004F 95 [ 1] 125 ld xh, a
+ 000050 A3 00 80 [ 2] 126 cpw x, #0x0080
+ 000053 27 E6 [ 1] 127 jreq 00116$
+ 128 ; ../mblen.c: 62: return(-1);
+ 000055 5F [ 1] 129 clrw x
+ 000056 5A [ 2] 130 decw x
+ 131 ; ../mblen.c: 64: return(n);
+ 000057 C5 132 .byte 0xc5
+ 000058 133 00118$:
+ 000058 1E 01 [ 2] 134 ldw x, (0x01, sp)
+ 00005A 135 00119$:
+ 136 ; ../mblen.c: 65: }
+ 00005A 5B 05 [ 2] 137 addw sp, #5
+ 00005C 87 [ 5] 138 retf
+ 139 .area CODE
+ 140 .area CONST
+ 141 .area INITIALIZER
+ 142 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mblen.rel b/device/lib/stm8-large/mblen.rel
new file mode 100644
index 0000000..b01e845
--- /dev/null
+++ b/device/lib/stm8-large/mblen.rel
@@ -0,0 +1,63 @@
+XH3
+H B areas 2 global symbols
+M mblen
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 5D flags 0 addr 0
+S _mblen Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 05 1E 09 27 54 1E 0B 26 03 5A 20 4D
+R 00 00 00 09
+T 00 00 0D
+R 00 00 00 09
+T 00 00 0D 16 09 90 F6 95 4D 26 03 5F 20 42
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 9E A1 7F 22 04 5F 5C 20 39
+R 00 00 00 09
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 4F
+R 00 00 00 09
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 5D 2A 06 02 48 01 4C 20 F7
+R 00 00 00 09
+T 00 00 2B
+R 00 00 00 09
+T 00 00 2B 6B 02 0F 01 1E 01 13 0B 23 04 5F 5A 20
+R 00 00 00 09
+T 00 00 38 21
+R 00 00 00 09
+T 00 00 39
+R 00 00 00 09
+T 00 00 39 6B 05
+R 00 00 00 09
+T 00 00 3B
+R 00 00 00 09
+T 00 00 3B 0A 05 0D 05 27 17 90 5C 90 F6 6B 04 0F
+R 00 00 00 09
+T 00 00 48 03 7B 04 A4 C0 97 4F 95 A3 00 80 27 E6
+R 00 00 00 09
+T 00 00 55 5F 5A C5
+R 00 00 00 09
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 1E 01
+R 00 00 00 09
+T 00 00 5A
+R 00 00 00 09
+T 00 00 5A 5B 05 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/mblen.sym b/device/lib/stm8-large/mblen.sym
new file mode 100644
index 0000000..4b3c7cc
--- /dev/null
+++ b/device/lib/stm8-large/mblen.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _mblen 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 5D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbrlen.asm b/device/lib/stm8-large/mbrlen.asm
new file mode 100644
index 0000000..ea95fea
--- /dev/null
+++ b/device/lib/stm8-large/mbrlen.asm
@@ -0,0 +1,76 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbrlen
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbrtowc
+ .globl _mbrlen
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_mbrlen_sps_65536_10:
+ .ds 3
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbrlen.c: 31: size_t mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps)
+; -----------------------------------------
+; function mbrlen
+; -----------------------------------------
+_mbrlen:
+; ../mbrlen.c: 35: return(mbrtowc(0, s, n, ps ? ps : &sps));
+ ldw x, (0x08, sp)
+ jrne 00104$
+ ldw x, #(_mbrlen_sps_65536_10 + 0)
+00104$:
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ clrw x
+ pushw x
+ callf _mbrtowc
+ addw sp, #8
+; ../mbrlen.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrlen.lst b/device/lib/stm8-large/mbrlen.lst
new file mode 100644
index 0000000..95424fc
--- /dev/null
+++ b/device/lib/stm8-large/mbrlen.lst
@@ -0,0 +1,76 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbrlen
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbrtowc
+ 12 .globl _mbrlen
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 000000 17 _mbrlen_sps_65536_10:
+ 000000 18 .ds 3
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../mbrlen.c: 31: size_t mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps)
+ 53 ; -----------------------------------------
+ 54 ; function mbrlen
+ 55 ; -----------------------------------------
+ 000000 56 _mbrlen:
+ 57 ; ../mbrlen.c: 35: return(mbrtowc(0, s, n, ps ? ps : &sps));
+ 000000 1E 08 [ 2] 58 ldw x, (0x08, sp)
+ 000002 26 03 [ 1] 59 jrne 00104$
+ 000004 AEr00r00 [ 2] 60 ldw x, #(_mbrlen_sps_65536_10 + 0)
+ 000007 61 00104$:
+ 000007 89 [ 2] 62 pushw x
+ 000008 1E 08 [ 2] 63 ldw x, (0x08, sp)
+ 00000A 89 [ 2] 64 pushw x
+ 00000B 1E 08 [ 2] 65 ldw x, (0x08, sp)
+ 00000D 89 [ 2] 66 pushw x
+ 00000E 5F [ 1] 67 clrw x
+ 00000F 89 [ 2] 68 pushw x
+ 000010 8Ds00r00r00 [ 5] 69 callf _mbrtowc
+ 000014 5B 08 [ 2] 70 addw sp, #8
+ 71 ; ../mbrlen.c: 36: }
+ 000016 87 [ 5] 72 retf
+ 73 .area CODE
+ 74 .area CONST
+ 75 .area INITIALIZER
+ 76 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrlen.rel b/device/lib/stm8-large/mbrlen.rel
new file mode 100644
index 0000000..99465d7
--- /dev/null
+++ b/device/lib/stm8-large/mbrlen.rel
@@ -0,0 +1,32 @@
+XH3
+H B areas 3 global symbols
+M mbrlen
+O -mstm8
+S _mbrtowc Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 3 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 17 flags 0 addr 0
+S _mbrlen Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 08 26 03 AE 00 00
+R 00 00 00 09 00 08 00 01
+T 00 00 07
+R 00 00 00 09
+T 00 00 07 89 1E 08 89 1E 08 89 5F 89 8D
+R 00 00 00 09
+T 00 00 11 00 00 00 5B 08 87
+R 00 00 00 09 82 03 00 00
diff --git a/device/lib/stm8-large/mbrlen.sym b/device/lib/stm8-large/mbrlen.sym
new file mode 100644
index 0000000..95219f5
--- /dev/null
+++ b/device/lib/stm8-large/mbrlen.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _mbrlen 000000 GR
+ 1 _mbrlen_sps_65536_10 000000 R
+ _mbrtowc ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 3 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 17 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbrtoc16.asm b/device/lib/stm8-large/mbrtoc16.asm
new file mode 100644
index 0000000..ae1bedb
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc16.asm
@@ -0,0 +1,231 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbrtoc16
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbrtowc
+ .globl _mbrtoc16
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_mbrtoc16_sps_65536_16:
+ .ds 3
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbrtoc16.c: 34: size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s, size_t n, mbstate_t *restrict ps)
+; -----------------------------------------
+; function mbrtoc16
+; -----------------------------------------
+_mbrtoc16:
+ sub sp, #14
+; ../mbrtoc16.c: 41: if(!s)
+ ldw x, (0x14, sp)
+ jrne 00102$
+; ../mbrtoc16.c: 42: return(mbrtoc16(0, "", 1, ps));
+ ldw x, (0x18, sp)
+ pushw x
+ push #0x01
+ push #0x00
+ push #<(___str_0 + 0)
+ push #((___str_0 + 0) >> 8)
+ clrw x
+ pushw x
+ callf _mbrtoc16
+ addw sp, #8
+ jpf 00119$
+00102$:
+; ../mbrtoc16.c: 44: if(!ps)
+ ldw x, (0x18, sp)
+ jrne 00104$
+; ../mbrtoc16.c: 45: ps = &sps;
+ ldw x, #(_mbrtoc16_sps_65536_16 + 0)
+ ldw (0x18, sp), x
+00104$:
+; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2]))
+ ldw y, (0x18, sp)
+ ldw (0x07, sp), y
+ ldw x, y
+ ld a, (x)
+; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8);
+ ldw y, (0x12, sp)
+ ldw (0x05, sp), y
+; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2]))
+ ldw x, (0x07, sp)
+ incw x
+ ldw (0x09, sp), x
+ ldw x, (0x07, sp)
+ incw x
+ incw x
+ ldw (0x0b, sp), x
+ tnz a
+ jrne 00108$
+ ldw x, (0x09, sp)
+ ld a, (x)
+ jrne 00107$
+ ldw x, (0x0b, sp)
+ ld a, (x)
+ jreq 00108$
+00107$:
+; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8);
+ ldw y, (0x18, sp)
+ ldw x, y
+ incw x
+ ldw (0x07, sp), x
+ ldw x, y
+ incw x
+ incw x
+ ldw (0x09, sp), x
+; ../mbrtoc16.c: 49: if(pc16)
+ ldw x, (0x12, sp)
+ jreq 00106$
+; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8);
+ ldw x, (0x07, sp)
+ ld a, (x)
+ ld (0x0c, sp), a
+ clr (0x0b, sp)
+ ldw y, (0x09, sp)
+ ld a, (y)
+ ld xh, a
+ clr (0x0e, sp)
+ ld a, (0x0e, sp)
+ ld xl, a
+ addw x, (0x0b, sp)
+ ldw y, (0x05, sp)
+ ldw (y), x
+00106$:
+; ../mbrtoc16.c: 51: ps->c[1] = ps->c[2] = 0;
+ ldw x, (0x09, sp)
+ clr (x)
+ ldw x, (0x07, sp)
+ clr (x)
+; ../mbrtoc16.c: 52: return(-3);
+ ldw x, #0xfffd
+ jra 00119$
+00108$:
+; ../mbrtoc16.c: 55: ret = mbrtowc(&codepoint, s, n, ps);
+ ldw x, sp
+ incw x
+ exgw x, y
+ ldw x, (0x18, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ pushw y
+ callf _mbrtowc
+ addw sp, #8
+; ../mbrtoc16.c: 57: if(ret > MB_LEN_MAX)
+ ldw (0x0d, sp), x
+ cpw x, #0x0004
+ jrule 00112$
+; ../mbrtoc16.c: 58: return(ret);
+ ldw x, (0x0d, sp)
+ jra 00119$
+00112$:
+; ../mbrtoc16.c: 60: if (codepoint <= 0xffff) // Basic multilingual plane
+ ldw x, (0x01, sp)
+ jrne 00116$
+; ../mbrtoc16.c: 62: if(pc16)
+ ldw x, (0x12, sp)
+ jreq 00114$
+; ../mbrtoc16.c: 63: *pc16 = codepoint;
+ ldw y, (0x03, sp)
+ ldw x, (0x05, sp)
+ ldw (x), y
+00114$:
+; ../mbrtoc16.c: 64: return(ret);
+ ldw x, (0x0d, sp)
+ jra 00119$
+00116$:
+; ../mbrtoc16.c: 67: codepoint -= 0x100000;
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ subw x, #0x0010
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../mbrtoc16.c: 68: if(pc16)
+ ldw x, (0x12, sp)
+ jreq 00118$
+; ../mbrtoc16.c: 69: *pc16 = ((codepoint >> 10) & 0x3ff) + 0xd800;
+ ldw x, (0x02, sp)
+ ld a, (0x01, sp)
+ srl a
+ rrcw x
+ srl a
+ rrcw x
+ ld a, xh
+ and a, #0x03
+ ld xh, a
+ addw x, #0xd800
+ ldw y, (0x05, sp)
+ ldw (y), x
+00118$:
+; ../mbrtoc16.c: 70: low_surrogate = (codepoint & 0x3ff) + 0xdc00;
+ ldw x, (0x03, sp)
+ ld a, xh
+ and a, #0x03
+ ld xh, a
+ addw x, #0xdc00
+; ../mbrtoc16.c: 71: ps->c[0] = 0;
+ ldw y, (0x07, sp)
+ clr (y)
+; ../mbrtoc16.c: 72: ps->c[1] = low_surrogate & 0xff;
+ ld a, xl
+ ldw y, (0x09, sp)
+ ld (y), a
+; ../mbrtoc16.c: 73: ps->c[2] = low_surrogate >> 8;
+ ld a, xh
+ ldw x, (0x0b, sp)
+ ld (x), a
+; ../mbrtoc16.c: 75: return(ret);
+ ldw x, (0x0d, sp)
+00119$:
+; ../mbrtoc16.c: 76: }
+ addw sp, #14
+ retf
+ .area CODE
+ .area CONST
+ .area CONST
+___str_0:
+ .db 0x00
+ .area CODE
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrtoc16.lst b/device/lib/stm8-large/mbrtoc16.lst
new file mode 100644
index 0000000..3066700
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc16.lst
@@ -0,0 +1,231 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbrtoc16
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbrtowc
+ 12 .globl _mbrtoc16
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 000000 17 _mbrtoc16_sps_65536_16:
+ 000000 18 .ds 3
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../mbrtoc16.c: 34: size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s, size_t n, mbstate_t *restrict ps)
+ 53 ; -----------------------------------------
+ 54 ; function mbrtoc16
+ 55 ; -----------------------------------------
+ 000000 56 _mbrtoc16:
+ 000000 52 0E [ 2] 57 sub sp, #14
+ 58 ; ../mbrtoc16.c: 41: if(!s)
+ 000002 1E 14 [ 2] 59 ldw x, (0x14, sp)
+ 000004 26 17 [ 1] 60 jrne 00102$
+ 61 ; ../mbrtoc16.c: 42: return(mbrtoc16(0, "", 1, ps));
+ 000006 1E 18 [ 2] 62 ldw x, (0x18, sp)
+ 000008 89 [ 2] 63 pushw x
+ 000009 4B 01 [ 1] 64 push #0x01
+ 00000B 4B 00 [ 1] 65 push #0x00
+ 00000D 4Br00 [ 1] 66 push #<(___str_0 + 0)
+ 00000F 4Bs00 [ 1] 67 push #((___str_0 + 0) >> 8)
+ 000011 5F [ 1] 68 clrw x
+ 000012 89 [ 2] 69 pushw x
+ 000013 8Ds00r00r00 [ 5] 70 callf _mbrtoc16
+ 000017 5B 08 [ 2] 71 addw sp, #8
+ 000019 ACs00r00rE4 [ 2] 72 jpf 00119$
+ 00001D 73 00102$:
+ 74 ; ../mbrtoc16.c: 44: if(!ps)
+ 00001D 1E 18 [ 2] 75 ldw x, (0x18, sp)
+ 00001F 26 05 [ 1] 76 jrne 00104$
+ 77 ; ../mbrtoc16.c: 45: ps = &sps;
+ 000021 AEr00r00 [ 2] 78 ldw x, #(_mbrtoc16_sps_65536_16 + 0)
+ 000024 1F 18 [ 2] 79 ldw (0x18, sp), x
+ 000026 80 00104$:
+ 81 ; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2]))
+ 000026 16 18 [ 2] 82 ldw y, (0x18, sp)
+ 000028 17 07 [ 2] 83 ldw (0x07, sp), y
+ 00002A 93 [ 1] 84 ldw x, y
+ 00002B F6 [ 1] 85 ld a, (x)
+ 86 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8);
+ 00002C 16 12 [ 2] 87 ldw y, (0x12, sp)
+ 00002E 17 05 [ 2] 88 ldw (0x05, sp), y
+ 89 ; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2]))
+ 000030 1E 07 [ 2] 90 ldw x, (0x07, sp)
+ 000032 5C [ 1] 91 incw x
+ 000033 1F 09 [ 2] 92 ldw (0x09, sp), x
+ 000035 1E 07 [ 2] 93 ldw x, (0x07, sp)
+ 000037 5C [ 1] 94 incw x
+ 000038 5C [ 1] 95 incw x
+ 000039 1F 0B [ 2] 96 ldw (0x0b, sp), x
+ 00003B 4D [ 1] 97 tnz a
+ 00003C 26 3C [ 1] 98 jrne 00108$
+ 00003E 1E 09 [ 2] 99 ldw x, (0x09, sp)
+ 000040 F6 [ 1] 100 ld a, (x)
+ 000041 26 05 [ 1] 101 jrne 00107$
+ 000043 1E 0B [ 2] 102 ldw x, (0x0b, sp)
+ 000045 F6 [ 1] 103 ld a, (x)
+ 000046 27 32 [ 1] 104 jreq 00108$
+ 000048 105 00107$:
+ 106 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8);
+ 000048 16 18 [ 2] 107 ldw y, (0x18, sp)
+ 00004A 93 [ 1] 108 ldw x, y
+ 00004B 5C [ 1] 109 incw x
+ 00004C 1F 07 [ 2] 110 ldw (0x07, sp), x
+ 00004E 93 [ 1] 111 ldw x, y
+ 00004F 5C [ 1] 112 incw x
+ 000050 5C [ 1] 113 incw x
+ 000051 1F 09 [ 2] 114 ldw (0x09, sp), x
+ 115 ; ../mbrtoc16.c: 49: if(pc16)
+ 000053 1E 12 [ 2] 116 ldw x, (0x12, sp)
+ 000055 27 18 [ 1] 117 jreq 00106$
+ 118 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8);
+ 000057 1E 07 [ 2] 119 ldw x, (0x07, sp)
+ 000059 F6 [ 1] 120 ld a, (x)
+ 00005A 6B 0C [ 1] 121 ld (0x0c, sp), a
+ 00005C 0F 0B [ 1] 122 clr (0x0b, sp)
+ 00005E 16 09 [ 2] 123 ldw y, (0x09, sp)
+ 000060 90 F6 [ 1] 124 ld a, (y)
+ 000062 95 [ 1] 125 ld xh, a
+ 000063 0F 0E [ 1] 126 clr (0x0e, sp)
+ 000065 7B 0E [ 1] 127 ld a, (0x0e, sp)
+ 000067 97 [ 1] 128 ld xl, a
+ 000068 72 FB 0B [ 2] 129 addw x, (0x0b, sp)
+ 00006B 16 05 [ 2] 130 ldw y, (0x05, sp)
+ 00006D 90 FF [ 2] 131 ldw (y), x
+ 00006F 132 00106$:
+ 133 ; ../mbrtoc16.c: 51: ps->c[1] = ps->c[2] = 0;
+ 00006F 1E 09 [ 2] 134 ldw x, (0x09, sp)
+ 000071 7F [ 1] 135 clr (x)
+ 000072 1E 07 [ 2] 136 ldw x, (0x07, sp)
+ 000074 7F [ 1] 137 clr (x)
+ 138 ; ../mbrtoc16.c: 52: return(-3);
+ 000075 AE FF FD [ 2] 139 ldw x, #0xfffd
+ 000078 20 6A [ 2] 140 jra 00119$
+ 00007A 141 00108$:
+ 142 ; ../mbrtoc16.c: 55: ret = mbrtowc(&codepoint, s, n, ps);
+ 00007A 96 [ 1] 143 ldw x, sp
+ 00007B 5C [ 1] 144 incw x
+ 00007C 51 [ 1] 145 exgw x, y
+ 00007D 1E 18 [ 2] 146 ldw x, (0x18, sp)
+ 00007F 89 [ 2] 147 pushw x
+ 000080 1E 18 [ 2] 148 ldw x, (0x18, sp)
+ 000082 89 [ 2] 149 pushw x
+ 000083 1E 18 [ 2] 150 ldw x, (0x18, sp)
+ 000085 89 [ 2] 151 pushw x
+ 000086 90 89 [ 2] 152 pushw y
+ 000088 8Ds00r00r00 [ 5] 153 callf _mbrtowc
+ 00008C 5B 08 [ 2] 154 addw sp, #8
+ 155 ; ../mbrtoc16.c: 57: if(ret > MB_LEN_MAX)
+ 00008E 1F 0D [ 2] 156 ldw (0x0d, sp), x
+ 000090 A3 00 04 [ 2] 157 cpw x, #0x0004
+ 000093 23 04 [ 2] 158 jrule 00112$
+ 159 ; ../mbrtoc16.c: 58: return(ret);
+ 000095 1E 0D [ 2] 160 ldw x, (0x0d, sp)
+ 000097 20 4B [ 2] 161 jra 00119$
+ 000099 162 00112$:
+ 163 ; ../mbrtoc16.c: 60: if (codepoint <= 0xffff) // Basic multilingual plane
+ 000099 1E 01 [ 2] 164 ldw x, (0x01, sp)
+ 00009B 26 0D [ 1] 165 jrne 00116$
+ 166 ; ../mbrtoc16.c: 62: if(pc16)
+ 00009D 1E 12 [ 2] 167 ldw x, (0x12, sp)
+ 00009F 27 05 [ 1] 168 jreq 00114$
+ 169 ; ../mbrtoc16.c: 63: *pc16 = codepoint;
+ 0000A1 16 03 [ 2] 170 ldw y, (0x03, sp)
+ 0000A3 1E 05 [ 2] 171 ldw x, (0x05, sp)
+ 0000A5 FF [ 2] 172 ldw (x), y
+ 0000A6 173 00114$:
+ 174 ; ../mbrtoc16.c: 64: return(ret);
+ 0000A6 1E 0D [ 2] 175 ldw x, (0x0d, sp)
+ 0000A8 20 3A [ 2] 176 jra 00119$
+ 0000AA 177 00116$:
+ 178 ; ../mbrtoc16.c: 67: codepoint -= 0x100000;
+ 0000AA 16 03 [ 2] 179 ldw y, (0x03, sp)
+ 0000AC 1E 01 [ 2] 180 ldw x, (0x01, sp)
+ 0000AE 1D 00 10 [ 2] 181 subw x, #0x0010
+ 0000B1 17 03 [ 2] 182 ldw (0x03, sp), y
+ 0000B3 1F 01 [ 2] 183 ldw (0x01, sp), x
+ 184 ; ../mbrtoc16.c: 68: if(pc16)
+ 0000B5 1E 12 [ 2] 185 ldw x, (0x12, sp)
+ 0000B7 27 13 [ 1] 186 jreq 00118$
+ 187 ; ../mbrtoc16.c: 69: *pc16 = ((codepoint >> 10) & 0x3ff) + 0xd800;
+ 0000B9 1E 02 [ 2] 188 ldw x, (0x02, sp)
+ 0000BB 7B 01 [ 1] 189 ld a, (0x01, sp)
+ 0000BD 44 [ 1] 190 srl a
+ 0000BE 56 [ 2] 191 rrcw x
+ 0000BF 44 [ 1] 192 srl a
+ 0000C0 56 [ 2] 193 rrcw x
+ 0000C1 9E [ 1] 194 ld a, xh
+ 0000C2 A4 03 [ 1] 195 and a, #0x03
+ 0000C4 95 [ 1] 196 ld xh, a
+ 0000C5 1C D8 00 [ 2] 197 addw x, #0xd800
+ 0000C8 16 05 [ 2] 198 ldw y, (0x05, sp)
+ 0000CA 90 FF [ 2] 199 ldw (y), x
+ 0000CC 200 00118$:
+ 201 ; ../mbrtoc16.c: 70: low_surrogate = (codepoint & 0x3ff) + 0xdc00;
+ 0000CC 1E 03 [ 2] 202 ldw x, (0x03, sp)
+ 0000CE 9E [ 1] 203 ld a, xh
+ 0000CF A4 03 [ 1] 204 and a, #0x03
+ 0000D1 95 [ 1] 205 ld xh, a
+ 0000D2 1C DC 00 [ 2] 206 addw x, #0xdc00
+ 207 ; ../mbrtoc16.c: 71: ps->c[0] = 0;
+ 0000D5 16 07 [ 2] 208 ldw y, (0x07, sp)
+ 0000D7 90 7F [ 1] 209 clr (y)
+ 210 ; ../mbrtoc16.c: 72: ps->c[1] = low_surrogate & 0xff;
+ 0000D9 9F [ 1] 211 ld a, xl
+ 0000DA 16 09 [ 2] 212 ldw y, (0x09, sp)
+ 0000DC 90 F7 [ 1] 213 ld (y), a
+ 214 ; ../mbrtoc16.c: 73: ps->c[2] = low_surrogate >> 8;
+ 0000DE 9E [ 1] 215 ld a, xh
+ 0000DF 1E 0B [ 2] 216 ldw x, (0x0b, sp)
+ 0000E1 F7 [ 1] 217 ld (x), a
+ 218 ; ../mbrtoc16.c: 75: return(ret);
+ 0000E2 1E 0D [ 2] 219 ldw x, (0x0d, sp)
+ 0000E4 220 00119$:
+ 221 ; ../mbrtoc16.c: 76: }
+ 0000E4 5B 0E [ 2] 222 addw sp, #14
+ 0000E6 87 [ 5] 223 retf
+ 224 .area CODE
+ 225 .area CONST
+ 226 .area CONST
+ 000000 227 ___str_0:
+ 000000 00 228 .db 0x00
+ 229 .area CODE
+ 230 .area INITIALIZER
+ 231 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrtoc16.rel b/device/lib/stm8-large/mbrtoc16.rel
new file mode 100644
index 0000000..99f2f87
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc16.rel
@@ -0,0 +1,92 @@
+XH3
+H B areas 3 global symbols
+M mbrtoc16
+O -mstm8
+S _mbrtowc Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 3 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 1 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size E7 flags 0 addr 0
+S _mbrtoc16 Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0E 1E 14 26 17 1E 18 89 4B 01 4B 00
+R 00 00 00 09
+T 00 00 0D 4B 00 00 00 4B 00 00 00 5F 89 8D
+R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07
+T 00 00 14 00 00 00 5B 08 AC 00 00 E4
+R 00 00 00 09 80 03 00 09 80 09 00 09
+T 00 00 1D
+R 00 00 00 09
+T 00 00 1D 1E 18 26 05 AE 00 00 1F 18
+R 00 00 00 09 00 08 00 01
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 16 18 17 07 93 F6 16 12 17 05 1E 07 5C
+R 00 00 00 09
+T 00 00 33 1F 09 1E 07 5C 5C 1F 0B 4D 26 3C 1E 09
+R 00 00 00 09
+T 00 00 40 F6 26 05 1E 0B F6 27 32
+R 00 00 00 09
+T 00 00 48
+R 00 00 00 09
+T 00 00 48 16 18 93 5C 1F 07 93 5C 5C 1F 09 1E 12
+R 00 00 00 09
+T 00 00 55 27 18 1E 07 F6 6B 0C 0F 0B 16 09 90 F6
+R 00 00 00 09
+T 00 00 62 95 0F 0E 7B 0E 97 72 FB 0B 16 05 90 FF
+R 00 00 00 09
+T 00 00 6F
+R 00 00 00 09
+T 00 00 6F 1E 09 7F 1E 07 7F AE FF FD 20 6A
+R 00 00 00 09
+T 00 00 7A
+R 00 00 00 09
+T 00 00 7A 96 5C 51 1E 18 89 1E 18 89 1E 18 89 90
+R 00 00 00 09
+T 00 00 87 89 8D 00 00 00 5B 08 1F 0D A3 00 04 23
+R 00 00 00 09 82 05 00 00
+T 00 00 94 04 1E 0D 20 4B
+R 00 00 00 09
+T 00 00 99
+R 00 00 00 09
+T 00 00 99 1E 01 26 0D 1E 12 27 05 16 03 1E 05 FF
+R 00 00 00 09
+T 00 00 A6
+R 00 00 00 09
+T 00 00 A6 1E 0D 20 3A
+R 00 00 00 09
+T 00 00 AA
+R 00 00 00 09
+T 00 00 AA 16 03 1E 01 1D 00 10 17 03 1F 01 1E 12
+R 00 00 00 09
+T 00 00 B7 27 13 1E 02 7B 01 44 56 44 56 9E A4 03
+R 00 00 00 09
+T 00 00 C4 95 1C D8 00 16 05 90 FF
+R 00 00 00 09
+T 00 00 CC
+R 00 00 00 09
+T 00 00 CC 1E 03 9E A4 03 95 1C DC 00 16 07 90 7F
+R 00 00 00 09
+T 00 00 D9 9F 16 09 90 F7 9E 1E 0B F7 1E 0D
+R 00 00 00 09
+T 00 00 E4
+R 00 00 00 09
+T 00 00 E4 5B 0E 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 00
+R 00 00 00 07
diff --git a/device/lib/stm8-large/mbrtoc16.sym b/device/lib/stm8-large/mbrtoc16.sym
new file mode 100644
index 0000000..7a5911f
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc16.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 7 ___str_0 000000 R
+ 9 _mbrtoc16 000000 GR
+ 1 _mbrtoc16_sps_65536_16 000000 R
+ _mbrtowc ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 3 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 1 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size E7 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbrtoc32.asm b/device/lib/stm8-large/mbrtoc32.asm
new file mode 100644
index 0000000..840e743
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc32.asm
@@ -0,0 +1,114 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbrtoc32
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbrtowc
+ .globl _mbrtoc32
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_mbrtoc32_sps_65536_16:
+ .ds 3
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbrtoc32.c: 34: size_t mbrtoc32(char32_t *restrict pc32, const char *restrict s, size_t n, mbstate_t *restrict ps)
+; -----------------------------------------
+; function mbrtoc32
+; -----------------------------------------
+_mbrtoc32:
+ sub sp, #6
+; ../mbrtoc32.c: 40: if(!ps)
+ ldw x, (0x10, sp)
+ jrne 00102$
+; ../mbrtoc32.c: 41: ps = &sps;
+ ldw x, #(_mbrtoc32_sps_65536_16 + 0)
+ ldw (0x10, sp), x
+00102$:
+; ../mbrtoc32.c: 43: if(!pc32)
+ ldw x, (0x0a, sp)
+ jrne 00104$
+; ../mbrtoc32.c: 44: return(mbrtowc(0, s, n, ps));
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ clrw x
+ pushw x
+ callf _mbrtowc
+ addw sp, #8
+ jra 00107$
+00104$:
+; ../mbrtoc32.c: 46: ret = mbrtowc(&wc, s, n, ps);
+ ldw x, sp
+ incw x
+ exgw x, y
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ pushw y
+ callf _mbrtowc
+ addw sp, #8
+; ../mbrtoc32.c: 48: if(ret <= MB_LEN_MAX)
+ ldw (0x05, sp), x
+ cpw x, #0x0004
+ jrugt 00106$
+; ../mbrtoc32.c: 49: *pc32 = wc;
+ ldw x, (0x0a, sp)
+ ldw y, (0x03, sp)
+ ldw (0x2, x), y
+ ldw y, (0x01, sp)
+ ldw (x), y
+00106$:
+; ../mbrtoc32.c: 51: return(ret);
+ ldw x, (0x05, sp)
+00107$:
+; ../mbrtoc32.c: 52: }
+ addw sp, #6
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrtoc32.lst b/device/lib/stm8-large/mbrtoc32.lst
new file mode 100644
index 0000000..155f468
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc32.lst
@@ -0,0 +1,114 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbrtoc32
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbrtowc
+ 12 .globl _mbrtoc32
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 000000 17 _mbrtoc32_sps_65536_16:
+ 000000 18 .ds 3
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../mbrtoc32.c: 34: size_t mbrtoc32(char32_t *restrict pc32, const char *restrict s, size_t n, mbstate_t *restrict ps)
+ 53 ; -----------------------------------------
+ 54 ; function mbrtoc32
+ 55 ; -----------------------------------------
+ 000000 56 _mbrtoc32:
+ 000000 52 06 [ 2] 57 sub sp, #6
+ 58 ; ../mbrtoc32.c: 40: if(!ps)
+ 000002 1E 10 [ 2] 59 ldw x, (0x10, sp)
+ 000004 26 05 [ 1] 60 jrne 00102$
+ 61 ; ../mbrtoc32.c: 41: ps = &sps;
+ 000006 AEr00r00 [ 2] 62 ldw x, #(_mbrtoc32_sps_65536_16 + 0)
+ 000009 1F 10 [ 2] 63 ldw (0x10, sp), x
+ 00000B 64 00102$:
+ 65 ; ../mbrtoc32.c: 43: if(!pc32)
+ 00000B 1E 0A [ 2] 66 ldw x, (0x0a, sp)
+ 00000D 26 13 [ 1] 67 jrne 00104$
+ 68 ; ../mbrtoc32.c: 44: return(mbrtowc(0, s, n, ps));
+ 00000F 1E 10 [ 2] 69 ldw x, (0x10, sp)
+ 000011 89 [ 2] 70 pushw x
+ 000012 1E 10 [ 2] 71 ldw x, (0x10, sp)
+ 000014 89 [ 2] 72 pushw x
+ 000015 1E 10 [ 2] 73 ldw x, (0x10, sp)
+ 000017 89 [ 2] 74 pushw x
+ 000018 5F [ 1] 75 clrw x
+ 000019 89 [ 2] 76 pushw x
+ 00001A 8Ds00r00r00 [ 5] 77 callf _mbrtowc
+ 00001E 5B 08 [ 2] 78 addw sp, #8
+ 000020 20 26 [ 2] 79 jra 00107$
+ 000022 80 00104$:
+ 81 ; ../mbrtoc32.c: 46: ret = mbrtowc(&wc, s, n, ps);
+ 000022 96 [ 1] 82 ldw x, sp
+ 000023 5C [ 1] 83 incw x
+ 000024 51 [ 1] 84 exgw x, y
+ 000025 1E 10 [ 2] 85 ldw x, (0x10, sp)
+ 000027 89 [ 2] 86 pushw x
+ 000028 1E 10 [ 2] 87 ldw x, (0x10, sp)
+ 00002A 89 [ 2] 88 pushw x
+ 00002B 1E 10 [ 2] 89 ldw x, (0x10, sp)
+ 00002D 89 [ 2] 90 pushw x
+ 00002E 90 89 [ 2] 91 pushw y
+ 000030 8Ds00r00r00 [ 5] 92 callf _mbrtowc
+ 000034 5B 08 [ 2] 93 addw sp, #8
+ 94 ; ../mbrtoc32.c: 48: if(ret <= MB_LEN_MAX)
+ 000036 1F 05 [ 2] 95 ldw (0x05, sp), x
+ 000038 A3 00 04 [ 2] 96 cpw x, #0x0004
+ 00003B 22 09 [ 1] 97 jrugt 00106$
+ 98 ; ../mbrtoc32.c: 49: *pc32 = wc;
+ 00003D 1E 0A [ 2] 99 ldw x, (0x0a, sp)
+ 00003F 16 03 [ 2] 100 ldw y, (0x03, sp)
+ 000041 EF 02 [ 2] 101 ldw (0x2, x), y
+ 000043 16 01 [ 2] 102 ldw y, (0x01, sp)
+ 000045 FF [ 2] 103 ldw (x), y
+ 000046 104 00106$:
+ 105 ; ../mbrtoc32.c: 51: return(ret);
+ 000046 1E 05 [ 2] 106 ldw x, (0x05, sp)
+ 000048 107 00107$:
+ 108 ; ../mbrtoc32.c: 52: }
+ 000048 5B 06 [ 2] 109 addw sp, #6
+ 00004A 87 [ 5] 110 retf
+ 111 .area CODE
+ 112 .area CONST
+ 113 .area INITIALIZER
+ 114 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrtoc32.rel b/device/lib/stm8-large/mbrtoc32.rel
new file mode 100644
index 0000000..5a5caf7
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc32.rel
@@ -0,0 +1,48 @@
+XH3
+H B areas 3 global symbols
+M mbrtoc32
+O -mstm8
+S _mbrtowc Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 3 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 4B flags 0 addr 0
+S _mbrtoc32 Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 1E 10 26 05 AE 00 00 1F 10
+R 00 00 00 09 00 0A 00 01
+T 00 00 0B
+R 00 00 00 09
+T 00 00 0B 1E 0A 26 13 1E 10 89 1E 10 89 1E 10 89
+R 00 00 00 09
+T 00 00 18 5F 89 8D 00 00 00 5B 08 20 26
+R 00 00 00 09 82 06 00 00
+T 00 00 22
+R 00 00 00 09
+T 00 00 22 96 5C 51 1E 10 89 1E 10 89 1E 10 89 90
+R 00 00 00 09
+T 00 00 2F 89 8D 00 00 00 5B 08 1F 05 A3 00 04 22
+R 00 00 00 09 82 05 00 00
+T 00 00 3C 09 1E 0A 16 03 EF 02 16 01 FF
+R 00 00 00 09
+T 00 00 46
+R 00 00 00 09
+T 00 00 46 1E 05
+R 00 00 00 09
+T 00 00 48
+R 00 00 00 09
+T 00 00 48 5B 06 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/mbrtoc32.sym b/device/lib/stm8-large/mbrtoc32.sym
new file mode 100644
index 0000000..cd72451
--- /dev/null
+++ b/device/lib/stm8-large/mbrtoc32.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _mbrtoc32 000000 GR
+ 1 _mbrtoc32_sps_65536_16 000000 R
+ _mbrtowc ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 3 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 4B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbrtowc.asm b/device/lib/stm8-large/mbrtowc.asm
new file mode 100644
index 0000000..e1282a9
--- /dev/null
+++ b/device/lib/stm8-large/mbrtowc.asm
@@ -0,0 +1,407 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbrtowc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbrtowc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_mbrtowc_sps_65536_10:
+ .ds 3
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbrtowc.c: 32: size_t mbrtowc(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)
+; -----------------------------------------
+; function mbrtowc
+; -----------------------------------------
+_mbrtowc:
+ sub sp, #17
+; ../mbrtowc.c: 41: if(!s)
+ ldw x, (0x17, sp)
+ jrne 00102$
+; ../mbrtowc.c: 42: return(mbrtowc(0, "", 1, ps));
+ ldw x, (0x1b, sp)
+ pushw x
+ push #0x01
+ push #0x00
+ push #<(___str_0 + 0)
+ push #((___str_0 + 0) >> 8)
+ clrw x
+ pushw x
+ callf _mbrtowc
+ addw sp, #8
+ jpf 00145$
+00102$:
+; ../mbrtowc.c: 43: if(!n)
+ ldw x, (0x19, sp)
+ jrne 00280$
+ jpf 00128$
+00280$:
+; ../mbrtowc.c: 45: if(!ps)
+ ldw x, (0x1b, sp)
+ jrne 00106$
+; ../mbrtowc.c: 47: ps = &sps;
+ ldw x, #(_mbrtowc_sps_65536_10 + 0)
+ ldw (0x1b, sp), x
+00106$:
+; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++)
+ ldw x, sp
+ addw x, #3
+ ldw (0x07, sp), x
+ ldw y, (0x1b, sp)
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), y
+ clr (0x11, sp)
+00131$:
+ clrw x
+ ld a, (0x11, sp)
+ ld xl, a
+ addw x, (0x0d, sp)
+ ld a, (x)
+ jreq 00174$
+ push a
+ ld a, (0x12, sp)
+ cp a, #0x03
+ pop a
+ jrnc 00174$
+; ../mbrtowc.c: 51: mbseq[i] = ps->c[i];
+ clrw x
+ exg a, xl
+ ld a, (0x11, sp)
+ exg a, xl
+ addw x, (0x07, sp)
+ ld (x), a
+; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++)
+ inc (0x11, sp)
+ jra 00131$
+00174$:
+ ld a, (0x11, sp)
+ ld (0x09, sp), a
+; ../mbrtowc.c: 53: seqlen = 1;
+ ld a, #0x01
+ ld (0x0a, sp), a
+; ../mbrtowc.c: 54: first_byte = ps->c[0] ? ps->c[0] : *s;
+ ldw x, (0x1b, sp)
+ ld a, (x)
+ ldw y, (0x17, sp)
+ ldw (0x0b, sp), y
+ tnz a
+ jrne 00148$
+ ldw x, (0x0b, sp)
+ ld a, (x)
+00148$:
+; ../mbrtowc.c: 56: if(first_byte & 0x80)
+ ld (0x11, sp), a
+ jrpl 00112$
+; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen))
+ ld a, #0x01
+ ld (0x0d, sp), a
+00108$:
+ ldw x, #0x0080
+ ld a, (0x0d, sp)
+ jreq 00287$
+00286$:
+ sraw x
+ dec a
+ jrne 00286$
+00287$:
+ ld a, (0x11, sp)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+; ../mbrtowc.c: 59: seqlen++;
+ ld a, (0x0d, sp)
+ inc a
+ ld (0x0e, sp), a
+; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen))
+ ld a, xl
+ and a, (0x02, sp)
+ rlwa x
+ and a, (0x01, sp)
+ ld xh, a
+ tnzw x
+ jreq 00175$
+; ../mbrtowc.c: 59: seqlen++;
+ ld a, (0x0e, sp)
+ ld (0x0d, sp), a
+ jra 00108$
+00175$:
+ ld a, (0x0d, sp)
+ ld (0x0a, sp), a
+; ../mbrtowc.c: 60: first_byte &= (0xff >> (seqlen + 1));
+ ldw x, #0x00ff
+ ld a, (0x0e, sp)
+ jreq 00290$
+00289$:
+ sraw x
+ dec a
+ jrne 00289$
+00290$:
+ ld a, xl
+ and a, (0x11, sp)
+ ld (0x11, sp), a
+00112$:
+; ../mbrtowc.c: 63: if(seqlen > 4)
+ ld a, (0x0a, sp)
+ cp a, #0x04
+ jrule 00291$
+ jpf 00128$
+00291$:
+; ../mbrtowc.c: 66: if(i + n < seqlen) // Incomplete multibyte character
+ ld a, (0x09, sp)
+ ld (0x0e, sp), a
+ clr (0x0d, sp)
+ ldw x, (0x0d, sp)
+ addw x, (0x19, sp)
+ ld a, (0x0a, sp)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+ cpw x, (0x01, sp)
+ jrnc 00164$
+; ../mbrtowc.c: 70: return(-2);
+ ldw y, (0x0f, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x10, sp), y
+ ld a, (0x09, sp)
+ ld (0x0f, sp), a
+ ldw y, (0x19, sp)
+ ldw (0x0d, sp), y
+00134$:
+; ../mbrtowc.c: 68: for(;n-- ; i++)
+ ldw x, (0x0d, sp)
+ ldw y, (0x0d, sp)
+ decw y
+ ldw (0x0d, sp), y
+ tnzw x
+ jreq 00115$
+; ../mbrtowc.c: 69: ps->c[i] = *s++;
+ clrw x
+ ld a, (0x0f, sp)
+ ld xl, a
+ addw x, (0x07, sp)
+ ldw y, (0x10, sp)
+ ld a, (y)
+ ldw y, (0x10, sp)
+ incw y
+ ldw (0x10, sp), y
+ ld (x), a
+; ../mbrtowc.c: 68: for(;n-- ; i++)
+ inc (0x0f, sp)
+ jra 00134$
+00115$:
+; ../mbrtowc.c: 70: return(-2);
+ ldw x, #0xfffe
+ jpf 00145$
+; ../mbrtowc.c: 73: for(j = 0; j < i; j++)
+00164$:
+ clr a
+00137$:
+ cp a, (0x09, sp)
+ jrnc 00118$
+; ../mbrtowc.c: 74: ps->c[j] = 0;
+ clrw x
+ ld xl, a
+ addw x, (0x0f, sp)
+ clr (x)
+; ../mbrtowc.c: 73: for(j = 0; j < i; j++)
+ inc a
+ jra 00137$
+00118$:
+; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++)
+ ldw x, #0x0001
+ ldw (0x19, sp), x
+ tnz (0x09, sp)
+ jreq 00149$
+ ldw x, (0x0d, sp)
+ .byte 0xc5
+00149$:
+ clrw x
+ incw x
+00150$:
+ exg a, xl
+ ld (0x10, sp), a
+ exg a, xl
+ ldw y, (0x07, sp)
+ ldw (0x01, sp), y
+ ldw y, (0x0b, sp)
+ ldw x, #0x0001
+ ldw (0x0e, sp), x
+00140$:
+ ld a, (0x10, sp)
+ cp a, (0x0a, sp)
+ jrnc 00121$
+; ../mbrtowc.c: 78: mbseq[i] = *s++;
+ clrw x
+ ld a, (0x10, sp)
+ ld xl, a
+ addw x, (0x01, sp)
+ ld a, (y)
+ incw y
+ ld (x), a
+; ../mbrtowc.c: 79: if((mbseq[i] & 0xc0) != 0x80)
+ ld (0x0d, sp), a
+ clr (0x0c, sp)
+ ld a, (0x0d, sp)
+ and a, #0xc0
+ ld xl, a
+ clr a
+ ld xh, a
+ cpw x, #0x0080
+ jreq 00299$
+ jpf 00128$
+00299$:
+; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++)
+ inc (0x10, sp)
+ ldw x, (0x0e, sp)
+ incw x
+ ldw (0x0e, sp), x
+ ldw (0x19, sp), x
+ jra 00140$
+00121$:
+; ../mbrtowc.c: 83: codepoint = first_byte;
+ clrw x
+ ld a, (0x11, sp)
+ ld xl, a
+ clrw y
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--)
+ ldw x, (0x07, sp)
+ incw x
+ ld a, (0x0a, sp)
+ dec a
+ ld (0x11, sp), a
+ ldw (0x0b, sp), x
+00143$:
+ tnz (0x11, sp)
+ jreq 00122$
+; ../mbrtowc.c: 87: codepoint <<= 6;
+ ld a, #0x06
+00302$:
+ sll (0x10, sp)
+ rlc (0x0f, sp)
+ rlc (0x0e, sp)
+ rlc (0x0d, sp)
+ dec a
+ jrne 00302$
+; ../mbrtowc.c: 88: codepoint |= (*s & 0x3f);
+ ldw x, (0x0b, sp)
+ ld a, (x)
+ and a, #0x3f
+ ld xl, a
+ clr a
+ ld xh, a
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld yl, a
+ or a, (0x0d, sp)
+ ld yh, a
+ ld a, xl
+ or a, (0x10, sp)
+ rlwa x
+ or a, (0x0f, sp)
+ ld xh, a
+ ld a, yl
+ or a, (0x0e, sp)
+ ld yl, a
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+; ../mbrtowc.c: 89: s++;
+ ldw x, (0x0b, sp)
+ incw x
+ ldw (0x0b, sp), x
+; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--)
+ dec (0x11, sp)
+ jra 00143$
+00122$:
+; ../mbrtowc.c: 92: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate.
+ ldw x, (0x0f, sp)
+ cpw x, #0xd800
+ ld a, (0x0e, sp)
+ sbc a, #0x00
+ ld a, (0x0d, sp)
+ sbc a, #0x00
+ jrc 00124$
+ ldw x, #0xdfff
+ cpw x, (0x0f, sp)
+ clr a
+ sbc a, (0x0e, sp)
+ clr a
+ sbc a, (0x0d, sp)
+ jrc 00124$
+; ../mbrtowc.c: 93: return(-1);
+ clrw x
+ decw x
+ jra 00145$
+00124$:
+; ../mbrtowc.c: 95: if(pwc)
+; ../mbrtowc.c: 96: *pwc = codepoint;
+ ldw x, (0x15, sp)
+ jreq 00127$
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+00127$:
+; ../mbrtowc.c: 97: return(n);
+ ldw x, (0x19, sp)
+ jra 00145$
+; ../mbrtowc.c: 99: eilseq:
+00128$:
+; ../mbrtowc.c: 100: errno = EILSEQ;
+ ldw x, #0x0054
+ ldw _errno+0, x
+; ../mbrtowc.c: 101: return(-1);
+ clrw x
+ decw x
+00145$:
+; ../mbrtowc.c: 102: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area CONST
+___str_0:
+ .db 0x00
+ .area CODE
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrtowc.lst b/device/lib/stm8-large/mbrtowc.lst
new file mode 100644
index 0000000..444bfd5
--- /dev/null
+++ b/device/lib/stm8-large/mbrtowc.lst
@@ -0,0 +1,407 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbrtowc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbrtowc
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 000000 16 _mbrtowc_sps_65536_10:
+ 000000 17 .ds 3
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../mbrtowc.c: 32: size_t mbrtowc(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)
+ 52 ; -----------------------------------------
+ 53 ; function mbrtowc
+ 54 ; -----------------------------------------
+ 000000 55 _mbrtowc:
+ 000000 52 11 [ 2] 56 sub sp, #17
+ 57 ; ../mbrtowc.c: 41: if(!s)
+ 000002 1E 17 [ 2] 58 ldw x, (0x17, sp)
+ 000004 26 17 [ 1] 59 jrne 00102$
+ 60 ; ../mbrtowc.c: 42: return(mbrtowc(0, "", 1, ps));
+ 000006 1E 1B [ 2] 61 ldw x, (0x1b, sp)
+ 000008 89 [ 2] 62 pushw x
+ 000009 4B 01 [ 1] 63 push #0x01
+ 00000B 4B 00 [ 1] 64 push #0x00
+ 00000D 4Br00 [ 1] 65 push #<(___str_0 + 0)
+ 00000F 4Bs00 [ 1] 66 push #((___str_0 + 0) >> 8)
+ 000011 5F [ 1] 67 clrw x
+ 000012 89 [ 2] 68 pushw x
+ 000013 8Ds00r00r00 [ 5] 69 callf _mbrtowc
+ 000017 5B 08 [ 2] 70 addw sp, #8
+ 000019 ACs00r01rED [ 2] 71 jpf 00145$
+ 00001D 72 00102$:
+ 73 ; ../mbrtowc.c: 43: if(!n)
+ 00001D 1E 19 [ 2] 74 ldw x, (0x19, sp)
+ 00001F 26 04 [ 1] 75 jrne 00280$
+ 000021 ACs00r01rE5 [ 2] 76 jpf 00128$
+ 000025 77 00280$:
+ 78 ; ../mbrtowc.c: 45: if(!ps)
+ 000025 1E 1B [ 2] 79 ldw x, (0x1b, sp)
+ 000027 26 05 [ 1] 80 jrne 00106$
+ 81 ; ../mbrtowc.c: 47: ps = &sps;
+ 000029 AEr00r00 [ 2] 82 ldw x, #(_mbrtowc_sps_65536_10 + 0)
+ 00002C 1F 1B [ 2] 83 ldw (0x1b, sp), x
+ 00002E 84 00106$:
+ 85 ; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++)
+ 00002E 96 [ 1] 86 ldw x, sp
+ 00002F 1C 00 03 [ 2] 87 addw x, #3
+ 000032 1F 07 [ 2] 88 ldw (0x07, sp), x
+ 000034 16 1B [ 2] 89 ldw y, (0x1b, sp)
+ 000036 17 0F [ 2] 90 ldw (0x0f, sp), y
+ 000038 17 0D [ 2] 91 ldw (0x0d, sp), y
+ 00003A 0F 11 [ 1] 92 clr (0x11, sp)
+ 00003C 93 00131$:
+ 00003C 5F [ 1] 94 clrw x
+ 00003D 7B 11 [ 1] 95 ld a, (0x11, sp)
+ 00003F 97 [ 1] 96 ld xl, a
+ 000040 72 FB 0D [ 2] 97 addw x, (0x0d, sp)
+ 000043 F6 [ 1] 98 ld a, (x)
+ 000044 27 15 [ 1] 99 jreq 00174$
+ 000046 88 [ 1] 100 push a
+ 000047 7B 12 [ 1] 101 ld a, (0x12, sp)
+ 000049 A1 03 [ 1] 102 cp a, #0x03
+ 00004B 84 [ 1] 103 pop a
+ 00004C 24 0D [ 1] 104 jrnc 00174$
+ 105 ; ../mbrtowc.c: 51: mbseq[i] = ps->c[i];
+ 00004E 5F [ 1] 106 clrw x
+ 00004F 41 [ 1] 107 exg a, xl
+ 000050 7B 11 [ 1] 108 ld a, (0x11, sp)
+ 000052 41 [ 1] 109 exg a, xl
+ 000053 72 FB 07 [ 2] 110 addw x, (0x07, sp)
+ 000056 F7 [ 1] 111 ld (x), a
+ 112 ; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++)
+ 000057 0C 11 [ 1] 113 inc (0x11, sp)
+ 000059 20 E1 [ 2] 114 jra 00131$
+ 00005B 115 00174$:
+ 00005B 7B 11 [ 1] 116 ld a, (0x11, sp)
+ 00005D 6B 09 [ 1] 117 ld (0x09, sp), a
+ 118 ; ../mbrtowc.c: 53: seqlen = 1;
+ 00005F A6 01 [ 1] 119 ld a, #0x01
+ 000061 6B 0A [ 1] 120 ld (0x0a, sp), a
+ 121 ; ../mbrtowc.c: 54: first_byte = ps->c[0] ? ps->c[0] : *s;
+ 000063 1E 1B [ 2] 122 ldw x, (0x1b, sp)
+ 000065 F6 [ 1] 123 ld a, (x)
+ 000066 16 17 [ 2] 124 ldw y, (0x17, sp)
+ 000068 17 0B [ 2] 125 ldw (0x0b, sp), y
+ 00006A 4D [ 1] 126 tnz a
+ 00006B 26 03 [ 1] 127 jrne 00148$
+ 00006D 1E 0B [ 2] 128 ldw x, (0x0b, sp)
+ 00006F F6 [ 1] 129 ld a, (x)
+ 000070 130 00148$:
+ 131 ; ../mbrtowc.c: 56: if(first_byte & 0x80)
+ 000070 6B 11 [ 1] 132 ld (0x11, sp), a
+ 000072 2A 3E [ 1] 133 jrpl 00112$
+ 134 ; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen))
+ 000074 A6 01 [ 1] 135 ld a, #0x01
+ 000076 6B 0D [ 1] 136 ld (0x0d, sp), a
+ 000078 137 00108$:
+ 000078 AE 00 80 [ 2] 138 ldw x, #0x0080
+ 00007B 7B 0D [ 1] 139 ld a, (0x0d, sp)
+ 00007D 27 04 [ 1] 140 jreq 00287$
+ 00007F 141 00286$:
+ 00007F 57 [ 2] 142 sraw x
+ 000080 4A [ 1] 143 dec a
+ 000081 26 FC [ 1] 144 jrne 00286$
+ 000083 145 00287$:
+ 000083 7B 11 [ 1] 146 ld a, (0x11, sp)
+ 000085 6B 02 [ 1] 147 ld (0x02, sp), a
+ 000087 0F 01 [ 1] 148 clr (0x01, sp)
+ 149 ; ../mbrtowc.c: 59: seqlen++;
+ 000089 7B 0D [ 1] 150 ld a, (0x0d, sp)
+ 00008B 4C [ 1] 151 inc a
+ 00008C 6B 0E [ 1] 152 ld (0x0e, sp), a
+ 153 ; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen))
+ 00008E 9F [ 1] 154 ld a, xl
+ 00008F 14 02 [ 1] 155 and a, (0x02, sp)
+ 000091 02 [ 1] 156 rlwa x
+ 000092 14 01 [ 1] 157 and a, (0x01, sp)
+ 000094 95 [ 1] 158 ld xh, a
+ 000095 5D [ 2] 159 tnzw x
+ 000096 27 06 [ 1] 160 jreq 00175$
+ 161 ; ../mbrtowc.c: 59: seqlen++;
+ 000098 7B 0E [ 1] 162 ld a, (0x0e, sp)
+ 00009A 6B 0D [ 1] 163 ld (0x0d, sp), a
+ 00009C 20 DA [ 2] 164 jra 00108$
+ 00009E 165 00175$:
+ 00009E 7B 0D [ 1] 166 ld a, (0x0d, sp)
+ 0000A0 6B 0A [ 1] 167 ld (0x0a, sp), a
+ 168 ; ../mbrtowc.c: 60: first_byte &= (0xff >> (seqlen + 1));
+ 0000A2 AE 00 FF [ 2] 169 ldw x, #0x00ff
+ 0000A5 7B 0E [ 1] 170 ld a, (0x0e, sp)
+ 0000A7 27 04 [ 1] 171 jreq 00290$
+ 0000A9 172 00289$:
+ 0000A9 57 [ 2] 173 sraw x
+ 0000AA 4A [ 1] 174 dec a
+ 0000AB 26 FC [ 1] 175 jrne 00289$
+ 0000AD 176 00290$:
+ 0000AD 9F [ 1] 177 ld a, xl
+ 0000AE 14 11 [ 1] 178 and a, (0x11, sp)
+ 0000B0 6B 11 [ 1] 179 ld (0x11, sp), a
+ 0000B2 180 00112$:
+ 181 ; ../mbrtowc.c: 63: if(seqlen > 4)
+ 0000B2 7B 0A [ 1] 182 ld a, (0x0a, sp)
+ 0000B4 A1 04 [ 1] 183 cp a, #0x04
+ 0000B6 23 04 [ 2] 184 jrule 00291$
+ 0000B8 ACs00r01rE5 [ 2] 185 jpf 00128$
+ 0000BC 186 00291$:
+ 187 ; ../mbrtowc.c: 66: if(i + n < seqlen) // Incomplete multibyte character
+ 0000BC 7B 09 [ 1] 188 ld a, (0x09, sp)
+ 0000BE 6B 0E [ 1] 189 ld (0x0e, sp), a
+ 0000C0 0F 0D [ 1] 190 clr (0x0d, sp)
+ 0000C2 1E 0D [ 2] 191 ldw x, (0x0d, sp)
+ 0000C4 72 FB 19 [ 2] 192 addw x, (0x19, sp)
+ 0000C7 7B 0A [ 1] 193 ld a, (0x0a, sp)
+ 0000C9 6B 02 [ 1] 194 ld (0x02, sp), a
+ 0000CB 0F 01 [ 1] 195 clr (0x01, sp)
+ 0000CD 13 01 [ 2] 196 cpw x, (0x01, sp)
+ 0000CF 24 38 [ 1] 197 jrnc 00164$
+ 198 ; ../mbrtowc.c: 70: return(-2);
+ 0000D1 16 0F [ 2] 199 ldw y, (0x0f, sp)
+ 0000D3 17 07 [ 2] 200 ldw (0x07, sp), y
+ 0000D5 16 0B [ 2] 201 ldw y, (0x0b, sp)
+ 0000D7 17 10 [ 2] 202 ldw (0x10, sp), y
+ 0000D9 7B 09 [ 1] 203 ld a, (0x09, sp)
+ 0000DB 6B 0F [ 1] 204 ld (0x0f, sp), a
+ 0000DD 16 19 [ 2] 205 ldw y, (0x19, sp)
+ 0000DF 17 0D [ 2] 206 ldw (0x0d, sp), y
+ 0000E1 207 00134$:
+ 208 ; ../mbrtowc.c: 68: for(;n-- ; i++)
+ 0000E1 1E 0D [ 2] 209 ldw x, (0x0d, sp)
+ 0000E3 16 0D [ 2] 210 ldw y, (0x0d, sp)
+ 0000E5 90 5A [ 2] 211 decw y
+ 0000E7 17 0D [ 2] 212 ldw (0x0d, sp), y
+ 0000E9 5D [ 2] 213 tnzw x
+ 0000EA 27 16 [ 1] 214 jreq 00115$
+ 215 ; ../mbrtowc.c: 69: ps->c[i] = *s++;
+ 0000EC 5F [ 1] 216 clrw x
+ 0000ED 7B 0F [ 1] 217 ld a, (0x0f, sp)
+ 0000EF 97 [ 1] 218 ld xl, a
+ 0000F0 72 FB 07 [ 2] 219 addw x, (0x07, sp)
+ 0000F3 16 10 [ 2] 220 ldw y, (0x10, sp)
+ 0000F5 90 F6 [ 1] 221 ld a, (y)
+ 0000F7 16 10 [ 2] 222 ldw y, (0x10, sp)
+ 0000F9 90 5C [ 1] 223 incw y
+ 0000FB 17 10 [ 2] 224 ldw (0x10, sp), y
+ 0000FD F7 [ 1] 225 ld (x), a
+ 226 ; ../mbrtowc.c: 68: for(;n-- ; i++)
+ 0000FE 0C 0F [ 1] 227 inc (0x0f, sp)
+ 000100 20 DF [ 2] 228 jra 00134$
+ 000102 229 00115$:
+ 230 ; ../mbrtowc.c: 70: return(-2);
+ 000102 AE FF FE [ 2] 231 ldw x, #0xfffe
+ 000105 ACs00r01rED [ 2] 232 jpf 00145$
+ 233 ; ../mbrtowc.c: 73: for(j = 0; j < i; j++)
+ 000109 234 00164$:
+ 000109 4F [ 1] 235 clr a
+ 00010A 236 00137$:
+ 00010A 11 09 [ 1] 237 cp a, (0x09, sp)
+ 00010C 24 09 [ 1] 238 jrnc 00118$
+ 239 ; ../mbrtowc.c: 74: ps->c[j] = 0;
+ 00010E 5F [ 1] 240 clrw x
+ 00010F 97 [ 1] 241 ld xl, a
+ 000110 72 FB 0F [ 2] 242 addw x, (0x0f, sp)
+ 000113 7F [ 1] 243 clr (x)
+ 244 ; ../mbrtowc.c: 73: for(j = 0; j < i; j++)
+ 000114 4C [ 1] 245 inc a
+ 000115 20 F3 [ 2] 246 jra 00137$
+ 000117 247 00118$:
+ 248 ; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++)
+ 000117 AE 00 01 [ 2] 249 ldw x, #0x0001
+ 00011A 1F 19 [ 2] 250 ldw (0x19, sp), x
+ 00011C 0D 09 [ 1] 251 tnz (0x09, sp)
+ 00011E 27 03 [ 1] 252 jreq 00149$
+ 000120 1E 0D [ 2] 253 ldw x, (0x0d, sp)
+ 000122 C5 254 .byte 0xc5
+ 000123 255 00149$:
+ 000123 5F [ 1] 256 clrw x
+ 000124 5C [ 1] 257 incw x
+ 000125 258 00150$:
+ 000125 41 [ 1] 259 exg a, xl
+ 000126 6B 10 [ 1] 260 ld (0x10, sp), a
+ 000128 41 [ 1] 261 exg a, xl
+ 000129 16 07 [ 2] 262 ldw y, (0x07, sp)
+ 00012B 17 01 [ 2] 263 ldw (0x01, sp), y
+ 00012D 16 0B [ 2] 264 ldw y, (0x0b, sp)
+ 00012F AE 00 01 [ 2] 265 ldw x, #0x0001
+ 000132 1F 0E [ 2] 266 ldw (0x0e, sp), x
+ 000134 267 00140$:
+ 000134 7B 10 [ 1] 268 ld a, (0x10, sp)
+ 000136 11 0A [ 1] 269 cp a, (0x0a, sp)
+ 000138 24 2B [ 1] 270 jrnc 00121$
+ 271 ; ../mbrtowc.c: 78: mbseq[i] = *s++;
+ 00013A 5F [ 1] 272 clrw x
+ 00013B 7B 10 [ 1] 273 ld a, (0x10, sp)
+ 00013D 97 [ 1] 274 ld xl, a
+ 00013E 72 FB 01 [ 2] 275 addw x, (0x01, sp)
+ 000141 90 F6 [ 1] 276 ld a, (y)
+ 000143 90 5C [ 1] 277 incw y
+ 000145 F7 [ 1] 278 ld (x), a
+ 279 ; ../mbrtowc.c: 79: if((mbseq[i] & 0xc0) != 0x80)
+ 000146 6B 0D [ 1] 280 ld (0x0d, sp), a
+ 000148 0F 0C [ 1] 281 clr (0x0c, sp)
+ 00014A 7B 0D [ 1] 282 ld a, (0x0d, sp)
+ 00014C A4 C0 [ 1] 283 and a, #0xc0
+ 00014E 97 [ 1] 284 ld xl, a
+ 00014F 4F [ 1] 285 clr a
+ 000150 95 [ 1] 286 ld xh, a
+ 000151 A3 00 80 [ 2] 287 cpw x, #0x0080
+ 000154 27 04 [ 1] 288 jreq 00299$
+ 000156 ACs00r01rE5 [ 2] 289 jpf 00128$
+ 00015A 290 00299$:
+ 291 ; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++)
+ 00015A 0C 10 [ 1] 292 inc (0x10, sp)
+ 00015C 1E 0E [ 2] 293 ldw x, (0x0e, sp)
+ 00015E 5C [ 1] 294 incw x
+ 00015F 1F 0E [ 2] 295 ldw (0x0e, sp), x
+ 000161 1F 19 [ 2] 296 ldw (0x19, sp), x
+ 000163 20 CF [ 2] 297 jra 00140$
+ 000165 298 00121$:
+ 299 ; ../mbrtowc.c: 83: codepoint = first_byte;
+ 000165 5F [ 1] 300 clrw x
+ 000166 7B 11 [ 1] 301 ld a, (0x11, sp)
+ 000168 97 [ 1] 302 ld xl, a
+ 000169 90 5F [ 1] 303 clrw y
+ 00016B 1F 0F [ 2] 304 ldw (0x0f, sp), x
+ 00016D 17 0D [ 2] 305 ldw (0x0d, sp), y
+ 306 ; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--)
+ 00016F 1E 07 [ 2] 307 ldw x, (0x07, sp)
+ 000171 5C [ 1] 308 incw x
+ 000172 7B 0A [ 1] 309 ld a, (0x0a, sp)
+ 000174 4A [ 1] 310 dec a
+ 000175 6B 11 [ 1] 311 ld (0x11, sp), a
+ 000177 1F 0B [ 2] 312 ldw (0x0b, sp), x
+ 000179 313 00143$:
+ 000179 0D 11 [ 1] 314 tnz (0x11, sp)
+ 00017B 27 39 [ 1] 315 jreq 00122$
+ 316 ; ../mbrtowc.c: 87: codepoint <<= 6;
+ 00017D A6 06 [ 1] 317 ld a, #0x06
+ 00017F 318 00302$:
+ 00017F 08 10 [ 1] 319 sll (0x10, sp)
+ 000181 09 0F [ 1] 320 rlc (0x0f, sp)
+ 000183 09 0E [ 1] 321 rlc (0x0e, sp)
+ 000185 09 0D [ 1] 322 rlc (0x0d, sp)
+ 000187 4A [ 1] 323 dec a
+ 000188 26 F5 [ 1] 324 jrne 00302$
+ 325 ; ../mbrtowc.c: 88: codepoint |= (*s & 0x3f);
+ 00018A 1E 0B [ 2] 326 ldw x, (0x0b, sp)
+ 00018C F6 [ 1] 327 ld a, (x)
+ 00018D A4 3F [ 1] 328 and a, #0x3f
+ 00018F 97 [ 1] 329 ld xl, a
+ 000190 4F [ 1] 330 clr a
+ 000191 95 [ 1] 331 ld xh, a
+ 000192 49 [ 1] 332 rlc a
+ 000193 4F [ 1] 333 clr a
+ 000194 A2 00 [ 1] 334 sbc a, #0x00
+ 000196 90 97 [ 1] 335 ld yl, a
+ 000198 1A 0D [ 1] 336 or a, (0x0d, sp)
+ 00019A 90 95 [ 1] 337 ld yh, a
+ 00019C 9F [ 1] 338 ld a, xl
+ 00019D 1A 10 [ 1] 339 or a, (0x10, sp)
+ 00019F 02 [ 1] 340 rlwa x
+ 0001A0 1A 0F [ 1] 341 or a, (0x0f, sp)
+ 0001A2 95 [ 1] 342 ld xh, a
+ 0001A3 90 9F [ 1] 343 ld a, yl
+ 0001A5 1A 0E [ 1] 344 or a, (0x0e, sp)
+ 0001A7 90 97 [ 1] 345 ld yl, a
+ 0001A9 1F 0F [ 2] 346 ldw (0x0f, sp), x
+ 0001AB 17 0D [ 2] 347 ldw (0x0d, sp), y
+ 348 ; ../mbrtowc.c: 89: s++;
+ 0001AD 1E 0B [ 2] 349 ldw x, (0x0b, sp)
+ 0001AF 5C [ 1] 350 incw x
+ 0001B0 1F 0B [ 2] 351 ldw (0x0b, sp), x
+ 352 ; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--)
+ 0001B2 0A 11 [ 1] 353 dec (0x11, sp)
+ 0001B4 20 C3 [ 2] 354 jra 00143$
+ 0001B6 355 00122$:
+ 356 ; ../mbrtowc.c: 92: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate.
+ 0001B6 1E 0F [ 2] 357 ldw x, (0x0f, sp)
+ 0001B8 A3 D8 00 [ 2] 358 cpw x, #0xd800
+ 0001BB 7B 0E [ 1] 359 ld a, (0x0e, sp)
+ 0001BD A2 00 [ 1] 360 sbc a, #0x00
+ 0001BF 7B 0D [ 1] 361 ld a, (0x0d, sp)
+ 0001C1 A2 00 [ 1] 362 sbc a, #0x00
+ 0001C3 25 11 [ 1] 363 jrc 00124$
+ 0001C5 AE DF FF [ 2] 364 ldw x, #0xdfff
+ 0001C8 13 0F [ 2] 365 cpw x, (0x0f, sp)
+ 0001CA 4F [ 1] 366 clr a
+ 0001CB 12 0E [ 1] 367 sbc a, (0x0e, sp)
+ 0001CD 4F [ 1] 368 clr a
+ 0001CE 12 0D [ 1] 369 sbc a, (0x0d, sp)
+ 0001D0 25 04 [ 1] 370 jrc 00124$
+ 371 ; ../mbrtowc.c: 93: return(-1);
+ 0001D2 5F [ 1] 372 clrw x
+ 0001D3 5A [ 2] 373 decw x
+ 0001D4 20 17 [ 2] 374 jra 00145$
+ 0001D6 375 00124$:
+ 376 ; ../mbrtowc.c: 95: if(pwc)
+ 377 ; ../mbrtowc.c: 96: *pwc = codepoint;
+ 0001D6 1E 15 [ 2] 378 ldw x, (0x15, sp)
+ 0001D8 27 07 [ 1] 379 jreq 00127$
+ 0001DA 16 0F [ 2] 380 ldw y, (0x0f, sp)
+ 0001DC EF 02 [ 2] 381 ldw (0x2, x), y
+ 0001DE 16 0D [ 2] 382 ldw y, (0x0d, sp)
+ 0001E0 FF [ 2] 383 ldw (x), y
+ 0001E1 384 00127$:
+ 385 ; ../mbrtowc.c: 97: return(n);
+ 0001E1 1E 19 [ 2] 386 ldw x, (0x19, sp)
+ 0001E3 20 08 [ 2] 387 jra 00145$
+ 388 ; ../mbrtowc.c: 99: eilseq:
+ 0001E5 389 00128$:
+ 390 ; ../mbrtowc.c: 100: errno = EILSEQ;
+ 0001E5 AE 00 54 [ 2] 391 ldw x, #0x0054
+ 0001E8 CFu00u00 [ 2] 392 ldw _errno+0, x
+ 393 ; ../mbrtowc.c: 101: return(-1);
+ 0001EB 5F [ 1] 394 clrw x
+ 0001EC 5A [ 2] 395 decw x
+ 0001ED 396 00145$:
+ 397 ; ../mbrtowc.c: 102: }
+ 0001ED 5B 11 [ 2] 398 addw sp, #17
+ 0001EF 87 [ 5] 399 retf
+ 400 .area CODE
+ 401 .area CONST
+ 402 .area CONST
+ 000000 403 ___str_0:
+ 000000 00 404 .db 0x00
+ 405 .area CODE
+ 406 .area INITIALIZER
+ 407 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbrtowc.rel b/device/lib/stm8-large/mbrtowc.rel
new file mode 100644
index 0000000..4fafbd1
--- /dev/null
+++ b/device/lib/stm8-large/mbrtowc.rel
@@ -0,0 +1,200 @@
+XH3
+H B areas 3 global symbols
+M mbrtowc
+O -mstm8
+S _errno Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 3 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 1 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1F0 flags 0 addr 0
+S _mbrtowc Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 1E 17 26 17 1E 1B 89 4B 01 4B 00
+R 00 00 00 09
+T 00 00 0D 4B 00 00 00 4B 00 00 00 5F 89 8D
+R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07
+T 00 00 14 00 00 00 5B 08 AC 00 01 ED
+R 00 00 00 09 80 03 00 09 80 09 00 09
+T 00 00 1D
+R 00 00 00 09
+T 00 00 1D 1E 19 26 04 AC 00 01 E5
+R 00 00 00 09 80 08 00 09
+T 00 00 25
+R 00 00 00 09
+T 00 00 25 1E 1B 26 05 AE 00 00 1F 1B
+R 00 00 00 09 00 08 00 01
+T 00 00 2E
+R 00 00 00 09
+T 00 00 2E 96 1C 00 03 1F 07 16 1B 17 0F 17 0D 0F
+R 00 00 00 09
+T 00 00 3B 11
+R 00 00 00 09
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 5F 7B 11 97 72 FB 0D F6 27 15 88 7B 12
+R 00 00 00 09
+T 00 00 49 A1 03 84 24 0D 5F 41 7B 11 41 72 FB 07
+R 00 00 00 09
+T 00 00 56 F7 0C 11 20 E1
+R 00 00 00 09
+T 00 00 5B
+R 00 00 00 09
+T 00 00 5B 7B 11 6B 09 A6 01 6B 0A 1E 1B F6 16 17
+R 00 00 00 09
+T 00 00 68 17 0B 4D 26 03 1E 0B F6
+R 00 00 00 09
+T 00 00 70
+R 00 00 00 09
+T 00 00 70 6B 11 2A 3E A6 01 6B 0D
+R 00 00 00 09
+T 00 00 78
+R 00 00 00 09
+T 00 00 78 AE 00 80 7B 0D 27 04
+R 00 00 00 09
+T 00 00 7F
+R 00 00 00 09
+T 00 00 7F 57 4A 26 FC
+R 00 00 00 09
+T 00 00 83
+R 00 00 00 09
+T 00 00 83 7B 11 6B 02 0F 01 7B 0D 4C 6B 0E 9F 14
+R 00 00 00 09
+T 00 00 90 02 02 14 01 95 5D 27 06 7B 0E 6B 0D 20
+R 00 00 00 09
+T 00 00 9D DA
+R 00 00 00 09
+T 00 00 9E
+R 00 00 00 09
+T 00 00 9E 7B 0D 6B 0A AE 00 FF 7B 0E 27 04
+R 00 00 00 09
+T 00 00 A9
+R 00 00 00 09
+T 00 00 A9 57 4A 26 FC
+R 00 00 00 09
+T 00 00 AD
+R 00 00 00 09
+T 00 00 AD 9F 14 11 6B 11
+R 00 00 00 09
+T 00 00 B2
+R 00 00 00 09
+T 00 00 B2 7B 0A A1 04 23 04 AC 00 01 E5
+R 00 00 00 09 80 0A 00 09
+T 00 00 BC
+R 00 00 00 09
+T 00 00 BC 7B 09 6B 0E 0F 0D 1E 0D 72 FB 19 7B 0A
+R 00 00 00 09
+T 00 00 C9 6B 02 0F 01 13 01 24 38 16 0F 17 07 16
+R 00 00 00 09
+T 00 00 D6 0B 17 10 7B 09 6B 0F 16 19 17 0D
+R 00 00 00 09
+T 00 00 E1
+R 00 00 00 09
+T 00 00 E1 1E 0D 16 0D 90 5A 17 0D 5D 27 16 5F 7B
+R 00 00 00 09
+T 00 00 EE 0F 97 72 FB 07 16 10 90 F6 16 10 90 5C
+R 00 00 00 09
+T 00 00 FB 17 10 F7 0C 0F 20 DF
+R 00 00 00 09
+T 00 01 02
+R 00 00 00 09
+T 00 01 02 AE FF FE AC 00 01 ED
+R 00 00 00 09 80 07 00 09
+T 00 01 09
+R 00 00 00 09
+T 00 01 09 4F
+R 00 00 00 09
+T 00 01 0A
+R 00 00 00 09
+T 00 01 0A 11 09 24 09 5F 97 72 FB 0F 7F 4C 20 F3
+R 00 00 00 09
+T 00 01 17
+R 00 00 00 09
+T 00 01 17 AE 00 01 1F 19 0D 09 27 03 1E 0D C5
+R 00 00 00 09
+T 00 01 23
+R 00 00 00 09
+T 00 01 23 5F 5C
+R 00 00 00 09
+T 00 01 25
+R 00 00 00 09
+T 00 01 25 41 6B 10 41 16 07 17 01 16 0B AE 00 01
+R 00 00 00 09
+T 00 01 32 1F 0E
+R 00 00 00 09
+T 00 01 34
+R 00 00 00 09
+T 00 01 34 7B 10 11 0A 24 2B 5F 7B 10 97 72 FB 01
+R 00 00 00 09
+T 00 01 41 90 F6 90 5C F7 6B 0D 0F 0C 7B 0D A4 C0
+R 00 00 00 09
+T 00 01 4E 97 4F 95 A3 00 80 27 04 AC
+R 00 00 00 09
+T 00 01 57 00 01 E5
+R 00 00 00 09 80 03 00 09
+T 00 01 5A
+R 00 00 00 09
+T 00 01 5A 0C 10 1E 0E 5C 1F 0E 1F 19 20 CF
+R 00 00 00 09
+T 00 01 65
+R 00 00 00 09
+T 00 01 65 5F 7B 11 97 90 5F 1F 0F 17 0D 1E 07 5C
+R 00 00 00 09
+T 00 01 72 7B 0A 4A 6B 11 1F 0B
+R 00 00 00 09
+T 00 01 79
+R 00 00 00 09
+T 00 01 79 0D 11 27 39 A6 06
+R 00 00 00 09
+T 00 01 7F
+R 00 00 00 09
+T 00 01 7F 08 10 09 0F 09 0E 09 0D 4A 26 F5 1E 0B
+R 00 00 00 09
+T 00 01 8C F6 A4 3F 97 4F 95 49 4F A2 00 90 97 1A
+R 00 00 00 09
+T 00 01 99 0D 90 95 9F 1A 10 02 1A 0F 95 90 9F 1A
+R 00 00 00 09
+T 00 01 A6 0E 90 97 1F 0F 17 0D 1E 0B 5C 1F 0B 0A
+R 00 00 00 09
+T 00 01 B3 11 20 C3
+R 00 00 00 09
+T 00 01 B6
+R 00 00 00 09
+T 00 01 B6 1E 0F A3 D8 00 7B 0E A2 00 7B 0D A2 00
+R 00 00 00 09
+T 00 01 C3 25 11 AE DF FF 13 0F 4F 12 0E 4F 12 0D
+R 00 00 00 09
+T 00 01 D0 25 04 5F 5A 20 17
+R 00 00 00 09
+T 00 01 D6
+R 00 00 00 09
+T 00 01 D6 1E 15 27 07 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 01 E1
+R 00 00 00 09
+T 00 01 E1 1E 19 20 08
+R 00 00 00 09
+T 00 01 E5
+R 00 00 00 09
+T 00 01 E5 AE 00 54 CF 00 00 5F 5A
+R 00 00 00 09 12 07 00 00
+T 00 01 ED
+R 00 00 00 09
+T 00 01 ED 5B 11 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 00
+R 00 00 00 07
diff --git a/device/lib/stm8-large/mbrtowc.sym b/device/lib/stm8-large/mbrtowc.sym
new file mode 100644
index 0000000..06fe6a3
--- /dev/null
+++ b/device/lib/stm8-large/mbrtowc.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 7 ___str_0 000000 R
+ _errno ****** GX
+ 9 _mbrtowc 000000 GR
+ 1 _mbrtowc_sps_65536_10 000000 R
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 3 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 1 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1F0 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbsinit.asm b/device/lib/stm8-large/mbsinit.asm
new file mode 100644
index 0000000..c56f7e2
--- /dev/null
+++ b/device/lib/stm8-large/mbsinit.asm
@@ -0,0 +1,77 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbsinit
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbsinit
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbsinit.c: 31: int mbsinit(const mbstate_t *ps)
+; -----------------------------------------
+; function mbsinit
+; -----------------------------------------
+_mbsinit:
+; ../mbsinit.c: 33: return(!ps || !ps->c[0] && !ps->c[1] && !ps->c[2]);
+ ldw x, (0x04, sp)
+ jreq 00104$
+ ld a, (x)
+ jrne 00103$
+ ldw y, x
+ ld a, (0x1, y)
+ jrne 00103$
+ ld a, (0x2, x)
+ jreq 00104$
+00103$:
+ clr a
+ .byte 0xc5
+00104$:
+ ld a, #0x01
+00105$:
+ clrw x
+ ld xl, a
+; ../mbsinit.c: 34: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbsinit.lst b/device/lib/stm8-large/mbsinit.lst
new file mode 100644
index 0000000..fbd55a4
--- /dev/null
+++ b/device/lib/stm8-large/mbsinit.lst
@@ -0,0 +1,77 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbsinit
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbsinit
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../mbsinit.c: 31: int mbsinit(const mbstate_t *ps)
+ 50 ; -----------------------------------------
+ 51 ; function mbsinit
+ 52 ; -----------------------------------------
+ 000000 53 _mbsinit:
+ 54 ; ../mbsinit.c: 33: return(!ps || !ps->c[0] && !ps->c[1] && !ps->c[2]);
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 000002 27 10 [ 1] 56 jreq 00104$
+ 000004 F6 [ 1] 57 ld a, (x)
+ 000005 26 0B [ 1] 58 jrne 00103$
+ 000007 90 93 [ 1] 59 ldw y, x
+ 000009 90 E6 01 [ 1] 60 ld a, (0x1, y)
+ 00000C 26 04 [ 1] 61 jrne 00103$
+ 00000E E6 02 [ 1] 62 ld a, (0x2, x)
+ 000010 27 02 [ 1] 63 jreq 00104$
+ 000012 64 00103$:
+ 000012 4F [ 1] 65 clr a
+ 000013 C5 66 .byte 0xc5
+ 000014 67 00104$:
+ 000014 A6 01 [ 1] 68 ld a, #0x01
+ 000016 69 00105$:
+ 000016 5F [ 1] 70 clrw x
+ 000017 97 [ 1] 71 ld xl, a
+ 72 ; ../mbsinit.c: 34: }
+ 000018 87 [ 5] 73 retf
+ 74 .area CODE
+ 75 .area CONST
+ 76 .area INITIALIZER
+ 77 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbsinit.rel b/device/lib/stm8-large/mbsinit.rel
new file mode 100644
index 0000000..41f42be
--- /dev/null
+++ b/device/lib/stm8-large/mbsinit.rel
@@ -0,0 +1,35 @@
+XH3
+H B areas 2 global symbols
+M mbsinit
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 19 flags 0 addr 0
+S _mbsinit Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 27 10 F6 26 0B 90 93 90 E6 01 26
+R 00 00 00 09
+T 00 00 0D 04 E6 02 27 02
+R 00 00 00 09
+T 00 00 12
+R 00 00 00 09
+T 00 00 12 4F C5
+R 00 00 00 09
+T 00 00 14
+R 00 00 00 09
+T 00 00 14 A6 01
+R 00 00 00 09
+T 00 00 16
+R 00 00 00 09
+T 00 00 16 5F 97 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/mbsinit.sym b/device/lib/stm8-large/mbsinit.sym
new file mode 100644
index 0000000..94e8166
--- /dev/null
+++ b/device/lib/stm8-large/mbsinit.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _mbsinit 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 19 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbstoc16s.asm b/device/lib/stm8-large/mbstoc16s.asm
new file mode 100644
index 0000000..1459287
--- /dev/null
+++ b/device/lib/stm8-large/mbstoc16s.asm
@@ -0,0 +1,196 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbstoc16s
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbtowc
+ .globl ___mbstoc16s
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbstoc16s.c: 44: size_t __mbstoc16s(char16_t *restrict c16s, const char *restrict s, size_t n)
+; -----------------------------------------
+; function __mbstoc16s
+; -----------------------------------------
+___mbstoc16s:
+ sub sp, #17
+; ../mbstoc16s.c: 46: size_t m = 0;
+ clrw x
+ ldw (0x09, sp), x
+; ../mbstoc16s.c: 85: return(m);
+00116$:
+; ../mbstoc16s.c: 53: l = mbtowc(&codepoint, s, MB_LEN_MAX);
+ ldw x, sp
+ addw x, #5
+ push #0x04
+ push #0x00
+ ldw y, (0x19, sp)
+ pushw y
+ pushw x
+ callf _mbtowc
+ addw sp, #6
+ ldw (0x0b, sp), x
+; ../mbstoc16s.c: 55: if(l < 0)
+ tnz (0x0b, sp)
+ jrpl 00106$
+; ../mbstoc16s.c: 56: return(-1);
+ clrw x
+ decw x
+ jpf 00118$
+00106$:
+; ../mbstoc16s.c: 59: if(m < n)
+ ldw x, (0x09, sp)
+ cpw x, (0x19, sp)
+ clr a
+ rlc a
+ ld (0x0d, sp), a
+; ../mbstoc16s.c: 60: *c16s = 0;
+ ldw y, (0x15, sp)
+; ../mbstoc16s.c: 57: else if(!l)
+ ldw x, (0x0b, sp)
+ jrne 00107$
+; ../mbstoc16s.c: 59: if(m < n)
+ tnz (0x0d, sp)
+ jrne 00157$
+ jpf 00115$
+00157$:
+; ../mbstoc16s.c: 60: *c16s = 0;
+ ldw x, y
+ clr (0x1, x)
+ clr (x)
+; ../mbstoc16s.c: 61: break;
+ jpf 00115$
+00107$:
+; ../mbstoc16s.c: 70: m++;
+ ldw x, (0x09, sp)
+ incw x
+ ldw (0x0e, sp), x
+; ../mbstoc16s.c: 69: *c16s++ = codepoint;
+ ldw x, y
+ incw x
+ incw x
+ ldw (0x10, sp), x
+; ../mbstoc16s.c: 64: if (codepoint <= 0xffff) // Basic multilingual plane
+ ldw x, (0x05, sp)
+ jrne 00113$
+; ../mbstoc16s.c: 66: if (m >= n)
+ ld a, (0x0d, sp)
+ jreq 00115$
+; ../mbstoc16s.c: 69: *c16s++ = codepoint;
+ ldw x, (0x07, sp)
+ ldw (0x09, sp), x
+ ldw x, y
+ ldw y, (0x09, sp)
+ ldw (x), y
+ ldw y, (0x10, sp)
+ ldw (0x15, sp), y
+; ../mbstoc16s.c: 70: m++;
+ ldw y, (0x0e, sp)
+ ldw (0x09, sp), y
+ jra 00114$
+00113$:
+; ../mbstoc16s.c: 74: if (m + 1 >= n)
+ ldw x, (0x0e, sp)
+ cpw x, (0x19, sp)
+ jrnc 00115$
+; ../mbstoc16s.c: 77: codepoint -= 0x100000;
+ ld a, (0x08, sp)
+ ld (0x04, sp), a
+ ld a, (0x07, sp)
+ ldw x, (0x05, sp)
+ subw x, #0x0010
+ ld (0x07, sp), a
+ ldw (0x05, sp), x
+ ld a, (0x04, sp)
+ ld (0x08, sp), a
+; ../mbstoc16s.c: 78: *c16s++ = ((codepoint >> 10) & 0x3ff) + 0xd800;
+ ldw x, (0x06, sp)
+ ldw (0x03, sp), x
+ ld a, (0x05, sp)
+ ld (0x02, sp), a
+ clr (0x01, sp)
+ srl (0x02, sp)
+ rrc (0x03, sp)
+ rrc (0x04, sp)
+ srl (0x02, sp)
+ rrc (0x03, sp)
+ rrc (0x04, sp)
+ ld a, (0x04, sp)
+ ld xl, a
+ ld a, (0x03, sp)
+ and a, #0x03
+ ld xh, a
+ addw x, #0xd800
+ ldw (y), x
+ ldw y, (0x10, sp)
+; ../mbstoc16s.c: 79: *c16s++ = (codepoint & 0x3ff) + 0xdc00;
+ ldw (0x15, sp), y
+ ldw x, (0x07, sp)
+ ld a, xh
+ and a, #0x03
+ ld xh, a
+ addw x, #0xdc00
+ ldw (y), x
+ addw y, #0x0002
+ ldw (0x15, sp), y
+; ../mbstoc16s.c: 80: m += 2;
+ ldw x, (0x09, sp)
+ incw x
+ incw x
+ ldw (0x09, sp), x
+00114$:
+; ../mbstoc16s.c: 82: s += l;
+ ldw x, (0x17, sp)
+ addw x, (0x0b, sp)
+ ldw (0x17, sp), x
+ jpf 00116$
+00115$:
+; ../mbstoc16s.c: 85: return(m);
+ ldw x, (0x09, sp)
+00118$:
+; ../mbstoc16s.c: 86: }
+ addw sp, #17
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbstoc16s.lst b/device/lib/stm8-large/mbstoc16s.lst
new file mode 100644
index 0000000..f2fddcd
--- /dev/null
+++ b/device/lib/stm8-large/mbstoc16s.lst
@@ -0,0 +1,196 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbstoc16s
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbtowc
+ 12 .globl ___mbstoc16s
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../mbstoc16s.c: 44: size_t __mbstoc16s(char16_t *restrict c16s, const char *restrict s, size_t n)
+ 51 ; -----------------------------------------
+ 52 ; function __mbstoc16s
+ 53 ; -----------------------------------------
+ 000000 54 ___mbstoc16s:
+ 000000 52 11 [ 2] 55 sub sp, #17
+ 56 ; ../mbstoc16s.c: 46: size_t m = 0;
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 09 [ 2] 58 ldw (0x09, sp), x
+ 59 ; ../mbstoc16s.c: 85: return(m);
+ 000005 60 00116$:
+ 61 ; ../mbstoc16s.c: 53: l = mbtowc(&codepoint, s, MB_LEN_MAX);
+ 000005 96 [ 1] 62 ldw x, sp
+ 000006 1C 00 05 [ 2] 63 addw x, #5
+ 000009 4B 04 [ 1] 64 push #0x04
+ 00000B 4B 00 [ 1] 65 push #0x00
+ 00000D 16 19 [ 2] 66 ldw y, (0x19, sp)
+ 00000F 90 89 [ 2] 67 pushw y
+ 000011 89 [ 2] 68 pushw x
+ 000012 8Ds00r00r00 [ 5] 69 callf _mbtowc
+ 000016 5B 06 [ 2] 70 addw sp, #6
+ 000018 1F 0B [ 2] 71 ldw (0x0b, sp), x
+ 72 ; ../mbstoc16s.c: 55: if(l < 0)
+ 00001A 0D 0B [ 1] 73 tnz (0x0b, sp)
+ 00001C 2A 06 [ 1] 74 jrpl 00106$
+ 75 ; ../mbstoc16s.c: 56: return(-1);
+ 00001E 5F [ 1] 76 clrw x
+ 00001F 5A [ 2] 77 decw x
+ 000020 ACs00r00rCA [ 2] 78 jpf 00118$
+ 000024 79 00106$:
+ 80 ; ../mbstoc16s.c: 59: if(m < n)
+ 000024 1E 09 [ 2] 81 ldw x, (0x09, sp)
+ 000026 13 19 [ 2] 82 cpw x, (0x19, sp)
+ 000028 4F [ 1] 83 clr a
+ 000029 49 [ 1] 84 rlc a
+ 00002A 6B 0D [ 1] 85 ld (0x0d, sp), a
+ 86 ; ../mbstoc16s.c: 60: *c16s = 0;
+ 00002C 16 15 [ 2] 87 ldw y, (0x15, sp)
+ 88 ; ../mbstoc16s.c: 57: else if(!l)
+ 00002E 1E 0B [ 2] 89 ldw x, (0x0b, sp)
+ 000030 26 10 [ 1] 90 jrne 00107$
+ 91 ; ../mbstoc16s.c: 59: if(m < n)
+ 000032 0D 0D [ 1] 92 tnz (0x0d, sp)
+ 000034 26 04 [ 1] 93 jrne 00157$
+ 000036 ACs00r00rC8 [ 2] 94 jpf 00115$
+ 00003A 95 00157$:
+ 96 ; ../mbstoc16s.c: 60: *c16s = 0;
+ 00003A 93 [ 1] 97 ldw x, y
+ 00003B 6F 01 [ 1] 98 clr (0x1, x)
+ 00003D 7F [ 1] 99 clr (x)
+ 100 ; ../mbstoc16s.c: 61: break;
+ 00003E ACs00r00rC8 [ 2] 101 jpf 00115$
+ 000042 102 00107$:
+ 103 ; ../mbstoc16s.c: 70: m++;
+ 000042 1E 09 [ 2] 104 ldw x, (0x09, sp)
+ 000044 5C [ 1] 105 incw x
+ 000045 1F 0E [ 2] 106 ldw (0x0e, sp), x
+ 107 ; ../mbstoc16s.c: 69: *c16s++ = codepoint;
+ 000047 93 [ 1] 108 ldw x, y
+ 000048 5C [ 1] 109 incw x
+ 000049 5C [ 1] 110 incw x
+ 00004A 1F 10 [ 2] 111 ldw (0x10, sp), x
+ 112 ; ../mbstoc16s.c: 64: if (codepoint <= 0xffff) // Basic multilingual plane
+ 00004C 1E 05 [ 2] 113 ldw x, (0x05, sp)
+ 00004E 26 16 [ 1] 114 jrne 00113$
+ 115 ; ../mbstoc16s.c: 66: if (m >= n)
+ 000050 7B 0D [ 1] 116 ld a, (0x0d, sp)
+ 000052 27 74 [ 1] 117 jreq 00115$
+ 118 ; ../mbstoc16s.c: 69: *c16s++ = codepoint;
+ 000054 1E 07 [ 2] 119 ldw x, (0x07, sp)
+ 000056 1F 09 [ 2] 120 ldw (0x09, sp), x
+ 000058 93 [ 1] 121 ldw x, y
+ 000059 16 09 [ 2] 122 ldw y, (0x09, sp)
+ 00005B FF [ 2] 123 ldw (x), y
+ 00005C 16 10 [ 2] 124 ldw y, (0x10, sp)
+ 00005E 17 15 [ 2] 125 ldw (0x15, sp), y
+ 126 ; ../mbstoc16s.c: 70: m++;
+ 000060 16 0E [ 2] 127 ldw y, (0x0e, sp)
+ 000062 17 09 [ 2] 128 ldw (0x09, sp), y
+ 000064 20 57 [ 2] 129 jra 00114$
+ 000066 130 00113$:
+ 131 ; ../mbstoc16s.c: 74: if (m + 1 >= n)
+ 000066 1E 0E [ 2] 132 ldw x, (0x0e, sp)
+ 000068 13 19 [ 2] 133 cpw x, (0x19, sp)
+ 00006A 24 5C [ 1] 134 jrnc 00115$
+ 135 ; ../mbstoc16s.c: 77: codepoint -= 0x100000;
+ 00006C 7B 08 [ 1] 136 ld a, (0x08, sp)
+ 00006E 6B 04 [ 1] 137 ld (0x04, sp), a
+ 000070 7B 07 [ 1] 138 ld a, (0x07, sp)
+ 000072 1E 05 [ 2] 139 ldw x, (0x05, sp)
+ 000074 1D 00 10 [ 2] 140 subw x, #0x0010
+ 000077 6B 07 [ 1] 141 ld (0x07, sp), a
+ 000079 1F 05 [ 2] 142 ldw (0x05, sp), x
+ 00007B 7B 04 [ 1] 143 ld a, (0x04, sp)
+ 00007D 6B 08 [ 1] 144 ld (0x08, sp), a
+ 145 ; ../mbstoc16s.c: 78: *c16s++ = ((codepoint >> 10) & 0x3ff) + 0xd800;
+ 00007F 1E 06 [ 2] 146 ldw x, (0x06, sp)
+ 000081 1F 03 [ 2] 147 ldw (0x03, sp), x
+ 000083 7B 05 [ 1] 148 ld a, (0x05, sp)
+ 000085 6B 02 [ 1] 149 ld (0x02, sp), a
+ 000087 0F 01 [ 1] 150 clr (0x01, sp)
+ 000089 04 02 [ 1] 151 srl (0x02, sp)
+ 00008B 06 03 [ 1] 152 rrc (0x03, sp)
+ 00008D 06 04 [ 1] 153 rrc (0x04, sp)
+ 00008F 04 02 [ 1] 154 srl (0x02, sp)
+ 000091 06 03 [ 1] 155 rrc (0x03, sp)
+ 000093 06 04 [ 1] 156 rrc (0x04, sp)
+ 000095 7B 04 [ 1] 157 ld a, (0x04, sp)
+ 000097 97 [ 1] 158 ld xl, a
+ 000098 7B 03 [ 1] 159 ld a, (0x03, sp)
+ 00009A A4 03 [ 1] 160 and a, #0x03
+ 00009C 95 [ 1] 161 ld xh, a
+ 00009D 1C D8 00 [ 2] 162 addw x, #0xd800
+ 0000A0 90 FF [ 2] 163 ldw (y), x
+ 0000A2 16 10 [ 2] 164 ldw y, (0x10, sp)
+ 165 ; ../mbstoc16s.c: 79: *c16s++ = (codepoint & 0x3ff) + 0xdc00;
+ 0000A4 17 15 [ 2] 166 ldw (0x15, sp), y
+ 0000A6 1E 07 [ 2] 167 ldw x, (0x07, sp)
+ 0000A8 9E [ 1] 168 ld a, xh
+ 0000A9 A4 03 [ 1] 169 and a, #0x03
+ 0000AB 95 [ 1] 170 ld xh, a
+ 0000AC 1C DC 00 [ 2] 171 addw x, #0xdc00
+ 0000AF 90 FF [ 2] 172 ldw (y), x
+ 0000B1 72 A9 00 02 [ 2] 173 addw y, #0x0002
+ 0000B5 17 15 [ 2] 174 ldw (0x15, sp), y
+ 175 ; ../mbstoc16s.c: 80: m += 2;
+ 0000B7 1E 09 [ 2] 176 ldw x, (0x09, sp)
+ 0000B9 5C [ 1] 177 incw x
+ 0000BA 5C [ 1] 178 incw x
+ 0000BB 1F 09 [ 2] 179 ldw (0x09, sp), x
+ 0000BD 180 00114$:
+ 181 ; ../mbstoc16s.c: 82: s += l;
+ 0000BD 1E 17 [ 2] 182 ldw x, (0x17, sp)
+ 0000BF 72 FB 0B [ 2] 183 addw x, (0x0b, sp)
+ 0000C2 1F 17 [ 2] 184 ldw (0x17, sp), x
+ 0000C4 ACs00r00r05 [ 2] 185 jpf 00116$
+ 0000C8 186 00115$:
+ 187 ; ../mbstoc16s.c: 85: return(m);
+ 0000C8 1E 09 [ 2] 188 ldw x, (0x09, sp)
+ 0000CA 189 00118$:
+ 190 ; ../mbstoc16s.c: 86: }
+ 0000CA 5B 11 [ 2] 191 addw sp, #17
+ 0000CC 87 [ 5] 192 retf
+ 193 .area CODE
+ 194 .area CONST
+ 195 .area INITIALIZER
+ 196 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbstoc16s.rel b/device/lib/stm8-large/mbstoc16s.rel
new file mode 100644
index 0000000..34b6d08
--- /dev/null
+++ b/device/lib/stm8-large/mbstoc16s.rel
@@ -0,0 +1,78 @@
+XH3
+H B areas 3 global symbols
+M mbstoc16s
+O -mstm8
+S .__.ABS. Def000000
+S _mbtowc Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size CD flags 0 addr 0
+S ___mbstoc16s Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 11 5F 1F 09
+R 00 00 00 09
+T 00 00 05
+R 00 00 00 09
+T 00 00 05 96 1C 00 05 4B 04 4B 00 16 19 90 89 89
+R 00 00 00 09
+T 00 00 12 8D 00 00 00 5B 06 1F 0B 0D 0B 2A 06 5F
+R 00 00 00 09 82 04 00 01
+T 00 00 1F 5A AC 00 00 CA
+R 00 00 00 09 80 05 00 09
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 1E 09 13 19 4F 49 6B 0D 16 15 1E 0B 26
+R 00 00 00 09
+T 00 00 31 10 0D 0D 26 04 AC 00 00 C8
+R 00 00 00 09 80 09 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A 93 6F 01 7F AC 00 00 C8
+R 00 00 00 09 80 08 00 09
+T 00 00 42
+R 00 00 00 09
+T 00 00 42 1E 09 5C 1F 0E 93 5C 5C 1F 10 1E 05 26
+R 00 00 00 09
+T 00 00 4F 16 7B 0D 27 74 1E 07 1F 09 93 16 09 FF
+R 00 00 00 09
+T 00 00 5C 16 10 17 15 16 0E 17 09 20 57
+R 00 00 00 09
+T 00 00 66
+R 00 00 00 09
+T 00 00 66 1E 0E 13 19 24 5C 7B 08 6B 04 7B 07 1E
+R 00 00 00 09
+T 00 00 73 05 1D 00 10 6B 07 1F 05 7B 04 6B 08 1E
+R 00 00 00 09
+T 00 00 80 06 1F 03 7B 05 6B 02 0F 01 04 02 06 03
+R 00 00 00 09
+T 00 00 8D 06 04 04 02 06 03 06 04 7B 04 97 7B 03
+R 00 00 00 09
+T 00 00 9A A4 03 95 1C D8 00 90 FF 16 10 17 15 1E
+R 00 00 00 09
+T 00 00 A7 07 9E A4 03 95 1C DC 00 90 FF 72 A9
+R 00 00 00 09
+T 00 00 B3 00 02 17 15 1E 09 5C 5C 1F 09
+R 00 00 00 09
+T 00 00 BD
+R 00 00 00 09
+T 00 00 BD 1E 17 72 FB 0B 1F 17 AC
+R 00 00 00 09
+T 00 00 C5 00 00 05
+R 00 00 00 09 80 03 00 09
+T 00 00 C8
+R 00 00 00 09
+T 00 00 C8 1E 09
+R 00 00 00 09
+T 00 00 CA
+R 00 00 00 09
+T 00 00 CA 5B 11 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/mbstoc16s.sym b/device/lib/stm8-large/mbstoc16s.sym
new file mode 100644
index 0000000..e23132d
--- /dev/null
+++ b/device/lib/stm8-large/mbstoc16s.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 ___mbstoc16s 000000 GR
+ _mbtowc ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size CD flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbstowcs.asm b/device/lib/stm8-large/mbstowcs.asm
new file mode 100644
index 0000000..510482b
--- /dev/null
+++ b/device/lib/stm8-large/mbstowcs.asm
@@ -0,0 +1,115 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbstowcs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbtowc
+ .globl _mbstowcs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbstowcs.c: 33: size_t mbstowcs(wchar_t *restrict pwcs, const char *restrict s, size_t n)
+; -----------------------------------------
+; function mbstowcs
+; -----------------------------------------
+_mbstowcs:
+ sub sp, #8
+; ../mbstowcs.c: 35: size_t m = 0;
+ clrw x
+ ldw (0x01, sp), x
+; ../mbstowcs.c: 36: while(n--)
+ ldw y, (0x0c, sp)
+ ldw (0x03, sp), y
+ clrw x
+ ldw (0x05, sp), x
+ ldw y, (0x10, sp)
+ ldw (0x07, sp), y
+00105$:
+ ldw x, (0x07, sp)
+ ldw y, (0x07, sp)
+ decw y
+ ldw (0x07, sp), y
+ tnzw x
+ jreq 00107$
+; ../mbstowcs.c: 38: int b = mbtowc(pwcs++, s, MB_LEN_MAX);
+ ldw y, (0x03, sp)
+ ldw x, (0x03, sp)
+ addw x, #0x0004
+ ldw (0x03, sp), x
+ push #0x04
+ push #0x00
+ ldw x, (0x10, sp)
+ pushw x
+ pushw y
+ callf _mbtowc
+ addw sp, #6
+; ../mbstowcs.c: 39: if(!b)
+ tnzw x
+ jreq 00107$
+; ../mbstowcs.c: 41: if(b < 0)
+ tnzw x
+ jrpl 00104$
+; ../mbstowcs.c: 42: return(-1);
+ clrw x
+ decw x
+ jra 00108$
+00104$:
+; ../mbstowcs.c: 43: s += b;
+ addw x, (0x0e, sp)
+ ldw (0x0e, sp), x
+; ../mbstowcs.c: 44: m++;
+ ldw x, (0x05, sp)
+ incw x
+ ldw (0x05, sp), x
+ ldw (0x01, sp), x
+ jra 00105$
+00107$:
+; ../mbstowcs.c: 47: return(m);
+ ldw x, (0x01, sp)
+00108$:
+; ../mbstowcs.c: 48: }
+ addw sp, #8
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbstowcs.lst b/device/lib/stm8-large/mbstowcs.lst
new file mode 100644
index 0000000..41d5d7b
--- /dev/null
+++ b/device/lib/stm8-large/mbstowcs.lst
@@ -0,0 +1,115 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbstowcs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbtowc
+ 12 .globl _mbstowcs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../mbstowcs.c: 33: size_t mbstowcs(wchar_t *restrict pwcs, const char *restrict s, size_t n)
+ 51 ; -----------------------------------------
+ 52 ; function mbstowcs
+ 53 ; -----------------------------------------
+ 000000 54 _mbstowcs:
+ 000000 52 08 [ 2] 55 sub sp, #8
+ 56 ; ../mbstowcs.c: 35: size_t m = 0;
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 01 [ 2] 58 ldw (0x01, sp), x
+ 59 ; ../mbstowcs.c: 36: while(n--)
+ 000005 16 0C [ 2] 60 ldw y, (0x0c, sp)
+ 000007 17 03 [ 2] 61 ldw (0x03, sp), y
+ 000009 5F [ 1] 62 clrw x
+ 00000A 1F 05 [ 2] 63 ldw (0x05, sp), x
+ 00000C 16 10 [ 2] 64 ldw y, (0x10, sp)
+ 00000E 17 07 [ 2] 65 ldw (0x07, sp), y
+ 000010 66 00105$:
+ 000010 1E 07 [ 2] 67 ldw x, (0x07, sp)
+ 000012 16 07 [ 2] 68 ldw y, (0x07, sp)
+ 000014 90 5A [ 2] 69 decw y
+ 000016 17 07 [ 2] 70 ldw (0x07, sp), y
+ 000018 5D [ 2] 71 tnzw x
+ 000019 27 30 [ 1] 72 jreq 00107$
+ 73 ; ../mbstowcs.c: 38: int b = mbtowc(pwcs++, s, MB_LEN_MAX);
+ 00001B 16 03 [ 2] 74 ldw y, (0x03, sp)
+ 00001D 1E 03 [ 2] 75 ldw x, (0x03, sp)
+ 00001F 1C 00 04 [ 2] 76 addw x, #0x0004
+ 000022 1F 03 [ 2] 77 ldw (0x03, sp), x
+ 000024 4B 04 [ 1] 78 push #0x04
+ 000026 4B 00 [ 1] 79 push #0x00
+ 000028 1E 10 [ 2] 80 ldw x, (0x10, sp)
+ 00002A 89 [ 2] 81 pushw x
+ 00002B 90 89 [ 2] 82 pushw y
+ 00002D 8Ds00r00r00 [ 5] 83 callf _mbtowc
+ 000031 5B 06 [ 2] 84 addw sp, #6
+ 85 ; ../mbstowcs.c: 39: if(!b)
+ 000033 5D [ 2] 86 tnzw x
+ 000034 27 15 [ 1] 87 jreq 00107$
+ 88 ; ../mbstowcs.c: 41: if(b < 0)
+ 000036 5D [ 2] 89 tnzw x
+ 000037 2A 04 [ 1] 90 jrpl 00104$
+ 91 ; ../mbstowcs.c: 42: return(-1);
+ 000039 5F [ 1] 92 clrw x
+ 00003A 5A [ 2] 93 decw x
+ 00003B 20 10 [ 2] 94 jra 00108$
+ 00003D 95 00104$:
+ 96 ; ../mbstowcs.c: 43: s += b;
+ 00003D 72 FB 0E [ 2] 97 addw x, (0x0e, sp)
+ 000040 1F 0E [ 2] 98 ldw (0x0e, sp), x
+ 99 ; ../mbstowcs.c: 44: m++;
+ 000042 1E 05 [ 2] 100 ldw x, (0x05, sp)
+ 000044 5C [ 1] 101 incw x
+ 000045 1F 05 [ 2] 102 ldw (0x05, sp), x
+ 000047 1F 01 [ 2] 103 ldw (0x01, sp), x
+ 000049 20 C5 [ 2] 104 jra 00105$
+ 00004B 105 00107$:
+ 106 ; ../mbstowcs.c: 47: return(m);
+ 00004B 1E 01 [ 2] 107 ldw x, (0x01, sp)
+ 00004D 108 00108$:
+ 109 ; ../mbstowcs.c: 48: }
+ 00004D 5B 08 [ 2] 110 addw sp, #8
+ 00004F 87 [ 5] 111 retf
+ 112 .area CODE
+ 113 .area CONST
+ 114 .area INITIALIZER
+ 115 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbstowcs.rel b/device/lib/stm8-large/mbstowcs.rel
new file mode 100644
index 0000000..a00158c
--- /dev/null
+++ b/device/lib/stm8-large/mbstowcs.rel
@@ -0,0 +1,48 @@
+XH3
+H B areas 3 global symbols
+M mbstowcs
+O -mstm8
+S .__.ABS. Def000000
+S _mbtowc Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 50 flags 0 addr 0
+S _mbstowcs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 5F 1F 01 16 0C 17 03 5F 1F 05 16
+R 00 00 00 09
+T 00 00 0D 10 17 07
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 1E 07 16 07 90 5A 17 07 5D 27 30 16 03
+R 00 00 00 09
+T 00 00 1D 1E 03 1C 00 04 1F 03 4B 04 4B 00 1E 10
+R 00 00 00 09
+T 00 00 2A 89 90 89 8D 00 00 00 5B 06 5D 27 15 5D
+R 00 00 00 09 82 07 00 01
+T 00 00 37 2A 04 5F 5A 20 10
+R 00 00 00 09
+T 00 00 3D
+R 00 00 00 09
+T 00 00 3D 72 FB 0E 1F 0E 1E 05 5C 1F 05 1F 01 20
+R 00 00 00 09
+T 00 00 4A C5
+R 00 00 00 09
+T 00 00 4B
+R 00 00 00 09
+T 00 00 4B 1E 01
+R 00 00 00 09
+T 00 00 4D
+R 00 00 00 09
+T 00 00 4D 5B 08 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/mbstowcs.sym b/device/lib/stm8-large/mbstowcs.sym
new file mode 100644
index 0000000..39bb102
--- /dev/null
+++ b/device/lib/stm8-large/mbstowcs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _mbstowcs 000000 GR
+ _mbtowc ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 50 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/mbtowc.asm b/device/lib/stm8-large/mbtowc.asm
new file mode 100644
index 0000000..1924ccb
--- /dev/null
+++ b/device/lib/stm8-large/mbtowc.asm
@@ -0,0 +1,299 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module mbtowc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _mbtowc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../mbtowc.c: 31: int mbtowc(wchar_t *pwc, const char *restrict s, size_t n)
+; -----------------------------------------
+; function mbtowc
+; -----------------------------------------
+_mbtowc:
+ sub sp, #12
+; ../mbtowc.c: 37: if(!s)
+; ../mbtowc.c: 38: return(0);
+ ldw x, (0x12, sp)
+ jrne 00102$
+ jpf 00126$
+00102$:
+; ../mbtowc.c: 40: seqlen = 1;
+ ld a, #0x01
+ ld (0x0b, sp), a
+; ../mbtowc.c: 41: first_byte = *s;
+ ldw y, (0x12, sp)
+ ldw (0x05, sp), y
+ ldw x, y
+ ld a, (x)
+; ../mbtowc.c: 43: if(first_byte & 0x80)
+ ld (0x0c, sp), a
+ jrpl 00107$
+; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen))
+ ld a, #0x01
+ ld (0x07, sp), a
+00103$:
+ ldw x, #0x0080
+ ld a, (0x07, sp)
+ jreq 00204$
+00203$:
+ sraw x
+ dec a
+ jrne 00203$
+00204$:
+ ld a, (0x0c, sp)
+ ld (0x09, sp), a
+ clr (0x08, sp)
+; ../mbtowc.c: 46: seqlen++;
+ ld a, (0x07, sp)
+ inc a
+; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen))
+ push a
+ ld a, xl
+ and a, (0x0a, sp)
+ ld (0x0c, sp), a
+ ld a, xh
+ and a, (0x09, sp)
+ ld (0x0b, sp), a
+ pop a
+ ldw x, (0x0a, sp)
+ jreq 00143$
+; ../mbtowc.c: 46: seqlen++;
+ ld (0x07, sp), a
+ jra 00103$
+00143$:
+ push a
+ ld a, (0x08, sp)
+ ld (0x0c, sp), a
+ pop a
+; ../mbtowc.c: 47: first_byte &= (0xff >> (seqlen + 1));
+ ldw x, #0x00ff
+ tnz a
+ jreq 00207$
+00206$:
+ sraw x
+ dec a
+ jrne 00206$
+00207$:
+ ld a, xl
+ and a, (0x0c, sp)
+ ld (0x0c, sp), a
+00107$:
+; ../mbtowc.c: 50: if(seqlen > 4 || n < seqlen)
+ ld a, (0x0b, sp)
+ cp a, #0x04
+ jrugt 00108$
+ ld a, (0x0b, sp)
+ ld (0x0a, sp), a
+ clr (0x09, sp)
+ ldw x, (0x14, sp)
+ cpw x, (0x09, sp)
+ jrnc 00136$
+00108$:
+; ../mbtowc.c: 51: return(-1);
+ clrw x
+ decw x
+ jpf 00126$
+; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++)
+00136$:
+ ld a, #0x01
+00121$:
+ cp a, (0x0b, sp)
+ jrnc 00113$
+; ../mbtowc.c: 54: if((s[i] & 0xc0) != 0x80)
+ clrw x
+ ld xl, a
+ addw x, (0x05, sp)
+ push a
+ ld a, (x)
+ and a, #0xc0
+ ld xl, a
+ clr a
+ ld xh, a
+ pop a
+ cpw x, #0x0080
+ jreq 00122$
+; ../mbtowc.c: 55: return(-1);
+ clrw x
+ decw x
+ jpf 00126$
+00122$:
+; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++)
+ inc a
+ jra 00121$
+00113$:
+; ../mbtowc.c: 57: codepoint = first_byte;
+ ld a, (0x0c, sp)
+ ld (0x0a, sp), a
+ clr (0x09, sp)
+ clrw x
+; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--)
+ ldw y, (0x05, sp)
+ incw y
+ ldw (0x12, sp), y
+ ld a, (0x0b, sp)
+ dec a
+ ldw y, (0x12, sp)
+ ldw (0x05, sp), y
+00124$:
+ tnz a
+ jreq 00114$
+; ../mbtowc.c: 61: codepoint <<= 6;
+ push a
+ ldw y, (0x0a, sp)
+ ld a, #0x06
+00215$:
+ sllw y
+ rlcw x
+ dec a
+ jrne 00215$
+ pop a
+ ldw (0x03, sp), y
+ ldw (0x01, sp), x
+; ../mbtowc.c: 62: codepoint |= (*s & 0x3f);
+ ldw x, (0x05, sp)
+ push a
+ ld a, (x)
+ ld xl, a
+ pop a
+ exg a, xl
+ ld (0x0a, sp), a
+ exg a, xl
+ clr (0x09, sp)
+ push a
+ ld a, (0x0b, sp)
+ and a, #0x3f
+ ld xl, a
+ clr a
+ ld xh, a
+ pop a
+ exgw x, y
+ clrw x
+ tnzw y
+ jrpl 00217$
+ decw x
+00217$:
+ push a
+ ld a, yl
+ or a, (0x05, sp)
+ rlwa y
+ or a, (0x04, sp)
+ ld yh, a
+ ld a, xl
+ or a, (0x03, sp)
+ rlwa x
+ or a, (0x02, sp)
+ ld xh, a
+ pop a
+ ldw (0x09, sp), y
+; ../mbtowc.c: 63: s++;
+ ldw y, (0x05, sp)
+ incw y
+ ldw (0x05, sp), y
+; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--)
+ dec a
+ jra 00124$
+00114$:
+; ../mbtowc.c: 66: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate.
+ ld a, (0x0a, sp)
+ cp a, #0x00
+ ld a, (0x09, sp)
+ sbc a, #0xd8
+ ld a, xl
+ sbc a, #0x00
+ ld a, xh
+ sbc a, #0x00
+ jrc 00116$
+ ld a, #0xff
+ cp a, (0x0a, sp)
+ ld a, #0xdf
+ sbc a, (0x09, sp)
+ clr a
+ pushw x
+ sbc a, (2, sp)
+ popw x
+ clr a
+ pushw x
+ sbc a, (1, sp)
+ popw x
+ jrc 00116$
+; ../mbtowc.c: 67: return(-1);
+ clrw x
+ decw x
+ jra 00126$
+00116$:
+; ../mbtowc.c: 69: if(pwc)
+ ldw y, (0x10, sp)
+ jreq 00119$
+; ../mbtowc.c: 70: *pwc = codepoint;
+ ldw y, (0x10, sp)
+ ld a, (0x0a, sp)
+ ld (0x3, y), a
+ ld a, (0x09, sp)
+ ld (0x2, y), a
+ ldw (y), x
+00119$:
+; ../mbtowc.c: 71: return(codepoint ? seqlen : 0);
+ ldw y, (0x09, sp)
+ jrne 00221$
+ tnzw x
+ jreq 00128$
+00221$:
+ clrw x
+ ld a, (0x0b, sp)
+ ld xl, a
+ ldw (0x0b, sp), x
+ .byte 0xbc
+00128$:
+ clrw x
+ ldw (0x0b, sp), x
+00129$:
+ ldw x, (0x0b, sp)
+00126$:
+; ../mbtowc.c: 72: }
+ addw sp, #12
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbtowc.lst b/device/lib/stm8-large/mbtowc.lst
new file mode 100644
index 0000000..adca0d5
--- /dev/null
+++ b/device/lib/stm8-large/mbtowc.lst
@@ -0,0 +1,299 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module mbtowc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _mbtowc
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../mbtowc.c: 31: int mbtowc(wchar_t *pwc, const char *restrict s, size_t n)
+ 50 ; -----------------------------------------
+ 51 ; function mbtowc
+ 52 ; -----------------------------------------
+ 000000 53 _mbtowc:
+ 000000 52 0C [ 2] 54 sub sp, #12
+ 55 ; ../mbtowc.c: 37: if(!s)
+ 56 ; ../mbtowc.c: 38: return(0);
+ 000002 1E 12 [ 2] 57 ldw x, (0x12, sp)
+ 000004 26 04 [ 1] 58 jrne 00102$
+ 000006 ACs00r01r40 [ 2] 59 jpf 00126$
+ 00000A 60 00102$:
+ 61 ; ../mbtowc.c: 40: seqlen = 1;
+ 00000A A6 01 [ 1] 62 ld a, #0x01
+ 00000C 6B 0B [ 1] 63 ld (0x0b, sp), a
+ 64 ; ../mbtowc.c: 41: first_byte = *s;
+ 00000E 16 12 [ 2] 65 ldw y, (0x12, sp)
+ 000010 17 05 [ 2] 66 ldw (0x05, sp), y
+ 000012 93 [ 1] 67 ldw x, y
+ 000013 F6 [ 1] 68 ld a, (x)
+ 69 ; ../mbtowc.c: 43: if(first_byte & 0x80)
+ 000014 6B 0C [ 1] 70 ld (0x0c, sp), a
+ 000016 2A 41 [ 1] 71 jrpl 00107$
+ 72 ; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen))
+ 000018 A6 01 [ 1] 73 ld a, #0x01
+ 00001A 6B 07 [ 1] 74 ld (0x07, sp), a
+ 00001C 75 00103$:
+ 00001C AE 00 80 [ 2] 76 ldw x, #0x0080
+ 00001F 7B 07 [ 1] 77 ld a, (0x07, sp)
+ 000021 27 04 [ 1] 78 jreq 00204$
+ 000023 79 00203$:
+ 000023 57 [ 2] 80 sraw x
+ 000024 4A [ 1] 81 dec a
+ 000025 26 FC [ 1] 82 jrne 00203$
+ 000027 83 00204$:
+ 000027 7B 0C [ 1] 84 ld a, (0x0c, sp)
+ 000029 6B 09 [ 1] 85 ld (0x09, sp), a
+ 00002B 0F 08 [ 1] 86 clr (0x08, sp)
+ 87 ; ../mbtowc.c: 46: seqlen++;
+ 00002D 7B 07 [ 1] 88 ld a, (0x07, sp)
+ 00002F 4C [ 1] 89 inc a
+ 90 ; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen))
+ 000030 88 [ 1] 91 push a
+ 000031 9F [ 1] 92 ld a, xl
+ 000032 14 0A [ 1] 93 and a, (0x0a, sp)
+ 000034 6B 0C [ 1] 94 ld (0x0c, sp), a
+ 000036 9E [ 1] 95 ld a, xh
+ 000037 14 09 [ 1] 96 and a, (0x09, sp)
+ 000039 6B 0B [ 1] 97 ld (0x0b, sp), a
+ 00003B 84 [ 1] 98 pop a
+ 00003C 1E 0A [ 2] 99 ldw x, (0x0a, sp)
+ 00003E 27 04 [ 1] 100 jreq 00143$
+ 101 ; ../mbtowc.c: 46: seqlen++;
+ 000040 6B 07 [ 1] 102 ld (0x07, sp), a
+ 000042 20 D8 [ 2] 103 jra 00103$
+ 000044 104 00143$:
+ 000044 88 [ 1] 105 push a
+ 000045 7B 08 [ 1] 106 ld a, (0x08, sp)
+ 000047 6B 0C [ 1] 107 ld (0x0c, sp), a
+ 000049 84 [ 1] 108 pop a
+ 109 ; ../mbtowc.c: 47: first_byte &= (0xff >> (seqlen + 1));
+ 00004A AE 00 FF [ 2] 110 ldw x, #0x00ff
+ 00004D 4D [ 1] 111 tnz a
+ 00004E 27 04 [ 1] 112 jreq 00207$
+ 000050 113 00206$:
+ 000050 57 [ 2] 114 sraw x
+ 000051 4A [ 1] 115 dec a
+ 000052 26 FC [ 1] 116 jrne 00206$
+ 000054 117 00207$:
+ 000054 9F [ 1] 118 ld a, xl
+ 000055 14 0C [ 1] 119 and a, (0x0c, sp)
+ 000057 6B 0C [ 1] 120 ld (0x0c, sp), a
+ 000059 121 00107$:
+ 122 ; ../mbtowc.c: 50: if(seqlen > 4 || n < seqlen)
+ 000059 7B 0B [ 1] 123 ld a, (0x0b, sp)
+ 00005B A1 04 [ 1] 124 cp a, #0x04
+ 00005D 22 0C [ 1] 125 jrugt 00108$
+ 00005F 7B 0B [ 1] 126 ld a, (0x0b, sp)
+ 000061 6B 0A [ 1] 127 ld (0x0a, sp), a
+ 000063 0F 09 [ 1] 128 clr (0x09, sp)
+ 000065 1E 14 [ 2] 129 ldw x, (0x14, sp)
+ 000067 13 09 [ 2] 130 cpw x, (0x09, sp)
+ 000069 24 06 [ 1] 131 jrnc 00136$
+ 00006B 132 00108$:
+ 133 ; ../mbtowc.c: 51: return(-1);
+ 00006B 5F [ 1] 134 clrw x
+ 00006C 5A [ 2] 135 decw x
+ 00006D ACs00r01r40 [ 2] 136 jpf 00126$
+ 137 ; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++)
+ 000071 138 00136$:
+ 000071 A6 01 [ 1] 139 ld a, #0x01
+ 000073 140 00121$:
+ 000073 11 0B [ 1] 141 cp a, (0x0b, sp)
+ 000075 24 1B [ 1] 142 jrnc 00113$
+ 143 ; ../mbtowc.c: 54: if((s[i] & 0xc0) != 0x80)
+ 000077 5F [ 1] 144 clrw x
+ 000078 97 [ 1] 145 ld xl, a
+ 000079 72 FB 05 [ 2] 146 addw x, (0x05, sp)
+ 00007C 88 [ 1] 147 push a
+ 00007D F6 [ 1] 148 ld a, (x)
+ 00007E A4 C0 [ 1] 149 and a, #0xc0
+ 000080 97 [ 1] 150 ld xl, a
+ 000081 4F [ 1] 151 clr a
+ 000082 95 [ 1] 152 ld xh, a
+ 000083 84 [ 1] 153 pop a
+ 000084 A3 00 80 [ 2] 154 cpw x, #0x0080
+ 000087 27 06 [ 1] 155 jreq 00122$
+ 156 ; ../mbtowc.c: 55: return(-1);
+ 000089 5F [ 1] 157 clrw x
+ 00008A 5A [ 2] 158 decw x
+ 00008B ACs00r01r40 [ 2] 159 jpf 00126$
+ 00008F 160 00122$:
+ 161 ; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++)
+ 00008F 4C [ 1] 162 inc a
+ 000090 20 E1 [ 2] 163 jra 00121$
+ 000092 164 00113$:
+ 165 ; ../mbtowc.c: 57: codepoint = first_byte;
+ 000092 7B 0C [ 1] 166 ld a, (0x0c, sp)
+ 000094 6B 0A [ 1] 167 ld (0x0a, sp), a
+ 000096 0F 09 [ 1] 168 clr (0x09, sp)
+ 000098 5F [ 1] 169 clrw x
+ 170 ; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--)
+ 000099 16 05 [ 2] 171 ldw y, (0x05, sp)
+ 00009B 90 5C [ 1] 172 incw y
+ 00009D 17 12 [ 2] 173 ldw (0x12, sp), y
+ 00009F 7B 0B [ 1] 174 ld a, (0x0b, sp)
+ 0000A1 4A [ 1] 175 dec a
+ 0000A2 16 12 [ 2] 176 ldw y, (0x12, sp)
+ 0000A4 17 05 [ 2] 177 ldw (0x05, sp), y
+ 0000A6 178 00124$:
+ 0000A6 4D [ 1] 179 tnz a
+ 0000A7 27 4A [ 1] 180 jreq 00114$
+ 181 ; ../mbtowc.c: 61: codepoint <<= 6;
+ 0000A9 88 [ 1] 182 push a
+ 0000AA 16 0A [ 2] 183 ldw y, (0x0a, sp)
+ 0000AC A6 06 [ 1] 184 ld a, #0x06
+ 0000AE 185 00215$:
+ 0000AE 90 58 [ 2] 186 sllw y
+ 0000B0 59 [ 2] 187 rlcw x
+ 0000B1 4A [ 1] 188 dec a
+ 0000B2 26 FA [ 1] 189 jrne 00215$
+ 0000B4 84 [ 1] 190 pop a
+ 0000B5 17 03 [ 2] 191 ldw (0x03, sp), y
+ 0000B7 1F 01 [ 2] 192 ldw (0x01, sp), x
+ 193 ; ../mbtowc.c: 62: codepoint |= (*s & 0x3f);
+ 0000B9 1E 05 [ 2] 194 ldw x, (0x05, sp)
+ 0000BB 88 [ 1] 195 push a
+ 0000BC F6 [ 1] 196 ld a, (x)
+ 0000BD 97 [ 1] 197 ld xl, a
+ 0000BE 84 [ 1] 198 pop a
+ 0000BF 41 [ 1] 199 exg a, xl
+ 0000C0 6B 0A [ 1] 200 ld (0x0a, sp), a
+ 0000C2 41 [ 1] 201 exg a, xl
+ 0000C3 0F 09 [ 1] 202 clr (0x09, sp)
+ 0000C5 88 [ 1] 203 push a
+ 0000C6 7B 0B [ 1] 204 ld a, (0x0b, sp)
+ 0000C8 A4 3F [ 1] 205 and a, #0x3f
+ 0000CA 97 [ 1] 206 ld xl, a
+ 0000CB 4F [ 1] 207 clr a
+ 0000CC 95 [ 1] 208 ld xh, a
+ 0000CD 84 [ 1] 209 pop a
+ 0000CE 51 [ 1] 210 exgw x, y
+ 0000CF 5F [ 1] 211 clrw x
+ 0000D0 90 5D [ 2] 212 tnzw y
+ 0000D2 2A 01 [ 1] 213 jrpl 00217$
+ 0000D4 5A [ 2] 214 decw x
+ 0000D5 215 00217$:
+ 0000D5 88 [ 1] 216 push a
+ 0000D6 90 9F [ 1] 217 ld a, yl
+ 0000D8 1A 05 [ 1] 218 or a, (0x05, sp)
+ 0000DA 90 02 [ 1] 219 rlwa y
+ 0000DC 1A 04 [ 1] 220 or a, (0x04, sp)
+ 0000DE 90 95 [ 1] 221 ld yh, a
+ 0000E0 9F [ 1] 222 ld a, xl
+ 0000E1 1A 03 [ 1] 223 or a, (0x03, sp)
+ 0000E3 02 [ 1] 224 rlwa x
+ 0000E4 1A 02 [ 1] 225 or a, (0x02, sp)
+ 0000E6 95 [ 1] 226 ld xh, a
+ 0000E7 84 [ 1] 227 pop a
+ 0000E8 17 09 [ 2] 228 ldw (0x09, sp), y
+ 229 ; ../mbtowc.c: 63: s++;
+ 0000EA 16 05 [ 2] 230 ldw y, (0x05, sp)
+ 0000EC 90 5C [ 1] 231 incw y
+ 0000EE 17 05 [ 2] 232 ldw (0x05, sp), y
+ 233 ; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--)
+ 0000F0 4A [ 1] 234 dec a
+ 0000F1 20 B3 [ 2] 235 jra 00124$
+ 0000F3 236 00114$:
+ 237 ; ../mbtowc.c: 66: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate.
+ 0000F3 7B 0A [ 1] 238 ld a, (0x0a, sp)
+ 0000F5 A1 00 [ 1] 239 cp a, #0x00
+ 0000F7 7B 09 [ 1] 240 ld a, (0x09, sp)
+ 0000F9 A2 D8 [ 1] 241 sbc a, #0xd8
+ 0000FB 9F [ 1] 242 ld a, xl
+ 0000FC A2 00 [ 1] 243 sbc a, #0x00
+ 0000FE 9E [ 1] 244 ld a, xh
+ 0000FF A2 00 [ 1] 245 sbc a, #0x00
+ 000101 25 18 [ 1] 246 jrc 00116$
+ 000103 A6 FF [ 1] 247 ld a, #0xff
+ 000105 11 0A [ 1] 248 cp a, (0x0a, sp)
+ 000107 A6 DF [ 1] 249 ld a, #0xdf
+ 000109 12 09 [ 1] 250 sbc a, (0x09, sp)
+ 00010B 4F [ 1] 251 clr a
+ 00010C 89 [ 2] 252 pushw x
+ 00010D 12 02 [ 1] 253 sbc a, (2, sp)
+ 00010F 85 [ 2] 254 popw x
+ 000110 4F [ 1] 255 clr a
+ 000111 89 [ 2] 256 pushw x
+ 000112 12 01 [ 1] 257 sbc a, (1, sp)
+ 000114 85 [ 2] 258 popw x
+ 000115 25 04 [ 1] 259 jrc 00116$
+ 260 ; ../mbtowc.c: 67: return(-1);
+ 000117 5F [ 1] 261 clrw x
+ 000118 5A [ 2] 262 decw x
+ 000119 20 25 [ 2] 263 jra 00126$
+ 00011B 264 00116$:
+ 265 ; ../mbtowc.c: 69: if(pwc)
+ 00011B 16 10 [ 2] 266 ldw y, (0x10, sp)
+ 00011D 27 0E [ 1] 267 jreq 00119$
+ 268 ; ../mbtowc.c: 70: *pwc = codepoint;
+ 00011F 16 10 [ 2] 269 ldw y, (0x10, sp)
+ 000121 7B 0A [ 1] 270 ld a, (0x0a, sp)
+ 000123 90 E7 03 [ 1] 271 ld (0x3, y), a
+ 000126 7B 09 [ 1] 272 ld a, (0x09, sp)
+ 000128 90 E7 02 [ 1] 273 ld (0x2, y), a
+ 00012B 90 FF [ 2] 274 ldw (y), x
+ 00012D 275 00119$:
+ 276 ; ../mbtowc.c: 71: return(codepoint ? seqlen : 0);
+ 00012D 16 09 [ 2] 277 ldw y, (0x09, sp)
+ 00012F 26 03 [ 1] 278 jrne 00221$
+ 000131 5D [ 2] 279 tnzw x
+ 000132 27 07 [ 1] 280 jreq 00128$
+ 000134 281 00221$:
+ 000134 5F [ 1] 282 clrw x
+ 000135 7B 0B [ 1] 283 ld a, (0x0b, sp)
+ 000137 97 [ 1] 284 ld xl, a
+ 000138 1F 0B [ 2] 285 ldw (0x0b, sp), x
+ 00013A BC 286 .byte 0xbc
+ 00013B 287 00128$:
+ 00013B 5F [ 1] 288 clrw x
+ 00013C 1F 0B [ 2] 289 ldw (0x0b, sp), x
+ 00013E 290 00129$:
+ 00013E 1E 0B [ 2] 291 ldw x, (0x0b, sp)
+ 000140 292 00126$:
+ 293 ; ../mbtowc.c: 72: }
+ 000140 5B 0C [ 2] 294 addw sp, #12
+ 000142 87 [ 5] 295 retf
+ 296 .area CODE
+ 297 .area CONST
+ 298 .area INITIALIZER
+ 299 .area CABS (ABS)
diff --git a/device/lib/stm8-large/mbtowc.rel b/device/lib/stm8-large/mbtowc.rel
new file mode 100644
index 0000000..aae8a5e
--- /dev/null
+++ b/device/lib/stm8-large/mbtowc.rel
@@ -0,0 +1,143 @@
+XH3
+H B areas 2 global symbols
+M mbtowc
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 143 flags 0 addr 0
+S _mbtowc Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0C 1E 12 26 04 AC 00 01 40
+R 00 00 00 09 80 0A 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A A6 01 6B 0B 16 12 17 05 93 F6 6B 0C 2A
+R 00 00 00 09
+T 00 00 17 41 A6 01 6B 07
+R 00 00 00 09
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C AE 00 80 7B 07 27 04
+R 00 00 00 09
+T 00 00 23
+R 00 00 00 09
+T 00 00 23 57 4A 26 FC
+R 00 00 00 09
+T 00 00 27
+R 00 00 00 09
+T 00 00 27 7B 0C 6B 09 0F 08 7B 07 4C 88 9F 14 0A
+R 00 00 00 09
+T 00 00 34 6B 0C 9E 14 09 6B 0B 84 1E 0A 27 04 6B
+R 00 00 00 09
+T 00 00 41 07 20 D8
+R 00 00 00 09
+T 00 00 44
+R 00 00 00 09
+T 00 00 44 88 7B 08 6B 0C 84 AE 00 FF 4D 27 04
+R 00 00 00 09
+T 00 00 50
+R 00 00 00 09
+T 00 00 50 57 4A 26 FC
+R 00 00 00 09
+T 00 00 54
+R 00 00 00 09
+T 00 00 54 9F 14 0C 6B 0C
+R 00 00 00 09
+T 00 00 59
+R 00 00 00 09
+T 00 00 59 7B 0B A1 04 22 0C 7B 0B 6B 0A 0F 09 1E
+R 00 00 00 09
+T 00 00 66 14 13 09 24 06
+R 00 00 00 09
+T 00 00 6B
+R 00 00 00 09
+T 00 00 6B 5F 5A AC 00 01 40
+R 00 00 00 09 80 06 00 09
+T 00 00 71
+R 00 00 00 09
+T 00 00 71 A6 01
+R 00 00 00 09
+T 00 00 73
+R 00 00 00 09
+T 00 00 73 11 0B 24 1B 5F 97 72 FB 05 88 F6 A4 C0
+R 00 00 00 09
+T 00 00 80 97 4F 95 84 A3 00 80 27 06 5F 5A AC
+R 00 00 00 09
+T 00 00 8C 00 01 40
+R 00 00 00 09 80 03 00 09
+T 00 00 8F
+R 00 00 00 09
+T 00 00 8F 4C 20 E1
+R 00 00 00 09
+T 00 00 92
+R 00 00 00 09
+T 00 00 92 7B 0C 6B 0A 0F 09 5F 16 05 90 5C 17 12
+R 00 00 00 09
+T 00 00 9F 7B 0B 4A 16 12 17 05
+R 00 00 00 09
+T 00 00 A6
+R 00 00 00 09
+T 00 00 A6 4D 27 4A 88 16 0A A6 06
+R 00 00 00 09
+T 00 00 AE
+R 00 00 00 09
+T 00 00 AE 90 58 59 4A 26 FA 84 17 03 1F 01 1E 05
+R 00 00 00 09
+T 00 00 BB 88 F6 97 84 41 6B 0A 41 0F 09 88 7B 0B
+R 00 00 00 09
+T 00 00 C8 A4 3F 97 4F 95 84 51 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 00 D5
+R 00 00 00 09
+T 00 00 D5 88 90 9F 1A 05 90 02 1A 04 90 95 9F 1A
+R 00 00 00 09
+T 00 00 E2 03 02 1A 02 95 84 17 09 16 05 90 5C 17
+R 00 00 00 09
+T 00 00 EF 05 4A 20 B3
+R 00 00 00 09
+T 00 00 F3
+R 00 00 00 09
+T 00 00 F3 7B 0A A1 00 7B 09 A2 D8 9F A2 00 9E A2
+R 00 00 00 09
+T 00 01 00 00 25 18 A6 FF 11 0A A6 DF 12 09 4F 89
+R 00 00 00 09
+T 00 01 0D 12 02 85 4F 89 12 01 85 25 04 5F 5A 20
+R 00 00 00 09
+T 00 01 1A 25
+R 00 00 00 09
+T 00 01 1B
+R 00 00 00 09
+T 00 01 1B 16 10 27 0E 16 10 7B 0A 90 E7 03 7B 09
+R 00 00 00 09
+T 00 01 28 90 E7 02 90 FF
+R 00 00 00 09
+T 00 01 2D
+R 00 00 00 09
+T 00 01 2D 16 09 26 03 5D 27 07
+R 00 00 00 09
+T 00 01 34
+R 00 00 00 09
+T 00 01 34 5F 7B 0B 97 1F 0B BC
+R 00 00 00 09
+T 00 01 3B
+R 00 00 00 09
+T 00 01 3B 5F 1F 0B
+R 00 00 00 09
+T 00 01 3E
+R 00 00 00 09
+T 00 01 3E 1E 0B
+R 00 00 00 09
+T 00 01 40
+R 00 00 00 09
+T 00 01 40 5B 0C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/mbtowc.sym b/device/lib/stm8-large/mbtowc.sym
new file mode 100644
index 0000000..98c710d
--- /dev/null
+++ b/device/lib/stm8-large/mbtowc.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _mbtowc 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 143 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/memccpy.asm b/device/lib/stm8-large/memccpy.asm
new file mode 100644
index 0000000..fe796db
--- /dev/null
+++ b/device/lib/stm8-large/memccpy.asm
@@ -0,0 +1,100 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module memccpy
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _memccpy
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../memccpy.c: 31: void *memccpy (void *restrict dst, const void *restrict src, int c, size_t n)
+; -----------------------------------------
+; function memccpy
+; -----------------------------------------
+_memccpy:
+ sub sp, #7
+; ../memccpy.c: 33: char *d = dst;
+ ldw x, (0x0b, sp)
+; ../memccpy.c: 34: const char *s = src;
+ ldw y, (0x0d, sp)
+; ../memccpy.c: 36: while (n--)
+ ldw (0x04, sp), y
+ ldw (0x06, sp), x
+ ldw y, (0x11, sp)
+00103$:
+ ldw (0x02, sp), y
+ decw y
+ ldw x, (0x02, sp)
+ jreq 00105$
+; ../memccpy.c: 37: if ((*d++ = *s++) == (unsigned char)c)
+ ldw x, (0x04, sp)
+ ld a, (x)
+ ld (0x01, sp), a
+ ldw x, (0x04, sp)
+ incw x
+ ldw (0x04, sp), x
+ ldw x, (0x06, sp)
+ ld a, (0x01, sp)
+ ld (x), a
+ ldw x, (0x06, sp)
+ incw x
+ ldw (0x06, sp), x
+ ldw (0x02, sp), x
+ ld a, (0x10, sp)
+ cp a, (0x01, sp)
+ jrne 00103$
+; ../memccpy.c: 38: return (d);
+ ldw y, (0x02, sp)
+ ldw (0x06, sp), y
+ ldw x, y
+; ../memccpy.c: 40: return (0);
+ .byte 0x21
+00105$:
+ clrw x
+00106$:
+; ../memccpy.c: 41: }
+ addw sp, #7
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/memccpy.lst b/device/lib/stm8-large/memccpy.lst
new file mode 100644
index 0000000..4e5e2cb
--- /dev/null
+++ b/device/lib/stm8-large/memccpy.lst
@@ -0,0 +1,100 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module memccpy
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _memccpy
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../memccpy.c: 31: void *memccpy (void *restrict dst, const void *restrict src, int c, size_t n)
+ 50 ; -----------------------------------------
+ 51 ; function memccpy
+ 52 ; -----------------------------------------
+ 000000 53 _memccpy:
+ 000000 52 07 [ 2] 54 sub sp, #7
+ 55 ; ../memccpy.c: 33: char *d = dst;
+ 000002 1E 0B [ 2] 56 ldw x, (0x0b, sp)
+ 57 ; ../memccpy.c: 34: const char *s = src;
+ 000004 16 0D [ 2] 58 ldw y, (0x0d, sp)
+ 59 ; ../memccpy.c: 36: while (n--)
+ 000006 17 04 [ 2] 60 ldw (0x04, sp), y
+ 000008 1F 06 [ 2] 61 ldw (0x06, sp), x
+ 00000A 16 11 [ 2] 62 ldw y, (0x11, sp)
+ 00000C 63 00103$:
+ 00000C 17 02 [ 2] 64 ldw (0x02, sp), y
+ 00000E 90 5A [ 2] 65 decw y
+ 000010 1E 02 [ 2] 66 ldw x, (0x02, sp)
+ 000012 27 22 [ 1] 67 jreq 00105$
+ 68 ; ../memccpy.c: 37: if ((*d++ = *s++) == (unsigned char)c)
+ 000014 1E 04 [ 2] 69 ldw x, (0x04, sp)
+ 000016 F6 [ 1] 70 ld a, (x)
+ 000017 6B 01 [ 1] 71 ld (0x01, sp), a
+ 000019 1E 04 [ 2] 72 ldw x, (0x04, sp)
+ 00001B 5C [ 1] 73 incw x
+ 00001C 1F 04 [ 2] 74 ldw (0x04, sp), x
+ 00001E 1E 06 [ 2] 75 ldw x, (0x06, sp)
+ 000020 7B 01 [ 1] 76 ld a, (0x01, sp)
+ 000022 F7 [ 1] 77 ld (x), a
+ 000023 1E 06 [ 2] 78 ldw x, (0x06, sp)
+ 000025 5C [ 1] 79 incw x
+ 000026 1F 06 [ 2] 80 ldw (0x06, sp), x
+ 000028 1F 02 [ 2] 81 ldw (0x02, sp), x
+ 00002A 7B 10 [ 1] 82 ld a, (0x10, sp)
+ 00002C 11 01 [ 1] 83 cp a, (0x01, sp)
+ 00002E 26 DC [ 1] 84 jrne 00103$
+ 85 ; ../memccpy.c: 38: return (d);
+ 000030 16 02 [ 2] 86 ldw y, (0x02, sp)
+ 000032 17 06 [ 2] 87 ldw (0x06, sp), y
+ 000034 93 [ 1] 88 ldw x, y
+ 89 ; ../memccpy.c: 40: return (0);
+ 000035 21 90 .byte 0x21
+ 000036 91 00105$:
+ 000036 5F [ 1] 92 clrw x
+ 000037 93 00106$:
+ 94 ; ../memccpy.c: 41: }
+ 000037 5B 07 [ 2] 95 addw sp, #7
+ 000039 87 [ 5] 96 retf
+ 97 .area CODE
+ 98 .area CONST
+ 99 .area INITIALIZER
+ 100 .area CABS (ABS)
diff --git a/device/lib/stm8-large/memccpy.rel b/device/lib/stm8-large/memccpy.rel
new file mode 100644
index 0000000..df537a5
--- /dev/null
+++ b/device/lib/stm8-large/memccpy.rel
@@ -0,0 +1,39 @@
+XH3
+H B areas 2 global symbols
+M memccpy
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3A flags 0 addr 0
+S _memccpy Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 07 1E 0B 16 0D 17 04 1F 06 16 11
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 17 02 90 5A 1E 02 27 22 1E 04 F6 6B 01
+R 00 00 00 09
+T 00 00 19 1E 04 5C 1F 04 1E 06 7B 01 F7 1E 06 5C
+R 00 00 00 09
+T 00 00 26 1F 06 1F 02 7B 10 11 01 26 DC 16 02 17
+R 00 00 00 09
+T 00 00 33 06 93 21
+R 00 00 00 09
+T 00 00 36
+R 00 00 00 09
+T 00 00 36 5F
+R 00 00 00 09
+T 00 00 37
+R 00 00 00 09
+T 00 00 37 5B 07 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/memccpy.sym b/device/lib/stm8-large/memccpy.sym
new file mode 100644
index 0000000..cbe21df
--- /dev/null
+++ b/device/lib/stm8-large/memccpy.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _memccpy 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/memcpy.lst b/device/lib/stm8-large/memcpy.lst
new file mode 100644
index 0000000..4ac4de2
--- /dev/null
+++ b/device/lib/stm8-large/memcpy.lst
@@ -0,0 +1,91 @@
+ 1 ;--------------------------------------------------------------------------
+ 2 ; memcpy.s
+ 3 ;
+ 4 ; Copyright (C) 2018, Benedikt Freisen
+ 5 ;
+ 6 ; This library is free software; you can redistribute it and/or modify it
+ 7 ; under the terms of the GNU General Public License as published by the
+ 8 ; Free Software Foundation; either version 2, or (at your option) any
+ 9 ; later version.
+ 10 ;
+ 11 ; This library is distributed in the hope that it will be useful,
+ 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 14 ; GNU General Public License for more details.
+ 15 ;
+ 16 ; You should have received a copy of the GNU General Public License
+ 17 ; along with this library; see the file COPYING. If not, write to the
+ 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ 19 ; MA 02110-1301, USA.
+ 20 ;
+ 21 ; As a special exception, if you link this library with other files,
+ 22 ; some of which are compiled with SDCC, to produce an executable,
+ 23 ; this library does not by itself cause the resulting executable to
+ 24 ; be covered by the GNU General Public License. This exception does
+ 25 ; not however invalidate any other reasons why the executable file
+ 26 ; might be covered by the GNU General Public License.
+ 27 ;--------------------------------------------------------------------------
+ 28
+ 29 ; This memcpy() implementation has been optimized for speed using 4x loop
+ 30 ; unrolling and index relative addressing.
+ 31
+ 32 ; void *memcpy(void *dest, const void *src, size_t n);
+ 33
+ 34 .globl ___memcpy
+ 35 .globl _memcpy
+ 36
+ 37 .area CODE
+ 38
+ 000000 39 ___memcpy:
+ 000000 40 _memcpy:
+ 000000 16 04 [ 2] 41 ldw y, (4, sp)
+ 000002 1E 06 [ 2] 42 ldw x, (6, sp)
+ 43
+ 000004 04 08 [ 1] 44 srl (8, sp)
+ 000006 06 09 [ 1] 45 rrc (9, sp)
+ 000008 24 06 [ 1] 46 jrnc n_x0
+ 00000A F6 [ 1] 47 ld a, (x)
+ 00000B 90 F7 [ 1] 48 ld (y), a
+ 00000D 5C [ 1] 49 incw x
+ 00000E 90 5C [ 1] 50 incw y
+ 000010 51 n_x0:
+ 000010 04 08 [ 1] 52 srl (8, sp)
+ 000012 06 09 [ 1] 53 rrc (9, sp)
+ 000014 24 0C [ 1] 54 jrnc n_00
+ 000016 F6 [ 1] 55 ld a, (x)
+ 000017 90 F7 [ 1] 56 ld (y), a
+ 000019 5C [ 1] 57 incw x
+ 00001A 90 5C [ 1] 58 incw y
+ 00001C F6 [ 1] 59 ld a, (x)
+ 00001D 90 F7 [ 1] 60 ld (y), a
+ 00001F 5C [ 1] 61 incw x
+ 000020 90 5C [ 1] 62 incw y
+ 000022 63 n_00:
+ 000022 0D 09 [ 1] 64 tnz (9, sp)
+ 000024 26 0D [ 1] 65 jrne loop_ent
+ 000026 0A 08 [ 1] 66 dec (8, sp)
+ 000028 2B 23 [ 1] 67 jrmi end
+ 00002A 20 07 [ 2] 68 jra loop_ent
+ 69
+ 00002C 70 loop:
+ 00002C 1C 00 04 [ 2] 71 addw x, #4
+ 00002F 72 A9 00 04 [ 2] 72 addw y, #4
+ 000033 73 loop_ent:
+ 000033 F6 [ 1] 74 ld a, (x)
+ 000034 90 F7 [ 1] 75 ld (y), a
+ 000036 E6 01 [ 1] 76 ld a, (1, x)
+ 000038 90 E7 01 [ 1] 77 ld (1, y), a
+ 00003B E6 02 [ 1] 78 ld a, (2, x)
+ 00003D 90 E7 02 [ 1] 79 ld (2, y), a
+ 000040 E6 03 [ 1] 80 ld a, (3, x)
+ 000042 90 E7 03 [ 1] 81 ld (3, y), a
+ 82
+ 000045 0A 09 [ 1] 83 dec (9, sp)
+ 000047 26 E3 [ 1] 84 jrne loop
+ 000049 0A 08 [ 1] 85 dec (8, sp)
+ 00004B 2A DF [ 1] 86 jrpl loop
+ 87
+ 00004D 88 end:
+ 00004D 1E 04 [ 2] 89 ldw x, (4, sp)
+ 00004F 87 [ 5] 90 retf
+ 91
diff --git a/device/lib/stm8-large/memcpy.rel b/device/lib/stm8-large/memcpy.rel
new file mode 100644
index 0000000..bdf881a
--- /dev/null
+++ b/device/lib/stm8-large/memcpy.rel
@@ -0,0 +1,39 @@
+XH3
+H 2 areas 3 global symbols
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A CODE size 50 flags 0 addr 0
+S ___memcpy Def000000
+S _memcpy Def000000
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 00 16 04 1E 06 04 08 06 09 24 06 F6 90 F7
+R 00 00 00 01
+T 00 00 0D 5C 90 5C
+R 00 00 00 01
+T 00 00 10
+R 00 00 00 01
+T 00 00 10 04 08 06 09 24 0C F6 90 F7 5C 90 5C F6
+R 00 00 00 01
+T 00 00 1D 90 F7 5C 90 5C
+R 00 00 00 01
+T 00 00 22
+R 00 00 00 01
+T 00 00 22 0D 09 26 0D 0A 08 2B 23 20 07
+R 00 00 00 01
+T 00 00 2C
+R 00 00 00 01
+T 00 00 2C 1C 00 04 72 A9 00 04
+R 00 00 00 01
+T 00 00 33
+R 00 00 00 01
+T 00 00 33 F6 90 F7 E6 01 90 E7 01 E6 02 90 E7 02
+R 00 00 00 01
+T 00 00 40 E6 03 90 E7 03 0A 09 26 E3 0A 08 2A DF
+R 00 00 00 01
+T 00 00 4D
+R 00 00 00 01
+T 00 00 4D 1E 04 87
+R 00 00 00 01
diff --git a/device/lib/stm8-large/memcpy.s b/device/lib/stm8-large/memcpy.s
new file mode 100644
index 0000000..3d3ed8c
--- /dev/null
+++ b/device/lib/stm8-large/memcpy.s
@@ -0,0 +1,91 @@
+;--------------------------------------------------------------------------
+; memcpy.s
+;
+; Copyright (C) 2018, Benedikt Freisen
+;
+; This library is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 2, or (at your option) any
+; later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this library; see the file COPYING. If not, write to the
+; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+; MA 02110-1301, USA.
+;
+; As a special exception, if you link this library with other files,
+; some of which are compiled with SDCC, to produce an executable,
+; this library does not by itself cause the resulting executable to
+; be covered by the GNU General Public License. This exception does
+; not however invalidate any other reasons why the executable file
+; might be covered by the GNU General Public License.
+;--------------------------------------------------------------------------
+
+; This memcpy() implementation has been optimized for speed using 4x loop
+; unrolling and index relative addressing.
+
+; void *memcpy(void *dest, const void *src, size_t n);
+
+ .globl ___memcpy
+ .globl _memcpy
+
+ .area CODE
+
+___memcpy:
+_memcpy:
+ ldw y, (4, sp)
+ ldw x, (6, sp)
+
+ srl (8, sp)
+ rrc (9, sp)
+ jrnc n_x0
+ ld a, (x)
+ ld (y), a
+ incw x
+ incw y
+n_x0:
+ srl (8, sp)
+ rrc (9, sp)
+ jrnc n_00
+ ld a, (x)
+ ld (y), a
+ incw x
+ incw y
+ ld a, (x)
+ ld (y), a
+ incw x
+ incw y
+n_00:
+ tnz (9, sp)
+ jrne loop_ent
+ dec (8, sp)
+ jrmi end
+ jra loop_ent
+
+loop:
+ addw x, #4
+ addw y, #4
+loop_ent:
+ ld a, (x)
+ ld (y), a
+ ld a, (1, x)
+ ld (1, y), a
+ ld a, (2, x)
+ ld (2, y), a
+ ld a, (3, x)
+ ld (3, y), a
+
+ dec (9, sp)
+ jrne loop
+ dec (8, sp)
+ jrpl loop
+
+end:
+ ldw x, (4, sp)
+ retf
+
diff --git a/device/lib/stm8-large/memcpy.sym b/device/lib/stm8-large/memcpy.sym
new file mode 100644
index 0000000..0aac69d
--- /dev/null
+++ b/device/lib/stm8-large/memcpy.sym
@@ -0,0 +1,18 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L
+ .__.H$L.= 000001 L | 1 ___memcp 000000 GR | 1 _memcpy 000000 GR
+ 1 end 00004D R | 1 loop 00002C R | 1 loop_ent 000033 R
+ 1 n_00 000022 R | 1 n_x0 000010 R
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 CODE size 50 flags 0
+
diff --git a/device/lib/stm8-large/modff.asm b/device/lib/stm8-large/modff.asm
new file mode 100644
index 0000000..a388770
--- /dev/null
+++ b/device/lib/stm8-large/modff.asm
@@ -0,0 +1,90 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module modff
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _modff
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../modff.c: 33: float modff(float x, float * y)
+; -----------------------------------------
+; function modff
+; -----------------------------------------
+_modff:
+ sub sp, #6
+; ../modff.c: 35: *y=(long)x;
+ ldw y, (0x0e, sp)
+ ldw (0x01, sp), y
+ ldw x, (0x0c, sp)
+ pushw x
+ ldw x, (0x0c, sp)
+ pushw x
+ callf ___fs2slong
+ addw sp, #4
+ pushw x
+ pushw y
+ callf ___slong2fs
+ addw sp, #4
+ ldw (0x05, sp), x
+ ldw x, (0x01, sp)
+ ld a, (0x06, sp)
+ ld (0x3, x), a
+ ld a, (0x05, sp)
+ ld (0x2, x), a
+ ldw (x), y
+; ../modff.c: 36: return (x-*y);
+ ldw x, (0x05, sp)
+ pushw x
+ pushw y
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ callf ___fssub
+; ../modff.c: 37: }
+ addw sp, #14
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/modff.lst b/device/lib/stm8-large/modff.lst
new file mode 100644
index 0000000..e5fa4c1
--- /dev/null
+++ b/device/lib/stm8-large/modff.lst
@@ -0,0 +1,90 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module modff
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _modff
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../modff.c: 33: float modff(float x, float * y)
+ 50 ; -----------------------------------------
+ 51 ; function modff
+ 52 ; -----------------------------------------
+ 000000 53 _modff:
+ 000000 52 06 [ 2] 54 sub sp, #6
+ 55 ; ../modff.c: 35: *y=(long)x;
+ 000002 16 0E [ 2] 56 ldw y, (0x0e, sp)
+ 000004 17 01 [ 2] 57 ldw (0x01, sp), y
+ 000006 1E 0C [ 2] 58 ldw x, (0x0c, sp)
+ 000008 89 [ 2] 59 pushw x
+ 000009 1E 0C [ 2] 60 ldw x, (0x0c, sp)
+ 00000B 89 [ 2] 61 pushw x
+ 00000C 8Ds00r00r00 [ 5] 62 callf ___fs2slong
+ 000010 5B 04 [ 2] 63 addw sp, #4
+ 000012 89 [ 2] 64 pushw x
+ 000013 90 89 [ 2] 65 pushw y
+ 000015 8Ds00r00r00 [ 5] 66 callf ___slong2fs
+ 000019 5B 04 [ 2] 67 addw sp, #4
+ 00001B 1F 05 [ 2] 68 ldw (0x05, sp), x
+ 00001D 1E 01 [ 2] 69 ldw x, (0x01, sp)
+ 00001F 7B 06 [ 1] 70 ld a, (0x06, sp)
+ 000021 E7 03 [ 1] 71 ld (0x3, x), a
+ 000023 7B 05 [ 1] 72 ld a, (0x05, sp)
+ 000025 E7 02 [ 1] 73 ld (0x2, x), a
+ 000027 FF [ 2] 74 ldw (x), y
+ 75 ; ../modff.c: 36: return (x-*y);
+ 000028 1E 05 [ 2] 76 ldw x, (0x05, sp)
+ 00002A 89 [ 2] 77 pushw x
+ 00002B 90 89 [ 2] 78 pushw y
+ 00002D 1E 10 [ 2] 79 ldw x, (0x10, sp)
+ 00002F 89 [ 2] 80 pushw x
+ 000030 1E 10 [ 2] 81 ldw x, (0x10, sp)
+ 000032 89 [ 2] 82 pushw x
+ 000033 8Ds00r00r00 [ 5] 83 callf ___fssub
+ 84 ; ../modff.c: 37: }
+ 000037 5B 0E [ 2] 85 addw sp, #14
+ 000039 87 [ 5] 86 retf
+ 87 .area CODE
+ 88 .area CONST
+ 89 .area INITIALIZER
+ 90 .area CABS (ABS)
diff --git a/device/lib/stm8-large/modff.rel b/device/lib/stm8-large/modff.rel
new file mode 100644
index 0000000..315aa63
--- /dev/null
+++ b/device/lib/stm8-large/modff.rel
@@ -0,0 +1,32 @@
+XH3
+H B areas 5 global symbols
+M modff
+O -mstm8
+S ___fssub Ref000000
+S ___slong2fs Ref000000
+S ___fs2slong Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3A flags 0 addr 0
+S _modff Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 16 0E 17 01 1E 0C 89 1E 0C 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 04 89 90 89 8D
+R 00 00 00 09 82 03 00 02
+T 00 00 16 00 00 00 5B 04 1F 05 1E 01 7B 06 E7 03
+R 00 00 00 09 82 03 00 01
+T 00 00 23 7B 05 E7 02 FF 1E 05 89 90 89 1E 10 89
+R 00 00 00 09
+T 00 00 30 1E 10 89 8D 00 00 00 5B 0E 87
+R 00 00 00 09 82 07 00 00
diff --git a/device/lib/stm8-large/modff.sym b/device/lib/stm8-large/modff.sym
new file mode 100644
index 0000000..e103c91
--- /dev/null
+++ b/device/lib/stm8-large/modff.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fs2slong ****** GX
+ ___fssub ****** GX
+ ___slong2fs ****** GX
+ 9 _modff 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/powf.asm b/device/lib/stm8-large/powf.asm
new file mode 100644
index 0000000..fab86f6
--- /dev/null
+++ b/device/lib/stm8-large/powf.asm
@@ -0,0 +1,129 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module powf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _logf
+ .globl _expf
+ .globl _powf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../powf.c: 35: float powf(float x, float y)
+; -----------------------------------------
+; function powf
+; -----------------------------------------
+_powf:
+ sub sp, #4
+; ../powf.c: 37: if(y == 0.0) return 1.0;
+ ldw x, (0x0e, sp)
+ jrne 00102$
+ ldw x, (0x0c, sp)
+ sllw x
+ jrne 00102$
+ clrw x
+ ldw y, #0x3f80
+ jra 00107$
+00102$:
+; ../powf.c: 38: if(y == 1.0) return x;
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf ___fseq
+ addw sp, #8
+ tnz a
+ jreq 00104$
+ ldw x, (0x0a, sp)
+ ldw y, (0x08, sp)
+ jra 00107$
+00104$:
+; ../powf.c: 39: if(x <= 0.0) return 0.0;
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jrne 00106$
+ clrw x
+ clrw y
+ jra 00107$
+00106$:
+; ../powf.c: 40: return expf(logf(x) * y);
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ callf _logf
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x0e, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ callf _expf
+ addw sp, #4
+00107$:
+; ../powf.c: 41: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/powf.lst b/device/lib/stm8-large/powf.lst
new file mode 100644
index 0000000..c9a5a17
--- /dev/null
+++ b/device/lib/stm8-large/powf.lst
@@ -0,0 +1,129 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module powf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _logf
+ 12 .globl _expf
+ 13 .globl _powf
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../powf.c: 35: float powf(float x, float y)
+ 52 ; -----------------------------------------
+ 53 ; function powf
+ 54 ; -----------------------------------------
+ 000000 55 _powf:
+ 000000 52 04 [ 2] 56 sub sp, #4
+ 57 ; ../powf.c: 37: if(y == 0.0) return 1.0;
+ 000002 1E 0E [ 2] 58 ldw x, (0x0e, sp)
+ 000004 26 0C [ 1] 59 jrne 00102$
+ 000006 1E 0C [ 2] 60 ldw x, (0x0c, sp)
+ 000008 58 [ 2] 61 sllw x
+ 000009 26 07 [ 1] 62 jrne 00102$
+ 00000B 5F [ 1] 63 clrw x
+ 00000C 90 AE 3F 80 [ 2] 64 ldw y, #0x3f80
+ 000010 20 5B [ 2] 65 jra 00107$
+ 000012 66 00102$:
+ 67 ; ../powf.c: 38: if(y == 1.0) return x;
+ 000012 5F [ 1] 68 clrw x
+ 000013 89 [ 2] 69 pushw x
+ 000014 4B 80 [ 1] 70 push #0x80
+ 000016 4B 3F [ 1] 71 push #0x3f
+ 000018 1E 12 [ 2] 72 ldw x, (0x12, sp)
+ 00001A 89 [ 2] 73 pushw x
+ 00001B 1E 12 [ 2] 74 ldw x, (0x12, sp)
+ 00001D 89 [ 2] 75 pushw x
+ 00001E 8Ds00r00r00 [ 5] 76 callf ___fseq
+ 000022 5B 08 [ 2] 77 addw sp, #8
+ 000024 4D [ 1] 78 tnz a
+ 000025 27 06 [ 1] 79 jreq 00104$
+ 000027 1E 0A [ 2] 80 ldw x, (0x0a, sp)
+ 000029 16 08 [ 2] 81 ldw y, (0x08, sp)
+ 00002B 20 40 [ 2] 82 jra 00107$
+ 00002D 83 00104$:
+ 84 ; ../powf.c: 39: if(x <= 0.0) return 0.0;
+ 00002D 1E 0A [ 2] 85 ldw x, (0x0a, sp)
+ 00002F 89 [ 2] 86 pushw x
+ 000030 1E 0A [ 2] 87 ldw x, (0x0a, sp)
+ 000032 89 [ 2] 88 pushw x
+ 000033 5F [ 1] 89 clrw x
+ 000034 89 [ 2] 90 pushw x
+ 000035 5F [ 1] 91 clrw x
+ 000036 89 [ 2] 92 pushw x
+ 000037 8Ds00r00r00 [ 5] 93 callf ___fslt
+ 00003B 5B 08 [ 2] 94 addw sp, #8
+ 00003D 4D [ 1] 95 tnz a
+ 00003E 26 05 [ 1] 96 jrne 00106$
+ 000040 5F [ 1] 97 clrw x
+ 000041 90 5F [ 1] 98 clrw y
+ 000043 20 28 [ 2] 99 jra 00107$
+ 000045 100 00106$:
+ 101 ; ../powf.c: 40: return expf(logf(x) * y);
+ 000045 1E 0A [ 2] 102 ldw x, (0x0a, sp)
+ 000047 89 [ 2] 103 pushw x
+ 000048 1E 0A [ 2] 104 ldw x, (0x0a, sp)
+ 00004A 89 [ 2] 105 pushw x
+ 00004B 8Ds00r00r00 [ 5] 106 callf _logf
+ 00004F 5B 04 [ 2] 107 addw sp, #4
+ 000051 1F 03 [ 2] 108 ldw (0x03, sp), x
+ 000053 1E 0E [ 2] 109 ldw x, (0x0e, sp)
+ 000055 89 [ 2] 110 pushw x
+ 000056 1E 0E [ 2] 111 ldw x, (0x0e, sp)
+ 000058 89 [ 2] 112 pushw x
+ 000059 1E 07 [ 2] 113 ldw x, (0x07, sp)
+ 00005B 89 [ 2] 114 pushw x
+ 00005C 90 89 [ 2] 115 pushw y
+ 00005E 8Ds00r00r00 [ 5] 116 callf ___fsmul
+ 000062 5B 08 [ 2] 117 addw sp, #8
+ 000064 89 [ 2] 118 pushw x
+ 000065 90 89 [ 2] 119 pushw y
+ 000067 8Ds00r00r00 [ 5] 120 callf _expf
+ 00006B 5B 04 [ 2] 121 addw sp, #4
+ 00006D 122 00107$:
+ 123 ; ../powf.c: 41: }
+ 00006D 5B 04 [ 2] 124 addw sp, #4
+ 00006F 87 [ 5] 125 retf
+ 126 .area CODE
+ 127 .area CONST
+ 128 .area INITIALIZER
+ 129 .area CABS (ABS)
diff --git a/device/lib/stm8-large/powf.rel b/device/lib/stm8-large/powf.rel
new file mode 100644
index 0000000..b2e948b
--- /dev/null
+++ b/device/lib/stm8-large/powf.rel
@@ -0,0 +1,56 @@
+XH3
+H B areas 7 global symbols
+M powf
+O -mstm8
+S ___fsmul Ref000000
+S _logf Ref000000
+S ___fseq Ref000000
+S _expf Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 70 flags 0 addr 0
+S _powf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 1E 0E 26 0C 1E 0C 58 26 07 5F 90
+R 00 00 00 09
+T 00 00 0D AE 3F 80 20 5B
+R 00 00 00 09
+T 00 00 12
+R 00 00 00 09
+T 00 00 12 5F 89 4B 80 4B 3F 1E 12 89 1E 12 89 8D
+R 00 00 00 09
+T 00 00 1F 00 00 00 5B 08 4D 27 06 1E 0A 16 08 20
+R 00 00 00 09 82 03 00 02
+T 00 00 2C 40
+R 00 00 00 09
+T 00 00 2D
+R 00 00 00 09
+T 00 00 2D 1E 0A 89 1E 0A 89 5F 89 5F 89 8D
+R 00 00 00 09
+T 00 00 38 00 00 00 5B 08 4D 26 05 5F 90 5F 20 28
+R 00 00 00 09 82 03 00 04
+T 00 00 45
+R 00 00 00 09
+T 00 00 45 1E 0A 89 1E 0A 89 8D 00 00 00 5B 04 1F
+R 00 00 00 09 82 0A 00 01
+T 00 00 52 03 1E 0E 89 1E 0E 89 1E 07 89 90 89 8D
+R 00 00 00 09
+T 00 00 5F 00 00 00 5B 08 89 90 89 8D
+R 00 00 00 09 82 03 00 00
+T 00 00 68 00 00 00 5B 04
+R 00 00 00 09 82 03 00 03
+T 00 00 6D
+R 00 00 00 09
+T 00 00 6D 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/powf.sym b/device/lib/stm8-large/powf.sym
new file mode 100644
index 0000000..55b9f59
--- /dev/null
+++ b/device/lib/stm8-large/powf.sym
@@ -0,0 +1,34 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fseq ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ _expf ****** GX
+ _logf ****** GX
+ 9 _powf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 70 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/printf_large.asm b/device/lib/stm8-large/printf_large.asm
new file mode 100644
index 0000000..41c3930
--- /dev/null
+++ b/device/lib/stm8-large/printf_large.asm
@@ -0,0 +1,1426 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module printf_large
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strlen
+ .globl __print_format
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../printf_large.c: 116: output_digit (unsigned char n, bool lower_case, pfn_outputchar output_char, void* p)
+; -----------------------------------------
+; function output_digit
+; -----------------------------------------
+_output_digit:
+; ../printf_large.c: 118: register unsigned char c = n + (unsigned char)'0';
+ ld a, (0x04, sp)
+ add a, #0x30
+; ../printf_large.c: 120: if (c > (unsigned char)'9')
+ cp a, #0x39
+ jrule 00104$
+; ../printf_large.c: 122: c += (unsigned char)('A' - '0' - 10);
+ add a, #0x07
+; ../printf_large.c: 123: if (lower_case)
+ tnz (0x05, sp)
+ jreq 00104$
+; ../printf_large.c: 124: c += (unsigned char)('a' - 'A');
+ add a, #0x20
+00104$:
+; ../printf_large.c: 126: output_char( c, p );
+ ldw x, (0x09, sp)
+ pushw x
+ push a
+ push #(00119$)
+ push #(00119$ >> 8)
+ push #(00119$ >> 16)
+ ldw x, (0x0d, sp)
+ pushw x
+ ld a, (0x0e, sp)
+ push a
+ retf
+00119$:
+ addw sp, #3
+; ../printf_large.c: 127: }
+ retf
+; ../printf_large.c: 149: output_2digits (unsigned char b, bool lower_case, pfn_outputchar output_char, void* p)
+; -----------------------------------------
+; function output_2digits
+; -----------------------------------------
+_output_2digits:
+ push a
+; ../printf_large.c: 151: output_digit( b>>4, lower_case, output_char, p );
+ ld a, (0x05, sp)
+ swap a
+ and a, #0x0f
+ ld (0x01, sp), a
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ ld a, (0x0b, sp)
+ push a
+ ld a, (0x0b, sp)
+ push a
+ ld a, (0x07, sp)
+ push a
+ callf _output_digit
+ addw sp, #7
+; ../printf_large.c: 152: output_digit( b&0x0F, lower_case, output_char, p );
+ ld a, (0x05, sp)
+ and a, #0x0f
+ ld (0x01, sp), a
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ ld a, (0x0b, sp)
+ push a
+ ld a, (0x0b, sp)
+ push a
+ ld a, (0x07, sp)
+ push a
+ callf _output_digit
+; ../printf_large.c: 153: }
+ addw sp, #8
+ retf
+; ../printf_large.c: 168: calculate_digit (value_t _AUTOMEM * value, unsigned char radix)
+; -----------------------------------------
+; function calculate_digit
+; -----------------------------------------
+_calculate_digit:
+ sub sp, #9
+; ../printf_large.c: 170: unsigned long ul = value->ul;
+ ldw y, (0x0d, sp)
+ ldw (0x01, sp), y
+ ldw x, y
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+; ../printf_large.c: 171: unsigned char _AUTOMEM * pb4 = &value->byte[4];
+ ldw x, (0x01, sp)
+ addw x, #0x0004
+ ldw (0x03, sp), x
+; ../printf_large.c: 172: unsigned char i = 32;
+ ld a, #0x20
+ ld (0x05, sp), a
+; ../printf_large.c: 174: do
+00103$:
+; ../printf_large.c: 176: *pb4 = (*pb4 << 1) | ((ul >> 31) & 0x01);
+ ldw x, (0x03, sp)
+ ld a, (x)
+ sll a
+ ld xl, a
+ ld a, (0x06, sp)
+ sll a
+ clr a
+ rlc a
+ pushw x
+ or a, (2, sp)
+ popw x
+ ldw x, (0x03, sp)
+ ld (x), a
+; ../printf_large.c: 177: ul <<= 1;
+ sll (0x09, sp)
+ rlc (0x08, sp)
+ rlc (0x07, sp)
+ rlc (0x06, sp)
+; ../printf_large.c: 179: if (radix <= *pb4 )
+ cp a, (0x0f, sp)
+ jrc 00104$
+; ../printf_large.c: 181: *pb4 -= radix;
+ ldw x, (0x03, sp)
+ ld a, (x)
+ sub a, (0x0f, sp)
+ ldw x, (0x03, sp)
+ ld (x), a
+; ../printf_large.c: 182: ul |= 1;
+ ld a, (0x09, sp)
+ or a, #0x01
+ ld yl, a
+ ld a, (0x08, sp)
+ ld yh, a
+ ld a, (0x07, sp)
+ ld xl, a
+ ld a, (0x06, sp)
+ ld xh, a
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+00104$:
+; ../printf_large.c: 184: } while (--i);
+ dec (0x05, sp)
+ jrne 00103$
+; ../printf_large.c: 185: value->ul = ul;
+ ldw x, (0x01, sp)
+ ldw y, (0x08, sp)
+ ldw (0x2, x), y
+ ldw y, (0x06, sp)
+ ldw (x), y
+; ../printf_large.c: 186: }
+ addw sp, #9
+ retf
+; ../printf_large.c: 434: _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list ap)
+; -----------------------------------------
+; function _print_format
+; -----------------------------------------
+__print_format:
+ sub sp, #45
+; ../printf_large.c: 466: charsOutputted = 0;
+ clrw x
+ ldw (0x10, sp), x
+; ../printf_large.c: 475: while( c=*format++ )
+ ldw x, sp
+ addw x, #15
+ ldw (0x12, sp), x
+ ldw x, sp
+ addw x, #5
+ ldw (0x14, sp), x
+ addw x, #0x0004
+ ldw (0x16, sp), x
+ ldw (0x18, sp), x
+ ldw y, (0x16, sp)
+ ldw (0x1a, sp), y
+00231$:
+ ldw x, (0x36, sp)
+ ld a, (x)
+ incw x
+ ldw (0x36, sp), x
+ ld xl, a
+ tnz a
+ jrne 00627$
+ jpf 00233$
+00627$:
+; ../printf_large.c: 477: if ( c=='%' )
+ ld a, xl
+ cp a, #0x25
+ jreq 00630$
+ jpf 00229$
+00630$:
+; ../printf_large.c: 479: left_justify = 0;
+ clr (0x1c, sp)
+; ../printf_large.c: 480: zero_padding = 0;
+ clr (0x1d, sp)
+; ../printf_large.c: 481: prefix_sign = 0;
+ clr (0x1e, sp)
+; ../printf_large.c: 482: prefix_space = 0;
+ clr (0x1f, sp)
+; ../printf_large.c: 483: signed_argument = 0;
+ clr (0x20, sp)
+; ../printf_large.c: 484: char_argument = 0;
+ clr (0x21, sp)
+; ../printf_large.c: 485: long_argument = 0;
+ clr (0x22, sp)
+; ../printf_large.c: 486: float_argument = 0;
+ clr (0x23, sp)
+; ../printf_large.c: 487: radix = 0;
+ clr (0x24, sp)
+; ../printf_large.c: 488: width = 0;
+ clrw x
+ ldw (0x25, sp), x
+; ../printf_large.c: 489: decimals = -1;
+ ldw x, #0xffff
+ ldw (0x2a, sp), x
+; ../printf_large.c: 491: get_conversion_spec:
+ ldw y, (0x36, sp)
+ ldw (0x28, sp), y
+00101$:
+; ../printf_large.c: 493: c = *format++;
+ ldw x, (0x28, sp)
+ ld a, (x)
+ ld (0x2d, sp), a
+ ldw x, (0x28, sp)
+ incw x
+ ldw (0x28, sp), x
+ ldw (0x36, sp), x
+; ../printf_large.c: 495: if (c=='%')
+ ld a, (0x2d, sp)
+ cp a, #0x25
+ jrne 00103$
+; ../printf_large.c: 497: OUTPUT_CHAR(c, p);
+ ldw x, (0x34, sp)
+ pushw x
+ ld a, (0x2f, sp)
+ push a
+ push #(00635$)
+ push #(00635$ >> 8)
+ push #(00635$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00635$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+; ../printf_large.c: 498: continue;
+ jra 00231$
+00103$:
+; ../printf_large.c: 501: if (isdigit(c))
+ ld a, (0x2d, sp)
+ cp a, #0x30
+ jrc 00110$
+ ld a, (0x2d, sp)
+ cp a, #0x39
+ jrugt 00110$
+; ../printf_large.c: 503: if (decimals==-1)
+ ldw x, (0x2a, sp)
+ incw x
+ jrne 00107$
+; ../printf_large.c: 505: width = 10*width + c - '0';
+ ldw x, (0x25, sp)
+ sllw x
+ sllw x
+ addw x, (0x25, sp)
+ sllw x
+ ldw (0x03, sp), x
+ clr (0x2c, sp)
+ ldw x, (0x03, sp)
+ addw x, (0x2c, sp)
+ ldw (0x26, sp), x
+ subw x, #0x0030
+ ldw (0x2c, sp), x
+; ../printf_large.c: 506: if (width == 0)
+ ldw (0x25, sp), x
+ jrne 00101$
+; ../printf_large.c: 509: zero_padding = 1;
+ ld a, #0x01
+ ld (0x1d, sp), a
+ jra 00101$
+00107$:
+; ../printf_large.c: 514: decimals = 10*decimals + c - '0';
+ ldw x, (0x2a, sp)
+ sllw x
+ sllw x
+ addw x, (0x2a, sp)
+ sllw x
+ ldw (0x03, sp), x
+ clr (0x2c, sp)
+ ldw x, (0x03, sp)
+ addw x, (0x2c, sp)
+ ldw (0x2a, sp), x
+ subw x, #0x0030
+ ldw (0x2c, sp), x
+ ldw (0x2a, sp), x
+; ../printf_large.c: 516: goto get_conversion_spec;
+ jra 00101$
+00110$:
+; ../printf_large.c: 519: if (c=='.')
+ ld a, (0x2d, sp)
+ cp a, #0x2e
+ jrne 00115$
+; ../printf_large.c: 521: if (decimals==-1)
+ ldw x, (0x2a, sp)
+ incw x
+ jreq 00647$
+ jpf 00101$
+00647$:
+; ../printf_large.c: 522: decimals=0;
+ clrw x
+ ldw (0x2a, sp), x
+; ../printf_large.c: 525: goto get_conversion_spec;
+ jpf 00101$
+00115$:
+; ../printf_large.c: 528: if (islower(c))
+ ld a, (0x2d, sp)
+ cp a, #0x61
+ jrc 00117$
+ ld a, (0x2d, sp)
+ cp a, #0x7a
+ jrugt 00117$
+; ../printf_large.c: 530: c = toupper(c);
+ ld a, (0x2d, sp)
+ and a, #0xdf
+ ld (0x2d, sp), a
+; ../printf_large.c: 531: lower_case = 1;
+ ld a, #0x01
+ ld (0x27, sp), a
+; ../printf_large.c: 534: lower_case = 0;
+ .byte 0xc5
+00117$:
+ clr (0x27, sp)
+00118$:
+; ../printf_large.c: 536: switch( c )
+ ld a, (0x2d, sp)
+ cp a, #0x20
+ jrne 00651$
+ jpf 00122$
+00651$:
+ ld a, (0x2d, sp)
+ cp a, #0x2b
+ jrne 00654$
+ jpf 00121$
+00654$:
+ ld a, (0x2d, sp)
+ cp a, #0x2d
+ jrne 00657$
+ jpf 00120$
+00657$:
+ ld a, (0x2d, sp)
+ cp a, #0x42
+ jrne 00660$
+ jpf 00123$
+00660$:
+ ld a, (0x2d, sp)
+ cp a, #0x43
+ jrne 00663$
+ jpf 00129$
+00663$:
+ ld a, (0x2d, sp)
+ cp a, #0x44
+ jrne 00666$
+ jpf 00154$
+00666$:
+ ld a, (0x2d, sp)
+ cp a, #0x46
+ jrne 00669$
+ jpf 00158$
+00669$:
+ ld a, (0x2d, sp)
+ cp a, #0x48
+ jrne 00672$
+ jpf 00101$
+00672$:
+ ld a, (0x2d, sp)
+ cp a, #0x49
+ jrne 00675$
+ jpf 00154$
+00675$:
+ ld a, (0x2d, sp)
+ cp a, #0x4a
+ jrne 00678$
+ jpf 00101$
+00678$:
+ ld a, (0x2d, sp)
+ cp a, #0x4c
+ jreq 00128$
+ ld a, (0x2d, sp)
+ cp a, #0x4f
+ jrne 00684$
+ jpf 00155$
+00684$:
+ ld a, (0x2d, sp)
+ cp a, #0x50
+ jrne 00687$
+ jpf 00152$
+00687$:
+ ld a, (0x2d, sp)
+ cp a, #0x53
+ jrne 00690$
+ jpf 00133$
+00690$:
+ ld a, (0x2d, sp)
+ cp a, #0x54
+ jrne 00693$
+ jpf 00101$
+00693$:
+ ld a, (0x2d, sp)
+ cp a, #0x55
+ jrne 00696$
+ jpf 00156$
+00696$:
+ ld a, (0x2d, sp)
+ cp a, #0x58
+ jrne 00699$
+ jpf 00157$
+00699$:
+ ld a, (0x2d, sp)
+ cp a, #0x5a
+ jrne 00702$
+ jpf 00101$
+00702$:
+ jpf 00159$
+; ../printf_large.c: 538: case '-':
+00120$:
+; ../printf_large.c: 539: left_justify = 1;
+ ld a, #0x01
+ ld (0x1c, sp), a
+; ../printf_large.c: 540: goto get_conversion_spec;
+ jpf 00101$
+; ../printf_large.c: 541: case '+':
+00121$:
+; ../printf_large.c: 542: prefix_sign = 1;
+ ld a, #0x01
+ ld (0x1e, sp), a
+; ../printf_large.c: 543: goto get_conversion_spec;
+ jpf 00101$
+; ../printf_large.c: 544: case ' ':
+00122$:
+; ../printf_large.c: 545: prefix_space = 1;
+ ld a, #0x01
+ ld (0x1f, sp), a
+; ../printf_large.c: 546: goto get_conversion_spec;
+ jpf 00101$
+; ../printf_large.c: 547: case 'B': /* byte */
+00123$:
+; ../printf_large.c: 548: char_argument = 1;
+ ld a, #0x01
+ ld (0x21, sp), a
+; ../printf_large.c: 549: goto get_conversion_spec;
+ jpf 00101$
+; ../printf_large.c: 556: case 'L': /* long */
+00128$:
+; ../printf_large.c: 557: long_argument = 1;
+ ld a, #0x01
+ ld (0x22, sp), a
+; ../printf_large.c: 558: goto get_conversion_spec;
+ jpf 00101$
+; ../printf_large.c: 560: case 'C':
+00129$:
+; ../printf_large.c: 561: if( char_argument )
+ tnz (0x21, sp)
+ jreq 00131$
+; ../printf_large.c: 562: c = va_arg(ap,char);
+ ldw x, (0x38, sp)
+ incw x
+ ldw (0x38, sp), x
+ addw x, #0xffff
+ ld a, (x)
+ jra 00132$
+00131$:
+; ../printf_large.c: 564: c = va_arg(ap,int);
+ ldw x, (0x38, sp)
+ incw x
+ incw x
+ ldw (0x38, sp), x
+ decw x
+ decw x
+ ld a, (0x1, x)
+00132$:
+; ../printf_large.c: 565: OUTPUT_CHAR( c, p );
+ ldw x, (0x34, sp)
+ pushw x
+ push a
+ push #(00705$)
+ push #(00705$ >> 8)
+ push #(00705$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00705$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+; ../printf_large.c: 566: break;
+ jpf 00160$
+; ../printf_large.c: 568: case 'S':
+00133$:
+; ../printf_large.c: 569: PTR = va_arg(ap,ptr_t);
+ ldw x, (0x38, sp)
+ incw x
+ incw x
+ ldw (0x38, sp), x
+ decw x
+ decw x
+ ldw x, (x)
+ ldw (0x05, sp), x
+; ../printf_large.c: 582: length = strlen(PTR);
+ pushw x
+ callf _strlen
+ addw sp, #2
+ ldw (0x28, sp), x
+; ../printf_large.c: 584: if ( decimals == -1 )
+ ldw x, (0x2a, sp)
+ incw x
+ jrne 00135$
+; ../printf_large.c: 586: decimals = length;
+ ldw y, (0x28, sp)
+ ldw (0x2a, sp), y
+00135$:
+; ../printf_large.c: 588: if ( ( !left_justify ) && (length < width) )
+ tnz (0x1c, sp)
+ jrne 00277$
+ ldw x, (0x28, sp)
+ cpw x, (0x25, sp)
+ jrnc 00277$
+; ../printf_large.c: 590: width -= length;
+ ldw x, (0x25, sp)
+ subw x, (0x28, sp)
+; ../printf_large.c: 591: while( width-- != 0 )
+ ldw y, (0x10, sp)
+ ldw (0x25, sp), y
+ ldw (0x2c, sp), x
+00136$:
+ ldw x, (0x2c, sp)
+ ldw y, (0x2c, sp)
+ decw y
+ ldw (0x2c, sp), y
+ tnzw x
+ jreq 00312$
+; ../printf_large.c: 593: OUTPUT_CHAR( ' ', p );
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x20
+ push #(00712$)
+ push #(00712$ >> 8)
+ push #(00712$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00712$:
+ addw sp, #3
+ ldw x, (0x25, sp)
+ incw x
+ ldw (0x25, sp), x
+ jra 00136$
+; ../printf_large.c: 597: while ( (c = *PTR) && (decimals-- > 0))
+00312$:
+ ldw y, (0x25, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x2c, sp)
+ ldw (0x25, sp), y
+00277$:
+ ldw y, (0x10, sp)
+ ldw (0x2c, sp), y
+00143$:
+ ldw x, (0x05, sp)
+ ld a, (x)
+ ld (0x11, sp), a
+ jreq 00313$
+ ldw x, (0x2a, sp)
+ cpw x, #0x0000
+ jrsle 00313$
+ ldw x, (0x2a, sp)
+ decw x
+ ldw (0x2a, sp), x
+; ../printf_large.c: 599: OUTPUT_CHAR( c, p );
+ ldw x, (0x34, sp)
+ pushw x
+ ld a, (0x13, sp)
+ push a
+ push #(00716$)
+ push #(00716$ >> 8)
+ push #(00716$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00716$:
+ addw sp, #3
+ ldw x, (0x2c, sp)
+ incw x
+ ldw (0x2c, sp), x
+; ../printf_large.c: 600: PTR++;
+ ldw x, (0x05, sp)
+ incw x
+ ldw (0x05, sp), x
+ jra 00143$
+00313$:
+ ldw y, (0x2c, sp)
+ ldw (0x10, sp), y
+; ../printf_large.c: 603: if ( left_justify && (length < width))
+ tnz (0x1c, sp)
+ jrne 00718$
+ jpf 00160$
+00718$:
+ ldw x, (0x28, sp)
+ cpw x, (0x25, sp)
+ jrc 00719$
+ jpf 00160$
+00719$:
+; ../printf_large.c: 605: width -= length;
+ ldw x, (0x25, sp)
+ subw x, (0x28, sp)
+ ldw (0x2a, sp), x
+ ldw (0x25, sp), x
+; ../printf_large.c: 606: while( width-- != 0 )
+ ldw y, (0x2c, sp)
+ ldw (0x29, sp), y
+ ldw y, (0x25, sp)
+ ldw (0x2c, sp), y
+00146$:
+ ldw x, (0x2c, sp)
+ ldw y, (0x2c, sp)
+ decw y
+ ldw (0x2c, sp), y
+ tnzw x
+ jrne 00720$
+ jpf 00314$
+00720$:
+; ../printf_large.c: 608: OUTPUT_CHAR( ' ', p );
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x20
+ push #(00721$)
+ push #(00721$ >> 8)
+ push #(00721$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00721$:
+ addw sp, #3
+ ldw x, (0x29, sp)
+ incw x
+ ldw (0x29, sp), x
+ jra 00146$
+; ../printf_large.c: 613: case 'P':
+00152$:
+; ../printf_large.c: 614: PTR = va_arg(ap,ptr_t);
+ ldw x, (0x38, sp)
+ incw x
+ incw x
+ ldw (0x2a, sp), x
+ ldw (0x38, sp), x
+ ldw x, (0x2a, sp)
+ decw x
+ decw x
+ ldw (0x2c, sp), x
+ ldw (0x2a, sp), x
+ ldw x, (x)
+ ldw (0x2c, sp), x
+ ldw (0x05, sp), x
+; ../printf_large.c: 658: OUTPUT_CHAR('0', p);
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x30
+ push #(00723$)
+ push #(00723$ >> 8)
+ push #(00723$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00723$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x2a, sp), x
+; ../printf_large.c: 659: OUTPUT_CHAR('x', p);
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x78
+ push #(00724$)
+ push #(00724$ >> 8)
+ push #(00724$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00724$:
+ addw sp, #3
+ ldw x, (0x2a, sp)
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x2a, sp), x
+; ../printf_large.c: 660: OUTPUT_2DIGITS( value.byte[1] );
+ ld a, (0x06, sp)
+ ld (0x2d, sp), a
+ ldw x, (0x34, sp)
+ pushw x
+ ldw x, (0x34, sp)
+ pushw x
+ ld a, (0x35, sp)
+ push a
+ ld a, (0x2c, sp)
+ push a
+ ld a, (0x33, sp)
+ push a
+ callf _output_2digits
+ addw sp, #7
+ ldw x, (0x2a, sp)
+ incw x
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x2a, sp), x
+; ../printf_large.c: 661: OUTPUT_2DIGITS( value.byte[0] );
+ ld a, (0x05, sp)
+ ld (0x2d, sp), a
+ ldw x, (0x34, sp)
+ pushw x
+ ldw x, (0x34, sp)
+ pushw x
+ ld a, (0x35, sp)
+ push a
+ ld a, (0x2c, sp)
+ push a
+ ld a, (0x33, sp)
+ push a
+ callf _output_2digits
+ addw sp, #7
+ ldw x, (0x2a, sp)
+ incw x
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x10, sp), x
+; ../printf_large.c: 663: break;
+ jra 00160$
+; ../printf_large.c: 666: case 'I':
+00154$:
+; ../printf_large.c: 667: signed_argument = 1;
+ ld a, #0x01
+ ld (0x20, sp), a
+; ../printf_large.c: 668: radix = 10;
+ ld a, #0x0a
+ ld (0x24, sp), a
+; ../printf_large.c: 669: break;
+ jra 00160$
+; ../printf_large.c: 671: case 'O':
+00155$:
+; ../printf_large.c: 672: radix = 8;
+ ld a, #0x08
+ ld (0x24, sp), a
+; ../printf_large.c: 673: break;
+ jra 00160$
+; ../printf_large.c: 675: case 'U':
+00156$:
+; ../printf_large.c: 676: radix = 10;
+ ld a, #0x0a
+ ld (0x24, sp), a
+; ../printf_large.c: 677: break;
+ jra 00160$
+; ../printf_large.c: 679: case 'X':
+00157$:
+; ../printf_large.c: 680: radix = 16;
+ ld a, #0x10
+ ld (0x24, sp), a
+; ../printf_large.c: 681: break;
+ jra 00160$
+; ../printf_large.c: 683: case 'F':
+00158$:
+; ../printf_large.c: 684: float_argument=1;
+ ld a, #0x01
+ ld (0x23, sp), a
+; ../printf_large.c: 685: break;
+ jra 00160$
+; ../printf_large.c: 687: default:
+00159$:
+; ../printf_large.c: 689: OUTPUT_CHAR( c, p );
+ ldw x, (0x34, sp)
+ pushw x
+ ld a, (0x2f, sp)
+ push a
+ push #(00725$)
+ push #(00725$ >> 8)
+ push #(00725$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00725$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x10, sp), x
+; ../printf_large.c: 872: return charsOutputted;
+ jra 00160$
+; ../printf_large.c: 691: }
+00314$:
+ ldw y, (0x29, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x2c, sp)
+ ldw (0x25, sp), y
+00160$:
+; ../printf_large.c: 693: if (float_argument)
+ tnz (0x23, sp)
+ jreq 00226$
+; ../printf_large.c: 695: value.f = va_arg(ap, float);
+ ldw x, (0x38, sp)
+ addw x, #0x0004
+ ldw (0x38, sp), x
+ subw x, #0x0004
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+; ../printf_large.c: 697: PTR="<NO FLOAT>";
+ ldw x, #(___str_0 + 0)
+ ldw (0x05, sp), x
+; ../printf_large.c: 698: while (c=*PTR++)
+ ldw y, (0x10, sp)
+ ldw (0x2c, sp), y
+00161$:
+ ldw y, (0x05, sp)
+ ldw (0x28, sp), y
+ ldw x, y
+ incw x
+ ldw (0x2a, sp), x
+ ldw (0x05, sp), x
+ ldw x, (0x28, sp)
+ ld a, (x)
+ ld xl, a
+ tnz a
+ jrne 00727$
+ jpf 00231$
+00727$:
+; ../printf_large.c: 700: OUTPUT_CHAR (c, p);
+ ldw y, (0x34, sp)
+ pushw y
+ ld a, xl
+ push a
+ push #(00728$)
+ push #(00728$ >> 8)
+ push #(00728$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00728$:
+ addw sp, #3
+ ldw x, (0x2c, sp)
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x10, sp), x
+ jra 00161$
+00226$:
+; ../printf_large.c: 718: else if (radix != 0)
+ tnz (0x24, sp)
+ jrne 00730$
+ jpf 00231$
+00730$:
+; ../printf_large.c: 723: unsigned char MEM_SPACE_BUF_PP *pstore = &store[5];
+ ldw x, (0x12, sp)
+ ldw (0x2b, sp), x
+; ../printf_large.c: 726: if (char_argument)
+ tnz (0x21, sp)
+ jreq 00172$
+; ../printf_large.c: 728: value.l = va_arg(ap, char);
+ ldw x, (0x38, sp)
+ incw x
+ ldw (0x38, sp), x
+ addw x, #0xffff
+ ld a, (x)
+ clrw x
+ ld xl, a
+ clrw y
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../printf_large.c: 729: if (!signed_argument)
+ tnz (0x20, sp)
+ jrne 00173$
+; ../printf_large.c: 731: value.l &= 0xFF;
+ ldw x, (0x07, sp)
+ clr a
+ ld xh, a
+ clrw y
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+ jra 00173$
+00172$:
+; ../printf_large.c: 734: else if (long_argument)
+ tnz (0x22, sp)
+ jreq 00169$
+; ../printf_large.c: 736: value.l = va_arg(ap, long);
+ ldw x, (0x38, sp)
+ addw x, #0x0004
+ ldw (0x38, sp), x
+ subw x, #0x0004
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+ jra 00173$
+00169$:
+; ../printf_large.c: 740: value.l = va_arg(ap, int);
+ ldw x, (0x38, sp)
+ incw x
+ incw x
+ ldw (0x38, sp), x
+ decw x
+ decw x
+ ldw x, (x)
+ clrw y
+ tnzw x
+ jrpl 00734$
+ decw y
+00734$:
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../printf_large.c: 741: if (!signed_argument)
+ tnz (0x20, sp)
+ jrne 00173$
+; ../printf_large.c: 743: value.l &= 0xFFFF;
+ ldw y, (0x07, sp)
+ clrw x
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+00173$:
+; ../printf_large.c: 747: if ( signed_argument )
+ tnz (0x20, sp)
+ jreq 00178$
+; ../printf_large.c: 749: if (value.l < 0)
+ ldw x, (0x05, sp)
+ jrpl 00175$
+; ../printf_large.c: 750: value.l = -value.l;
+ ldw y, (0x07, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x01, sp), y
+ ldw y, (0x03, sp)
+ negw y
+ ldw x, (0x01, sp)
+ jrnc 00738$
+ incw x
+00738$:
+ negw x
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+; ../printf_large.c: 752: signed_argument = 0;
+ .byte 0xc5
+00175$:
+ clr (0x20, sp)
+00178$:
+; ../printf_large.c: 756: lsd = 1;
+ ld a, #0x01
+ ld (0x2d, sp), a
+; ../printf_large.c: 758: do {
+ ldw y, (0x2b, sp)
+ ldw (0x29, sp), y
+ clrw x
+ ldw (0x2b, sp), x
+00182$:
+; ../printf_large.c: 759: value.byte[4] = 0;
+ clr (0x09, sp)
+; ../printf_large.c: 761: calculate_digit(&value, radix);
+ ldw x, (0x14, sp)
+ ld a, (0x24, sp)
+ push a
+ pushw x
+ callf _calculate_digit
+ addw sp, #3
+; ../printf_large.c: 765: if (!lsd)
+ tnz (0x2d, sp)
+ jrne 00180$
+; ../printf_large.c: 767: *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore;
+ ldw x, (0x18, sp)
+ ld a, (x)
+ swap a
+ and a, #0xf0
+ ld xl, a
+ ldw y, (0x18, sp)
+ ld a, (y)
+ swap a
+ and a, #0x0f
+ pushw x
+ or a, (2, sp)
+ popw x
+ ld (0x28, sp), a
+ ldw x, (0x29, sp)
+ ld a, (x)
+ or a, (0x28, sp)
+ ldw x, (0x29, sp)
+ ld (x), a
+; ../printf_large.c: 768: pstore--;
+ ldw x, (0x29, sp)
+ decw x
+ ldw (0x29, sp), x
+ jra 00181$
+00180$:
+; ../printf_large.c: 772: *pstore = value.byte[4];
+ ldw x, (0x16, sp)
+ ld a, (x)
+ ldw x, (0x29, sp)
+ ld (x), a
+00181$:
+; ../printf_large.c: 774: length++;
+ ldw x, (0x2b, sp)
+ incw x
+ ldw (0x2b, sp), x
+; ../printf_large.c: 775: lsd = !lsd;
+ ld a, (0x2d, sp)
+ sub a, #0x01
+ clr a
+ rlc a
+ ld (0x2d, sp), a
+; ../printf_large.c: 776: } while( value.ul );
+ ldw x, (0x14, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x03, sp), y
+ ldw x, (x)
+ ldw y, (0x03, sp)
+ jrne 00182$
+ tnzw x
+ jrne 00182$
+; ../printf_large.c: 778: if (width == 0)
+ ldw y, (0x29, sp)
+ ldw (0x21, sp), y
+ ldw y, (0x2b, sp)
+ ldw (0x23, sp), y
+ ldw x, (0x25, sp)
+ jrne 00186$
+; ../printf_large.c: 783: width = 1;
+ ldw x, #0x0001
+ ldw (0x25, sp), x
+00186$:
+; ../printf_large.c: 787: if (!zero_padding && !left_justify)
+ tnz (0x1d, sp)
+ jrne 00191$
+ tnz (0x1c, sp)
+ jrne 00191$
+; ../printf_large.c: 789: while ( width > (unsigned char) (length+1) )
+ ldw y, (0x10, sp)
+ ldw (0x29, sp), y
+ ldw y, (0x25, sp)
+ ldw (0x2b, sp), y
+00187$:
+ ld a, (0x24, sp)
+ inc a
+ clrw x
+ ld xl, a
+ cpw x, (0x2b, sp)
+ jrnc 00316$
+; ../printf_large.c: 791: OUTPUT_CHAR( ' ', p );
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x20
+ push #(00747$)
+ push #(00747$ >> 8)
+ push #(00747$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00747$:
+ addw sp, #3
+ ldw x, (0x29, sp)
+ incw x
+ ldw (0x29, sp), x
+; ../printf_large.c: 792: width--;
+ ldw x, (0x2b, sp)
+ decw x
+ ldw (0x2b, sp), x
+ jra 00187$
+00316$:
+ ldw y, (0x29, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x2b, sp)
+ ldw (0x25, sp), y
+00191$:
+; ../printf_large.c: 796: if (signed_argument) // this now means the original value was negative
+ tnz (0x20, sp)
+ jreq 00201$
+; ../printf_large.c: 798: OUTPUT_CHAR( '-', p );
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x2d
+ push #(00750$)
+ push #(00750$ >> 8)
+ push #(00750$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00750$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+; ../printf_large.c: 800: width--;
+ ldw x, (0x25, sp)
+ decw x
+ ldw (0x25, sp), x
+ jra 00202$
+00201$:
+; ../printf_large.c: 802: else if (length != 0)
+ ldw x, (0x23, sp)
+ jreq 00202$
+; ../printf_large.c: 805: if (prefix_sign)
+ tnz (0x1e, sp)
+ jreq 00196$
+; ../printf_large.c: 807: OUTPUT_CHAR( '+', p );
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x2b
+ push #(00753$)
+ push #(00753$ >> 8)
+ push #(00753$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00753$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+; ../printf_large.c: 809: width--;
+ ldw x, (0x25, sp)
+ decw x
+ ldw (0x25, sp), x
+ jra 00202$
+00196$:
+; ../printf_large.c: 811: else if (prefix_space)
+ tnz (0x1f, sp)
+ jreq 00202$
+; ../printf_large.c: 813: OUTPUT_CHAR( ' ', p );
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x20
+ push #(00755$)
+ push #(00755$ >> 8)
+ push #(00755$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00755$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+; ../printf_large.c: 815: width--;
+ ldw x, (0x25, sp)
+ decw x
+ ldw (0x25, sp), x
+00202$:
+; ../printf_large.c: 820: if (!left_justify)
+ tnz (0x1c, sp)
+ jrne 00210$
+; ../printf_large.c: 822: while ( width-- > length )
+ ldw y, (0x10, sp)
+ ldw (0x29, sp), y
+ ldw y, (0x25, sp)
+ ldw (0x2b, sp), y
+00203$:
+ ldw y, (0x2b, sp)
+ ldw x, (0x2b, sp)
+ decw x
+ ldw (0x2b, sp), x
+ ldw x, y
+ cpw x, (0x23, sp)
+ jrule 00317$
+; ../printf_large.c: 824: OUTPUT_CHAR( zero_padding ? '0' : ' ', p );
+ tnz (0x1d, sp)
+ jreq 00236$
+ ldw x, #0x0030
+ .byte 0xbc
+00236$:
+ ldw x, #0x0020
+00237$:
+ ld a, xl
+ ldw x, (0x34, sp)
+ pushw x
+ push a
+ push #(00759$)
+ push #(00759$ >> 8)
+ push #(00759$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00759$:
+ addw sp, #3
+ ldw x, (0x29, sp)
+ incw x
+ ldw (0x29, sp), x
+ jra 00203$
+00210$:
+; ../printf_large.c: 830: if (width > length)
+ ldw x, (0x25, sp)
+ cpw x, (0x23, sp)
+ jrule 00207$
+; ../printf_large.c: 831: width -= length;
+ ldw x, (0x25, sp)
+ subw x, (0x23, sp)
+ ldw (0x28, sp), x
+ jra 00309$
+00207$:
+; ../printf_large.c: 833: width = 0;
+ clrw x
+ ldw (0x28, sp), x
+; ../printf_large.c: 872: return charsOutputted;
+ jra 00309$
+; ../printf_large.c: 837: while( length-- )
+00317$:
+ ldw y, (0x29, sp)
+ ldw (0x10, sp), y
+ ldw y, (0x2b, sp)
+ ldw (0x28, sp), y
+00309$:
+ ldw y, (0x21, sp)
+ ldw (0x2b, sp), y
+ ldw y, (0x10, sp)
+ ldw (0x25, sp), y
+00215$:
+ ldw x, (0x23, sp)
+ ldw y, (0x23, sp)
+ decw y
+ ldw (0x23, sp), y
+ tnzw x
+ jreq 00318$
+; ../printf_large.c: 839: lsd = !lsd;
+ ld a, (0x2d, sp)
+ sub a, #0x01
+ clr a
+ rlc a
+; ../printf_large.c: 840: if (!lsd)
+ ld (0x2d, sp), a
+ jrne 00213$
+; ../printf_large.c: 842: pstore++;
+ ldw x, (0x2b, sp)
+ incw x
+; ../printf_large.c: 843: value.byte[4] = *pstore >> 4;
+ ldw (0x2b, sp), x
+ ld a, (x)
+ swap a
+ and a, #0x0f
+ ldw x, (0x16, sp)
+ ld (x), a
+ jra 00214$
+00213$:
+; ../printf_large.c: 847: value.byte[4] = *pstore & 0x0F;
+ ldw x, (0x2b, sp)
+ ld a, (x)
+ and a, #0x0f
+ ldw x, (0x16, sp)
+ ld (x), a
+00214$:
+; ../printf_large.c: 850: output_digit( value.byte[4], lower_case, output_char, p );
+ ldw x, (0x1a, sp)
+ ld a, (x)
+ ld (0x2a, sp), a
+ ldw x, (0x34, sp)
+ pushw x
+ ldw x, (0x34, sp)
+ pushw x
+ ld a, (0x35, sp)
+ push a
+ ld a, (0x2c, sp)
+ push a
+ ld a, (0x30, sp)
+ push a
+ callf _output_digit
+ addw sp, #7
+; ../printf_large.c: 851: charsOutputted++;
+ ldw x, (0x25, sp)
+ incw x
+ ldw (0x25, sp), x
+ jra 00215$
+00318$:
+ ldw y, (0x25, sp)
+ ldw (0x10, sp), y
+; ../printf_large.c: 856: if (left_justify)
+ tnz (0x1c, sp)
+ jrne 00766$
+ jpf 00231$
+00766$:
+; ../printf_large.c: 858: while (width-- > 0)
+ ldw y, (0x25, sp)
+ ldw (0x2c, sp), y
+ ldw y, (0x28, sp)
+ ldw (0x2a, sp), y
+00218$:
+ ldw x, (0x2a, sp)
+ ldw y, (0x2a, sp)
+ decw y
+ ldw (0x2a, sp), y
+ tnzw x
+ jrne 00767$
+ jpf 00231$
+00767$:
+; ../printf_large.c: 860: OUTPUT_CHAR(' ', p);
+ ldw x, (0x34, sp)
+ pushw x
+ push #0x20
+ push #(00768$)
+ push #(00768$ >> 8)
+ push #(00768$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00768$:
+ addw sp, #3
+ ldw x, (0x2c, sp)
+ incw x
+ ldw (0x2c, sp), x
+ ldw (0x10, sp), x
+ jra 00218$
+00229$:
+; ../printf_large.c: 868: OUTPUT_CHAR( c, p );
+ ldw y, (0x34, sp)
+ pushw y
+ ld a, xl
+ push a
+ push #(00770$)
+ push #(00770$ >> 8)
+ push #(00770$ >> 16)
+ ldw x, (0x38, sp)
+ pushw x
+ ld a, (0x39, sp)
+ push a
+ retf
+00770$:
+ addw sp, #3
+ ldw x, (0x10, sp)
+ incw x
+ ldw (0x10, sp), x
+ jpf 00231$
+00233$:
+; ../printf_large.c: 872: return charsOutputted;
+ ldw x, (0x10, sp)
+; ../printf_large.c: 873: }
+ addw sp, #45
+ retf
+ .area CODE
+ .area CONST
+ .area CONST
+___str_0:
+ .ascii "<NO FLOAT>"
+ .db 0x00
+ .area CODE
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/printf_large.lst b/device/lib/stm8-large/printf_large.lst
new file mode 100644
index 0000000..c18a192
--- /dev/null
+++ b/device/lib/stm8-large/printf_large.lst
@@ -0,0 +1,1427 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module printf_large
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strlen
+ 12 .globl __print_format
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../printf_large.c: 116: output_digit (unsigned char n, bool lower_case, pfn_outputchar output_char, void* p)
+ 51 ; -----------------------------------------
+ 52 ; function output_digit
+ 53 ; -----------------------------------------
+ 000000 54 _output_digit:
+ 55 ; ../printf_large.c: 118: register unsigned char c = n + (unsigned char)'0';
+ 000000 7B 04 [ 1] 56 ld a, (0x04, sp)
+ 000002 AB 30 [ 1] 57 add a, #0x30
+ 58 ; ../printf_large.c: 120: if (c > (unsigned char)'9')
+ 000004 A1 39 [ 1] 59 cp a, #0x39
+ 000006 23 08 [ 2] 60 jrule 00104$
+ 61 ; ../printf_large.c: 122: c += (unsigned char)('A' - '0' - 10);
+ 000008 AB 07 [ 1] 62 add a, #0x07
+ 63 ; ../printf_large.c: 123: if (lower_case)
+ 00000A 0D 05 [ 1] 64 tnz (0x05, sp)
+ 00000C 27 02 [ 1] 65 jreq 00104$
+ 66 ; ../printf_large.c: 124: c += (unsigned char)('a' - 'A');
+ 00000E AB 20 [ 1] 67 add a, #0x20
+ 000010 68 00104$:
+ 69 ; ../printf_large.c: 126: output_char( c, p );
+ 000010 1E 09 [ 2] 70 ldw x, (0x09, sp)
+ 000012 89 [ 2] 71 pushw x
+ 000013 88 [ 1] 72 push a
+ 000014 4Br21 [ 1] 73 push #(00119$)
+ 000016 4Bs00 [ 1] 74 push #(00119$ >> 8)
+ 000018 4Bs00 [ 1] 75 push #(00119$ >> 16)
+ 00001A 1E 0D [ 2] 76 ldw x, (0x0d, sp)
+ 00001C 89 [ 2] 77 pushw x
+ 00001D 7B 0E [ 1] 78 ld a, (0x0e, sp)
+ 00001F 88 [ 1] 79 push a
+ 000020 87 [ 5] 80 retf
+ 000021 81 00119$:
+ 000021 5B 03 [ 2] 82 addw sp, #3
+ 83 ; ../printf_large.c: 127: }
+ 000023 87 [ 5] 84 retf
+ 85 ; ../printf_large.c: 149: output_2digits (unsigned char b, bool lower_case, pfn_outputchar output_char, void* p)
+ 86 ; -----------------------------------------
+ 87 ; function output_2digits
+ 88 ; -----------------------------------------
+ 000024 89 _output_2digits:
+ 000024 88 [ 1] 90 push a
+ 91 ; ../printf_large.c: 151: output_digit( b>>4, lower_case, output_char, p );
+ 000025 7B 05 [ 1] 92 ld a, (0x05, sp)
+ 000027 4E [ 1] 93 swap a
+ 000028 A4 0F [ 1] 94 and a, #0x0f
+ 00002A 6B 01 [ 1] 95 ld (0x01, sp), a
+ 00002C 1E 0A [ 2] 96 ldw x, (0x0a, sp)
+ 00002E 89 [ 2] 97 pushw x
+ 00002F 1E 0A [ 2] 98 ldw x, (0x0a, sp)
+ 000031 89 [ 2] 99 pushw x
+ 000032 7B 0B [ 1] 100 ld a, (0x0b, sp)
+ 000034 88 [ 1] 101 push a
+ 000035 7B 0B [ 1] 102 ld a, (0x0b, sp)
+ 000037 88 [ 1] 103 push a
+ 000038 7B 07 [ 1] 104 ld a, (0x07, sp)
+ 00003A 88 [ 1] 105 push a
+ 00003B 8Ds00r00r00 [ 5] 106 callf _output_digit
+ 00003F 5B 07 [ 2] 107 addw sp, #7
+ 108 ; ../printf_large.c: 152: output_digit( b&0x0F, lower_case, output_char, p );
+ 000041 7B 05 [ 1] 109 ld a, (0x05, sp)
+ 000043 A4 0F [ 1] 110 and a, #0x0f
+ 000045 6B 01 [ 1] 111 ld (0x01, sp), a
+ 000047 1E 0A [ 2] 112 ldw x, (0x0a, sp)
+ 000049 89 [ 2] 113 pushw x
+ 00004A 1E 0A [ 2] 114 ldw x, (0x0a, sp)
+ 00004C 89 [ 2] 115 pushw x
+ 00004D 7B 0B [ 1] 116 ld a, (0x0b, sp)
+ 00004F 88 [ 1] 117 push a
+ 000050 7B 0B [ 1] 118 ld a, (0x0b, sp)
+ 000052 88 [ 1] 119 push a
+ 000053 7B 07 [ 1] 120 ld a, (0x07, sp)
+ 000055 88 [ 1] 121 push a
+ 000056 8Ds00r00r00 [ 5] 122 callf _output_digit
+ 123 ; ../printf_large.c: 153: }
+ 00005A 5B 08 [ 2] 124 addw sp, #8
+ 00005C 87 [ 5] 125 retf
+ 126 ; ../printf_large.c: 168: calculate_digit (value_t _AUTOMEM * value, unsigned char radix)
+ 127 ; -----------------------------------------
+ 128 ; function calculate_digit
+ 129 ; -----------------------------------------
+ 00005D 130 _calculate_digit:
+ 00005D 52 09 [ 2] 131 sub sp, #9
+ 132 ; ../printf_large.c: 170: unsigned long ul = value->ul;
+ 00005F 16 0D [ 2] 133 ldw y, (0x0d, sp)
+ 000061 17 01 [ 2] 134 ldw (0x01, sp), y
+ 000063 93 [ 1] 135 ldw x, y
+ 000064 90 EE 02 [ 2] 136 ldw y, (0x2, y)
+ 000067 FE [ 2] 137 ldw x, (x)
+ 000068 17 08 [ 2] 138 ldw (0x08, sp), y
+ 00006A 1F 06 [ 2] 139 ldw (0x06, sp), x
+ 140 ; ../printf_large.c: 171: unsigned char _AUTOMEM * pb4 = &value->byte[4];
+ 00006C 1E 01 [ 2] 141 ldw x, (0x01, sp)
+ 00006E 1C 00 04 [ 2] 142 addw x, #0x0004
+ 000071 1F 03 [ 2] 143 ldw (0x03, sp), x
+ 144 ; ../printf_large.c: 172: unsigned char i = 32;
+ 000073 A6 20 [ 1] 145 ld a, #0x20
+ 000075 6B 05 [ 1] 146 ld (0x05, sp), a
+ 147 ; ../printf_large.c: 174: do
+ 000077 148 00103$:
+ 149 ; ../printf_large.c: 176: *pb4 = (*pb4 << 1) | ((ul >> 31) & 0x01);
+ 000077 1E 03 [ 2] 150 ldw x, (0x03, sp)
+ 000079 F6 [ 1] 151 ld a, (x)
+ 00007A 48 [ 1] 152 sll a
+ 00007B 97 [ 1] 153 ld xl, a
+ 00007C 7B 06 [ 1] 154 ld a, (0x06, sp)
+ 00007E 48 [ 1] 155 sll a
+ 00007F 4F [ 1] 156 clr a
+ 000080 49 [ 1] 157 rlc a
+ 000081 89 [ 2] 158 pushw x
+ 000082 1A 02 [ 1] 159 or a, (2, sp)
+ 000084 85 [ 2] 160 popw x
+ 000085 1E 03 [ 2] 161 ldw x, (0x03, sp)
+ 000087 F7 [ 1] 162 ld (x), a
+ 163 ; ../printf_large.c: 177: ul <<= 1;
+ 000088 08 09 [ 1] 164 sll (0x09, sp)
+ 00008A 09 08 [ 1] 165 rlc (0x08, sp)
+ 00008C 09 07 [ 1] 166 rlc (0x07, sp)
+ 00008E 09 06 [ 1] 167 rlc (0x06, sp)
+ 168 ; ../printf_large.c: 179: if (radix <= *pb4 )
+ 000090 11 0F [ 1] 169 cp a, (0x0f, sp)
+ 000092 25 1C [ 1] 170 jrc 00104$
+ 171 ; ../printf_large.c: 181: *pb4 -= radix;
+ 000094 1E 03 [ 2] 172 ldw x, (0x03, sp)
+ 000096 F6 [ 1] 173 ld a, (x)
+ 000097 10 0F [ 1] 174 sub a, (0x0f, sp)
+ 000099 1E 03 [ 2] 175 ldw x, (0x03, sp)
+ 00009B F7 [ 1] 176 ld (x), a
+ 177 ; ../printf_large.c: 182: ul |= 1;
+ 00009C 7B 09 [ 1] 178 ld a, (0x09, sp)
+ 00009E AA 01 [ 1] 179 or a, #0x01
+ 0000A0 90 97 [ 1] 180 ld yl, a
+ 0000A2 7B 08 [ 1] 181 ld a, (0x08, sp)
+ 0000A4 90 95 [ 1] 182 ld yh, a
+ 0000A6 7B 07 [ 1] 183 ld a, (0x07, sp)
+ 0000A8 97 [ 1] 184 ld xl, a
+ 0000A9 7B 06 [ 1] 185 ld a, (0x06, sp)
+ 0000AB 95 [ 1] 186 ld xh, a
+ 0000AC 17 08 [ 2] 187 ldw (0x08, sp), y
+ 0000AE 1F 06 [ 2] 188 ldw (0x06, sp), x
+ 0000B0 189 00104$:
+ 190 ; ../printf_large.c: 184: } while (--i);
+ 0000B0 0A 05 [ 1] 191 dec (0x05, sp)
+ 0000B2 26 C3 [ 1] 192 jrne 00103$
+ 193 ; ../printf_large.c: 185: value->ul = ul;
+ 0000B4 1E 01 [ 2] 194 ldw x, (0x01, sp)
+ 0000B6 16 08 [ 2] 195 ldw y, (0x08, sp)
+ 0000B8 EF 02 [ 2] 196 ldw (0x2, x), y
+ 0000BA 16 06 [ 2] 197 ldw y, (0x06, sp)
+ 0000BC FF [ 2] 198 ldw (x), y
+ 199 ; ../printf_large.c: 186: }
+ 0000BD 5B 09 [ 2] 200 addw sp, #9
+ 0000BF 87 [ 5] 201 retf
+ 202 ; ../printf_large.c: 434: _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list ap)
+ 203 ; -----------------------------------------
+ 204 ; function _print_format
+ 205 ; -----------------------------------------
+ 0000C0 206 __print_format:
+ 0000C0 52 2D [ 2] 207 sub sp, #45
+ 208 ; ../printf_large.c: 466: charsOutputted = 0;
+ 0000C2 5F [ 1] 209 clrw x
+ 0000C3 1F 10 [ 2] 210 ldw (0x10, sp), x
+ 211 ; ../printf_large.c: 475: while( c=*format++ )
+ 0000C5 96 [ 1] 212 ldw x, sp
+ 0000C6 1C 00 0F [ 2] 213 addw x, #15
+ 0000C9 1F 12 [ 2] 214 ldw (0x12, sp), x
+ 0000CB 96 [ 1] 215 ldw x, sp
+ 0000CC 1C 00 05 [ 2] 216 addw x, #5
+ 0000CF 1F 14 [ 2] 217 ldw (0x14, sp), x
+ 0000D1 1C 00 04 [ 2] 218 addw x, #0x0004
+ 0000D4 1F 16 [ 2] 219 ldw (0x16, sp), x
+ 0000D6 1F 18 [ 2] 220 ldw (0x18, sp), x
+ 0000D8 16 16 [ 2] 221 ldw y, (0x16, sp)
+ 0000DA 17 1A [ 2] 222 ldw (0x1a, sp), y
+ 0000DC 223 00231$:
+ 0000DC 1E 36 [ 2] 224 ldw x, (0x36, sp)
+ 0000DE F6 [ 1] 225 ld a, (x)
+ 0000DF 5C [ 1] 226 incw x
+ 0000E0 1F 36 [ 2] 227 ldw (0x36, sp), x
+ 0000E2 97 [ 1] 228 ld xl, a
+ 0000E3 4D [ 1] 229 tnz a
+ 0000E4 26 04 [ 1] 230 jrne 00627$
+ 0000E6 ACs00r07r9D [ 2] 231 jpf 00233$
+ 0000EA 232 00627$:
+ 233 ; ../printf_large.c: 477: if ( c=='%' )
+ 0000EA 9F [ 1] 234 ld a, xl
+ 0000EB A1 25 [ 1] 235 cp a, #0x25
+ 0000ED 27 04 [ 1] 236 jreq 00630$
+ 0000EF ACs00r07r7F [ 2] 237 jpf 00229$
+ 0000F3 238 00630$:
+ 239 ; ../printf_large.c: 479: left_justify = 0;
+ 0000F3 0F 1C [ 1] 240 clr (0x1c, sp)
+ 241 ; ../printf_large.c: 480: zero_padding = 0;
+ 0000F5 0F 1D [ 1] 242 clr (0x1d, sp)
+ 243 ; ../printf_large.c: 481: prefix_sign = 0;
+ 0000F7 0F 1E [ 1] 244 clr (0x1e, sp)
+ 245 ; ../printf_large.c: 482: prefix_space = 0;
+ 0000F9 0F 1F [ 1] 246 clr (0x1f, sp)
+ 247 ; ../printf_large.c: 483: signed_argument = 0;
+ 0000FB 0F 20 [ 1] 248 clr (0x20, sp)
+ 249 ; ../printf_large.c: 484: char_argument = 0;
+ 0000FD 0F 21 [ 1] 250 clr (0x21, sp)
+ 251 ; ../printf_large.c: 485: long_argument = 0;
+ 0000FF 0F 22 [ 1] 252 clr (0x22, sp)
+ 253 ; ../printf_large.c: 486: float_argument = 0;
+ 000101 0F 23 [ 1] 254 clr (0x23, sp)
+ 255 ; ../printf_large.c: 487: radix = 0;
+ 000103 0F 24 [ 1] 256 clr (0x24, sp)
+ 257 ; ../printf_large.c: 488: width = 0;
+ 000105 5F [ 1] 258 clrw x
+ 000106 1F 25 [ 2] 259 ldw (0x25, sp), x
+ 260 ; ../printf_large.c: 489: decimals = -1;
+ 000108 AE FF FF [ 2] 261 ldw x, #0xffff
+ 00010B 1F 2A [ 2] 262 ldw (0x2a, sp), x
+ 263 ; ../printf_large.c: 491: get_conversion_spec:
+ 00010D 16 36 [ 2] 264 ldw y, (0x36, sp)
+ 00010F 17 28 [ 2] 265 ldw (0x28, sp), y
+ 000111 266 00101$:
+ 267 ; ../printf_large.c: 493: c = *format++;
+ 000111 1E 28 [ 2] 268 ldw x, (0x28, sp)
+ 000113 F6 [ 1] 269 ld a, (x)
+ 000114 6B 2D [ 1] 270 ld (0x2d, sp), a
+ 000116 1E 28 [ 2] 271 ldw x, (0x28, sp)
+ 000118 5C [ 1] 272 incw x
+ 000119 1F 28 [ 2] 273 ldw (0x28, sp), x
+ 00011B 1F 36 [ 2] 274 ldw (0x36, sp), x
+ 275 ; ../printf_large.c: 495: if (c=='%')
+ 00011D 7B 2D [ 1] 276 ld a, (0x2d, sp)
+ 00011F A1 25 [ 1] 277 cp a, #0x25
+ 000121 26 1C [ 1] 278 jrne 00103$
+ 279 ; ../printf_large.c: 497: OUTPUT_CHAR(c, p);
+ 000123 1E 34 [ 2] 280 ldw x, (0x34, sp)
+ 000125 89 [ 2] 281 pushw x
+ 000126 7B 2F [ 1] 282 ld a, (0x2f, sp)
+ 000128 88 [ 1] 283 push a
+ 000129 4Br36 [ 1] 284 push #(00635$)
+ 00012B 4Bs01 [ 1] 285 push #(00635$ >> 8)
+ 00012D 4Bs00 [ 1] 286 push #(00635$ >> 16)
+ 00012F 1E 38 [ 2] 287 ldw x, (0x38, sp)
+ 000131 89 [ 2] 288 pushw x
+ 000132 7B 39 [ 1] 289 ld a, (0x39, sp)
+ 000134 88 [ 1] 290 push a
+ 000135 87 [ 5] 291 retf
+ 000136 292 00635$:
+ 000136 5B 03 [ 2] 293 addw sp, #3
+ 000138 1E 10 [ 2] 294 ldw x, (0x10, sp)
+ 00013A 5C [ 1] 295 incw x
+ 00013B 1F 10 [ 2] 296 ldw (0x10, sp), x
+ 297 ; ../printf_large.c: 498: continue;
+ 00013D 20 9D [ 2] 298 jra 00231$
+ 00013F 299 00103$:
+ 300 ; ../printf_large.c: 501: if (isdigit(c))
+ 00013F 7B 2D [ 1] 301 ld a, (0x2d, sp)
+ 000141 A1 30 [ 1] 302 cp a, #0x30
+ 000143 25 49 [ 1] 303 jrc 00110$
+ 000145 7B 2D [ 1] 304 ld a, (0x2d, sp)
+ 000147 A1 39 [ 1] 305 cp a, #0x39
+ 000149 22 43 [ 1] 306 jrugt 00110$
+ 307 ; ../printf_large.c: 503: if (decimals==-1)
+ 00014B 1E 2A [ 2] 308 ldw x, (0x2a, sp)
+ 00014D 5C [ 1] 309 incw x
+ 00014E 26 22 [ 1] 310 jrne 00107$
+ 311 ; ../printf_large.c: 505: width = 10*width + c - '0';
+ 000150 1E 25 [ 2] 312 ldw x, (0x25, sp)
+ 000152 58 [ 2] 313 sllw x
+ 000153 58 [ 2] 314 sllw x
+ 000154 72 FB 25 [ 2] 315 addw x, (0x25, sp)
+ 000157 58 [ 2] 316 sllw x
+ 000158 1F 03 [ 2] 317 ldw (0x03, sp), x
+ 00015A 0F 2C [ 1] 318 clr (0x2c, sp)
+ 00015C 1E 03 [ 2] 319 ldw x, (0x03, sp)
+ 00015E 72 FB 2C [ 2] 320 addw x, (0x2c, sp)
+ 000161 1F 26 [ 2] 321 ldw (0x26, sp), x
+ 000163 1D 00 30 [ 2] 322 subw x, #0x0030
+ 000166 1F 2C [ 2] 323 ldw (0x2c, sp), x
+ 324 ; ../printf_large.c: 506: if (width == 0)
+ 000168 1F 25 [ 2] 325 ldw (0x25, sp), x
+ 00016A 26 A5 [ 1] 326 jrne 00101$
+ 327 ; ../printf_large.c: 509: zero_padding = 1;
+ 00016C A6 01 [ 1] 328 ld a, #0x01
+ 00016E 6B 1D [ 1] 329 ld (0x1d, sp), a
+ 000170 20 9F [ 2] 330 jra 00101$
+ 000172 331 00107$:
+ 332 ; ../printf_large.c: 514: decimals = 10*decimals + c - '0';
+ 000172 1E 2A [ 2] 333 ldw x, (0x2a, sp)
+ 000174 58 [ 2] 334 sllw x
+ 000175 58 [ 2] 335 sllw x
+ 000176 72 FB 2A [ 2] 336 addw x, (0x2a, sp)
+ 000179 58 [ 2] 337 sllw x
+ 00017A 1F 03 [ 2] 338 ldw (0x03, sp), x
+ 00017C 0F 2C [ 1] 339 clr (0x2c, sp)
+ 00017E 1E 03 [ 2] 340 ldw x, (0x03, sp)
+ 000180 72 FB 2C [ 2] 341 addw x, (0x2c, sp)
+ 000183 1F 2A [ 2] 342 ldw (0x2a, sp), x
+ 000185 1D 00 30 [ 2] 343 subw x, #0x0030
+ 000188 1F 2C [ 2] 344 ldw (0x2c, sp), x
+ 00018A 1F 2A [ 2] 345 ldw (0x2a, sp), x
+ 346 ; ../printf_large.c: 516: goto get_conversion_spec;
+ 00018C 20 83 [ 2] 347 jra 00101$
+ 00018E 348 00110$:
+ 349 ; ../printf_large.c: 519: if (c=='.')
+ 00018E 7B 2D [ 1] 350 ld a, (0x2d, sp)
+ 000190 A1 2E [ 1] 351 cp a, #0x2e
+ 000192 26 10 [ 1] 352 jrne 00115$
+ 353 ; ../printf_large.c: 521: if (decimals==-1)
+ 000194 1E 2A [ 2] 354 ldw x, (0x2a, sp)
+ 000196 5C [ 1] 355 incw x
+ 000197 27 04 [ 1] 356 jreq 00647$
+ 000199 ACs00r01r11 [ 2] 357 jpf 00101$
+ 00019D 358 00647$:
+ 359 ; ../printf_large.c: 522: decimals=0;
+ 00019D 5F [ 1] 360 clrw x
+ 00019E 1F 2A [ 2] 361 ldw (0x2a, sp), x
+ 362 ; ../printf_large.c: 525: goto get_conversion_spec;
+ 0001A0 ACs00r01r11 [ 2] 363 jpf 00101$
+ 0001A4 364 00115$:
+ 365 ; ../printf_large.c: 528: if (islower(c))
+ 0001A4 7B 2D [ 1] 366 ld a, (0x2d, sp)
+ 0001A6 A1 61 [ 1] 367 cp a, #0x61
+ 0001A8 25 11 [ 1] 368 jrc 00117$
+ 0001AA 7B 2D [ 1] 369 ld a, (0x2d, sp)
+ 0001AC A1 7A [ 1] 370 cp a, #0x7a
+ 0001AE 22 0B [ 1] 371 jrugt 00117$
+ 372 ; ../printf_large.c: 530: c = toupper(c);
+ 0001B0 7B 2D [ 1] 373 ld a, (0x2d, sp)
+ 0001B2 A4 DF [ 1] 374 and a, #0xdf
+ 0001B4 6B 2D [ 1] 375 ld (0x2d, sp), a
+ 376 ; ../printf_large.c: 531: lower_case = 1;
+ 0001B6 A6 01 [ 1] 377 ld a, #0x01
+ 0001B8 6B 27 [ 1] 378 ld (0x27, sp), a
+ 379 ; ../printf_large.c: 534: lower_case = 0;
+ 0001BA C5 380 .byte 0xc5
+ 0001BB 381 00117$:
+ 0001BB 0F 27 [ 1] 382 clr (0x27, sp)
+ 0001BD 383 00118$:
+ 384 ; ../printf_large.c: 536: switch( c )
+ 0001BD 7B 2D [ 1] 385 ld a, (0x2d, sp)
+ 0001BF A1 20 [ 1] 386 cp a, #0x20
+ 0001C1 26 04 [ 1] 387 jrne 00651$
+ 0001C3 ACs00r02r81 [ 2] 388 jpf 00122$
+ 0001C7 389 00651$:
+ 0001C7 7B 2D [ 1] 390 ld a, (0x2d, sp)
+ 0001C9 A1 2B [ 1] 391 cp a, #0x2b
+ 0001CB 26 04 [ 1] 392 jrne 00654$
+ 0001CD ACs00r02r79 [ 2] 393 jpf 00121$
+ 0001D1 394 00654$:
+ 0001D1 7B 2D [ 1] 395 ld a, (0x2d, sp)
+ 0001D3 A1 2D [ 1] 396 cp a, #0x2d
+ 0001D5 26 04 [ 1] 397 jrne 00657$
+ 0001D7 ACs00r02r71 [ 2] 398 jpf 00120$
+ 0001DB 399 00657$:
+ 0001DB 7B 2D [ 1] 400 ld a, (0x2d, sp)
+ 0001DD A1 42 [ 1] 401 cp a, #0x42
+ 0001DF 26 04 [ 1] 402 jrne 00660$
+ 0001E1 ACs00r02r89 [ 2] 403 jpf 00123$
+ 0001E5 404 00660$:
+ 0001E5 7B 2D [ 1] 405 ld a, (0x2d, sp)
+ 0001E7 A1 43 [ 1] 406 cp a, #0x43
+ 0001E9 26 04 [ 1] 407 jrne 00663$
+ 0001EB ACs00r02r99 [ 2] 408 jpf 00129$
+ 0001EF 409 00663$:
+ 0001EF 7B 2D [ 1] 410 ld a, (0x2d, sp)
+ 0001F1 A1 44 [ 1] 411 cp a, #0x44
+ 0001F3 26 04 [ 1] 412 jrne 00666$
+ 0001F5 ACs00r04r46 [ 2] 413 jpf 00154$
+ 0001F9 414 00666$:
+ 0001F9 7B 2D [ 1] 415 ld a, (0x2d, sp)
+ 0001FB A1 46 [ 1] 416 cp a, #0x46
+ 0001FD 26 04 [ 1] 417 jrne 00669$
+ 0001FF ACs00r04r62 [ 2] 418 jpf 00158$
+ 000203 419 00669$:
+ 000203 7B 2D [ 1] 420 ld a, (0x2d, sp)
+ 000205 A1 48 [ 1] 421 cp a, #0x48
+ 000207 26 04 [ 1] 422 jrne 00672$
+ 000209 ACs00r01r11 [ 2] 423 jpf 00101$
+ 00020D 424 00672$:
+ 00020D 7B 2D [ 1] 425 ld a, (0x2d, sp)
+ 00020F A1 49 [ 1] 426 cp a, #0x49
+ 000211 26 04 [ 1] 427 jrne 00675$
+ 000213 ACs00r04r46 [ 2] 428 jpf 00154$
+ 000217 429 00675$:
+ 000217 7B 2D [ 1] 430 ld a, (0x2d, sp)
+ 000219 A1 4A [ 1] 431 cp a, #0x4a
+ 00021B 26 04 [ 1] 432 jrne 00678$
+ 00021D ACs00r01r11 [ 2] 433 jpf 00101$
+ 000221 434 00678$:
+ 000221 7B 2D [ 1] 435 ld a, (0x2d, sp)
+ 000223 A1 4C [ 1] 436 cp a, #0x4c
+ 000225 27 6A [ 1] 437 jreq 00128$
+ 000227 7B 2D [ 1] 438 ld a, (0x2d, sp)
+ 000229 A1 4F [ 1] 439 cp a, #0x4f
+ 00022B 26 04 [ 1] 440 jrne 00684$
+ 00022D ACs00r04r50 [ 2] 441 jpf 00155$
+ 000231 442 00684$:
+ 000231 7B 2D [ 1] 443 ld a, (0x2d, sp)
+ 000233 A1 50 [ 1] 444 cp a, #0x50
+ 000235 26 04 [ 1] 445 jrne 00687$
+ 000237 ACs00r03rB7 [ 2] 446 jpf 00152$
+ 00023B 447 00687$:
+ 00023B 7B 2D [ 1] 448 ld a, (0x2d, sp)
+ 00023D A1 53 [ 1] 449 cp a, #0x53
+ 00023F 26 04 [ 1] 450 jrne 00690$
+ 000241 ACs00r02rCE [ 2] 451 jpf 00133$
+ 000245 452 00690$:
+ 000245 7B 2D [ 1] 453 ld a, (0x2d, sp)
+ 000247 A1 54 [ 1] 454 cp a, #0x54
+ 000249 26 04 [ 1] 455 jrne 00693$
+ 00024B ACs00r01r11 [ 2] 456 jpf 00101$
+ 00024F 457 00693$:
+ 00024F 7B 2D [ 1] 458 ld a, (0x2d, sp)
+ 000251 A1 55 [ 1] 459 cp a, #0x55
+ 000253 26 04 [ 1] 460 jrne 00696$
+ 000255 ACs00r04r56 [ 2] 461 jpf 00156$
+ 000259 462 00696$:
+ 000259 7B 2D [ 1] 463 ld a, (0x2d, sp)
+ 00025B A1 58 [ 1] 464 cp a, #0x58
+ 00025D 26 04 [ 1] 465 jrne 00699$
+ 00025F ACs00r04r5C [ 2] 466 jpf 00157$
+ 000263 467 00699$:
+ 000263 7B 2D [ 1] 468 ld a, (0x2d, sp)
+ 000265 A1 5A [ 1] 469 cp a, #0x5a
+ 000267 26 04 [ 1] 470 jrne 00702$
+ 000269 ACs00r01r11 [ 2] 471 jpf 00101$
+ 00026D 472 00702$:
+ 00026D ACs00r04r68 [ 2] 473 jpf 00159$
+ 474 ; ../printf_large.c: 538: case '-':
+ 000271 475 00120$:
+ 476 ; ../printf_large.c: 539: left_justify = 1;
+ 000271 A6 01 [ 1] 477 ld a, #0x01
+ 000273 6B 1C [ 1] 478 ld (0x1c, sp), a
+ 479 ; ../printf_large.c: 540: goto get_conversion_spec;
+ 000275 ACs00r01r11 [ 2] 480 jpf 00101$
+ 481 ; ../printf_large.c: 541: case '+':
+ 000279 482 00121$:
+ 483 ; ../printf_large.c: 542: prefix_sign = 1;
+ 000279 A6 01 [ 1] 484 ld a, #0x01
+ 00027B 6B 1E [ 1] 485 ld (0x1e, sp), a
+ 486 ; ../printf_large.c: 543: goto get_conversion_spec;
+ 00027D ACs00r01r11 [ 2] 487 jpf 00101$
+ 488 ; ../printf_large.c: 544: case ' ':
+ 000281 489 00122$:
+ 490 ; ../printf_large.c: 545: prefix_space = 1;
+ 000281 A6 01 [ 1] 491 ld a, #0x01
+ 000283 6B 1F [ 1] 492 ld (0x1f, sp), a
+ 493 ; ../printf_large.c: 546: goto get_conversion_spec;
+ 000285 ACs00r01r11 [ 2] 494 jpf 00101$
+ 495 ; ../printf_large.c: 547: case 'B': /* byte */
+ 000289 496 00123$:
+ 497 ; ../printf_large.c: 548: char_argument = 1;
+ 000289 A6 01 [ 1] 498 ld a, #0x01
+ 00028B 6B 21 [ 1] 499 ld (0x21, sp), a
+ 500 ; ../printf_large.c: 549: goto get_conversion_spec;
+ 00028D ACs00r01r11 [ 2] 501 jpf 00101$
+ 502 ; ../printf_large.c: 556: case 'L': /* long */
+ 000291 503 00128$:
+ 504 ; ../printf_large.c: 557: long_argument = 1;
+ 000291 A6 01 [ 1] 505 ld a, #0x01
+ 000293 6B 22 [ 1] 506 ld (0x22, sp), a
+ 507 ; ../printf_large.c: 558: goto get_conversion_spec;
+ 000295 ACs00r01r11 [ 2] 508 jpf 00101$
+ 509 ; ../printf_large.c: 560: case 'C':
+ 000299 510 00129$:
+ 511 ; ../printf_large.c: 561: if( char_argument )
+ 000299 0D 21 [ 1] 512 tnz (0x21, sp)
+ 00029B 27 0B [ 1] 513 jreq 00131$
+ 514 ; ../printf_large.c: 562: c = va_arg(ap,char);
+ 00029D 1E 38 [ 2] 515 ldw x, (0x38, sp)
+ 00029F 5C [ 1] 516 incw x
+ 0002A0 1F 38 [ 2] 517 ldw (0x38, sp), x
+ 0002A2 1C FF FF [ 2] 518 addw x, #0xffff
+ 0002A5 F6 [ 1] 519 ld a, (x)
+ 0002A6 20 0A [ 2] 520 jra 00132$
+ 0002A8 521 00131$:
+ 522 ; ../printf_large.c: 564: c = va_arg(ap,int);
+ 0002A8 1E 38 [ 2] 523 ldw x, (0x38, sp)
+ 0002AA 5C [ 1] 524 incw x
+ 0002AB 5C [ 1] 525 incw x
+ 0002AC 1F 38 [ 2] 526 ldw (0x38, sp), x
+ 0002AE 5A [ 2] 527 decw x
+ 0002AF 5A [ 2] 528 decw x
+ 0002B0 E6 01 [ 1] 529 ld a, (0x1, x)
+ 0002B2 530 00132$:
+ 531 ; ../printf_large.c: 565: OUTPUT_CHAR( c, p );
+ 0002B2 1E 34 [ 2] 532 ldw x, (0x34, sp)
+ 0002B4 89 [ 2] 533 pushw x
+ 0002B5 88 [ 1] 534 push a
+ 0002B6 4BrC3 [ 1] 535 push #(00705$)
+ 0002B8 4Bs02 [ 1] 536 push #(00705$ >> 8)
+ 0002BA 4Bs00 [ 1] 537 push #(00705$ >> 16)
+ 0002BC 1E 38 [ 2] 538 ldw x, (0x38, sp)
+ 0002BE 89 [ 2] 539 pushw x
+ 0002BF 7B 39 [ 1] 540 ld a, (0x39, sp)
+ 0002C1 88 [ 1] 541 push a
+ 0002C2 87 [ 5] 542 retf
+ 0002C3 543 00705$:
+ 0002C3 5B 03 [ 2] 544 addw sp, #3
+ 0002C5 1E 10 [ 2] 545 ldw x, (0x10, sp)
+ 0002C7 5C [ 1] 546 incw x
+ 0002C8 1F 10 [ 2] 547 ldw (0x10, sp), x
+ 548 ; ../printf_large.c: 566: break;
+ 0002CA ACs00r04r8E [ 2] 549 jpf 00160$
+ 550 ; ../printf_large.c: 568: case 'S':
+ 0002CE 551 00133$:
+ 552 ; ../printf_large.c: 569: PTR = va_arg(ap,ptr_t);
+ 0002CE 1E 38 [ 2] 553 ldw x, (0x38, sp)
+ 0002D0 5C [ 1] 554 incw x
+ 0002D1 5C [ 1] 555 incw x
+ 0002D2 1F 38 [ 2] 556 ldw (0x38, sp), x
+ 0002D4 5A [ 2] 557 decw x
+ 0002D5 5A [ 2] 558 decw x
+ 0002D6 FE [ 2] 559 ldw x, (x)
+ 0002D7 1F 05 [ 2] 560 ldw (0x05, sp), x
+ 561 ; ../printf_large.c: 582: length = strlen(PTR);
+ 0002D9 89 [ 2] 562 pushw x
+ 0002DA 8Ds00r00r00 [ 5] 563 callf _strlen
+ 0002DE 5B 02 [ 2] 564 addw sp, #2
+ 0002E0 1F 28 [ 2] 565 ldw (0x28, sp), x
+ 566 ; ../printf_large.c: 584: if ( decimals == -1 )
+ 0002E2 1E 2A [ 2] 567 ldw x, (0x2a, sp)
+ 0002E4 5C [ 1] 568 incw x
+ 0002E5 26 04 [ 1] 569 jrne 00135$
+ 570 ; ../printf_large.c: 586: decimals = length;
+ 0002E7 16 28 [ 2] 571 ldw y, (0x28, sp)
+ 0002E9 17 2A [ 2] 572 ldw (0x2a, sp), y
+ 0002EB 573 00135$:
+ 574 ; ../printf_large.c: 588: if ( ( !left_justify ) && (length < width) )
+ 0002EB 0D 1C [ 1] 575 tnz (0x1c, sp)
+ 0002ED 26 3F [ 1] 576 jrne 00277$
+ 0002EF 1E 28 [ 2] 577 ldw x, (0x28, sp)
+ 0002F1 13 25 [ 2] 578 cpw x, (0x25, sp)
+ 0002F3 24 39 [ 1] 579 jrnc 00277$
+ 580 ; ../printf_large.c: 590: width -= length;
+ 0002F5 1E 25 [ 2] 581 ldw x, (0x25, sp)
+ 0002F7 72 F0 28 [ 2] 582 subw x, (0x28, sp)
+ 583 ; ../printf_large.c: 591: while( width-- != 0 )
+ 0002FA 16 10 [ 2] 584 ldw y, (0x10, sp)
+ 0002FC 17 25 [ 2] 585 ldw (0x25, sp), y
+ 0002FE 1F 2C [ 2] 586 ldw (0x2c, sp), x
+ 000300 587 00136$:
+ 000300 1E 2C [ 2] 588 ldw x, (0x2c, sp)
+ 000302 16 2C [ 2] 589 ldw y, (0x2c, sp)
+ 000304 90 5A [ 2] 590 decw y
+ 000306 17 2C [ 2] 591 ldw (0x2c, sp), y
+ 000308 5D [ 2] 592 tnzw x
+ 000309 27 1B [ 1] 593 jreq 00312$
+ 594 ; ../printf_large.c: 593: OUTPUT_CHAR( ' ', p );
+ 00030B 1E 34 [ 2] 595 ldw x, (0x34, sp)
+ 00030D 89 [ 2] 596 pushw x
+ 00030E 4B 20 [ 1] 597 push #0x20
+ 000310 4Br1D [ 1] 598 push #(00712$)
+ 000312 4Bs03 [ 1] 599 push #(00712$ >> 8)
+ 000314 4Bs00 [ 1] 600 push #(00712$ >> 16)
+ 000316 1E 38 [ 2] 601 ldw x, (0x38, sp)
+ 000318 89 [ 2] 602 pushw x
+ 000319 7B 39 [ 1] 603 ld a, (0x39, sp)
+ 00031B 88 [ 1] 604 push a
+ 00031C 87 [ 5] 605 retf
+ 00031D 606 00712$:
+ 00031D 5B 03 [ 2] 607 addw sp, #3
+ 00031F 1E 25 [ 2] 608 ldw x, (0x25, sp)
+ 000321 5C [ 1] 609 incw x
+ 000322 1F 25 [ 2] 610 ldw (0x25, sp), x
+ 000324 20 DA [ 2] 611 jra 00136$
+ 612 ; ../printf_large.c: 597: while ( (c = *PTR) && (decimals-- > 0))
+ 000326 613 00312$:
+ 000326 16 25 [ 2] 614 ldw y, (0x25, sp)
+ 000328 17 10 [ 2] 615 ldw (0x10, sp), y
+ 00032A 16 2C [ 2] 616 ldw y, (0x2c, sp)
+ 00032C 17 25 [ 2] 617 ldw (0x25, sp), y
+ 00032E 618 00277$:
+ 00032E 16 10 [ 2] 619 ldw y, (0x10, sp)
+ 000330 17 2C [ 2] 620 ldw (0x2c, sp), y
+ 000332 621 00143$:
+ 000332 1E 05 [ 2] 622 ldw x, (0x05, sp)
+ 000334 F6 [ 1] 623 ld a, (x)
+ 000335 6B 11 [ 1] 624 ld (0x11, sp), a
+ 000337 27 2D [ 1] 625 jreq 00313$
+ 000339 1E 2A [ 2] 626 ldw x, (0x2a, sp)
+ 00033B A3 00 00 [ 2] 627 cpw x, #0x0000
+ 00033E 2D 26 [ 1] 628 jrsle 00313$
+ 000340 1E 2A [ 2] 629 ldw x, (0x2a, sp)
+ 000342 5A [ 2] 630 decw x
+ 000343 1F 2A [ 2] 631 ldw (0x2a, sp), x
+ 632 ; ../printf_large.c: 599: OUTPUT_CHAR( c, p );
+ 000345 1E 34 [ 2] 633 ldw x, (0x34, sp)
+ 000347 89 [ 2] 634 pushw x
+ 000348 7B 13 [ 1] 635 ld a, (0x13, sp)
+ 00034A 88 [ 1] 636 push a
+ 00034B 4Br58 [ 1] 637 push #(00716$)
+ 00034D 4Bs03 [ 1] 638 push #(00716$ >> 8)
+ 00034F 4Bs00 [ 1] 639 push #(00716$ >> 16)
+ 000351 1E 38 [ 2] 640 ldw x, (0x38, sp)
+ 000353 89 [ 2] 641 pushw x
+ 000354 7B 39 [ 1] 642 ld a, (0x39, sp)
+ 000356 88 [ 1] 643 push a
+ 000357 87 [ 5] 644 retf
+ 000358 645 00716$:
+ 000358 5B 03 [ 2] 646 addw sp, #3
+ 00035A 1E 2C [ 2] 647 ldw x, (0x2c, sp)
+ 00035C 5C [ 1] 648 incw x
+ 00035D 1F 2C [ 2] 649 ldw (0x2c, sp), x
+ 650 ; ../printf_large.c: 600: PTR++;
+ 00035F 1E 05 [ 2] 651 ldw x, (0x05, sp)
+ 000361 5C [ 1] 652 incw x
+ 000362 1F 05 [ 2] 653 ldw (0x05, sp), x
+ 000364 20 CC [ 2] 654 jra 00143$
+ 000366 655 00313$:
+ 000366 16 2C [ 2] 656 ldw y, (0x2c, sp)
+ 000368 17 10 [ 2] 657 ldw (0x10, sp), y
+ 658 ; ../printf_large.c: 603: if ( left_justify && (length < width))
+ 00036A 0D 1C [ 1] 659 tnz (0x1c, sp)
+ 00036C 26 04 [ 1] 660 jrne 00718$
+ 00036E ACs00r04r8E [ 2] 661 jpf 00160$
+ 000372 662 00718$:
+ 000372 1E 28 [ 2] 663 ldw x, (0x28, sp)
+ 000374 13 25 [ 2] 664 cpw x, (0x25, sp)
+ 000376 25 04 [ 1] 665 jrc 00719$
+ 000378 ACs00r04r8E [ 2] 666 jpf 00160$
+ 00037C 667 00719$:
+ 668 ; ../printf_large.c: 605: width -= length;
+ 00037C 1E 25 [ 2] 669 ldw x, (0x25, sp)
+ 00037E 72 F0 28 [ 2] 670 subw x, (0x28, sp)
+ 000381 1F 2A [ 2] 671 ldw (0x2a, sp), x
+ 000383 1F 25 [ 2] 672 ldw (0x25, sp), x
+ 673 ; ../printf_large.c: 606: while( width-- != 0 )
+ 000385 16 2C [ 2] 674 ldw y, (0x2c, sp)
+ 000387 17 29 [ 2] 675 ldw (0x29, sp), y
+ 000389 16 25 [ 2] 676 ldw y, (0x25, sp)
+ 00038B 17 2C [ 2] 677 ldw (0x2c, sp), y
+ 00038D 678 00146$:
+ 00038D 1E 2C [ 2] 679 ldw x, (0x2c, sp)
+ 00038F 16 2C [ 2] 680 ldw y, (0x2c, sp)
+ 000391 90 5A [ 2] 681 decw y
+ 000393 17 2C [ 2] 682 ldw (0x2c, sp), y
+ 000395 5D [ 2] 683 tnzw x
+ 000396 26 04 [ 1] 684 jrne 00720$
+ 000398 ACs00r04r86 [ 2] 685 jpf 00314$
+ 00039C 686 00720$:
+ 687 ; ../printf_large.c: 608: OUTPUT_CHAR( ' ', p );
+ 00039C 1E 34 [ 2] 688 ldw x, (0x34, sp)
+ 00039E 89 [ 2] 689 pushw x
+ 00039F 4B 20 [ 1] 690 push #0x20
+ 0003A1 4BrAE [ 1] 691 push #(00721$)
+ 0003A3 4Bs03 [ 1] 692 push #(00721$ >> 8)
+ 0003A5 4Bs00 [ 1] 693 push #(00721$ >> 16)
+ 0003A7 1E 38 [ 2] 694 ldw x, (0x38, sp)
+ 0003A9 89 [ 2] 695 pushw x
+ 0003AA 7B 39 [ 1] 696 ld a, (0x39, sp)
+ 0003AC 88 [ 1] 697 push a
+ 0003AD 87 [ 5] 698 retf
+ 0003AE 699 00721$:
+ 0003AE 5B 03 [ 2] 700 addw sp, #3
+ 0003B0 1E 29 [ 2] 701 ldw x, (0x29, sp)
+ 0003B2 5C [ 1] 702 incw x
+ 0003B3 1F 29 [ 2] 703 ldw (0x29, sp), x
+ 0003B5 20 D6 [ 2] 704 jra 00146$
+ 705 ; ../printf_large.c: 613: case 'P':
+ 0003B7 706 00152$:
+ 707 ; ../printf_large.c: 614: PTR = va_arg(ap,ptr_t);
+ 0003B7 1E 38 [ 2] 708 ldw x, (0x38, sp)
+ 0003B9 5C [ 1] 709 incw x
+ 0003BA 5C [ 1] 710 incw x
+ 0003BB 1F 2A [ 2] 711 ldw (0x2a, sp), x
+ 0003BD 1F 38 [ 2] 712 ldw (0x38, sp), x
+ 0003BF 1E 2A [ 2] 713 ldw x, (0x2a, sp)
+ 0003C1 5A [ 2] 714 decw x
+ 0003C2 5A [ 2] 715 decw x
+ 0003C3 1F 2C [ 2] 716 ldw (0x2c, sp), x
+ 0003C5 1F 2A [ 2] 717 ldw (0x2a, sp), x
+ 0003C7 FE [ 2] 718 ldw x, (x)
+ 0003C8 1F 2C [ 2] 719 ldw (0x2c, sp), x
+ 0003CA 1F 05 [ 2] 720 ldw (0x05, sp), x
+ 721 ; ../printf_large.c: 658: OUTPUT_CHAR('0', p);
+ 0003CC 1E 34 [ 2] 722 ldw x, (0x34, sp)
+ 0003CE 89 [ 2] 723 pushw x
+ 0003CF 4B 30 [ 1] 724 push #0x30
+ 0003D1 4BrDE [ 1] 725 push #(00723$)
+ 0003D3 4Bs03 [ 1] 726 push #(00723$ >> 8)
+ 0003D5 4Bs00 [ 1] 727 push #(00723$ >> 16)
+ 0003D7 1E 38 [ 2] 728 ldw x, (0x38, sp)
+ 0003D9 89 [ 2] 729 pushw x
+ 0003DA 7B 39 [ 1] 730 ld a, (0x39, sp)
+ 0003DC 88 [ 1] 731 push a
+ 0003DD 87 [ 5] 732 retf
+ 0003DE 733 00723$:
+ 0003DE 5B 03 [ 2] 734 addw sp, #3
+ 0003E0 1E 10 [ 2] 735 ldw x, (0x10, sp)
+ 0003E2 5C [ 1] 736 incw x
+ 0003E3 1F 2C [ 2] 737 ldw (0x2c, sp), x
+ 0003E5 1F 2A [ 2] 738 ldw (0x2a, sp), x
+ 739 ; ../printf_large.c: 659: OUTPUT_CHAR('x', p);
+ 0003E7 1E 34 [ 2] 740 ldw x, (0x34, sp)
+ 0003E9 89 [ 2] 741 pushw x
+ 0003EA 4B 78 [ 1] 742 push #0x78
+ 0003EC 4BrF9 [ 1] 743 push #(00724$)
+ 0003EE 4Bs03 [ 1] 744 push #(00724$ >> 8)
+ 0003F0 4Bs00 [ 1] 745 push #(00724$ >> 16)
+ 0003F2 1E 38 [ 2] 746 ldw x, (0x38, sp)
+ 0003F4 89 [ 2] 747 pushw x
+ 0003F5 7B 39 [ 1] 748 ld a, (0x39, sp)
+ 0003F7 88 [ 1] 749 push a
+ 0003F8 87 [ 5] 750 retf
+ 0003F9 751 00724$:
+ 0003F9 5B 03 [ 2] 752 addw sp, #3
+ 0003FB 1E 2A [ 2] 753 ldw x, (0x2a, sp)
+ 0003FD 5C [ 1] 754 incw x
+ 0003FE 1F 2C [ 2] 755 ldw (0x2c, sp), x
+ 000400 1F 2A [ 2] 756 ldw (0x2a, sp), x
+ 757 ; ../printf_large.c: 660: OUTPUT_2DIGITS( value.byte[1] );
+ 000402 7B 06 [ 1] 758 ld a, (0x06, sp)
+ 000404 6B 2D [ 1] 759 ld (0x2d, sp), a
+ 000406 1E 34 [ 2] 760 ldw x, (0x34, sp)
+ 000408 89 [ 2] 761 pushw x
+ 000409 1E 34 [ 2] 762 ldw x, (0x34, sp)
+ 00040B 89 [ 2] 763 pushw x
+ 00040C 7B 35 [ 1] 764 ld a, (0x35, sp)
+ 00040E 88 [ 1] 765 push a
+ 00040F 7B 2C [ 1] 766 ld a, (0x2c, sp)
+ 000411 88 [ 1] 767 push a
+ 000412 7B 33 [ 1] 768 ld a, (0x33, sp)
+ 000414 88 [ 1] 769 push a
+ 000415 8Ds00r00r24 [ 5] 770 callf _output_2digits
+ 000419 5B 07 [ 2] 771 addw sp, #7
+ 00041B 1E 2A [ 2] 772 ldw x, (0x2a, sp)
+ 00041D 5C [ 1] 773 incw x
+ 00041E 5C [ 1] 774 incw x
+ 00041F 1F 2C [ 2] 775 ldw (0x2c, sp), x
+ 000421 1F 2A [ 2] 776 ldw (0x2a, sp), x
+ 777 ; ../printf_large.c: 661: OUTPUT_2DIGITS( value.byte[0] );
+ 000423 7B 05 [ 1] 778 ld a, (0x05, sp)
+ 000425 6B 2D [ 1] 779 ld (0x2d, sp), a
+ 000427 1E 34 [ 2] 780 ldw x, (0x34, sp)
+ 000429 89 [ 2] 781 pushw x
+ 00042A 1E 34 [ 2] 782 ldw x, (0x34, sp)
+ 00042C 89 [ 2] 783 pushw x
+ 00042D 7B 35 [ 1] 784 ld a, (0x35, sp)
+ 00042F 88 [ 1] 785 push a
+ 000430 7B 2C [ 1] 786 ld a, (0x2c, sp)
+ 000432 88 [ 1] 787 push a
+ 000433 7B 33 [ 1] 788 ld a, (0x33, sp)
+ 000435 88 [ 1] 789 push a
+ 000436 8Ds00r00r24 [ 5] 790 callf _output_2digits
+ 00043A 5B 07 [ 2] 791 addw sp, #7
+ 00043C 1E 2A [ 2] 792 ldw x, (0x2a, sp)
+ 00043E 5C [ 1] 793 incw x
+ 00043F 5C [ 1] 794 incw x
+ 000440 1F 2C [ 2] 795 ldw (0x2c, sp), x
+ 000442 1F 10 [ 2] 796 ldw (0x10, sp), x
+ 797 ; ../printf_large.c: 663: break;
+ 000444 20 48 [ 2] 798 jra 00160$
+ 799 ; ../printf_large.c: 666: case 'I':
+ 000446 800 00154$:
+ 801 ; ../printf_large.c: 667: signed_argument = 1;
+ 000446 A6 01 [ 1] 802 ld a, #0x01
+ 000448 6B 20 [ 1] 803 ld (0x20, sp), a
+ 804 ; ../printf_large.c: 668: radix = 10;
+ 00044A A6 0A [ 1] 805 ld a, #0x0a
+ 00044C 6B 24 [ 1] 806 ld (0x24, sp), a
+ 807 ; ../printf_large.c: 669: break;
+ 00044E 20 3E [ 2] 808 jra 00160$
+ 809 ; ../printf_large.c: 671: case 'O':
+ 000450 810 00155$:
+ 811 ; ../printf_large.c: 672: radix = 8;
+ 000450 A6 08 [ 1] 812 ld a, #0x08
+ 000452 6B 24 [ 1] 813 ld (0x24, sp), a
+ 814 ; ../printf_large.c: 673: break;
+ 000454 20 38 [ 2] 815 jra 00160$
+ 816 ; ../printf_large.c: 675: case 'U':
+ 000456 817 00156$:
+ 818 ; ../printf_large.c: 676: radix = 10;
+ 000456 A6 0A [ 1] 819 ld a, #0x0a
+ 000458 6B 24 [ 1] 820 ld (0x24, sp), a
+ 821 ; ../printf_large.c: 677: break;
+ 00045A 20 32 [ 2] 822 jra 00160$
+ 823 ; ../printf_large.c: 679: case 'X':
+ 00045C 824 00157$:
+ 825 ; ../printf_large.c: 680: radix = 16;
+ 00045C A6 10 [ 1] 826 ld a, #0x10
+ 00045E 6B 24 [ 1] 827 ld (0x24, sp), a
+ 828 ; ../printf_large.c: 681: break;
+ 000460 20 2C [ 2] 829 jra 00160$
+ 830 ; ../printf_large.c: 683: case 'F':
+ 000462 831 00158$:
+ 832 ; ../printf_large.c: 684: float_argument=1;
+ 000462 A6 01 [ 1] 833 ld a, #0x01
+ 000464 6B 23 [ 1] 834 ld (0x23, sp), a
+ 835 ; ../printf_large.c: 685: break;
+ 000466 20 26 [ 2] 836 jra 00160$
+ 837 ; ../printf_large.c: 687: default:
+ 000468 838 00159$:
+ 839 ; ../printf_large.c: 689: OUTPUT_CHAR( c, p );
+ 000468 1E 34 [ 2] 840 ldw x, (0x34, sp)
+ 00046A 89 [ 2] 841 pushw x
+ 00046B 7B 2F [ 1] 842 ld a, (0x2f, sp)
+ 00046D 88 [ 1] 843 push a
+ 00046E 4Br7B [ 1] 844 push #(00725$)
+ 000470 4Bs04 [ 1] 845 push #(00725$ >> 8)
+ 000472 4Bs00 [ 1] 846 push #(00725$ >> 16)
+ 000474 1E 38 [ 2] 847 ldw x, (0x38, sp)
+ 000476 89 [ 2] 848 pushw x
+ 000477 7B 39 [ 1] 849 ld a, (0x39, sp)
+ 000479 88 [ 1] 850 push a
+ 00047A 87 [ 5] 851 retf
+ 00047B 852 00725$:
+ 00047B 5B 03 [ 2] 853 addw sp, #3
+ 00047D 1E 10 [ 2] 854 ldw x, (0x10, sp)
+ 00047F 5C [ 1] 855 incw x
+ 000480 1F 2C [ 2] 856 ldw (0x2c, sp), x
+ 000482 1F 10 [ 2] 857 ldw (0x10, sp), x
+ 858 ; ../printf_large.c: 872: return charsOutputted;
+ 000484 20 08 [ 2] 859 jra 00160$
+ 860 ; ../printf_large.c: 691: }
+ 000486 861 00314$:
+ 000486 16 29 [ 2] 862 ldw y, (0x29, sp)
+ 000488 17 10 [ 2] 863 ldw (0x10, sp), y
+ 00048A 16 2C [ 2] 864 ldw y, (0x2c, sp)
+ 00048C 17 25 [ 2] 865 ldw (0x25, sp), y
+ 00048E 866 00160$:
+ 867 ; ../printf_large.c: 693: if (float_argument)
+ 00048E 0D 23 [ 1] 868 tnz (0x23, sp)
+ 000490 27 50 [ 1] 869 jreq 00226$
+ 870 ; ../printf_large.c: 695: value.f = va_arg(ap, float);
+ 000492 1E 38 [ 2] 871 ldw x, (0x38, sp)
+ 000494 1C 00 04 [ 2] 872 addw x, #0x0004
+ 000497 1F 38 [ 2] 873 ldw (0x38, sp), x
+ 000499 1D 00 04 [ 2] 874 subw x, #0x0004
+ 00049C 90 93 [ 1] 875 ldw y, x
+ 00049E 90 EE 02 [ 2] 876 ldw y, (0x2, y)
+ 0004A1 FE [ 2] 877 ldw x, (x)
+ 0004A2 17 07 [ 2] 878 ldw (0x07, sp), y
+ 0004A4 1F 05 [ 2] 879 ldw (0x05, sp), x
+ 880 ; ../printf_large.c: 697: PTR="<NO FLOAT>";
+ 0004A6 AEr00r00 [ 2] 881 ldw x, #(___str_0 + 0)
+ 0004A9 1F 05 [ 2] 882 ldw (0x05, sp), x
+ 883 ; ../printf_large.c: 698: while (c=*PTR++)
+ 0004AB 16 10 [ 2] 884 ldw y, (0x10, sp)
+ 0004AD 17 2C [ 2] 885 ldw (0x2c, sp), y
+ 0004AF 886 00161$:
+ 0004AF 16 05 [ 2] 887 ldw y, (0x05, sp)
+ 0004B1 17 28 [ 2] 888 ldw (0x28, sp), y
+ 0004B3 93 [ 1] 889 ldw x, y
+ 0004B4 5C [ 1] 890 incw x
+ 0004B5 1F 2A [ 2] 891 ldw (0x2a, sp), x
+ 0004B7 1F 05 [ 2] 892 ldw (0x05, sp), x
+ 0004B9 1E 28 [ 2] 893 ldw x, (0x28, sp)
+ 0004BB F6 [ 1] 894 ld a, (x)
+ 0004BC 97 [ 1] 895 ld xl, a
+ 0004BD 4D [ 1] 896 tnz a
+ 0004BE 26 04 [ 1] 897 jrne 00727$
+ 0004C0 ACs00r00rDC [ 2] 898 jpf 00231$
+ 0004C4 899 00727$:
+ 900 ; ../printf_large.c: 700: OUTPUT_CHAR (c, p);
+ 0004C4 16 34 [ 2] 901 ldw y, (0x34, sp)
+ 0004C6 90 89 [ 2] 902 pushw y
+ 0004C8 9F [ 1] 903 ld a, xl
+ 0004C9 88 [ 1] 904 push a
+ 0004CA 4BrD7 [ 1] 905 push #(00728$)
+ 0004CC 4Bs04 [ 1] 906 push #(00728$ >> 8)
+ 0004CE 4Bs00 [ 1] 907 push #(00728$ >> 16)
+ 0004D0 1E 38 [ 2] 908 ldw x, (0x38, sp)
+ 0004D2 89 [ 2] 909 pushw x
+ 0004D3 7B 39 [ 1] 910 ld a, (0x39, sp)
+ 0004D5 88 [ 1] 911 push a
+ 0004D6 87 [ 5] 912 retf
+ 0004D7 913 00728$:
+ 0004D7 5B 03 [ 2] 914 addw sp, #3
+ 0004D9 1E 2C [ 2] 915 ldw x, (0x2c, sp)
+ 0004DB 5C [ 1] 916 incw x
+ 0004DC 1F 2C [ 2] 917 ldw (0x2c, sp), x
+ 0004DE 1F 10 [ 2] 918 ldw (0x10, sp), x
+ 0004E0 20 CD [ 2] 919 jra 00161$
+ 0004E2 920 00226$:
+ 921 ; ../printf_large.c: 718: else if (radix != 0)
+ 0004E2 0D 24 [ 1] 922 tnz (0x24, sp)
+ 0004E4 26 04 [ 1] 923 jrne 00730$
+ 0004E6 ACs00r00rDC [ 2] 924 jpf 00231$
+ 0004EA 925 00730$:
+ 926 ; ../printf_large.c: 723: unsigned char MEM_SPACE_BUF_PP *pstore = &store[5];
+ 0004EA 1E 12 [ 2] 927 ldw x, (0x12, sp)
+ 0004EC 1F 2B [ 2] 928 ldw (0x2b, sp), x
+ 929 ; ../printf_large.c: 726: if (char_argument)
+ 0004EE 0D 21 [ 1] 930 tnz (0x21, sp)
+ 0004F0 27 21 [ 1] 931 jreq 00172$
+ 932 ; ../printf_large.c: 728: value.l = va_arg(ap, char);
+ 0004F2 1E 38 [ 2] 933 ldw x, (0x38, sp)
+ 0004F4 5C [ 1] 934 incw x
+ 0004F5 1F 38 [ 2] 935 ldw (0x38, sp), x
+ 0004F7 1C FF FF [ 2] 936 addw x, #0xffff
+ 0004FA F6 [ 1] 937 ld a, (x)
+ 0004FB 5F [ 1] 938 clrw x
+ 0004FC 97 [ 1] 939 ld xl, a
+ 0004FD 90 5F [ 1] 940 clrw y
+ 0004FF 1F 07 [ 2] 941 ldw (0x07, sp), x
+ 000501 17 05 [ 2] 942 ldw (0x05, sp), y
+ 943 ; ../printf_large.c: 729: if (!signed_argument)
+ 000503 0D 20 [ 1] 944 tnz (0x20, sp)
+ 000505 26 45 [ 1] 945 jrne 00173$
+ 946 ; ../printf_large.c: 731: value.l &= 0xFF;
+ 000507 1E 07 [ 2] 947 ldw x, (0x07, sp)
+ 000509 4F [ 1] 948 clr a
+ 00050A 95 [ 1] 949 ld xh, a
+ 00050B 90 5F [ 1] 950 clrw y
+ 00050D 1F 07 [ 2] 951 ldw (0x07, sp), x
+ 00050F 17 05 [ 2] 952 ldw (0x05, sp), y
+ 000511 20 39 [ 2] 953 jra 00173$
+ 000513 954 00172$:
+ 955 ; ../printf_large.c: 734: else if (long_argument)
+ 000513 0D 22 [ 1] 956 tnz (0x22, sp)
+ 000515 27 16 [ 1] 957 jreq 00169$
+ 958 ; ../printf_large.c: 736: value.l = va_arg(ap, long);
+ 000517 1E 38 [ 2] 959 ldw x, (0x38, sp)
+ 000519 1C 00 04 [ 2] 960 addw x, #0x0004
+ 00051C 1F 38 [ 2] 961 ldw (0x38, sp), x
+ 00051E 1D 00 04 [ 2] 962 subw x, #0x0004
+ 000521 90 93 [ 1] 963 ldw y, x
+ 000523 90 EE 02 [ 2] 964 ldw y, (0x2, y)
+ 000526 FE [ 2] 965 ldw x, (x)
+ 000527 17 07 [ 2] 966 ldw (0x07, sp), y
+ 000529 1F 05 [ 2] 967 ldw (0x05, sp), x
+ 00052B 20 1F [ 2] 968 jra 00173$
+ 00052D 969 00169$:
+ 970 ; ../printf_large.c: 740: value.l = va_arg(ap, int);
+ 00052D 1E 38 [ 2] 971 ldw x, (0x38, sp)
+ 00052F 5C [ 1] 972 incw x
+ 000530 5C [ 1] 973 incw x
+ 000531 1F 38 [ 2] 974 ldw (0x38, sp), x
+ 000533 5A [ 2] 975 decw x
+ 000534 5A [ 2] 976 decw x
+ 000535 FE [ 2] 977 ldw x, (x)
+ 000536 90 5F [ 1] 978 clrw y
+ 000538 5D [ 2] 979 tnzw x
+ 000539 2A 02 [ 1] 980 jrpl 00734$
+ 00053B 90 5A [ 2] 981 decw y
+ 00053D 982 00734$:
+ 00053D 1F 07 [ 2] 983 ldw (0x07, sp), x
+ 00053F 17 05 [ 2] 984 ldw (0x05, sp), y
+ 985 ; ../printf_large.c: 741: if (!signed_argument)
+ 000541 0D 20 [ 1] 986 tnz (0x20, sp)
+ 000543 26 07 [ 1] 987 jrne 00173$
+ 988 ; ../printf_large.c: 743: value.l &= 0xFFFF;
+ 000545 16 07 [ 2] 989 ldw y, (0x07, sp)
+ 000547 5F [ 1] 990 clrw x
+ 000548 17 07 [ 2] 991 ldw (0x07, sp), y
+ 00054A 1F 05 [ 2] 992 ldw (0x05, sp), x
+ 00054C 993 00173$:
+ 994 ; ../printf_large.c: 747: if ( signed_argument )
+ 00054C 0D 20 [ 1] 995 tnz (0x20, sp)
+ 00054E 27 1D [ 1] 996 jreq 00178$
+ 997 ; ../printf_large.c: 749: if (value.l < 0)
+ 000550 1E 05 [ 2] 998 ldw x, (0x05, sp)
+ 000552 2A 17 [ 1] 999 jrpl 00175$
+ 1000 ; ../printf_large.c: 750: value.l = -value.l;
+ 000554 16 07 [ 2] 1001 ldw y, (0x07, sp)
+ 000556 17 03 [ 2] 1002 ldw (0x03, sp), y
+ 000558 16 05 [ 2] 1003 ldw y, (0x05, sp)
+ 00055A 17 01 [ 2] 1004 ldw (0x01, sp), y
+ 00055C 16 03 [ 2] 1005 ldw y, (0x03, sp)
+ 00055E 90 50 [ 2] 1006 negw y
+ 000560 1E 01 [ 2] 1007 ldw x, (0x01, sp)
+ 000562 24 01 [ 1] 1008 jrnc 00738$
+ 000564 5C [ 1] 1009 incw x
+ 000565 1010 00738$:
+ 000565 50 [ 2] 1011 negw x
+ 000566 17 07 [ 2] 1012 ldw (0x07, sp), y
+ 000568 1F 05 [ 2] 1013 ldw (0x05, sp), x
+ 1014 ; ../printf_large.c: 752: signed_argument = 0;
+ 00056A C5 1015 .byte 0xc5
+ 00056B 1016 00175$:
+ 00056B 0F 20 [ 1] 1017 clr (0x20, sp)
+ 00056D 1018 00178$:
+ 1019 ; ../printf_large.c: 756: lsd = 1;
+ 00056D A6 01 [ 1] 1020 ld a, #0x01
+ 00056F 6B 2D [ 1] 1021 ld (0x2d, sp), a
+ 1022 ; ../printf_large.c: 758: do {
+ 000571 16 2B [ 2] 1023 ldw y, (0x2b, sp)
+ 000573 17 29 [ 2] 1024 ldw (0x29, sp), y
+ 000575 5F [ 1] 1025 clrw x
+ 000576 1F 2B [ 2] 1026 ldw (0x2b, sp), x
+ 000578 1027 00182$:
+ 1028 ; ../printf_large.c: 759: value.byte[4] = 0;
+ 000578 0F 09 [ 1] 1029 clr (0x09, sp)
+ 1030 ; ../printf_large.c: 761: calculate_digit(&value, radix);
+ 00057A 1E 14 [ 2] 1031 ldw x, (0x14, sp)
+ 00057C 7B 24 [ 1] 1032 ld a, (0x24, sp)
+ 00057E 88 [ 1] 1033 push a
+ 00057F 89 [ 2] 1034 pushw x
+ 000580 8Ds00r00r5D [ 5] 1035 callf _calculate_digit
+ 000584 5B 03 [ 2] 1036 addw sp, #3
+ 1037 ; ../printf_large.c: 765: if (!lsd)
+ 000586 0D 2D [ 1] 1038 tnz (0x2d, sp)
+ 000588 26 23 [ 1] 1039 jrne 00180$
+ 1040 ; ../printf_large.c: 767: *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore;
+ 00058A 1E 18 [ 2] 1041 ldw x, (0x18, sp)
+ 00058C F6 [ 1] 1042 ld a, (x)
+ 00058D 4E [ 1] 1043 swap a
+ 00058E A4 F0 [ 1] 1044 and a, #0xf0
+ 000590 97 [ 1] 1045 ld xl, a
+ 000591 16 18 [ 2] 1046 ldw y, (0x18, sp)
+ 000593 90 F6 [ 1] 1047 ld a, (y)
+ 000595 4E [ 1] 1048 swap a
+ 000596 A4 0F [ 1] 1049 and a, #0x0f
+ 000598 89 [ 2] 1050 pushw x
+ 000599 1A 02 [ 1] 1051 or a, (2, sp)
+ 00059B 85 [ 2] 1052 popw x
+ 00059C 6B 28 [ 1] 1053 ld (0x28, sp), a
+ 00059E 1E 29 [ 2] 1054 ldw x, (0x29, sp)
+ 0005A0 F6 [ 1] 1055 ld a, (x)
+ 0005A1 1A 28 [ 1] 1056 or a, (0x28, sp)
+ 0005A3 1E 29 [ 2] 1057 ldw x, (0x29, sp)
+ 0005A5 F7 [ 1] 1058 ld (x), a
+ 1059 ; ../printf_large.c: 768: pstore--;
+ 0005A6 1E 29 [ 2] 1060 ldw x, (0x29, sp)
+ 0005A8 5A [ 2] 1061 decw x
+ 0005A9 1F 29 [ 2] 1062 ldw (0x29, sp), x
+ 0005AB 20 06 [ 2] 1063 jra 00181$
+ 0005AD 1064 00180$:
+ 1065 ; ../printf_large.c: 772: *pstore = value.byte[4];
+ 0005AD 1E 16 [ 2] 1066 ldw x, (0x16, sp)
+ 0005AF F6 [ 1] 1067 ld a, (x)
+ 0005B0 1E 29 [ 2] 1068 ldw x, (0x29, sp)
+ 0005B2 F7 [ 1] 1069 ld (x), a
+ 0005B3 1070 00181$:
+ 1071 ; ../printf_large.c: 774: length++;
+ 0005B3 1E 2B [ 2] 1072 ldw x, (0x2b, sp)
+ 0005B5 5C [ 1] 1073 incw x
+ 0005B6 1F 2B [ 2] 1074 ldw (0x2b, sp), x
+ 1075 ; ../printf_large.c: 775: lsd = !lsd;
+ 0005B8 7B 2D [ 1] 1076 ld a, (0x2d, sp)
+ 0005BA A0 01 [ 1] 1077 sub a, #0x01
+ 0005BC 4F [ 1] 1078 clr a
+ 0005BD 49 [ 1] 1079 rlc a
+ 0005BE 6B 2D [ 1] 1080 ld (0x2d, sp), a
+ 1081 ; ../printf_large.c: 776: } while( value.ul );
+ 0005C0 1E 14 [ 2] 1082 ldw x, (0x14, sp)
+ 0005C2 90 93 [ 1] 1083 ldw y, x
+ 0005C4 90 EE 02 [ 2] 1084 ldw y, (0x2, y)
+ 0005C7 17 03 [ 2] 1085 ldw (0x03, sp), y
+ 0005C9 FE [ 2] 1086 ldw x, (x)
+ 0005CA 16 03 [ 2] 1087 ldw y, (0x03, sp)
+ 0005CC 26 AA [ 1] 1088 jrne 00182$
+ 0005CE 5D [ 2] 1089 tnzw x
+ 0005CF 26 A7 [ 1] 1090 jrne 00182$
+ 1091 ; ../printf_large.c: 778: if (width == 0)
+ 0005D1 16 29 [ 2] 1092 ldw y, (0x29, sp)
+ 0005D3 17 21 [ 2] 1093 ldw (0x21, sp), y
+ 0005D5 16 2B [ 2] 1094 ldw y, (0x2b, sp)
+ 0005D7 17 23 [ 2] 1095 ldw (0x23, sp), y
+ 0005D9 1E 25 [ 2] 1096 ldw x, (0x25, sp)
+ 0005DB 26 05 [ 1] 1097 jrne 00186$
+ 1098 ; ../printf_large.c: 783: width = 1;
+ 0005DD AE 00 01 [ 2] 1099 ldw x, #0x0001
+ 0005E0 1F 25 [ 2] 1100 ldw (0x25, sp), x
+ 0005E2 1101 00186$:
+ 1102 ; ../printf_large.c: 787: if (!zero_padding && !left_justify)
+ 0005E2 0D 1D [ 1] 1103 tnz (0x1d, sp)
+ 0005E4 26 3D [ 1] 1104 jrne 00191$
+ 0005E6 0D 1C [ 1] 1105 tnz (0x1c, sp)
+ 0005E8 26 39 [ 1] 1106 jrne 00191$
+ 1107 ; ../printf_large.c: 789: while ( width > (unsigned char) (length+1) )
+ 0005EA 16 10 [ 2] 1108 ldw y, (0x10, sp)
+ 0005EC 17 29 [ 2] 1109 ldw (0x29, sp), y
+ 0005EE 16 25 [ 2] 1110 ldw y, (0x25, sp)
+ 0005F0 17 2B [ 2] 1111 ldw (0x2b, sp), y
+ 0005F2 1112 00187$:
+ 0005F2 7B 24 [ 1] 1113 ld a, (0x24, sp)
+ 0005F4 4C [ 1] 1114 inc a
+ 0005F5 5F [ 1] 1115 clrw x
+ 0005F6 97 [ 1] 1116 ld xl, a
+ 0005F7 13 2B [ 2] 1117 cpw x, (0x2b, sp)
+ 0005F9 24 20 [ 1] 1118 jrnc 00316$
+ 1119 ; ../printf_large.c: 791: OUTPUT_CHAR( ' ', p );
+ 0005FB 1E 34 [ 2] 1120 ldw x, (0x34, sp)
+ 0005FD 89 [ 2] 1121 pushw x
+ 0005FE 4B 20 [ 1] 1122 push #0x20
+ 000600 4Br0D [ 1] 1123 push #(00747$)
+ 000602 4Bs06 [ 1] 1124 push #(00747$ >> 8)
+ 000604 4Bs00 [ 1] 1125 push #(00747$ >> 16)
+ 000606 1E 38 [ 2] 1126 ldw x, (0x38, sp)
+ 000608 89 [ 2] 1127 pushw x
+ 000609 7B 39 [ 1] 1128 ld a, (0x39, sp)
+ 00060B 88 [ 1] 1129 push a
+ 00060C 87 [ 5] 1130 retf
+ 00060D 1131 00747$:
+ 00060D 5B 03 [ 2] 1132 addw sp, #3
+ 00060F 1E 29 [ 2] 1133 ldw x, (0x29, sp)
+ 000611 5C [ 1] 1134 incw x
+ 000612 1F 29 [ 2] 1135 ldw (0x29, sp), x
+ 1136 ; ../printf_large.c: 792: width--;
+ 000614 1E 2B [ 2] 1137 ldw x, (0x2b, sp)
+ 000616 5A [ 2] 1138 decw x
+ 000617 1F 2B [ 2] 1139 ldw (0x2b, sp), x
+ 000619 20 D7 [ 2] 1140 jra 00187$
+ 00061B 1141 00316$:
+ 00061B 16 29 [ 2] 1142 ldw y, (0x29, sp)
+ 00061D 17 10 [ 2] 1143 ldw (0x10, sp), y
+ 00061F 16 2B [ 2] 1144 ldw y, (0x2b, sp)
+ 000621 17 25 [ 2] 1145 ldw (0x25, sp), y
+ 000623 1146 00191$:
+ 1147 ; ../printf_large.c: 796: if (signed_argument) // this now means the original value was negative
+ 000623 0D 20 [ 1] 1148 tnz (0x20, sp)
+ 000625 27 20 [ 1] 1149 jreq 00201$
+ 1150 ; ../printf_large.c: 798: OUTPUT_CHAR( '-', p );
+ 000627 1E 34 [ 2] 1151 ldw x, (0x34, sp)
+ 000629 89 [ 2] 1152 pushw x
+ 00062A 4B 2D [ 1] 1153 push #0x2d
+ 00062C 4Br39 [ 1] 1154 push #(00750$)
+ 00062E 4Bs06 [ 1] 1155 push #(00750$ >> 8)
+ 000630 4Bs00 [ 1] 1156 push #(00750$ >> 16)
+ 000632 1E 38 [ 2] 1157 ldw x, (0x38, sp)
+ 000634 89 [ 2] 1158 pushw x
+ 000635 7B 39 [ 1] 1159 ld a, (0x39, sp)
+ 000637 88 [ 1] 1160 push a
+ 000638 87 [ 5] 1161 retf
+ 000639 1162 00750$:
+ 000639 5B 03 [ 2] 1163 addw sp, #3
+ 00063B 1E 10 [ 2] 1164 ldw x, (0x10, sp)
+ 00063D 5C [ 1] 1165 incw x
+ 00063E 1F 10 [ 2] 1166 ldw (0x10, sp), x
+ 1167 ; ../printf_large.c: 800: width--;
+ 000640 1E 25 [ 2] 1168 ldw x, (0x25, sp)
+ 000642 5A [ 2] 1169 decw x
+ 000643 1F 25 [ 2] 1170 ldw (0x25, sp), x
+ 000645 20 4A [ 2] 1171 jra 00202$
+ 000647 1172 00201$:
+ 1173 ; ../printf_large.c: 802: else if (length != 0)
+ 000647 1E 23 [ 2] 1174 ldw x, (0x23, sp)
+ 000649 27 46 [ 1] 1175 jreq 00202$
+ 1176 ; ../printf_large.c: 805: if (prefix_sign)
+ 00064B 0D 1E [ 1] 1177 tnz (0x1e, sp)
+ 00064D 27 20 [ 1] 1178 jreq 00196$
+ 1179 ; ../printf_large.c: 807: OUTPUT_CHAR( '+', p );
+ 00064F 1E 34 [ 2] 1180 ldw x, (0x34, sp)
+ 000651 89 [ 2] 1181 pushw x
+ 000652 4B 2B [ 1] 1182 push #0x2b
+ 000654 4Br61 [ 1] 1183 push #(00753$)
+ 000656 4Bs06 [ 1] 1184 push #(00753$ >> 8)
+ 000658 4Bs00 [ 1] 1185 push #(00753$ >> 16)
+ 00065A 1E 38 [ 2] 1186 ldw x, (0x38, sp)
+ 00065C 89 [ 2] 1187 pushw x
+ 00065D 7B 39 [ 1] 1188 ld a, (0x39, sp)
+ 00065F 88 [ 1] 1189 push a
+ 000660 87 [ 5] 1190 retf
+ 000661 1191 00753$:
+ 000661 5B 03 [ 2] 1192 addw sp, #3
+ 000663 1E 10 [ 2] 1193 ldw x, (0x10, sp)
+ 000665 5C [ 1] 1194 incw x
+ 000666 1F 10 [ 2] 1195 ldw (0x10, sp), x
+ 1196 ; ../printf_large.c: 809: width--;
+ 000668 1E 25 [ 2] 1197 ldw x, (0x25, sp)
+ 00066A 5A [ 2] 1198 decw x
+ 00066B 1F 25 [ 2] 1199 ldw (0x25, sp), x
+ 00066D 20 22 [ 2] 1200 jra 00202$
+ 00066F 1201 00196$:
+ 1202 ; ../printf_large.c: 811: else if (prefix_space)
+ 00066F 0D 1F [ 1] 1203 tnz (0x1f, sp)
+ 000671 27 1E [ 1] 1204 jreq 00202$
+ 1205 ; ../printf_large.c: 813: OUTPUT_CHAR( ' ', p );
+ 000673 1E 34 [ 2] 1206 ldw x, (0x34, sp)
+ 000675 89 [ 2] 1207 pushw x
+ 000676 4B 20 [ 1] 1208 push #0x20
+ 000678 4Br85 [ 1] 1209 push #(00755$)
+ 00067A 4Bs06 [ 1] 1210 push #(00755$ >> 8)
+ 00067C 4Bs00 [ 1] 1211 push #(00755$ >> 16)
+ 00067E 1E 38 [ 2] 1212 ldw x, (0x38, sp)
+ 000680 89 [ 2] 1213 pushw x
+ 000681 7B 39 [ 1] 1214 ld a, (0x39, sp)
+ 000683 88 [ 1] 1215 push a
+ 000684 87 [ 5] 1216 retf
+ 000685 1217 00755$:
+ 000685 5B 03 [ 2] 1218 addw sp, #3
+ 000687 1E 10 [ 2] 1219 ldw x, (0x10, sp)
+ 000689 5C [ 1] 1220 incw x
+ 00068A 1F 10 [ 2] 1221 ldw (0x10, sp), x
+ 1222 ; ../printf_large.c: 815: width--;
+ 00068C 1E 25 [ 2] 1223 ldw x, (0x25, sp)
+ 00068E 5A [ 2] 1224 decw x
+ 00068F 1F 25 [ 2] 1225 ldw (0x25, sp), x
+ 000691 1226 00202$:
+ 1227 ; ../printf_large.c: 820: if (!left_justify)
+ 000691 0D 1C [ 1] 1228 tnz (0x1c, sp)
+ 000693 26 3A [ 1] 1229 jrne 00210$
+ 1230 ; ../printf_large.c: 822: while ( width-- > length )
+ 000695 16 10 [ 2] 1231 ldw y, (0x10, sp)
+ 000697 17 29 [ 2] 1232 ldw (0x29, sp), y
+ 000699 16 25 [ 2] 1233 ldw y, (0x25, sp)
+ 00069B 17 2B [ 2] 1234 ldw (0x2b, sp), y
+ 00069D 1235 00203$:
+ 00069D 16 2B [ 2] 1236 ldw y, (0x2b, sp)
+ 00069F 1E 2B [ 2] 1237 ldw x, (0x2b, sp)
+ 0006A1 5A [ 2] 1238 decw x
+ 0006A2 1F 2B [ 2] 1239 ldw (0x2b, sp), x
+ 0006A4 93 [ 1] 1240 ldw x, y
+ 0006A5 13 23 [ 2] 1241 cpw x, (0x23, sp)
+ 0006A7 23 3A [ 2] 1242 jrule 00317$
+ 1243 ; ../printf_large.c: 824: OUTPUT_CHAR( zero_padding ? '0' : ' ', p );
+ 0006A9 0D 1D [ 1] 1244 tnz (0x1d, sp)
+ 0006AB 27 04 [ 1] 1245 jreq 00236$
+ 0006AD AE 00 30 [ 2] 1246 ldw x, #0x0030
+ 0006B0 BC 1247 .byte 0xbc
+ 0006B1 1248 00236$:
+ 0006B1 AE 00 20 [ 2] 1249 ldw x, #0x0020
+ 0006B4 1250 00237$:
+ 0006B4 9F [ 1] 1251 ld a, xl
+ 0006B5 1E 34 [ 2] 1252 ldw x, (0x34, sp)
+ 0006B7 89 [ 2] 1253 pushw x
+ 0006B8 88 [ 1] 1254 push a
+ 0006B9 4BrC6 [ 1] 1255 push #(00759$)
+ 0006BB 4Bs06 [ 1] 1256 push #(00759$ >> 8)
+ 0006BD 4Bs00 [ 1] 1257 push #(00759$ >> 16)
+ 0006BF 1E 38 [ 2] 1258 ldw x, (0x38, sp)
+ 0006C1 89 [ 2] 1259 pushw x
+ 0006C2 7B 39 [ 1] 1260 ld a, (0x39, sp)
+ 0006C4 88 [ 1] 1261 push a
+ 0006C5 87 [ 5] 1262 retf
+ 0006C6 1263 00759$:
+ 0006C6 5B 03 [ 2] 1264 addw sp, #3
+ 0006C8 1E 29 [ 2] 1265 ldw x, (0x29, sp)
+ 0006CA 5C [ 1] 1266 incw x
+ 0006CB 1F 29 [ 2] 1267 ldw (0x29, sp), x
+ 0006CD 20 CE [ 2] 1268 jra 00203$
+ 0006CF 1269 00210$:
+ 1270 ; ../printf_large.c: 830: if (width > length)
+ 0006CF 1E 25 [ 2] 1271 ldw x, (0x25, sp)
+ 0006D1 13 23 [ 2] 1272 cpw x, (0x23, sp)
+ 0006D3 23 09 [ 2] 1273 jrule 00207$
+ 1274 ; ../printf_large.c: 831: width -= length;
+ 0006D5 1E 25 [ 2] 1275 ldw x, (0x25, sp)
+ 0006D7 72 F0 23 [ 2] 1276 subw x, (0x23, sp)
+ 0006DA 1F 28 [ 2] 1277 ldw (0x28, sp), x
+ 0006DC 20 0D [ 2] 1278 jra 00309$
+ 0006DE 1279 00207$:
+ 1280 ; ../printf_large.c: 833: width = 0;
+ 0006DE 5F [ 1] 1281 clrw x
+ 0006DF 1F 28 [ 2] 1282 ldw (0x28, sp), x
+ 1283 ; ../printf_large.c: 872: return charsOutputted;
+ 0006E1 20 08 [ 2] 1284 jra 00309$
+ 1285 ; ../printf_large.c: 837: while( length-- )
+ 0006E3 1286 00317$:
+ 0006E3 16 29 [ 2] 1287 ldw y, (0x29, sp)
+ 0006E5 17 10 [ 2] 1288 ldw (0x10, sp), y
+ 0006E7 16 2B [ 2] 1289 ldw y, (0x2b, sp)
+ 0006E9 17 28 [ 2] 1290 ldw (0x28, sp), y
+ 0006EB 1291 00309$:
+ 0006EB 16 21 [ 2] 1292 ldw y, (0x21, sp)
+ 0006ED 17 2B [ 2] 1293 ldw (0x2b, sp), y
+ 0006EF 16 10 [ 2] 1294 ldw y, (0x10, sp)
+ 0006F1 17 25 [ 2] 1295 ldw (0x25, sp), y
+ 0006F3 1296 00215$:
+ 0006F3 1E 23 [ 2] 1297 ldw x, (0x23, sp)
+ 0006F5 16 23 [ 2] 1298 ldw y, (0x23, sp)
+ 0006F7 90 5A [ 2] 1299 decw y
+ 0006F9 17 23 [ 2] 1300 ldw (0x23, sp), y
+ 0006FB 5D [ 2] 1301 tnzw x
+ 0006FC 27 41 [ 1] 1302 jreq 00318$
+ 1303 ; ../printf_large.c: 839: lsd = !lsd;
+ 0006FE 7B 2D [ 1] 1304 ld a, (0x2d, sp)
+ 000700 A0 01 [ 1] 1305 sub a, #0x01
+ 000702 4F [ 1] 1306 clr a
+ 000703 49 [ 1] 1307 rlc a
+ 1308 ; ../printf_large.c: 840: if (!lsd)
+ 000704 6B 2D [ 1] 1309 ld (0x2d, sp), a
+ 000706 26 0E [ 1] 1310 jrne 00213$
+ 1311 ; ../printf_large.c: 842: pstore++;
+ 000708 1E 2B [ 2] 1312 ldw x, (0x2b, sp)
+ 00070A 5C [ 1] 1313 incw x
+ 1314 ; ../printf_large.c: 843: value.byte[4] = *pstore >> 4;
+ 00070B 1F 2B [ 2] 1315 ldw (0x2b, sp), x
+ 00070D F6 [ 1] 1316 ld a, (x)
+ 00070E 4E [ 1] 1317 swap a
+ 00070F A4 0F [ 1] 1318 and a, #0x0f
+ 000711 1E 16 [ 2] 1319 ldw x, (0x16, sp)
+ 000713 F7 [ 1] 1320 ld (x), a
+ 000714 20 08 [ 2] 1321 jra 00214$
+ 000716 1322 00213$:
+ 1323 ; ../printf_large.c: 847: value.byte[4] = *pstore & 0x0F;
+ 000716 1E 2B [ 2] 1324 ldw x, (0x2b, sp)
+ 000718 F6 [ 1] 1325 ld a, (x)
+ 000719 A4 0F [ 1] 1326 and a, #0x0f
+ 00071B 1E 16 [ 2] 1327 ldw x, (0x16, sp)
+ 00071D F7 [ 1] 1328 ld (x), a
+ 00071E 1329 00214$:
+ 1330 ; ../printf_large.c: 850: output_digit( value.byte[4], lower_case, output_char, p );
+ 00071E 1E 1A [ 2] 1331 ldw x, (0x1a, sp)
+ 000720 F6 [ 1] 1332 ld a, (x)
+ 000721 6B 2A [ 1] 1333 ld (0x2a, sp), a
+ 000723 1E 34 [ 2] 1334 ldw x, (0x34, sp)
+ 000725 89 [ 2] 1335 pushw x
+ 000726 1E 34 [ 2] 1336 ldw x, (0x34, sp)
+ 000728 89 [ 2] 1337 pushw x
+ 000729 7B 35 [ 1] 1338 ld a, (0x35, sp)
+ 00072B 88 [ 1] 1339 push a
+ 00072C 7B 2C [ 1] 1340 ld a, (0x2c, sp)
+ 00072E 88 [ 1] 1341 push a
+ 00072F 7B 30 [ 1] 1342 ld a, (0x30, sp)
+ 000731 88 [ 1] 1343 push a
+ 000732 8Ds00r00r00 [ 5] 1344 callf _output_digit
+ 000736 5B 07 [ 2] 1345 addw sp, #7
+ 1346 ; ../printf_large.c: 851: charsOutputted++;
+ 000738 1E 25 [ 2] 1347 ldw x, (0x25, sp)
+ 00073A 5C [ 1] 1348 incw x
+ 00073B 1F 25 [ 2] 1349 ldw (0x25, sp), x
+ 00073D 20 B4 [ 2] 1350 jra 00215$
+ 00073F 1351 00318$:
+ 00073F 16 25 [ 2] 1352 ldw y, (0x25, sp)
+ 000741 17 10 [ 2] 1353 ldw (0x10, sp), y
+ 1354 ; ../printf_large.c: 856: if (left_justify)
+ 000743 0D 1C [ 1] 1355 tnz (0x1c, sp)
+ 000745 26 04 [ 1] 1356 jrne 00766$
+ 000747 ACs00r00rDC [ 2] 1357 jpf 00231$
+ 00074B 1358 00766$:
+ 1359 ; ../printf_large.c: 858: while (width-- > 0)
+ 00074B 16 25 [ 2] 1360 ldw y, (0x25, sp)
+ 00074D 17 2C [ 2] 1361 ldw (0x2c, sp), y
+ 00074F 16 28 [ 2] 1362 ldw y, (0x28, sp)
+ 000751 17 2A [ 2] 1363 ldw (0x2a, sp), y
+ 000753 1364 00218$:
+ 000753 1E 2A [ 2] 1365 ldw x, (0x2a, sp)
+ 000755 16 2A [ 2] 1366 ldw y, (0x2a, sp)
+ 000757 90 5A [ 2] 1367 decw y
+ 000759 17 2A [ 2] 1368 ldw (0x2a, sp), y
+ 00075B 5D [ 2] 1369 tnzw x
+ 00075C 26 04 [ 1] 1370 jrne 00767$
+ 00075E ACs00r00rDC [ 2] 1371 jpf 00231$
+ 000762 1372 00767$:
+ 1373 ; ../printf_large.c: 860: OUTPUT_CHAR(' ', p);
+ 000762 1E 34 [ 2] 1374 ldw x, (0x34, sp)
+ 000764 89 [ 2] 1375 pushw x
+ 000765 4B 20 [ 1] 1376 push #0x20
+ 000767 4Br74 [ 1] 1377 push #(00768$)
+ 000769 4Bs07 [ 1] 1378 push #(00768$ >> 8)
+ 00076B 4Bs00 [ 1] 1379 push #(00768$ >> 16)
+ 00076D 1E 38 [ 2] 1380 ldw x, (0x38, sp)
+ 00076F 89 [ 2] 1381 pushw x
+ 000770 7B 39 [ 1] 1382 ld a, (0x39, sp)
+ 000772 88 [ 1] 1383 push a
+ 000773 87 [ 5] 1384 retf
+ 000774 1385 00768$:
+ 000774 5B 03 [ 2] 1386 addw sp, #3
+ 000776 1E 2C [ 2] 1387 ldw x, (0x2c, sp)
+ 000778 5C [ 1] 1388 incw x
+ 000779 1F 2C [ 2] 1389 ldw (0x2c, sp), x
+ 00077B 1F 10 [ 2] 1390 ldw (0x10, sp), x
+ 00077D 20 D4 [ 2] 1391 jra 00218$
+ 00077F 1392 00229$:
+ 1393 ; ../printf_large.c: 868: OUTPUT_CHAR( c, p );
+ 00077F 16 34 [ 2] 1394 ldw y, (0x34, sp)
+ 000781 90 89 [ 2] 1395 pushw y
+ 000783 9F [ 1] 1396 ld a, xl
+ 000784 88 [ 1] 1397 push a
+ 000785 4Br92 [ 1] 1398 push #(00770$)
+ 000787 4Bs07 [ 1] 1399 push #(00770$ >> 8)
+ 000789 4Bs00 [ 1] 1400 push #(00770$ >> 16)
+ 00078B 1E 38 [ 2] 1401 ldw x, (0x38, sp)
+ 00078D 89 [ 2] 1402 pushw x
+ 00078E 7B 39 [ 1] 1403 ld a, (0x39, sp)
+ 000790 88 [ 1] 1404 push a
+ 000791 87 [ 5] 1405 retf
+ 000792 1406 00770$:
+ 000792 5B 03 [ 2] 1407 addw sp, #3
+ 000794 1E 10 [ 2] 1408 ldw x, (0x10, sp)
+ 000796 5C [ 1] 1409 incw x
+ 000797 1F 10 [ 2] 1410 ldw (0x10, sp), x
+ 000799 ACs00r00rDC [ 2] 1411 jpf 00231$
+ 00079D 1412 00233$:
+ 1413 ; ../printf_large.c: 872: return charsOutputted;
+ 00079D 1E 10 [ 2] 1414 ldw x, (0x10, sp)
+ 1415 ; ../printf_large.c: 873: }
+ 00079F 5B 2D [ 2] 1416 addw sp, #45
+ 0007A1 87 [ 5] 1417 retf
+ 1418 .area CODE
+ 1419 .area CONST
+ 1420 .area CONST
+ 000000 1421 ___str_0:
+ 000000 3C 4E 4F 20 46 4C 4F 1422 .ascii "<NO FLOAT>"
+ 41 54 3E
+ 00000A 00 1423 .db 0x00
+ 1424 .area CODE
+ 1425 .area INITIALIZER
+ 1426 .area CABS (ABS)
diff --git a/device/lib/stm8-large/printf_large.rel b/device/lib/stm8-large/printf_large.rel
new file mode 100644
index 0000000..b4d9a41
--- /dev/null
+++ b/device/lib/stm8-large/printf_large.rel
@@ -0,0 +1,694 @@
+XH3
+H B areas 3 global symbols
+M printf_large
+O -mstm8
+S .__.ABS. Def000000
+S _strlen Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size B flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 7A2 flags 0 addr 0
+S __print_format Def0000C0
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 04 AB 30 A1 39 23 08 AB 07 0D 05 27
+R 00 00 00 09
+T 00 00 0D 02 AB 20
+R 00 00 00 09
+T 00 00 10
+R 00 00 00 09
+T 00 00 10 1E 09 89 88 4B 00 00 21 4B 00 00 21 4B
+R 00 00 00 09 F1 01 08 00 09 F1 81 0C 00 09
+T 00 00 19 00 00 21 1E 0D 89 7B 0E 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 5B 03 87
+R 00 00 00 09
+T 00 00 24
+R 00 00 00 09
+T 00 00 24 88 7B 05 4E A4 0F 6B 01 1E 0A 89 1E 0A
+R 00 00 00 09
+T 00 00 31 89 7B 0B 88 7B 0B 88 7B 07 88 8D
+R 00 00 00 09
+T 00 00 3C 00 00 00 5B 07 7B 05 A4 0F 6B 01 1E 0A
+R 00 00 00 09 80 03 00 09
+T 00 00 49 89 1E 0A 89 7B 0B 88 7B 0B 88 7B 07 88
+R 00 00 00 09
+T 00 00 56 8D 00 00 00 5B 08 87
+R 00 00 00 09 80 04 00 09
+T 00 00 5D
+R 00 00 00 09
+T 00 00 5D 52 09 16 0D 17 01 93 90 EE 02 FE 17 08
+R 00 00 00 09
+T 00 00 6A 1F 06 1E 01 1C 00 04 1F 03 A6 20 6B 05
+R 00 00 00 09
+T 00 00 77
+R 00 00 00 09
+T 00 00 77 1E 03 F6 48 97 7B 06 48 4F 49 89 1A 02
+R 00 00 00 09
+T 00 00 84 85 1E 03 F7 08 09 09 08 09 07 09 06 11
+R 00 00 00 09
+T 00 00 91 0F 25 1C 1E 03 F6 10 0F 1E 03 F7 7B 09
+R 00 00 00 09
+T 00 00 9E AA 01 90 97 7B 08 90 95 7B 07 97 7B 06
+R 00 00 00 09
+T 00 00 AB 95 17 08 1F 06
+R 00 00 00 09
+T 00 00 B0
+R 00 00 00 09
+T 00 00 B0 0A 05 26 C3 1E 01 16 08 EF 02 16 06 FF
+R 00 00 00 09
+T 00 00 BD 5B 09 87
+R 00 00 00 09
+T 00 00 C0
+R 00 00 00 09
+T 00 00 C0 52 2D 5F 1F 10 96 1C 00 0F 1F 12 96 1C
+R 00 00 00 09
+T 00 00 CD 00 05 1F 14 1C 00 04 1F 16 1F 18 16 16
+R 00 00 00 09
+T 00 00 DA 17 1A
+R 00 00 00 09
+T 00 00 DC
+R 00 00 00 09
+T 00 00 DC 1E 36 F6 5C 1F 36 97 4D 26 04 AC
+R 00 00 00 09
+T 00 00 E7 00 07 9D
+R 00 00 00 09 80 03 00 09
+T 00 00 EA
+R 00 00 00 09
+T 00 00 EA 9F A1 25 27 04 AC 00 07 7F
+R 00 00 00 09 80 09 00 09
+T 00 00 F3
+R 00 00 00 09
+T 00 00 F3 0F 1C 0F 1D 0F 1E 0F 1F 0F 20 0F 21 0F
+R 00 00 00 09
+T 00 01 00 22 0F 23 0F 24 5F 1F 25 AE FF FF 1F 2A
+R 00 00 00 09
+T 00 01 0D 16 36 17 28
+R 00 00 00 09
+T 00 01 11
+R 00 00 00 09
+T 00 01 11 1E 28 F6 6B 2D 1E 28 5C 1F 28 1F 36 7B
+R 00 00 00 09
+T 00 01 1E 2D A1 25 26 1C 1E 34 89 7B 2F 88 4B
+R 00 00 00 09
+T 00 01 2A 00 01 36 4B 00 01 36 4B
+R 00 00 00 09 F1 01 03 00 09 F1 81 07 00 09
+T 00 01 2E 00 01 36 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 01 36
+R 00 00 00 09
+T 00 01 36 5B 03 1E 10 5C 1F 10 20 9D
+R 00 00 00 09
+T 00 01 3F
+R 00 00 00 09
+T 00 01 3F 7B 2D A1 30 25 49 7B 2D A1 39 22 43 1E
+R 00 00 00 09
+T 00 01 4C 2A 5C 26 22 1E 25 58 58 72 FB 25 58 1F
+R 00 00 00 09
+T 00 01 59 03 0F 2C 1E 03 72 FB 2C 1F 26 1D 00 30
+R 00 00 00 09
+T 00 01 66 1F 2C 1F 25 26 A5 A6 01 6B 1D 20 9F
+R 00 00 00 09
+T 00 01 72
+R 00 00 00 09
+T 00 01 72 1E 2A 58 58 72 FB 2A 58 1F 03 0F 2C 1E
+R 00 00 00 09
+T 00 01 7F 03 72 FB 2C 1F 2A 1D 00 30 1F 2C 1F 2A
+R 00 00 00 09
+T 00 01 8C 20 83
+R 00 00 00 09
+T 00 01 8E
+R 00 00 00 09
+T 00 01 8E 7B 2D A1 2E 26 10 1E 2A 5C 27 04 AC
+R 00 00 00 09
+T 00 01 9A 00 01 11
+R 00 00 00 09 80 03 00 09
+T 00 01 9D
+R 00 00 00 09
+T 00 01 9D 5F 1F 2A AC 00 01 11
+R 00 00 00 09 80 07 00 09
+T 00 01 A4
+R 00 00 00 09
+T 00 01 A4 7B 2D A1 61 25 11 7B 2D A1 7A 22 0B 7B
+R 00 00 00 09
+T 00 01 B1 2D A4 DF 6B 2D A6 01 6B 27 C5
+R 00 00 00 09
+T 00 01 BB
+R 00 00 00 09
+T 00 01 BB 0F 27
+R 00 00 00 09
+T 00 01 BD
+R 00 00 00 09
+T 00 01 BD 7B 2D A1 20 26 04 AC 00 02 81
+R 00 00 00 09 80 0A 00 09
+T 00 01 C7
+R 00 00 00 09
+T 00 01 C7 7B 2D A1 2B 26 04 AC 00 02 79
+R 00 00 00 09 80 0A 00 09
+T 00 01 D1
+R 00 00 00 09
+T 00 01 D1 7B 2D A1 2D 26 04 AC 00 02 71
+R 00 00 00 09 80 0A 00 09
+T 00 01 DB
+R 00 00 00 09
+T 00 01 DB 7B 2D A1 42 26 04 AC 00 02 89
+R 00 00 00 09 80 0A 00 09
+T 00 01 E5
+R 00 00 00 09
+T 00 01 E5 7B 2D A1 43 26 04 AC 00 02 99
+R 00 00 00 09 80 0A 00 09
+T 00 01 EF
+R 00 00 00 09
+T 00 01 EF 7B 2D A1 44 26 04 AC 00 04 46
+R 00 00 00 09 80 0A 00 09
+T 00 01 F9
+R 00 00 00 09
+T 00 01 F9 7B 2D A1 46 26 04 AC 00 04 62
+R 00 00 00 09 80 0A 00 09
+T 00 02 03
+R 00 00 00 09
+T 00 02 03 7B 2D A1 48 26 04 AC 00 01 11
+R 00 00 00 09 80 0A 00 09
+T 00 02 0D
+R 00 00 00 09
+T 00 02 0D 7B 2D A1 49 26 04 AC 00 04 46
+R 00 00 00 09 80 0A 00 09
+T 00 02 17
+R 00 00 00 09
+T 00 02 17 7B 2D A1 4A 26 04 AC 00 01 11
+R 00 00 00 09 80 0A 00 09
+T 00 02 21
+R 00 00 00 09
+T 00 02 21 7B 2D A1 4C 27 6A 7B 2D A1 4F 26 04 AC
+R 00 00 00 09
+T 00 02 2E 00 04 50
+R 00 00 00 09 80 03 00 09
+T 00 02 31
+R 00 00 00 09
+T 00 02 31 7B 2D A1 50 26 04 AC 00 03 B7
+R 00 00 00 09 80 0A 00 09
+T 00 02 3B
+R 00 00 00 09
+T 00 02 3B 7B 2D A1 53 26 04 AC 00 02 CE
+R 00 00 00 09 80 0A 00 09
+T 00 02 45
+R 00 00 00 09
+T 00 02 45 7B 2D A1 54 26 04 AC 00 01 11
+R 00 00 00 09 80 0A 00 09
+T 00 02 4F
+R 00 00 00 09
+T 00 02 4F 7B 2D A1 55 26 04 AC 00 04 56
+R 00 00 00 09 80 0A 00 09
+T 00 02 59
+R 00 00 00 09
+T 00 02 59 7B 2D A1 58 26 04 AC 00 04 5C
+R 00 00 00 09 80 0A 00 09
+T 00 02 63
+R 00 00 00 09
+T 00 02 63 7B 2D A1 5A 26 04 AC 00 01 11
+R 00 00 00 09 80 0A 00 09
+T 00 02 6D
+R 00 00 00 09
+T 00 02 6D AC 00 04 68
+R 00 00 00 09 80 04 00 09
+T 00 02 71
+R 00 00 00 09
+T 00 02 71 A6 01 6B 1C AC 00 01 11
+R 00 00 00 09 80 08 00 09
+T 00 02 79
+R 00 00 00 09
+T 00 02 79 A6 01 6B 1E AC 00 01 11
+R 00 00 00 09 80 08 00 09
+T 00 02 81
+R 00 00 00 09
+T 00 02 81 A6 01 6B 1F AC 00 01 11
+R 00 00 00 09 80 08 00 09
+T 00 02 89
+R 00 00 00 09
+T 00 02 89 A6 01 6B 21 AC 00 01 11
+R 00 00 00 09 80 08 00 09
+T 00 02 91
+R 00 00 00 09
+T 00 02 91 A6 01 6B 22 AC 00 01 11
+R 00 00 00 09 80 08 00 09
+T 00 02 99
+R 00 00 00 09
+T 00 02 99 0D 21 27 0B 1E 38 5C 1F 38 1C FF FF F6
+R 00 00 00 09
+T 00 02 A6 20 0A
+R 00 00 00 09
+T 00 02 A8
+R 00 00 00 09
+T 00 02 A8 1E 38 5C 5C 1F 38 5A 5A E6 01
+R 00 00 00 09
+T 00 02 B2
+R 00 00 00 09
+T 00 02 B2 1E 34 89 88 4B 00 02 C3 4B 00 02 C3 4B
+R 00 00 00 09 F1 01 08 00 09 F1 81 0C 00 09
+T 00 02 BB 00 02 C3 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 02 C3
+R 00 00 00 09
+T 00 02 C3 5B 03 1E 10 5C 1F 10 AC
+R 00 00 00 09
+T 00 02 CB 00 04 8E
+R 00 00 00 09 80 03 00 09
+T 00 02 CE
+R 00 00 00 09
+T 00 02 CE 1E 38 5C 5C 1F 38 5A 5A FE 1F 05 89 8D
+R 00 00 00 09
+T 00 02 DB 00 00 00 5B 02 1F 28 1E 2A 5C 26 04 16
+R 00 00 00 09 82 03 00 01
+T 00 02 E8 28 17 2A
+R 00 00 00 09
+T 00 02 EB
+R 00 00 00 09
+T 00 02 EB 0D 1C 26 3F 1E 28 13 25 24 39 1E 25 72
+R 00 00 00 09
+T 00 02 F8 F0 28 16 10 17 25 1F 2C
+R 00 00 00 09
+T 00 03 00
+R 00 00 00 09
+T 00 03 00 1E 2C 16 2C 90 5A 17 2C 5D 27 1B 1E 34
+R 00 00 00 09
+T 00 03 0D 89 4B 20 4B 00 03 1D 4B 00 03 1D 4B
+R 00 00 00 09 F1 01 07 00 09 F1 81 0B 00 09
+T 00 03 15 00 03 1D 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 03 1D
+R 00 00 00 09
+T 00 03 1D 5B 03 1E 25 5C 1F 25 20 DA
+R 00 00 00 09
+T 00 03 26
+R 00 00 00 09
+T 00 03 26 16 25 17 10 16 2C 17 25
+R 00 00 00 09
+T 00 03 2E
+R 00 00 00 09
+T 00 03 2E 16 10 17 2C
+R 00 00 00 09
+T 00 03 32
+R 00 00 00 09
+T 00 03 32 1E 05 F6 6B 11 27 2D 1E 2A A3 00 00 2D
+R 00 00 00 09
+T 00 03 3F 26 1E 2A 5A 1F 2A 1E 34 89 7B 13 88 4B
+R 00 00 00 09
+T 00 03 4C 00 03 58 4B 00 03 58 4B
+R 00 00 00 09 F1 01 03 00 09 F1 81 07 00 09
+T 00 03 50 00 03 58 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 03 58
+R 00 00 00 09
+T 00 03 58 5B 03 1E 2C 5C 1F 2C 1E 05 5C 1F 05 20
+R 00 00 00 09
+T 00 03 65 CC
+R 00 00 00 09
+T 00 03 66
+R 00 00 00 09
+T 00 03 66 16 2C 17 10 0D 1C 26 04 AC
+R 00 00 00 09
+T 00 03 6F 00 04 8E
+R 00 00 00 09 80 03 00 09
+T 00 03 72
+R 00 00 00 09
+T 00 03 72 1E 28 13 25 25 04 AC 00 04 8E
+R 00 00 00 09 80 0A 00 09
+T 00 03 7C
+R 00 00 00 09
+T 00 03 7C 1E 25 72 F0 28 1F 2A 1F 25 16 2C 17 29
+R 00 00 00 09
+T 00 03 89 16 25 17 2C
+R 00 00 00 09
+T 00 03 8D
+R 00 00 00 09
+T 00 03 8D 1E 2C 16 2C 90 5A 17 2C 5D 26 04 AC
+R 00 00 00 09
+T 00 03 99 00 04 86
+R 00 00 00 09 80 03 00 09
+T 00 03 9C
+R 00 00 00 09
+T 00 03 9C 1E 34 89 4B 20 4B 00 03 AE 4B 00 03 AE
+R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09
+T 00 03 A5 4B 00 03 AE 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 04 00 09
+T 00 03 AE
+R 00 00 00 09
+T 00 03 AE 5B 03 1E 29 5C 1F 29 20 D6
+R 00 00 00 09
+T 00 03 B7
+R 00 00 00 09
+T 00 03 B7 1E 38 5C 5C 1F 2A 1F 38 1E 2A 5A 5A 1F
+R 00 00 00 09
+T 00 03 C4 2C 1F 2A FE 1F 2C 1F 05 1E 34 89 4B 30
+R 00 00 00 09
+T 00 03 D1 4B 00 03 DE 4B 00 03 DE 4B
+R 00 00 00 09 F1 01 04 00 09 F1 81 08 00 09
+T 00 03 D6 00 03 DE 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 03 DE
+R 00 00 00 09
+T 00 03 DE 5B 03 1E 10 5C 1F 2C 1F 2A 1E 34 89 4B
+R 00 00 00 09
+T 00 03 EB 78 4B 00 03 F9 4B 00 03 F9 4B
+R 00 00 00 09 F1 01 05 00 09 F1 81 09 00 09
+T 00 03 F1 00 03 F9 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 03 F9
+R 00 00 00 09
+T 00 03 F9 5B 03 1E 2A 5C 1F 2C 1F 2A 7B 06 6B 2D
+R 00 00 00 09
+T 00 04 06 1E 34 89 1E 34 89 7B 35 88 7B 2C 88 7B
+R 00 00 00 09
+T 00 04 13 33 88 8D 00 00 24 5B 07 1E 2A 5C 5C 1F
+R 00 00 00 09 80 06 00 09
+T 00 04 20 2C 1F 2A 7B 05 6B 2D 1E 34 89 1E 34 89
+R 00 00 00 09
+T 00 04 2D 7B 35 88 7B 2C 88 7B 33 88 8D
+R 00 00 00 09
+T 00 04 37 00 00 24 5B 07 1E 2A 5C 5C 1F 2C 1F 10
+R 00 00 00 09 80 03 00 09
+T 00 04 44 20 48
+R 00 00 00 09
+T 00 04 46
+R 00 00 00 09
+T 00 04 46 A6 01 6B 20 A6 0A 6B 24 20 3E
+R 00 00 00 09
+T 00 04 50
+R 00 00 00 09
+T 00 04 50 A6 08 6B 24 20 38
+R 00 00 00 09
+T 00 04 56
+R 00 00 00 09
+T 00 04 56 A6 0A 6B 24 20 32
+R 00 00 00 09
+T 00 04 5C
+R 00 00 00 09
+T 00 04 5C A6 10 6B 24 20 2C
+R 00 00 00 09
+T 00 04 62
+R 00 00 00 09
+T 00 04 62 A6 01 6B 23 20 26
+R 00 00 00 09
+T 00 04 68
+R 00 00 00 09
+T 00 04 68 1E 34 89 7B 2F 88 4B 00 04 7B 4B
+R 00 00 00 09 F1 01 0A 00 09
+T 00 04 71 00 04 7B 4B 00 04 7B 1E 38 89 7B 39 88
+R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09
+T 00 04 7A 87
+R 00 00 00 09
+T 00 04 7B
+R 00 00 00 09
+T 00 04 7B 5B 03 1E 10 5C 1F 2C 1F 10 20 08
+R 00 00 00 09
+T 00 04 86
+R 00 00 00 09
+T 00 04 86 16 29 17 10 16 2C 17 25
+R 00 00 00 09
+T 00 04 8E
+R 00 00 00 09
+T 00 04 8E 0D 23 27 50 1E 38 1C 00 04 1F 38 1D
+R 00 00 00 09
+T 00 04 9A 00 04 90 93 90 EE 02 FE 17 07 1F 05 AE
+R 00 00 00 09
+T 00 04 A7 00 00 1F 05 16 10 17 2C
+R 00 00 00 09 00 03 00 07
+T 00 04 AF
+R 00 00 00 09
+T 00 04 AF 16 05 17 28 93 5C 1F 2A 1F 05 1E 28 F6
+R 00 00 00 09
+T 00 04 BC 97 4D 26 04 AC 00 00 DC
+R 00 00 00 09 80 08 00 09
+T 00 04 C4
+R 00 00 00 09
+T 00 04 C4 16 34 90 89 9F 88 4B 00 04 D7 4B
+R 00 00 00 09 F1 01 0A 00 09
+T 00 04 CD 00 04 D7 4B 00 04 D7 1E 38 89 7B 39 88
+R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09
+T 00 04 D6 87
+R 00 00 00 09
+T 00 04 D7
+R 00 00 00 09
+T 00 04 D7 5B 03 1E 2C 5C 1F 2C 1F 10 20 CD
+R 00 00 00 09
+T 00 04 E2
+R 00 00 00 09
+T 00 04 E2 0D 24 26 04 AC 00 00 DC
+R 00 00 00 09 80 08 00 09
+T 00 04 EA
+R 00 00 00 09
+T 00 04 EA 1E 12 1F 2B 0D 21 27 21 1E 38 5C 1F 38
+R 00 00 00 09
+T 00 04 F7 1C FF FF F6 5F 97 90 5F 1F 07 17 05 0D
+R 00 00 00 09
+T 00 05 04 20 26 45 1E 07 4F 95 90 5F 1F 07 17 05
+R 00 00 00 09
+T 00 05 11 20 39
+R 00 00 00 09
+T 00 05 13
+R 00 00 00 09
+T 00 05 13 0D 22 27 16 1E 38 1C 00 04 1F 38 1D
+R 00 00 00 09
+T 00 05 1F 00 04 90 93 90 EE 02 FE 17 07 1F 05 20
+R 00 00 00 09
+T 00 05 2C 1F
+R 00 00 00 09
+T 00 05 2D
+R 00 00 00 09
+T 00 05 2D 1E 38 5C 5C 1F 38 5A 5A FE 90 5F 5D 2A
+R 00 00 00 09
+T 00 05 3A 02 90 5A
+R 00 00 00 09
+T 00 05 3D
+R 00 00 00 09
+T 00 05 3D 1F 07 17 05 0D 20 26 07 16 07 5F 17 07
+R 00 00 00 09
+T 00 05 4A 1F 05
+R 00 00 00 09
+T 00 05 4C
+R 00 00 00 09
+T 00 05 4C 0D 20 27 1D 1E 05 2A 17 16 07 17 03 16
+R 00 00 00 09
+T 00 05 59 05 17 01 16 03 90 50 1E 01 24 01 5C
+R 00 00 00 09
+T 00 05 65
+R 00 00 00 09
+T 00 05 65 50 17 07 1F 05 C5
+R 00 00 00 09
+T 00 05 6B
+R 00 00 00 09
+T 00 05 6B 0F 20
+R 00 00 00 09
+T 00 05 6D
+R 00 00 00 09
+T 00 05 6D A6 01 6B 2D 16 2B 17 29 5F 1F 2B
+R 00 00 00 09
+T 00 05 78
+R 00 00 00 09
+T 00 05 78 0F 09 1E 14 7B 24 88 89 8D
+R 00 00 00 09
+T 00 05 81 00 00 5D 5B 03 0D 2D 26 23 1E 18 F6 4E
+R 00 00 00 09 80 03 00 09
+T 00 05 8E A4 F0 97 16 18 90 F6 4E A4 0F 89 1A 02
+R 00 00 00 09
+T 00 05 9B 85 6B 28 1E 29 F6 1A 28 1E 29 F7 1E 29
+R 00 00 00 09
+T 00 05 A8 5A 1F 29 20 06
+R 00 00 00 09
+T 00 05 AD
+R 00 00 00 09
+T 00 05 AD 1E 16 F6 1E 29 F7
+R 00 00 00 09
+T 00 05 B3
+R 00 00 00 09
+T 00 05 B3 1E 2B 5C 1F 2B 7B 2D A0 01 4F 49 6B 2D
+R 00 00 00 09
+T 00 05 C0 1E 14 90 93 90 EE 02 17 03 FE 16 03 26
+R 00 00 00 09
+T 00 05 CD AA 5D 26 A7 16 29 17 21 16 2B 17 23 1E
+R 00 00 00 09
+T 00 05 DA 25 26 05 AE 00 01 1F 25
+R 00 00 00 09
+T 00 05 E2
+R 00 00 00 09
+T 00 05 E2 0D 1D 26 3D 0D 1C 26 39 16 10 17 29 16
+R 00 00 00 09
+T 00 05 EF 25 17 2B
+R 00 00 00 09
+T 00 05 F2
+R 00 00 00 09
+T 00 05 F2 7B 24 4C 5F 97 13 2B 24 20 1E 34 89 4B
+R 00 00 00 09
+T 00 05 FF 20 4B 00 06 0D 4B 00 06 0D 4B
+R 00 00 00 09 F1 01 05 00 09 F1 81 09 00 09
+T 00 06 05 00 06 0D 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 06 0D
+R 00 00 00 09
+T 00 06 0D 5B 03 1E 29 5C 1F 29 1E 2B 5A 1F 2B 20
+R 00 00 00 09
+T 00 06 1A D7
+R 00 00 00 09
+T 00 06 1B
+R 00 00 00 09
+T 00 06 1B 16 29 17 10 16 2B 17 25
+R 00 00 00 09
+T 00 06 23
+R 00 00 00 09
+T 00 06 23 0D 20 27 20 1E 34 89 4B 2D 4B 00 06 39
+R 00 00 00 09 F1 01 0D 00 09
+T 00 06 2E 4B 00 06 39 4B 00 06 39 1E 38 89 7B 39
+R 00 00 00 09 F1 81 04 00 09 F3 01 08 00 09
+T 00 06 37 88 87
+R 00 00 00 09
+T 00 06 39
+R 00 00 00 09
+T 00 06 39 5B 03 1E 10 5C 1F 10 1E 25 5A 1F 25 20
+R 00 00 00 09
+T 00 06 46 4A
+R 00 00 00 09
+T 00 06 47
+R 00 00 00 09
+T 00 06 47 1E 23 27 46 0D 1E 27 20 1E 34 89 4B 2B
+R 00 00 00 09
+T 00 06 54 4B 00 06 61 4B 00 06 61 4B
+R 00 00 00 09 F1 01 04 00 09 F1 81 08 00 09
+T 00 06 59 00 06 61 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 03 00 09
+T 00 06 61
+R 00 00 00 09
+T 00 06 61 5B 03 1E 10 5C 1F 10 1E 25 5A 1F 25 20
+R 00 00 00 09
+T 00 06 6E 22
+R 00 00 00 09
+T 00 06 6F
+R 00 00 00 09
+T 00 06 6F 0D 1F 27 1E 1E 34 89 4B 20 4B 00 06 85
+R 00 00 00 09 F1 01 0D 00 09
+T 00 06 7A 4B 00 06 85 4B 00 06 85 1E 38 89 7B 39
+R 00 00 00 09 F1 81 04 00 09 F3 01 08 00 09
+T 00 06 83 88 87
+R 00 00 00 09
+T 00 06 85
+R 00 00 00 09
+T 00 06 85 5B 03 1E 10 5C 1F 10 1E 25 5A 1F 25
+R 00 00 00 09
+T 00 06 91
+R 00 00 00 09
+T 00 06 91 0D 1C 26 3A 16 10 17 29 16 25 17 2B
+R 00 00 00 09
+T 00 06 9D
+R 00 00 00 09
+T 00 06 9D 16 2B 1E 2B 5A 1F 2B 93 13 23 23 3A 0D
+R 00 00 00 09
+T 00 06 AA 1D 27 04 AE 00 30 BC
+R 00 00 00 09
+T 00 06 B1
+R 00 00 00 09
+T 00 06 B1 AE 00 20
+R 00 00 00 09
+T 00 06 B4
+R 00 00 00 09
+T 00 06 B4 9F 1E 34 89 88 4B 00 06 C6 4B 00 06 C6
+R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09
+T 00 06 BD 4B 00 06 C6 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 04 00 09
+T 00 06 C6
+R 00 00 00 09
+T 00 06 C6 5B 03 1E 29 5C 1F 29 20 CE
+R 00 00 00 09
+T 00 06 CF
+R 00 00 00 09
+T 00 06 CF 1E 25 13 23 23 09 1E 25 72 F0 23 1F 28
+R 00 00 00 09
+T 00 06 DC 20 0D
+R 00 00 00 09
+T 00 06 DE
+R 00 00 00 09
+T 00 06 DE 5F 1F 28 20 08
+R 00 00 00 09
+T 00 06 E3
+R 00 00 00 09
+T 00 06 E3 16 29 17 10 16 2B 17 28
+R 00 00 00 09
+T 00 06 EB
+R 00 00 00 09
+T 00 06 EB 16 21 17 2B 16 10 17 25
+R 00 00 00 09
+T 00 06 F3
+R 00 00 00 09
+T 00 06 F3 1E 23 16 23 90 5A 17 23 5D 27 41 7B 2D
+R 00 00 00 09
+T 00 07 00 A0 01 4F 49 6B 2D 26 0E 1E 2B 5C 1F 2B
+R 00 00 00 09
+T 00 07 0D F6 4E A4 0F 1E 16 F7 20 08
+R 00 00 00 09
+T 00 07 16
+R 00 00 00 09
+T 00 07 16 1E 2B F6 A4 0F 1E 16 F7
+R 00 00 00 09
+T 00 07 1E
+R 00 00 00 09
+T 00 07 1E 1E 1A F6 6B 2A 1E 34 89 1E 34 89 7B 35
+R 00 00 00 09
+T 00 07 2B 88 7B 2C 88 7B 30 88 8D
+R 00 00 00 09
+T 00 07 33 00 00 00 5B 07 1E 25 5C 1F 25 20 B4
+R 00 00 00 09 80 03 00 09
+T 00 07 3F
+R 00 00 00 09
+T 00 07 3F 16 25 17 10 0D 1C 26 04 AC
+R 00 00 00 09
+T 00 07 48 00 00 DC
+R 00 00 00 09 80 03 00 09
+T 00 07 4B
+R 00 00 00 09
+T 00 07 4B 16 25 17 2C 16 28 17 2A
+R 00 00 00 09
+T 00 07 53
+R 00 00 00 09
+T 00 07 53 1E 2A 16 2A 90 5A 17 2A 5D 26 04 AC
+R 00 00 00 09
+T 00 07 5F 00 00 DC
+R 00 00 00 09 80 03 00 09
+T 00 07 62
+R 00 00 00 09
+T 00 07 62 1E 34 89 4B 20 4B 00 07 74 4B 00 07 74
+R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09
+T 00 07 6B 4B 00 07 74 1E 38 89 7B 39 88 87
+R 00 00 00 09 F3 01 04 00 09
+T 00 07 74
+R 00 00 00 09
+T 00 07 74 5B 03 1E 2C 5C 1F 2C 1F 10 20 D4
+R 00 00 00 09
+T 00 07 7F
+R 00 00 00 09
+T 00 07 7F 16 34 90 89 9F 88 4B 00 07 92 4B
+R 00 00 00 09 F1 01 0A 00 09
+T 00 07 88 00 07 92 4B 00 07 92 1E 38 89 7B 39 88
+R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09
+T 00 07 91 87
+R 00 00 00 09
+T 00 07 92
+R 00 00 00 09
+T 00 07 92 5B 03 1E 10 5C 1F 10 AC
+R 00 00 00 09
+T 00 07 9A 00 00 DC
+R 00 00 00 09 80 03 00 09
+T 00 07 9D
+R 00 00 00 09
+T 00 07 9D 1E 10 5B 2D 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 3C 4E 4F 20 46 4C 4F 41 54 3E 00
+R 00 00 00 07
diff --git a/device/lib/stm8-large/printf_large.sym b/device/lib/stm8-large/printf_large.sym
new file mode 100644
index 0000000..798b32b
--- /dev/null
+++ b/device/lib/stm8-large/printf_large.sym
@@ -0,0 +1,34 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 7 ___str_0 000000 R
+ 9 __print_format 0000C0 GR
+ 9 _calculate_digit 00005D R
+ 9 _output_2digits 000024 R
+ 9 _output_digit 000000 R
+ _strlen ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size B flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 7A2 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/puts.asm b/device/lib/stm8-large/puts.asm
new file mode 100644
index 0000000..8ea54f4
--- /dev/null
+++ b/device/lib/stm8-large/puts.asm
@@ -0,0 +1,87 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module puts
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _putchar
+ .globl _puts
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../puts.c: 31: int puts (const char *s)
+; -----------------------------------------
+; function puts
+; -----------------------------------------
+_puts:
+; ../puts.c: 33: while (*s)
+ ldw y, (0x04, sp)
+00103$:
+ ld a, (y)
+ jreq 00105$
+; ../puts.c: 34: if (putchar(*s++) == EOF)
+ incw y
+ clrw x
+ ld xl, a
+ pushw y
+ pushw x
+ callf _putchar
+ addw sp, #2
+ popw y
+ incw x
+ jrne 00103$
+; ../puts.c: 35: return EOF;
+ clrw x
+ decw x
+ jra 00106$
+00105$:
+; ../puts.c: 36: return putchar('\n');
+ push #0x0a
+ push #0x00
+ callf _putchar
+ addw sp, #2
+00106$:
+; ../puts.c: 37: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/puts.lst b/device/lib/stm8-large/puts.lst
new file mode 100644
index 0000000..d9e3ea8
--- /dev/null
+++ b/device/lib/stm8-large/puts.lst
@@ -0,0 +1,87 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module puts
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _putchar
+ 12 .globl _puts
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../puts.c: 31: int puts (const char *s)
+ 51 ; -----------------------------------------
+ 52 ; function puts
+ 53 ; -----------------------------------------
+ 000000 54 _puts:
+ 55 ; ../puts.c: 33: while (*s)
+ 000000 16 04 [ 2] 56 ldw y, (0x04, sp)
+ 000002 57 00103$:
+ 000002 90 F6 [ 1] 58 ld a, (y)
+ 000004 27 16 [ 1] 59 jreq 00105$
+ 60 ; ../puts.c: 34: if (putchar(*s++) == EOF)
+ 000006 90 5C [ 1] 61 incw y
+ 000008 5F [ 1] 62 clrw x
+ 000009 97 [ 1] 63 ld xl, a
+ 00000A 90 89 [ 2] 64 pushw y
+ 00000C 89 [ 2] 65 pushw x
+ 00000D 8Ds00r00r00 [ 5] 66 callf _putchar
+ 000011 5B 02 [ 2] 67 addw sp, #2
+ 000013 90 85 [ 2] 68 popw y
+ 000015 5C [ 1] 69 incw x
+ 000016 26 EA [ 1] 70 jrne 00103$
+ 71 ; ../puts.c: 35: return EOF;
+ 000018 5F [ 1] 72 clrw x
+ 000019 5A [ 2] 73 decw x
+ 00001A 20 0A [ 2] 74 jra 00106$
+ 00001C 75 00105$:
+ 76 ; ../puts.c: 36: return putchar('\n');
+ 00001C 4B 0A [ 1] 77 push #0x0a
+ 00001E 4B 00 [ 1] 78 push #0x00
+ 000020 8Ds00r00r00 [ 5] 79 callf _putchar
+ 000024 5B 02 [ 2] 80 addw sp, #2
+ 000026 81 00106$:
+ 82 ; ../puts.c: 37: }
+ 000026 87 [ 5] 83 retf
+ 84 .area CODE
+ 85 .area CONST
+ 86 .area INITIALIZER
+ 87 .area CABS (ABS)
diff --git a/device/lib/stm8-large/puts.rel b/device/lib/stm8-large/puts.rel
new file mode 100644
index 0000000..f9cad2b
--- /dev/null
+++ b/device/lib/stm8-large/puts.rel
@@ -0,0 +1,38 @@
+XH3
+H B areas 3 global symbols
+M puts
+O -mstm8
+S _putchar Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 27 flags 0 addr 0
+S _puts Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 16 04
+R 00 00 00 09
+T 00 00 02
+R 00 00 00 09
+T 00 00 02 90 F6 27 16 90 5C 5F 97 90 89 89 8D
+R 00 00 00 09
+T 00 00 0E 00 00 00 5B 02 90 85 5C 26 EA 5F 5A 20
+R 00 00 00 09 82 03 00 00
+T 00 00 1B 0A
+R 00 00 00 09
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 4B 0A 4B 00 8D 00 00 00 5B 02
+R 00 00 00 09 82 08 00 00
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/puts.sym b/device/lib/stm8-large/puts.sym
new file mode 100644
index 0000000..86f5ad6
--- /dev/null
+++ b/device/lib/stm8-large/puts.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _putchar ****** GX
+ 9 _puts 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 27 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/qsort.asm b/device/lib/stm8-large/qsort.asm
new file mode 100644
index 0000000..0cc83b7
--- /dev/null
+++ b/device/lib/stm8-large/qsort.asm
@@ -0,0 +1,176 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module qsort
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _qsort
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../qsort.c: 33: static void swap(void *restrict dst, void *restrict src, size_t n)
+; -----------------------------------------
+; function swap
+; -----------------------------------------
+_swap:
+ sub sp, #6
+; ../qsort.c: 35: unsigned char *restrict d = dst;
+ ldw x, (0x0a, sp)
+; ../qsort.c: 36: unsigned char *restrict s = src;
+ ldw y, (0x0c, sp)
+; ../qsort.c: 38: while(n--)
+ ldw (0x03, sp), y
+ ldw y, (0x0e, sp)
+ ldw (0x05, sp), y
+00101$:
+ ldw y, (0x05, sp)
+ ldw (0x01, sp), y
+ ldw y, (0x05, sp)
+ decw y
+ ldw (0x05, sp), y
+ ldw y, (0x01, sp)
+ jreq 00104$
+; ../qsort.c: 40: unsigned char tmp = *d;
+ ld a, (x)
+ ld (0x02, sp), a
+; ../qsort.c: 41: *d = *s;
+ ldw y, (0x03, sp)
+ ld a, (y)
+ ld (x), a
+; ../qsort.c: 42: *s = tmp;
+ ldw y, (0x03, sp)
+ ld a, (0x02, sp)
+ ld (y), a
+; ../qsort.c: 43: d++;
+ incw x
+; ../qsort.c: 44: s++;
+ ldw y, (0x03, sp)
+ incw y
+ ldw (0x03, sp), y
+ jra 00101$
+00104$:
+; ../qsort.c: 46: }
+ addw sp, #6
+ retf
+; ../qsort.c: 48: void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant)
+; -----------------------------------------
+; function qsort
+; -----------------------------------------
+_qsort:
+ sub sp, #12
+; ../qsort.c: 50: unsigned char *b = base;
+ ldw y, (0x10, sp)
+ ldw (0x0b, sp), y
+ ldw (0x01, sp), y
+; ../qsort.c: 52: if(nmemb <= 1)
+ ldw x, (0x12, sp)
+ cpw x, #0x0001
+; ../qsort.c: 53: return;
+ jrule 00112$
+; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size)
+ ldw y, (0x0b, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x14, sp)
+ ldw (0x05, sp), y
+ ldw x, y
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf __mulint
+ addw sp, #4
+ addw x, (0x01, sp)
+ ldw (0x07, sp), x
+00110$:
+ ldw x, (0x03, sp)
+ cpw x, (0x07, sp)
+ jrnc 00112$
+; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size)
+ ldw y, (0x03, sp)
+00107$:
+ exgw x, y
+ cpw x, (0x01, sp)
+ exgw x, y
+ jrule 00111$
+ ldw x, y
+ subw x, (0x05, sp)
+ ldw (0x09, sp), x
+ ldw (0x0b, sp), y
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ push #(00147$)
+ push #(00147$ >> 8)
+ push #(00147$ >> 16)
+ ldw x, (0x1e, sp)
+ pushw x
+ ld a, (0x1f, sp)
+ push a
+ retf
+00147$:
+ addw sp, #4
+ tnzw x
+ jrpl 00111$
+; ../qsort.c: 58: swap(j, j - size, size);
+ ldw x, (0x09, sp)
+ ldw y, (0x05, sp)
+ pushw y
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf _swap
+ addw sp, #6
+; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size)
+ ldw y, (0x09, sp)
+ jra 00107$
+00111$:
+; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size)
+ ldw x, (0x03, sp)
+ addw x, (0x05, sp)
+ ldw (0x03, sp), x
+ jra 00110$
+00112$:
+; ../qsort.c: 60: }
+ addw sp, #12
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/qsort.lst b/device/lib/stm8-large/qsort.lst
new file mode 100644
index 0000000..7f83dd9
--- /dev/null
+++ b/device/lib/stm8-large/qsort.lst
@@ -0,0 +1,176 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module qsort
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _qsort
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../qsort.c: 33: static void swap(void *restrict dst, void *restrict src, size_t n)
+ 50 ; -----------------------------------------
+ 51 ; function swap
+ 52 ; -----------------------------------------
+ 000000 53 _swap:
+ 000000 52 06 [ 2] 54 sub sp, #6
+ 55 ; ../qsort.c: 35: unsigned char *restrict d = dst;
+ 000002 1E 0A [ 2] 56 ldw x, (0x0a, sp)
+ 57 ; ../qsort.c: 36: unsigned char *restrict s = src;
+ 000004 16 0C [ 2] 58 ldw y, (0x0c, sp)
+ 59 ; ../qsort.c: 38: while(n--)
+ 000006 17 03 [ 2] 60 ldw (0x03, sp), y
+ 000008 16 0E [ 2] 61 ldw y, (0x0e, sp)
+ 00000A 17 05 [ 2] 62 ldw (0x05, sp), y
+ 00000C 63 00101$:
+ 00000C 16 05 [ 2] 64 ldw y, (0x05, sp)
+ 00000E 17 01 [ 2] 65 ldw (0x01, sp), y
+ 000010 16 05 [ 2] 66 ldw y, (0x05, sp)
+ 000012 90 5A [ 2] 67 decw y
+ 000014 17 05 [ 2] 68 ldw (0x05, sp), y
+ 000016 16 01 [ 2] 69 ldw y, (0x01, sp)
+ 000018 27 17 [ 1] 70 jreq 00104$
+ 71 ; ../qsort.c: 40: unsigned char tmp = *d;
+ 00001A F6 [ 1] 72 ld a, (x)
+ 00001B 6B 02 [ 1] 73 ld (0x02, sp), a
+ 74 ; ../qsort.c: 41: *d = *s;
+ 00001D 16 03 [ 2] 75 ldw y, (0x03, sp)
+ 00001F 90 F6 [ 1] 76 ld a, (y)
+ 000021 F7 [ 1] 77 ld (x), a
+ 78 ; ../qsort.c: 42: *s = tmp;
+ 000022 16 03 [ 2] 79 ldw y, (0x03, sp)
+ 000024 7B 02 [ 1] 80 ld a, (0x02, sp)
+ 000026 90 F7 [ 1] 81 ld (y), a
+ 82 ; ../qsort.c: 43: d++;
+ 000028 5C [ 1] 83 incw x
+ 84 ; ../qsort.c: 44: s++;
+ 000029 16 03 [ 2] 85 ldw y, (0x03, sp)
+ 00002B 90 5C [ 1] 86 incw y
+ 00002D 17 03 [ 2] 87 ldw (0x03, sp), y
+ 00002F 20 DB [ 2] 88 jra 00101$
+ 000031 89 00104$:
+ 90 ; ../qsort.c: 46: }
+ 000031 5B 06 [ 2] 91 addw sp, #6
+ 000033 87 [ 5] 92 retf
+ 93 ; ../qsort.c: 48: void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant)
+ 94 ; -----------------------------------------
+ 95 ; function qsort
+ 96 ; -----------------------------------------
+ 000034 97 _qsort:
+ 000034 52 0C [ 2] 98 sub sp, #12
+ 99 ; ../qsort.c: 50: unsigned char *b = base;
+ 000036 16 10 [ 2] 100 ldw y, (0x10, sp)
+ 000038 17 0B [ 2] 101 ldw (0x0b, sp), y
+ 00003A 17 01 [ 2] 102 ldw (0x01, sp), y
+ 103 ; ../qsort.c: 52: if(nmemb <= 1)
+ 00003C 1E 12 [ 2] 104 ldw x, (0x12, sp)
+ 00003E A3 00 01 [ 2] 105 cpw x, #0x0001
+ 106 ; ../qsort.c: 53: return;
+ 000041 23 61 [ 2] 107 jrule 00112$
+ 108 ; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size)
+ 000043 16 0B [ 2] 109 ldw y, (0x0b, sp)
+ 000045 17 03 [ 2] 110 ldw (0x03, sp), y
+ 000047 16 14 [ 2] 111 ldw y, (0x14, sp)
+ 000049 17 05 [ 2] 112 ldw (0x05, sp), y
+ 00004B 93 [ 1] 113 ldw x, y
+ 00004C 89 [ 2] 114 pushw x
+ 00004D 1E 14 [ 2] 115 ldw x, (0x14, sp)
+ 00004F 89 [ 2] 116 pushw x
+ 000050 8Ds00r00r00 [ 5] 117 callf __mulint
+ 000054 5B 04 [ 2] 118 addw sp, #4
+ 000056 72 FB 01 [ 2] 119 addw x, (0x01, sp)
+ 000059 1F 07 [ 2] 120 ldw (0x07, sp), x
+ 00005B 121 00110$:
+ 00005B 1E 03 [ 2] 122 ldw x, (0x03, sp)
+ 00005D 13 07 [ 2] 123 cpw x, (0x07, sp)
+ 00005F 24 43 [ 1] 124 jrnc 00112$
+ 125 ; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size)
+ 000061 16 03 [ 2] 126 ldw y, (0x03, sp)
+ 000063 127 00107$:
+ 000063 51 [ 1] 128 exgw x, y
+ 000064 13 01 [ 2] 129 cpw x, (0x01, sp)
+ 000066 51 [ 1] 130 exgw x, y
+ 000067 23 32 [ 2] 131 jrule 00111$
+ 000069 93 [ 1] 132 ldw x, y
+ 00006A 72 F0 05 [ 2] 133 subw x, (0x05, sp)
+ 00006D 1F 09 [ 2] 134 ldw (0x09, sp), x
+ 00006F 17 0B [ 2] 135 ldw (0x0b, sp), y
+ 000071 89 [ 2] 136 pushw x
+ 000072 1E 0D [ 2] 137 ldw x, (0x0d, sp)
+ 000074 89 [ 2] 138 pushw x
+ 000075 4Br82 [ 1] 139 push #(00147$)
+ 000077 4Bs00 [ 1] 140 push #(00147$ >> 8)
+ 000079 4Bs00 [ 1] 141 push #(00147$ >> 16)
+ 00007B 1E 1E [ 2] 142 ldw x, (0x1e, sp)
+ 00007D 89 [ 2] 143 pushw x
+ 00007E 7B 1F [ 1] 144 ld a, (0x1f, sp)
+ 000080 88 [ 1] 145 push a
+ 000081 87 [ 5] 146 retf
+ 000082 147 00147$:
+ 000082 5B 04 [ 2] 148 addw sp, #4
+ 000084 5D [ 2] 149 tnzw x
+ 000085 2A 14 [ 1] 150 jrpl 00111$
+ 151 ; ../qsort.c: 58: swap(j, j - size, size);
+ 000087 1E 09 [ 2] 152 ldw x, (0x09, sp)
+ 000089 16 05 [ 2] 153 ldw y, (0x05, sp)
+ 00008B 90 89 [ 2] 154 pushw y
+ 00008D 89 [ 2] 155 pushw x
+ 00008E 1E 0F [ 2] 156 ldw x, (0x0f, sp)
+ 000090 89 [ 2] 157 pushw x
+ 000091 8Ds00r00r00 [ 5] 158 callf _swap
+ 000095 5B 06 [ 2] 159 addw sp, #6
+ 160 ; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size)
+ 000097 16 09 [ 2] 161 ldw y, (0x09, sp)
+ 000099 20 C8 [ 2] 162 jra 00107$
+ 00009B 163 00111$:
+ 164 ; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size)
+ 00009B 1E 03 [ 2] 165 ldw x, (0x03, sp)
+ 00009D 72 FB 05 [ 2] 166 addw x, (0x05, sp)
+ 0000A0 1F 03 [ 2] 167 ldw (0x03, sp), x
+ 0000A2 20 B7 [ 2] 168 jra 00110$
+ 0000A4 169 00112$:
+ 170 ; ../qsort.c: 60: }
+ 0000A4 5B 0C [ 2] 171 addw sp, #12
+ 0000A6 87 [ 5] 172 retf
+ 173 .area CODE
+ 174 .area CONST
+ 175 .area INITIALIZER
+ 176 .area CABS (ABS)
diff --git a/device/lib/stm8-large/qsort.rel b/device/lib/stm8-large/qsort.rel
new file mode 100644
index 0000000..cd61557
--- /dev/null
+++ b/device/lib/stm8-large/qsort.rel
@@ -0,0 +1,68 @@
+XH3
+H B areas 3 global symbols
+M qsort
+O -mstm8
+S __mulint Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size A7 flags 0 addr 0
+S _qsort Def000034
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 1E 0A 16 0C 17 03 16 0E 17 05
+R 00 00 00 09
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 16 05 17 01 16 05 90 5A 17 05 16 01 27
+R 00 00 00 09
+T 00 00 19 17 F6 6B 02 16 03 90 F6 F7 16 03 7B 02
+R 00 00 00 09
+T 00 00 26 90 F7 5C 16 03 90 5C 17 03 20 DB
+R 00 00 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 5B 06 87
+R 00 00 00 09
+T 00 00 34
+R 00 00 00 09
+T 00 00 34 52 0C 16 10 17 0B 17 01 1E 12 A3 00 01
+R 00 00 00 09
+T 00 00 41 23 61 16 0B 17 03 16 14 17 05 93 89 1E
+R 00 00 00 09
+T 00 00 4E 14 89 8D 00 00 00 5B 04 72 FB 01 1F 07
+R 00 00 00 09 82 06 00 00
+T 00 00 5B
+R 00 00 00 09
+T 00 00 5B 1E 03 13 07 24 43 16 03
+R 00 00 00 09
+T 00 00 63
+R 00 00 00 09
+T 00 00 63 51 13 01 51 23 32 93 72 F0 05 1F 09 17
+R 00 00 00 09
+T 00 00 70 0B 89 1E 0D 89 4B 00 00 82 4B 00 00 82
+R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09
+T 00 00 79 4B 00 00 82 1E 1E 89 7B 1F 88 87
+R 00 00 00 09 F3 01 04 00 09
+T 00 00 82
+R 00 00 00 09
+T 00 00 82 5B 04 5D 2A 14 1E 09 16 05 90 89 89 1E
+R 00 00 00 09
+T 00 00 8F 0F 89 8D 00 00 00 5B 06 16 09 20 C8
+R 00 00 00 09 80 06 00 09
+T 00 00 9B
+R 00 00 00 09
+T 00 00 9B 1E 03 72 FB 05 1F 03 20 B7
+R 00 00 00 09
+T 00 00 A4
+R 00 00 00 09
+T 00 00 A4 5B 0C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/qsort.sym b/device/lib/stm8-large/qsort.sym
new file mode 100644
index 0000000..9e7fd05
--- /dev/null
+++ b/device/lib/stm8-large/qsort.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __mulint ****** GX
+ 9 _qsort 000034 GR
+ 9 _swap 000000 R
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size A7 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/rand.asm b/device/lib/stm8-large/rand.asm
new file mode 100644
index 0000000..efffd3c
--- /dev/null
+++ b/device/lib/stm8-large/rand.asm
@@ -0,0 +1,156 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module rand
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _rand
+ .globl _srand
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+_s:
+ .ds 4
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../rand.c: 40: int rand(void)
+; -----------------------------------------
+; function rand
+; -----------------------------------------
+_rand:
+ sub sp, #8
+; ../rand.c: 42: register unsigned long t = s;
+ ldw x, _s+2
+ ldw (0x03, sp), x
+ ldw x, _s+0
+ ldw (0x01, sp), x
+; ../rand.c: 44: t ^= t >> 10;
+ ldw y, (0x02, sp)
+ ldw (0x07, sp), y
+ ld a, (0x01, sp)
+ ld (0x06, sp), a
+ clr (0x05, sp)
+ srl (0x06, sp)
+ rrc (0x07, sp)
+ rrc (0x08, sp)
+ srl (0x06, sp)
+ rrc (0x07, sp)
+ rrc (0x08, sp)
+ ld a, (0x04, sp)
+ xor a, (0x08, sp)
+ ld xl, a
+ ld a, (0x03, sp)
+ xor a, (0x07, sp)
+ ld xh, a
+ ld a, (0x02, sp)
+ xor a, (0x06, sp)
+ push a
+ ld a, (0x02, sp)
+ xor a, (0x06, sp)
+ ld yh, a
+ pop a
+; ../rand.c: 45: t ^= t << 9;
+ ldw (0x06, sp), x
+ ld (0x05, sp), a
+ clr (0x08, sp)
+ sll (0x08, sp)
+ rlc (0x07, sp)
+ rlc (0x06, sp)
+ rlc (0x05, sp)
+ xor a, (0x06, sp)
+ ld yl, a
+ ld a, xl
+ xor a, (0x08, sp)
+ rlwa x
+ xor a, (0x07, sp)
+ ld xh, a
+ ld a, yh
+ xor a, (0x05, sp)
+ ld yh, a
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../rand.c: 46: t ^= t >> 25;
+ ld a, (0x01, sp)
+ ld (0x08, sp), a
+ clr (0x07, sp)
+ clr (0x06, sp)
+ clr (0x05, sp)
+ srl (0x08, sp)
+ ld a, (0x04, sp)
+ xor a, (0x08, sp)
+ ld xl, a
+ ld a, (0x03, sp)
+ xor a, (0x07, sp)
+ ld xh, a
+ ld a, (0x02, sp)
+ xor a, (0x06, sp)
+ ld yl, a
+ ld a, (0x01, sp)
+ xor a, (0x05, sp)
+ ld yh, a
+; ../rand.c: 48: s = t;
+ ldw _s+2, x
+ ldw _s+0, y
+; ../rand.c: 50: return(t & RAND_MAX);
+ sllw x
+ srlw x
+; ../rand.c: 51: }
+ addw sp, #8
+ retf
+; ../rand.c: 53: void srand(unsigned int seed)
+; -----------------------------------------
+; function srand
+; -----------------------------------------
+_srand:
+; ../rand.c: 55: s = seed | 0x80000000; /* s shall not become 0 */
+ ldw y, (0x04, sp)
+ clrw x
+ sllw x
+ scf
+ rrcw x
+ ldw _s+2, y
+ ldw _s+0, x
+; ../rand.c: 56: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+__xinit__s:
+ .byte #0x80, #0x00, #0x00, #0x01 ; 2147483649
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/rand.lst b/device/lib/stm8-large/rand.lst
new file mode 100644
index 0000000..4e0bfc7
--- /dev/null
+++ b/device/lib/stm8-large/rand.lst
@@ -0,0 +1,156 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module rand
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _rand
+ 12 .globl _srand
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 000000 21 _s:
+ 000000 22 .ds 4
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../rand.c: 40: int rand(void)
+ 53 ; -----------------------------------------
+ 54 ; function rand
+ 55 ; -----------------------------------------
+ 000000 56 _rand:
+ 000000 52 08 [ 2] 57 sub sp, #8
+ 58 ; ../rand.c: 42: register unsigned long t = s;
+ 000002 CEu00u02 [ 2] 59 ldw x, _s+2
+ 000005 1F 03 [ 2] 60 ldw (0x03, sp), x
+ 000007 CEu00u00 [ 2] 61 ldw x, _s+0
+ 00000A 1F 01 [ 2] 62 ldw (0x01, sp), x
+ 63 ; ../rand.c: 44: t ^= t >> 10;
+ 00000C 16 02 [ 2] 64 ldw y, (0x02, sp)
+ 00000E 17 07 [ 2] 65 ldw (0x07, sp), y
+ 000010 7B 01 [ 1] 66 ld a, (0x01, sp)
+ 000012 6B 06 [ 1] 67 ld (0x06, sp), a
+ 000014 0F 05 [ 1] 68 clr (0x05, sp)
+ 000016 04 06 [ 1] 69 srl (0x06, sp)
+ 000018 06 07 [ 1] 70 rrc (0x07, sp)
+ 00001A 06 08 [ 1] 71 rrc (0x08, sp)
+ 00001C 04 06 [ 1] 72 srl (0x06, sp)
+ 00001E 06 07 [ 1] 73 rrc (0x07, sp)
+ 000020 06 08 [ 1] 74 rrc (0x08, sp)
+ 000022 7B 04 [ 1] 75 ld a, (0x04, sp)
+ 000024 18 08 [ 1] 76 xor a, (0x08, sp)
+ 000026 97 [ 1] 77 ld xl, a
+ 000027 7B 03 [ 1] 78 ld a, (0x03, sp)
+ 000029 18 07 [ 1] 79 xor a, (0x07, sp)
+ 00002B 95 [ 1] 80 ld xh, a
+ 00002C 7B 02 [ 1] 81 ld a, (0x02, sp)
+ 00002E 18 06 [ 1] 82 xor a, (0x06, sp)
+ 000030 88 [ 1] 83 push a
+ 000031 7B 02 [ 1] 84 ld a, (0x02, sp)
+ 000033 18 06 [ 1] 85 xor a, (0x06, sp)
+ 000035 90 95 [ 1] 86 ld yh, a
+ 000037 84 [ 1] 87 pop a
+ 88 ; ../rand.c: 45: t ^= t << 9;
+ 000038 1F 06 [ 2] 89 ldw (0x06, sp), x
+ 00003A 6B 05 [ 1] 90 ld (0x05, sp), a
+ 00003C 0F 08 [ 1] 91 clr (0x08, sp)
+ 00003E 08 08 [ 1] 92 sll (0x08, sp)
+ 000040 09 07 [ 1] 93 rlc (0x07, sp)
+ 000042 09 06 [ 1] 94 rlc (0x06, sp)
+ 000044 09 05 [ 1] 95 rlc (0x05, sp)
+ 000046 18 06 [ 1] 96 xor a, (0x06, sp)
+ 000048 90 97 [ 1] 97 ld yl, a
+ 00004A 9F [ 1] 98 ld a, xl
+ 00004B 18 08 [ 1] 99 xor a, (0x08, sp)
+ 00004D 02 [ 1] 100 rlwa x
+ 00004E 18 07 [ 1] 101 xor a, (0x07, sp)
+ 000050 95 [ 1] 102 ld xh, a
+ 000051 90 9E [ 1] 103 ld a, yh
+ 000053 18 05 [ 1] 104 xor a, (0x05, sp)
+ 000055 90 95 [ 1] 105 ld yh, a
+ 000057 1F 03 [ 2] 106 ldw (0x03, sp), x
+ 000059 17 01 [ 2] 107 ldw (0x01, sp), y
+ 108 ; ../rand.c: 46: t ^= t >> 25;
+ 00005B 7B 01 [ 1] 109 ld a, (0x01, sp)
+ 00005D 6B 08 [ 1] 110 ld (0x08, sp), a
+ 00005F 0F 07 [ 1] 111 clr (0x07, sp)
+ 000061 0F 06 [ 1] 112 clr (0x06, sp)
+ 000063 0F 05 [ 1] 113 clr (0x05, sp)
+ 000065 04 08 [ 1] 114 srl (0x08, sp)
+ 000067 7B 04 [ 1] 115 ld a, (0x04, sp)
+ 000069 18 08 [ 1] 116 xor a, (0x08, sp)
+ 00006B 97 [ 1] 117 ld xl, a
+ 00006C 7B 03 [ 1] 118 ld a, (0x03, sp)
+ 00006E 18 07 [ 1] 119 xor a, (0x07, sp)
+ 000070 95 [ 1] 120 ld xh, a
+ 000071 7B 02 [ 1] 121 ld a, (0x02, sp)
+ 000073 18 06 [ 1] 122 xor a, (0x06, sp)
+ 000075 90 97 [ 1] 123 ld yl, a
+ 000077 7B 01 [ 1] 124 ld a, (0x01, sp)
+ 000079 18 05 [ 1] 125 xor a, (0x05, sp)
+ 00007B 90 95 [ 1] 126 ld yh, a
+ 127 ; ../rand.c: 48: s = t;
+ 00007D CFu00u02 [ 2] 128 ldw _s+2, x
+ 000080 90 CFu00u00 [ 2] 129 ldw _s+0, y
+ 130 ; ../rand.c: 50: return(t & RAND_MAX);
+ 000084 58 [ 2] 131 sllw x
+ 000085 54 [ 2] 132 srlw x
+ 133 ; ../rand.c: 51: }
+ 000086 5B 08 [ 2] 134 addw sp, #8
+ 000088 87 [ 5] 135 retf
+ 136 ; ../rand.c: 53: void srand(unsigned int seed)
+ 137 ; -----------------------------------------
+ 138 ; function srand
+ 139 ; -----------------------------------------
+ 000089 140 _srand:
+ 141 ; ../rand.c: 55: s = seed | 0x80000000; /* s shall not become 0 */
+ 000089 16 04 [ 2] 142 ldw y, (0x04, sp)
+ 00008B 5F [ 1] 143 clrw x
+ 00008C 58 [ 2] 144 sllw x
+ 00008D 99 [ 1] 145 scf
+ 00008E 56 [ 2] 146 rrcw x
+ 00008F 90 CFu00u02 [ 2] 147 ldw _s+2, y
+ 000093 CFu00u00 [ 2] 148 ldw _s+0, x
+ 149 ; ../rand.c: 56: }
+ 000096 87 [ 5] 150 retf
+ 151 .area CODE
+ 152 .area CONST
+ 153 .area INITIALIZER
+ 000000 154 __xinit__s:
+ 000000 80 00 00 01 155 .byte #0x80, #0x00, #0x00, #0x01 ; 2147483649
+ 156 .area CABS (ABS)
diff --git a/device/lib/stm8-large/rand.rel b/device/lib/stm8-large/rand.rel
new file mode 100644
index 0000000..01b238f
--- /dev/null
+++ b/device/lib/stm8-large/rand.rel
@@ -0,0 +1,56 @@
+XH3
+H B areas 3 global symbols
+M rand
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 4 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 4 flags 0 addr 0
+A CODE size 97 flags 0 addr 0
+S _rand Def000000
+S _srand Def000089
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 02
+T 00 00 00
+R 00 00 00 02
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 08 CE 00 02 1F 03 CE 00 00 1F 01 16
+R 00 00 00 09 10 06 00 02 10 0B 00 02
+T 00 00 0D 02 17 07 7B 01 6B 06 0F 05 04 06 06 07
+R 00 00 00 09
+T 00 00 1A 06 08 04 06 06 07 06 08 7B 04 18 08 97
+R 00 00 00 09
+T 00 00 27 7B 03 18 07 95 7B 02 18 06 88 7B 02 18
+R 00 00 00 09
+T 00 00 34 06 90 95 84 1F 06 6B 05 0F 08 08 08 09
+R 00 00 00 09
+T 00 00 41 07 09 06 09 05 18 06 90 97 9F 18 08 02
+R 00 00 00 09
+T 00 00 4E 18 07 95 90 9E 18 05 90 95 1F 03 17 01
+R 00 00 00 09
+T 00 00 5B 7B 01 6B 08 0F 07 0F 06 0F 05 04 08 7B
+R 00 00 00 09
+T 00 00 68 04 18 08 97 7B 03 18 07 95 7B 02 18 06
+R 00 00 00 09
+T 00 00 75 90 97 7B 01 18 05 90 95 CF 00 02 90 CF
+R 00 00 00 09 10 0C 00 02
+T 00 00 82 00 00 58 54 5B 08 87
+R 00 00 00 09 10 03 00 02
+T 00 00 89
+R 00 00 00 09
+T 00 00 89 16 04 5F 58 99 56 90 CF 00 02 CF 00 00
+R 00 00 00 09 10 0B 00 02 10 0E 00 02
+T 00 00 96 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 08
+T 00 00 00 80 00 00 01
+R 00 00 00 08
diff --git a/device/lib/stm8-large/rand.sym b/device/lib/stm8-large/rand.sym
new file mode 100644
index 0000000..0f31826
--- /dev/null
+++ b/device/lib/stm8-large/rand.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 8 __xinit__s 000000 R
+ 9 _rand 000000 GR
+ 2 _s 000000 R
+ 9 _srand 000089 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 4 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 4 flags 0
+ 9 CODE size 97 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/realloc.asm b/device/lib/stm8-large/realloc.asm
new file mode 100644
index 0000000..26c962e
--- /dev/null
+++ b/device/lib/stm8-large/realloc.asm
@@ -0,0 +1,313 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module realloc
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___memcpy
+ .globl _memmove
+ .globl _free
+ .globl _malloc
+ .globl _realloc
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../realloc.c: 56: void *realloc(void *ptr, size_t size)
+; -----------------------------------------
+; function realloc
+; -----------------------------------------
+_realloc:
+ sub sp, #20
+; ../realloc.c: 69: if(!ptr)
+ ldw x, (0x18, sp)
+ jrne 00102$
+; ../realloc.c: 70: return(malloc(size));
+ ldw x, (0x1a, sp)
+ pushw x
+ callf _malloc
+ addw sp, #2
+ jpf 00132$
+00102$:
+; ../realloc.c: 72: if(!size)
+ ldw x, (0x1a, sp)
+ jrne 00104$
+; ../realloc.c: 74: free(ptr);
+ ldw x, (0x18, sp)
+ pushw x
+ callf _free
+ addw sp, #2
+; ../realloc.c: 75: return(0);
+ clrw x
+ jpf 00132$
+00104$:
+; ../realloc.c: 78: prev_free = 0, pf = 0;
+ clrw x
+ ldw (0x01, sp), x
+ clrw x
+ ldw (0x03, sp), x
+; ../realloc.c: 79: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, pf = f, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list
+ ldw x, ___sdcc_heap_free+0
+ ldw (0x13, sp), x
+ ldw x, #(___sdcc_heap_free + 0)
+ ldw (0x05, sp), x
+00130$:
+ ldw x, (0x13, sp)
+ jreq 00105$
+ ldw y, (0x18, sp)
+ ldw (0x11, sp), y
+ ldw x, (0x13, sp)
+ cpw x, (0x11, sp)
+ jrnc 00105$
+ ldw y, (0x13, sp)
+ ldw (0x01, sp), y
+ ldw y, (0x05, sp)
+ ldw (0x03, sp), y
+ ldw x, (0x13, sp)
+ incw x
+ incw x
+ ldw (0x05, sp), x
+ ldw x, (x)
+ ldw (0x13, sp), x
+ jra 00130$
+00105$:
+; ../realloc.c: 80: next_free = h;
+ ldw y, (0x13, sp)
+ ldw (0x07, sp), y
+; ../realloc.c: 82: if(!size || size + offsetof(struct header, next_free) < size)
+ ldw x, (0x1a, sp)
+ jreq 00106$
+ incw x
+ incw x
+ cpw x, (0x1a, sp)
+ jrnc 00107$
+00106$:
+; ../realloc.c: 83: return(0);
+ clrw x
+ jpf 00132$
+00107$:
+; ../realloc.c: 84: blocksize = size + offsetof(struct header, next_free);
+; ../realloc.c: 85: if(blocksize < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks.
+ ldw (0x09, sp), x
+ cpw x, #0x0004
+ jrnc 00110$
+; ../realloc.c: 86: blocksize = sizeof(struct header);
+ ldw x, #0x0004
+ ldw (0x09, sp), x
+00110$:
+; ../realloc.c: 88: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free));
+ ldw x, (0x18, sp)
+ decw x
+ decw x
+; ../realloc.c: 89: oldblocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h;
+ ldw (0x0b, sp), x
+ ldw x, (x)
+ ldw (0x0d, sp), x
+ ldw y, (0x0b, sp)
+ ldw (0x0f, sp), y
+ subw x, (0x0f, sp)
+; ../realloc.c: 91: maxblocksize = oldblocksize;
+ ldw (0x11, sp), x
+ ldw (0x13, sp), x
+; ../realloc.c: 92: if(prev_free && prev_free->next == h) // Can merge with previous block
+ ldw x, (0x01, sp)
+ jreq 00112$
+ ldw x, (x)
+ cpw x, (0x0b, sp)
+ jrne 00112$
+; ../realloc.c: 93: maxblocksize += (char HEAPSPACE *)h - (char HEAPSPACE *)prev_free;
+ ldw x, (0x01, sp)
+ negw x
+ addw x, (0x0f, sp)
+ addw x, (0x11, sp)
+ ldw (0x13, sp), x
+00112$:
+; ../realloc.c: 94: if(next_free == h->next) // Can merge with next block
+ ldw x, (0x07, sp)
+ cpw x, (0x0d, sp)
+ jrne 00115$
+; ../realloc.c: 95: maxblocksize += (char HEAPSPACE *)(next_free->next) - (char HEAPSPACE *)next_free;
+ ldw x, (0x07, sp)
+ ldw x, (x)
+ ldw y, (0x07, sp)
+ ldw (0x0f, sp), y
+ subw x, (0x0f, sp)
+ addw x, (0x13, sp)
+ ldw (0x13, sp), x
+00115$:
+; ../realloc.c: 97: if(blocksize <= maxblocksize) // Can resize in place.
+ ldw x, (0x09, sp)
+ cpw x, (0x13, sp)
+ jrule 00247$
+ jpf 00125$
+00247$:
+; ../realloc.c: 99: if(prev_free && prev_free->next == h) // Always move into previous block to defragment
+ ldw x, (0x01, sp)
+ jreq 00117$
+ ldw x, (x)
+ cpw x, (0x0b, sp)
+ jrne 00117$
+; ../realloc.c: 101: memmove(prev_free, h, blocksize <= oldblocksize ? blocksize : oldblocksize);
+ ldw x, (0x09, sp)
+ cpw x, (0x11, sp)
+ jrugt 00134$
+ ldw y, (0x09, sp)
+ ldw (0x11, sp), y
+00134$:
+ ldw y, (0x0b, sp)
+ ldw x, (0x01, sp)
+ ld a, (0x12, sp)
+ push a
+ ld a, (0x12, sp)
+ push a
+ pushw y
+ pushw x
+ callf _memmove
+ addw sp, #6
+; ../realloc.c: 102: h = prev_free;
+ ldw y, (0x01, sp)
+ ldw (0x0b, sp), y
+; ../realloc.c: 103: *pf = next_free;
+ ldw x, (0x03, sp)
+ ldw y, (0x07, sp)
+ ldw (x), y
+; ../realloc.c: 104: f = pf;
+ ldw y, (0x03, sp)
+ ldw (0x05, sp), y
+00117$:
+; ../realloc.c: 107: if(next_free && next_free == h->next) // Merge with following block
+ ldw x, (0x07, sp)
+ jreq 00120$
+ ldw x, (0x0b, sp)
+ ldw x, (x)
+ cpw x, (0x07, sp)
+ jrne 00120$
+; ../realloc.c: 109: h->next = next_free->next;
+ ldw x, (0x07, sp)
+ ldw x, (x)
+ ldw y, (0x0b, sp)
+ ldw (y), x
+; ../realloc.c: 110: *f = next_free->next_free;
+ ldw x, (0x07, sp)
+ ldw x, (0x2, x)
+ ldw y, (0x05, sp)
+ ldw (y), x
+00120$:
+; ../realloc.c: 113: if(maxblocksize >= blocksize + sizeof(struct header)) // Create new block from free space
+ ldw x, (0x09, sp)
+ addw x, #0x0004
+ ldw (0x11, sp), x
+ ldw x, (0x13, sp)
+ cpw x, (0x11, sp)
+ jrc 00123$
+; ../realloc.c: 115: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + blocksize);
+ ldw x, (0x0b, sp)
+ addw x, (0x09, sp)
+ ldw (0x13, sp), x
+; ../realloc.c: 116: newheader->next = h->next;
+ ldw x, (0x0b, sp)
+ ldw x, (x)
+ ldw y, (0x13, sp)
+ ldw (y), x
+; ../realloc.c: 117: newheader->next_free = *f;
+ ldw x, (0x13, sp)
+ incw x
+ incw x
+ ldw y, (0x05, sp)
+ ldw y, (y)
+ ldw (x), y
+; ../realloc.c: 118: *f = newheader;
+ ldw x, (0x05, sp)
+ ldw y, (0x13, sp)
+ ldw (x), y
+; ../realloc.c: 119: h->next = newheader;
+ ldw x, (0x0b, sp)
+ ldw y, (0x13, sp)
+ ldw (x), y
+00123$:
+; ../realloc.c: 122: return(&(h->next_free));
+ ldw x, (0x0b, sp)
+ incw x
+ incw x
+ jra 00132$
+00125$:
+; ../realloc.c: 125: if(ret = malloc(size))
+ ldw x, (0x1a, sp)
+ pushw x
+ callf _malloc
+ addw sp, #2
+ ldw (0x13, sp), x
+ tnzw x
+ jreq 00127$
+; ../realloc.c: 127: size_t oldsize = oldblocksize - offsetof(struct header, next_free);
+ ldw x, (0x11, sp)
+ decw x
+ decw x
+; ../realloc.c: 128: memcpy(ret, ptr, size <= oldsize ? size : oldsize);
+ cpw x, (0x1a, sp)
+ jrc 00136$
+ ldw x, (0x1a, sp)
+00136$:
+ pushw x
+ ldw x, (0x1a, sp)
+ pushw x
+ ldw x, (0x17, sp)
+ pushw x
+ callf ___memcpy
+ addw sp, #6
+; ../realloc.c: 129: free(ptr);
+ ldw x, (0x18, sp)
+ pushw x
+ callf _free
+ addw sp, #2
+; ../realloc.c: 130: return(ret);
+ ldw x, (0x13, sp)
+; ../realloc.c: 133: return(0);
+ .byte 0x21
+00127$:
+ clrw x
+00132$:
+; ../realloc.c: 134: }
+ addw sp, #20
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/realloc.lst b/device/lib/stm8-large/realloc.lst
new file mode 100644
index 0000000..00a12e5
--- /dev/null
+++ b/device/lib/stm8-large/realloc.lst
@@ -0,0 +1,313 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module realloc
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___memcpy
+ 12 .globl _memmove
+ 13 .globl _free
+ 14 .globl _malloc
+ 15 .globl _realloc
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area DATA
+ 20 ;--------------------------------------------------------
+ 21 ; ram data
+ 22 ;--------------------------------------------------------
+ 23 .area INITIALIZED
+ 24 ;--------------------------------------------------------
+ 25 ; absolute external ram data
+ 26 ;--------------------------------------------------------
+ 27 .area DABS (ABS)
+ 28
+ 29 ; default segment ordering for linker
+ 30 .area HOME
+ 31 .area GSINIT
+ 32 .area GSFINAL
+ 33 .area CONST
+ 34 .area INITIALIZER
+ 35 .area CODE
+ 36
+ 37 ;--------------------------------------------------------
+ 38 ; global & static initialisations
+ 39 ;--------------------------------------------------------
+ 40 .area HOME
+ 41 .area GSINIT
+ 42 .area GSFINAL
+ 43 .area GSINIT
+ 44 ;--------------------------------------------------------
+ 45 ; Home
+ 46 ;--------------------------------------------------------
+ 47 .area HOME
+ 48 .area HOME
+ 49 ;--------------------------------------------------------
+ 50 ; code
+ 51 ;--------------------------------------------------------
+ 52 .area CODE
+ 53 ; ../realloc.c: 56: void *realloc(void *ptr, size_t size)
+ 54 ; -----------------------------------------
+ 55 ; function realloc
+ 56 ; -----------------------------------------
+ 000000 57 _realloc:
+ 000000 52 14 [ 2] 58 sub sp, #20
+ 59 ; ../realloc.c: 69: if(!ptr)
+ 000002 1E 18 [ 2] 60 ldw x, (0x18, sp)
+ 000004 26 0D [ 1] 61 jrne 00102$
+ 62 ; ../realloc.c: 70: return(malloc(size));
+ 000006 1E 1A [ 2] 63 ldw x, (0x1a, sp)
+ 000008 89 [ 2] 64 pushw x
+ 000009 8Ds00r00r00 [ 5] 65 callf _malloc
+ 00000D 5B 02 [ 2] 66 addw sp, #2
+ 00000F ACs00r01r6F [ 2] 67 jpf 00132$
+ 000013 68 00102$:
+ 69 ; ../realloc.c: 72: if(!size)
+ 000013 1E 1A [ 2] 70 ldw x, (0x1a, sp)
+ 000015 26 0E [ 1] 71 jrne 00104$
+ 72 ; ../realloc.c: 74: free(ptr);
+ 000017 1E 18 [ 2] 73 ldw x, (0x18, sp)
+ 000019 89 [ 2] 74 pushw x
+ 00001A 8Ds00r00r00 [ 5] 75 callf _free
+ 00001E 5B 02 [ 2] 76 addw sp, #2
+ 77 ; ../realloc.c: 75: return(0);
+ 000020 5F [ 1] 78 clrw x
+ 000021 ACs00r01r6F [ 2] 79 jpf 00132$
+ 000025 80 00104$:
+ 81 ; ../realloc.c: 78: prev_free = 0, pf = 0;
+ 000025 5F [ 1] 82 clrw x
+ 000026 1F 01 [ 2] 83 ldw (0x01, sp), x
+ 000028 5F [ 1] 84 clrw x
+ 000029 1F 03 [ 2] 85 ldw (0x03, sp), x
+ 86 ; ../realloc.c: 79: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, pf = f, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list
+ 00002B CEu00u00 [ 2] 87 ldw x, ___sdcc_heap_free+0
+ 00002E 1F 13 [ 2] 88 ldw (0x13, sp), x
+ 000030 AEr00r00 [ 2] 89 ldw x, #(___sdcc_heap_free + 0)
+ 000033 1F 05 [ 2] 90 ldw (0x05, sp), x
+ 000035 91 00130$:
+ 000035 1E 13 [ 2] 92 ldw x, (0x13, sp)
+ 000037 27 1D [ 1] 93 jreq 00105$
+ 000039 16 18 [ 2] 94 ldw y, (0x18, sp)
+ 00003B 17 11 [ 2] 95 ldw (0x11, sp), y
+ 00003D 1E 13 [ 2] 96 ldw x, (0x13, sp)
+ 00003F 13 11 [ 2] 97 cpw x, (0x11, sp)
+ 000041 24 13 [ 1] 98 jrnc 00105$
+ 000043 16 13 [ 2] 99 ldw y, (0x13, sp)
+ 000045 17 01 [ 2] 100 ldw (0x01, sp), y
+ 000047 16 05 [ 2] 101 ldw y, (0x05, sp)
+ 000049 17 03 [ 2] 102 ldw (0x03, sp), y
+ 00004B 1E 13 [ 2] 103 ldw x, (0x13, sp)
+ 00004D 5C [ 1] 104 incw x
+ 00004E 5C [ 1] 105 incw x
+ 00004F 1F 05 [ 2] 106 ldw (0x05, sp), x
+ 000051 FE [ 2] 107 ldw x, (x)
+ 000052 1F 13 [ 2] 108 ldw (0x13, sp), x
+ 000054 20 DF [ 2] 109 jra 00130$
+ 000056 110 00105$:
+ 111 ; ../realloc.c: 80: next_free = h;
+ 000056 16 13 [ 2] 112 ldw y, (0x13, sp)
+ 000058 17 07 [ 2] 113 ldw (0x07, sp), y
+ 114 ; ../realloc.c: 82: if(!size || size + offsetof(struct header, next_free) < size)
+ 00005A 1E 1A [ 2] 115 ldw x, (0x1a, sp)
+ 00005C 27 06 [ 1] 116 jreq 00106$
+ 00005E 5C [ 1] 117 incw x
+ 00005F 5C [ 1] 118 incw x
+ 000060 13 1A [ 2] 119 cpw x, (0x1a, sp)
+ 000062 24 05 [ 1] 120 jrnc 00107$
+ 000064 121 00106$:
+ 122 ; ../realloc.c: 83: return(0);
+ 000064 5F [ 1] 123 clrw x
+ 000065 ACs00r01r6F [ 2] 124 jpf 00132$
+ 000069 125 00107$:
+ 126 ; ../realloc.c: 84: blocksize = size + offsetof(struct header, next_free);
+ 127 ; ../realloc.c: 85: if(blocksize < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks.
+ 000069 1F 09 [ 2] 128 ldw (0x09, sp), x
+ 00006B A3 00 04 [ 2] 129 cpw x, #0x0004
+ 00006E 24 05 [ 1] 130 jrnc 00110$
+ 131 ; ../realloc.c: 86: blocksize = sizeof(struct header);
+ 000070 AE 00 04 [ 2] 132 ldw x, #0x0004
+ 000073 1F 09 [ 2] 133 ldw (0x09, sp), x
+ 000075 134 00110$:
+ 135 ; ../realloc.c: 88: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free));
+ 000075 1E 18 [ 2] 136 ldw x, (0x18, sp)
+ 000077 5A [ 2] 137 decw x
+ 000078 5A [ 2] 138 decw x
+ 139 ; ../realloc.c: 89: oldblocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h;
+ 000079 1F 0B [ 2] 140 ldw (0x0b, sp), x
+ 00007B FE [ 2] 141 ldw x, (x)
+ 00007C 1F 0D [ 2] 142 ldw (0x0d, sp), x
+ 00007E 16 0B [ 2] 143 ldw y, (0x0b, sp)
+ 000080 17 0F [ 2] 144 ldw (0x0f, sp), y
+ 000082 72 F0 0F [ 2] 145 subw x, (0x0f, sp)
+ 146 ; ../realloc.c: 91: maxblocksize = oldblocksize;
+ 000085 1F 11 [ 2] 147 ldw (0x11, sp), x
+ 000087 1F 13 [ 2] 148 ldw (0x13, sp), x
+ 149 ; ../realloc.c: 92: if(prev_free && prev_free->next == h) // Can merge with previous block
+ 000089 1E 01 [ 2] 150 ldw x, (0x01, sp)
+ 00008B 27 10 [ 1] 151 jreq 00112$
+ 00008D FE [ 2] 152 ldw x, (x)
+ 00008E 13 0B [ 2] 153 cpw x, (0x0b, sp)
+ 000090 26 0B [ 1] 154 jrne 00112$
+ 155 ; ../realloc.c: 93: maxblocksize += (char HEAPSPACE *)h - (char HEAPSPACE *)prev_free;
+ 000092 1E 01 [ 2] 156 ldw x, (0x01, sp)
+ 000094 50 [ 2] 157 negw x
+ 000095 72 FB 0F [ 2] 158 addw x, (0x0f, sp)
+ 000098 72 FB 11 [ 2] 159 addw x, (0x11, sp)
+ 00009B 1F 13 [ 2] 160 ldw (0x13, sp), x
+ 00009D 161 00112$:
+ 162 ; ../realloc.c: 94: if(next_free == h->next) // Can merge with next block
+ 00009D 1E 07 [ 2] 163 ldw x, (0x07, sp)
+ 00009F 13 0D [ 2] 164 cpw x, (0x0d, sp)
+ 0000A1 26 0F [ 1] 165 jrne 00115$
+ 166 ; ../realloc.c: 95: maxblocksize += (char HEAPSPACE *)(next_free->next) - (char HEAPSPACE *)next_free;
+ 0000A3 1E 07 [ 2] 167 ldw x, (0x07, sp)
+ 0000A5 FE [ 2] 168 ldw x, (x)
+ 0000A6 16 07 [ 2] 169 ldw y, (0x07, sp)
+ 0000A8 17 0F [ 2] 170 ldw (0x0f, sp), y
+ 0000AA 72 F0 0F [ 2] 171 subw x, (0x0f, sp)
+ 0000AD 72 FB 13 [ 2] 172 addw x, (0x13, sp)
+ 0000B0 1F 13 [ 2] 173 ldw (0x13, sp), x
+ 0000B2 174 00115$:
+ 175 ; ../realloc.c: 97: if(blocksize <= maxblocksize) // Can resize in place.
+ 0000B2 1E 09 [ 2] 176 ldw x, (0x09, sp)
+ 0000B4 13 13 [ 2] 177 cpw x, (0x13, sp)
+ 0000B6 23 04 [ 2] 178 jrule 00247$
+ 0000B8 ACs00r01r3D [ 2] 179 jpf 00125$
+ 0000BC 180 00247$:
+ 181 ; ../realloc.c: 99: if(prev_free && prev_free->next == h) // Always move into previous block to defragment
+ 0000BC 1E 01 [ 2] 182 ldw x, (0x01, sp)
+ 0000BE 27 2F [ 1] 183 jreq 00117$
+ 0000C0 FE [ 2] 184 ldw x, (x)
+ 0000C1 13 0B [ 2] 185 cpw x, (0x0b, sp)
+ 0000C3 26 2A [ 1] 186 jrne 00117$
+ 187 ; ../realloc.c: 101: memmove(prev_free, h, blocksize <= oldblocksize ? blocksize : oldblocksize);
+ 0000C5 1E 09 [ 2] 188 ldw x, (0x09, sp)
+ 0000C7 13 11 [ 2] 189 cpw x, (0x11, sp)
+ 0000C9 22 04 [ 1] 190 jrugt 00134$
+ 0000CB 16 09 [ 2] 191 ldw y, (0x09, sp)
+ 0000CD 17 11 [ 2] 192 ldw (0x11, sp), y
+ 0000CF 193 00134$:
+ 0000CF 16 0B [ 2] 194 ldw y, (0x0b, sp)
+ 0000D1 1E 01 [ 2] 195 ldw x, (0x01, sp)
+ 0000D3 7B 12 [ 1] 196 ld a, (0x12, sp)
+ 0000D5 88 [ 1] 197 push a
+ 0000D6 7B 12 [ 1] 198 ld a, (0x12, sp)
+ 0000D8 88 [ 1] 199 push a
+ 0000D9 90 89 [ 2] 200 pushw y
+ 0000DB 89 [ 2] 201 pushw x
+ 0000DC 8Ds00r00r00 [ 5] 202 callf _memmove
+ 0000E0 5B 06 [ 2] 203 addw sp, #6
+ 204 ; ../realloc.c: 102: h = prev_free;
+ 0000E2 16 01 [ 2] 205 ldw y, (0x01, sp)
+ 0000E4 17 0B [ 2] 206 ldw (0x0b, sp), y
+ 207 ; ../realloc.c: 103: *pf = next_free;
+ 0000E6 1E 03 [ 2] 208 ldw x, (0x03, sp)
+ 0000E8 16 07 [ 2] 209 ldw y, (0x07, sp)
+ 0000EA FF [ 2] 210 ldw (x), y
+ 211 ; ../realloc.c: 104: f = pf;
+ 0000EB 16 03 [ 2] 212 ldw y, (0x03, sp)
+ 0000ED 17 05 [ 2] 213 ldw (0x05, sp), y
+ 0000EF 214 00117$:
+ 215 ; ../realloc.c: 107: if(next_free && next_free == h->next) // Merge with following block
+ 0000EF 1E 07 [ 2] 216 ldw x, (0x07, sp)
+ 0000F1 27 16 [ 1] 217 jreq 00120$
+ 0000F3 1E 0B [ 2] 218 ldw x, (0x0b, sp)
+ 0000F5 FE [ 2] 219 ldw x, (x)
+ 0000F6 13 07 [ 2] 220 cpw x, (0x07, sp)
+ 0000F8 26 0F [ 1] 221 jrne 00120$
+ 222 ; ../realloc.c: 109: h->next = next_free->next;
+ 0000FA 1E 07 [ 2] 223 ldw x, (0x07, sp)
+ 0000FC FE [ 2] 224 ldw x, (x)
+ 0000FD 16 0B [ 2] 225 ldw y, (0x0b, sp)
+ 0000FF 90 FF [ 2] 226 ldw (y), x
+ 227 ; ../realloc.c: 110: *f = next_free->next_free;
+ 000101 1E 07 [ 2] 228 ldw x, (0x07, sp)
+ 000103 EE 02 [ 2] 229 ldw x, (0x2, x)
+ 000105 16 05 [ 2] 230 ldw y, (0x05, sp)
+ 000107 90 FF [ 2] 231 ldw (y), x
+ 000109 232 00120$:
+ 233 ; ../realloc.c: 113: if(maxblocksize >= blocksize + sizeof(struct header)) // Create new block from free space
+ 000109 1E 09 [ 2] 234 ldw x, (0x09, sp)
+ 00010B 1C 00 04 [ 2] 235 addw x, #0x0004
+ 00010E 1F 11 [ 2] 236 ldw (0x11, sp), x
+ 000110 1E 13 [ 2] 237 ldw x, (0x13, sp)
+ 000112 13 11 [ 2] 238 cpw x, (0x11, sp)
+ 000114 25 21 [ 1] 239 jrc 00123$
+ 240 ; ../realloc.c: 115: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + blocksize);
+ 000116 1E 0B [ 2] 241 ldw x, (0x0b, sp)
+ 000118 72 FB 09 [ 2] 242 addw x, (0x09, sp)
+ 00011B 1F 13 [ 2] 243 ldw (0x13, sp), x
+ 244 ; ../realloc.c: 116: newheader->next = h->next;
+ 00011D 1E 0B [ 2] 245 ldw x, (0x0b, sp)
+ 00011F FE [ 2] 246 ldw x, (x)
+ 000120 16 13 [ 2] 247 ldw y, (0x13, sp)
+ 000122 90 FF [ 2] 248 ldw (y), x
+ 249 ; ../realloc.c: 117: newheader->next_free = *f;
+ 000124 1E 13 [ 2] 250 ldw x, (0x13, sp)
+ 000126 5C [ 1] 251 incw x
+ 000127 5C [ 1] 252 incw x
+ 000128 16 05 [ 2] 253 ldw y, (0x05, sp)
+ 00012A 90 FE [ 2] 254 ldw y, (y)
+ 00012C FF [ 2] 255 ldw (x), y
+ 256 ; ../realloc.c: 118: *f = newheader;
+ 00012D 1E 05 [ 2] 257 ldw x, (0x05, sp)
+ 00012F 16 13 [ 2] 258 ldw y, (0x13, sp)
+ 000131 FF [ 2] 259 ldw (x), y
+ 260 ; ../realloc.c: 119: h->next = newheader;
+ 000132 1E 0B [ 2] 261 ldw x, (0x0b, sp)
+ 000134 16 13 [ 2] 262 ldw y, (0x13, sp)
+ 000136 FF [ 2] 263 ldw (x), y
+ 000137 264 00123$:
+ 265 ; ../realloc.c: 122: return(&(h->next_free));
+ 000137 1E 0B [ 2] 266 ldw x, (0x0b, sp)
+ 000139 5C [ 1] 267 incw x
+ 00013A 5C [ 1] 268 incw x
+ 00013B 20 32 [ 2] 269 jra 00132$
+ 00013D 270 00125$:
+ 271 ; ../realloc.c: 125: if(ret = malloc(size))
+ 00013D 1E 1A [ 2] 272 ldw x, (0x1a, sp)
+ 00013F 89 [ 2] 273 pushw x
+ 000140 8Ds00r00r00 [ 5] 274 callf _malloc
+ 000144 5B 02 [ 2] 275 addw sp, #2
+ 000146 1F 13 [ 2] 276 ldw (0x13, sp), x
+ 000148 5D [ 2] 277 tnzw x
+ 000149 27 23 [ 1] 278 jreq 00127$
+ 279 ; ../realloc.c: 127: size_t oldsize = oldblocksize - offsetof(struct header, next_free);
+ 00014B 1E 11 [ 2] 280 ldw x, (0x11, sp)
+ 00014D 5A [ 2] 281 decw x
+ 00014E 5A [ 2] 282 decw x
+ 283 ; ../realloc.c: 128: memcpy(ret, ptr, size <= oldsize ? size : oldsize);
+ 00014F 13 1A [ 2] 284 cpw x, (0x1a, sp)
+ 000151 25 02 [ 1] 285 jrc 00136$
+ 000153 1E 1A [ 2] 286 ldw x, (0x1a, sp)
+ 000155 287 00136$:
+ 000155 89 [ 2] 288 pushw x
+ 000156 1E 1A [ 2] 289 ldw x, (0x1a, sp)
+ 000158 89 [ 2] 290 pushw x
+ 000159 1E 17 [ 2] 291 ldw x, (0x17, sp)
+ 00015B 89 [ 2] 292 pushw x
+ 00015C 8Ds00r00r00 [ 5] 293 callf ___memcpy
+ 000160 5B 06 [ 2] 294 addw sp, #6
+ 295 ; ../realloc.c: 129: free(ptr);
+ 000162 1E 18 [ 2] 296 ldw x, (0x18, sp)
+ 000164 89 [ 2] 297 pushw x
+ 000165 8Ds00r00r00 [ 5] 298 callf _free
+ 000169 5B 02 [ 2] 299 addw sp, #2
+ 300 ; ../realloc.c: 130: return(ret);
+ 00016B 1E 13 [ 2] 301 ldw x, (0x13, sp)
+ 302 ; ../realloc.c: 133: return(0);
+ 00016D 21 303 .byte 0x21
+ 00016E 304 00127$:
+ 00016E 5F [ 1] 305 clrw x
+ 00016F 306 00132$:
+ 307 ; ../realloc.c: 134: }
+ 00016F 5B 14 [ 2] 308 addw sp, #20
+ 000171 87 [ 5] 309 retf
+ 310 .area CODE
+ 311 .area CONST
+ 312 .area INITIALIZER
+ 313 .area CABS (ABS)
diff --git a/device/lib/stm8-large/realloc.rel b/device/lib/stm8-large/realloc.rel
new file mode 100644
index 0000000..48d6567
--- /dev/null
+++ b/device/lib/stm8-large/realloc.rel
@@ -0,0 +1,138 @@
+XH3
+H B areas 7 global symbols
+M realloc
+O -mstm8
+S _free Ref000000
+S _memmove Ref000000
+S _malloc Ref000000
+S .__.ABS. Def000000
+S ___memcpy Ref000000
+S ___sdcc_heap_free Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 172 flags 0 addr 0
+S _realloc Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 14 1E 18 26 0D 1E 1A 89 8D
+R 00 00 00 09
+T 00 00 0A 00 00 00 5B 02 AC 00 01 6F
+R 00 00 00 09 82 03 00 02 80 09 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 1E 1A 26 0E 1E 18 89 8D
+R 00 00 00 09
+T 00 00 1B 00 00 00 5B 02 5F AC 00 01 6F
+R 00 00 00 09 82 03 00 00 80 0A 00 09
+T 00 00 25
+R 00 00 00 09
+T 00 00 25 5F 1F 01 5F 1F 03 CE 00 00 1F 13 AE
+R 00 00 00 09 12 0A 00 05
+T 00 00 31 00 00 1F 05
+R 00 00 00 09 02 03 00 05
+T 00 00 35
+R 00 00 00 09
+T 00 00 35 1E 13 27 1D 16 18 17 11 1E 13 13 11 24
+R 00 00 00 09
+T 00 00 42 13 16 13 17 01 16 05 17 03 1E 13 5C 5C
+R 00 00 00 09
+T 00 00 4F 1F 05 FE 1F 13 20 DF
+R 00 00 00 09
+T 00 00 56
+R 00 00 00 09
+T 00 00 56 16 13 17 07 1E 1A 27 06 5C 5C 13 1A 24
+R 00 00 00 09
+T 00 00 63 05
+R 00 00 00 09
+T 00 00 64
+R 00 00 00 09
+T 00 00 64 5F AC 00 01 6F
+R 00 00 00 09 80 05 00 09
+T 00 00 69
+R 00 00 00 09
+T 00 00 69 1F 09 A3 00 04 24 05 AE 00 04 1F 09
+R 00 00 00 09
+T 00 00 75
+R 00 00 00 09
+T 00 00 75 1E 18 5A 5A 1F 0B FE 1F 0D 16 0B 17 0F
+R 00 00 00 09
+T 00 00 82 72 F0 0F 1F 11 1F 13 1E 01 27 10 FE 13
+R 00 00 00 09
+T 00 00 8F 0B 26 0B 1E 01 50 72 FB 0F 72 FB 11 1F
+R 00 00 00 09
+T 00 00 9C 13
+R 00 00 00 09
+T 00 00 9D
+R 00 00 00 09
+T 00 00 9D 1E 07 13 0D 26 0F 1E 07 FE 16 07 17 0F
+R 00 00 00 09
+T 00 00 AA 72 F0 0F 72 FB 13 1F 13
+R 00 00 00 09
+T 00 00 B2
+R 00 00 00 09
+T 00 00 B2 1E 09 13 13 23 04 AC 00 01 3D
+R 00 00 00 09 80 0A 00 09
+T 00 00 BC
+R 00 00 00 09
+T 00 00 BC 1E 01 27 2F FE 13 0B 26 2A 1E 09 13 11
+R 00 00 00 09
+T 00 00 C9 22 04 16 09 17 11
+R 00 00 00 09
+T 00 00 CF
+R 00 00 00 09
+T 00 00 CF 16 0B 1E 01 7B 12 88 7B 12 88 90 89 89
+R 00 00 00 09
+T 00 00 DC 8D 00 00 00 5B 06 16 01 17 0B 1E 03 16
+R 00 00 00 09 82 04 00 01
+T 00 00 E9 07 FF 16 03 17 05
+R 00 00 00 09
+T 00 00 EF
+R 00 00 00 09
+T 00 00 EF 1E 07 27 16 1E 0B FE 13 07 26 0F 1E 07
+R 00 00 00 09
+T 00 00 FC FE 16 0B 90 FF 1E 07 EE 02 16 05 90 FF
+R 00 00 00 09
+T 00 01 09
+R 00 00 00 09
+T 00 01 09 1E 09 1C 00 04 1F 11 1E 13 13 11 25 21
+R 00 00 00 09
+T 00 01 16 1E 0B 72 FB 09 1F 13 1E 0B FE 16 13 90
+R 00 00 00 09
+T 00 01 23 FF 1E 13 5C 5C 16 05 90 FE FF 1E 05 16
+R 00 00 00 09
+T 00 01 30 13 FF 1E 0B 16 13 FF
+R 00 00 00 09
+T 00 01 37
+R 00 00 00 09
+T 00 01 37 1E 0B 5C 5C 20 32
+R 00 00 00 09
+T 00 01 3D
+R 00 00 00 09
+T 00 01 3D 1E 1A 89 8D 00 00 00 5B 02 1F 13 5D 27
+R 00 00 00 09 82 07 00 02
+T 00 01 4A 23 1E 11 5A 5A 13 1A 25 02 1E 1A
+R 00 00 00 09
+T 00 01 55
+R 00 00 00 09
+T 00 01 55 89 1E 1A 89 1E 17 89 8D
+R 00 00 00 09
+T 00 01 5D 00 00 00 5B 06 1E 18 89 8D
+R 00 00 00 09 82 03 00 04
+T 00 01 66 00 00 00 5B 02 1E 13 21
+R 00 00 00 09 82 03 00 00
+T 00 01 6E
+R 00 00 00 09
+T 00 01 6E 5F
+R 00 00 00 09
+T 00 01 6F
+R 00 00 00 09
+T 00 01 6F 5B 14 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/realloc.sym b/device/lib/stm8-large/realloc.sym
new file mode 100644
index 0000000..3ecbce1
--- /dev/null
+++ b/device/lib/stm8-large/realloc.sym
@@ -0,0 +1,34 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___memcpy ****** GX
+ ___sdcc_heap_free ****** GX
+ _free ****** GX
+ _malloc ****** GX
+ _memmove ****** GX
+ 9 _realloc 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 172 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/setjmp.lst b/device/lib/stm8-large/setjmp.lst
new file mode 100644
index 0000000..31dd3c3
--- /dev/null
+++ b/device/lib/stm8-large/setjmp.lst
@@ -0,0 +1,77 @@
+ 1 ;--------------------------------------------------------------------------
+ 2 ; setjmp.s
+ 3 ;
+ 4 ; Copyright (C) 2014, Philipp Klaus Krause
+ 5 ;
+ 6 ; This library is free software; you can redistribute it and/or modify it
+ 7 ; under the terms of the GNU General Public License as published by the
+ 8 ; Free Software Foundation; either version 2, or (at your option) any
+ 9 ; later version.
+ 10 ;
+ 11 ; This library is distributed in the hope that it will be useful,
+ 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 14 ; GNU General Public License for more details.
+ 15 ;
+ 16 ; You should have received a copy of the GNU General Public License
+ 17 ; along with this library; see the file COPYING. If not, write to the
+ 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ 19 ; MA 02110-1301, USA.
+ 20 ;
+ 21 ; As a special exception, if you link this library with other files,
+ 22 ; some of which are compiled with SDCC, to produce an executable,
+ 23 ; this library does not by itself cause the resulting executable to
+ 24 ; be covered by the GNU General Public License. This exception does
+ 25 ; not however invalidate any other reasons why the executable file
+ 26 ; might be covered by the GNU General Public License.
+ 27 ;--------------------------------------------------------------------------
+ 28
+ 29 .area CODE
+ 30
+ 31 .globl ___setjmp
+ 32
+ 000000 33 ___setjmp:
+ 000000 16 04 [ 2] 34 ldw y, (4, sp)
+ 35
+ 36 ; store return address
+ 000002 1E 01 [ 2] 37 ldw x, (1, sp)
+ 000004 90 FF [ 2] 38 ldw (y), x
+ 000006 7B 03 [ 1] 39 ld a, (3, sp)
+ 000008 90 E7 02 [ 1] 40 ld (2, y), a
+ 41
+ 42 ; store stack pointer
+ 00000B 96 [ 1] 43 ldw x, sp
+ 00000C 90 EF 03 [ 2] 44 ldw (3, y), x
+ 45
+ 46 ; return 0
+ 00000F 5F [ 1] 47 clrw x
+ 48
+ 000010 87 [ 5] 49 retf
+ 50
+ 51 .globl _longjmp
+ 52
+ 000011 53 _longjmp:
+ 000011 1E 04 [ 2] 54 ldw x, (4, sp)
+ 000013 16 06 [ 2] 55 ldw y, (6, sp)
+ 56
+ 57 ; Restore stack pointer
+ 000015 89 [ 2] 58 pushw x
+ 000016 EE 03 [ 2] 59 ldw x, (3, x)
+ 000018 EF 01 [ 2] 60 ldw (1, x), y
+ 00001A 90 85 [ 2] 61 popw y
+ 00001C 94 [ 1] 62 ldw sp, x
+ 63
+ 64 ; Calculate return value
+ 00001D 85 [ 2] 65 popw x
+ 00001E 84 [ 1] 66 pop a
+ 00001F 5D [ 2] 67 tnzw x
+ 000020 26 01 [ 1] 68 jrne jump
+ 000022 5C [ 1] 69 incw x
+ 000023 70 jump:
+ 71 ; return
+ 000023 90 F6 [ 1] 72 ld a, (y)
+ 000025 90 EE 01 [ 2] 73 ldw y, (1, y)
+ 000028 90 89 [ 2] 74 pushw y
+ 00002A 88 [ 1] 75 push a
+ 00002B 87 [ 5] 76 retf
+ 77
diff --git a/device/lib/stm8-large/setjmp.rel b/device/lib/stm8-large/setjmp.rel
new file mode 100644
index 0000000..8f86077
--- /dev/null
+++ b/device/lib/stm8-large/setjmp.rel
@@ -0,0 +1,23 @@
+XH3
+H 2 areas 3 global symbols
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A CODE size 2C flags 0 addr 0
+S _longjmp Def000011
+S ___setjmp Def000000
+T 00 00 00
+R 00 00 00 01
+T 00 00 00 16 04 1E 01 90 FF 7B 03 90 E7 02 96 90
+R 00 00 00 01
+T 00 00 0D EF 03 5F 87
+R 00 00 00 01
+T 00 00 11
+R 00 00 00 01
+T 00 00 11 1E 04 16 06 89 EE 03 EF 01 90 85 94 85
+R 00 00 00 01
+T 00 00 1E 84 5D 26 01 5C
+R 00 00 00 01
+T 00 00 23
+R 00 00 00 01
+T 00 00 23 90 F6 90 EE 01 90 89 88 87
+R 00 00 00 01
diff --git a/device/lib/stm8-large/setjmp.s b/device/lib/stm8-large/setjmp.s
new file mode 100644
index 0000000..aec6ab6
--- /dev/null
+++ b/device/lib/stm8-large/setjmp.s
@@ -0,0 +1,77 @@
+;--------------------------------------------------------------------------
+; setjmp.s
+;
+; Copyright (C) 2014, Philipp Klaus Krause
+;
+; This library is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 2, or (at your option) any
+; later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this library; see the file COPYING. If not, write to the
+; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+; MA 02110-1301, USA.
+;
+; As a special exception, if you link this library with other files,
+; some of which are compiled with SDCC, to produce an executable,
+; this library does not by itself cause the resulting executable to
+; be covered by the GNU General Public License. This exception does
+; not however invalidate any other reasons why the executable file
+; might be covered by the GNU General Public License.
+;--------------------------------------------------------------------------
+
+ .area CODE
+
+ .globl ___setjmp
+
+___setjmp:
+ ldw y, (4, sp)
+
+ ; store return address
+ ldw x, (1, sp)
+ ldw (y), x
+ ld a, (3, sp)
+ ld (2, y), a
+
+ ; store stack pointer
+ ldw x, sp
+ ldw (3, y), x
+
+ ; return 0
+ clrw x
+
+ retf
+
+ .globl _longjmp
+
+_longjmp:
+ ldw x, (4, sp)
+ ldw y, (6, sp)
+
+ ; Restore stack pointer
+ pushw x
+ ldw x, (3, x)
+ ldw (1, x), y
+ popw y
+ ldw sp, x
+
+ ; Calculate return value
+ popw x
+ pop a
+ tnzw x
+ jrne jump
+ incw x
+jump:
+ ; return
+ ld a, (y)
+ ldw y, (1, y)
+ pushw y
+ push a
+ retf
+
diff --git a/device/lib/stm8-large/setjmp.sym b/device/lib/stm8-large/setjmp.sym
new file mode 100644
index 0000000..3dc63c9
--- /dev/null
+++ b/device/lib/stm8-large/setjmp.sym
@@ -0,0 +1,17 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L
+ .__.H$L.= 000001 L | 1 ___setjm 000000 GR | 1 _longjmp 000011 GR
+ 1 jump 000023 R
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 CODE size 2C flags 0
+
diff --git a/device/lib/stm8-large/sincosf.asm b/device/lib/stm8-large/sincosf.asm
new file mode 100644
index 0000000..7301f7d
--- /dev/null
+++ b/device/lib/stm8-large/sincosf.asm
@@ -0,0 +1,412 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module sincosf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _sincosf
+ .globl _fabsf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../sincosf.c: 50: float sincosf(float x, bool iscos)
+; -----------------------------------------
+; function sincosf
+; -----------------------------------------
+_sincosf:
+ sub sp, #13
+; ../sincosf.c: 56: if(iscos)
+ tnz (0x15, sp)
+ jreq 00105$
+; ../sincosf.c: 58: y=fabsf(x)+HALF_PI;
+ ldw x, (0x13, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ push #0xdb
+ push #0x0f
+ push #0xc9
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0a, sp), x
+ ldw (0x08, sp), y
+; ../sincosf.c: 59: sign=0;
+ clr (0x0d, sp)
+ jra 00106$
+00105$:
+; ../sincosf.c: 63: if(x<0.0)
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x17, sp)
+ pushw x
+ ldw x, (0x17, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00102$
+; ../sincosf.c: 64: { y=-x; sign=1; }
+ ldw y, (0x13, sp)
+ ldw x, (0x11, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x0a, sp), y
+ ldw (0x08, sp), x
+ ld a, #0x01
+ ld (0x0d, sp), a
+ jra 00106$
+00102$:
+; ../sincosf.c: 66: { y=x; sign=0; }
+ ldw y, (0x13, sp)
+ ldw (0x0a, sp), y
+ ldw y, (0x11, sp)
+ ldw (0x08, sp), y
+ clr (0x0d, sp)
+00106$:
+; ../sincosf.c: 69: if(y>YMAX)
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #0x00
+ push #0x0c
+ push #0x49
+ push #0x46
+ callf ___fslt
+ addw sp, #8
+ ld (0x0c, sp), a
+ jreq 00108$
+; ../sincosf.c: 71: errno=ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../sincosf.c: 72: return 0.0;
+ clrw x
+ clrw y
+ jpf 00115$
+00108$:
+; ../sincosf.c: 76: N=((y*iPI)+0.5); /*y is positive*/
+ ldw x, (0x0a, sp)
+ pushw x
+ ldw x, (0x0a, sp)
+ pushw x
+ push #0x83
+ push #0xf9
+ push #0xa2
+ push #0x3e
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x00
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ callf ___fs2sint
+ addw sp, #4
+; ../sincosf.c: 79: if(N&1) sign=!sign;
+ ld a, xl
+ srl a
+ jrnc 00110$
+ ld a, (0x0d, sp)
+ sub a, #0x01
+ clr a
+ rlc a
+ ld (0x0d, sp), a
+00110$:
+; ../sincosf.c: 81: XN=N;
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../sincosf.c: 83: if(iscos) XN-=0.5;
+ tnz (0x15, sp)
+ jreq 00112$
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+00112$:
+; ../sincosf.c: 85: y=fabsf(x);
+ ldw x, (0x13, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../sincosf.c: 86: r=(int)y;
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fs2sint
+ addw sp, #4
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../sincosf.c: 87: g=y-r;
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../sincosf.c: 88: f=((r-XN*C1)+g)-XN*C2;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x49
+ push #0x40
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ push #0x22
+ push #0xaa
+ push #0x7d
+ push #0x3a
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../sincosf.c: 90: g=f*f;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../sincosf.c: 91: if(g>EPS2) //Used to be if(fabsf(f)>EPS)
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ push #0xf3
+ push #0xff
+ push #0x7f
+ push #0x33
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jrne 00159$
+ jpf 00114$
+00159$:
+; ../sincosf.c: 93: r=(((r4*g+r3)*g+r2)*g+r1)*g;
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ push #0x5b
+ push #0x9c
+ push #0x2e
+ push #0x36
+ callf ___fsmul
+ addw sp, #8
+ push #0x22
+ push #0xb2
+ push #0x4f
+ push #0xb9
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ push #0x3e
+ push #0x87
+ push #0x08
+ push #0x3c
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ push #0xa4
+ push #0xaa
+ push #0x2a
+ push #0xbe
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+; ../sincosf.c: 94: f+=f*r;
+ pushw x
+ pushw y
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+00114$:
+; ../sincosf.c: 96: return (sign?-f:f);
+ tnz (0x0d, sp)
+ jreq 00117$
+ ldw y, (0x03, sp)
+ ldw x, (0x01, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x0c, sp), y
+ ldw (0x0a, sp), x
+ jra 00118$
+00117$:
+ ldw y, (0x03, sp)
+ ldw (0x0c, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x0a, sp), y
+00118$:
+ ldw x, (0x0c, sp)
+ ldw y, (0x0a, sp)
+00115$:
+; ../sincosf.c: 97: }
+ addw sp, #13
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/sincosf.lst b/device/lib/stm8-large/sincosf.lst
new file mode 100644
index 0000000..9fb9cdf
--- /dev/null
+++ b/device/lib/stm8-large/sincosf.lst
@@ -0,0 +1,412 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module sincosf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _sincosf
+ 12 .globl _fabsf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../sincosf.c: 50: float sincosf(float x, bool iscos)
+ 51 ; -----------------------------------------
+ 52 ; function sincosf
+ 53 ; -----------------------------------------
+ 000000 54 _sincosf:
+ 000000 52 0D [ 2] 55 sub sp, #13
+ 56 ; ../sincosf.c: 56: if(iscos)
+ 000002 0D 15 [ 1] 57 tnz (0x15, sp)
+ 000004 27 25 [ 1] 58 jreq 00105$
+ 59 ; ../sincosf.c: 58: y=fabsf(x)+HALF_PI;
+ 000006 1E 13 [ 2] 60 ldw x, (0x13, sp)
+ 000008 89 [ 2] 61 pushw x
+ 000009 1E 13 [ 2] 62 ldw x, (0x13, sp)
+ 00000B 89 [ 2] 63 pushw x
+ 00000C 8Ds00r00r00 [ 5] 64 callf _fabsf
+ 000010 5B 04 [ 2] 65 addw sp, #4
+ 000012 4B DB [ 1] 66 push #0xdb
+ 000014 4B 0F [ 1] 67 push #0x0f
+ 000016 4B C9 [ 1] 68 push #0xc9
+ 000018 4B 3F [ 1] 69 push #0x3f
+ 00001A 89 [ 2] 70 pushw x
+ 00001B 90 89 [ 2] 71 pushw y
+ 00001D 8Ds00r00r00 [ 5] 72 callf ___fsadd
+ 000021 5B 08 [ 2] 73 addw sp, #8
+ 000023 1F 0A [ 2] 74 ldw (0x0a, sp), x
+ 000025 17 08 [ 2] 75 ldw (0x08, sp), y
+ 76 ; ../sincosf.c: 59: sign=0;
+ 000027 0F 0D [ 1] 77 clr (0x0d, sp)
+ 000029 20 2E [ 2] 78 jra 00106$
+ 00002B 79 00105$:
+ 80 ; ../sincosf.c: 63: if(x<0.0)
+ 00002B 5F [ 1] 81 clrw x
+ 00002C 89 [ 2] 82 pushw x
+ 00002D 5F [ 1] 83 clrw x
+ 00002E 89 [ 2] 84 pushw x
+ 00002F 1E 17 [ 2] 85 ldw x, (0x17, sp)
+ 000031 89 [ 2] 86 pushw x
+ 000032 1E 17 [ 2] 87 ldw x, (0x17, sp)
+ 000034 89 [ 2] 88 pushw x
+ 000035 8Ds00r00r00 [ 5] 89 callf ___fslt
+ 000039 5B 08 [ 2] 90 addw sp, #8
+ 00003B 4D [ 1] 91 tnz a
+ 00003C 27 11 [ 1] 92 jreq 00102$
+ 93 ; ../sincosf.c: 64: { y=-x; sign=1; }
+ 00003E 16 13 [ 2] 94 ldw y, (0x13, sp)
+ 000040 1E 11 [ 2] 95 ldw x, (0x11, sp)
+ 000042 58 [ 2] 96 sllw x
+ 000043 8C [ 1] 97 ccf
+ 000044 56 [ 2] 98 rrcw x
+ 000045 17 0A [ 2] 99 ldw (0x0a, sp), y
+ 000047 1F 08 [ 2] 100 ldw (0x08, sp), x
+ 000049 A6 01 [ 1] 101 ld a, #0x01
+ 00004B 6B 0D [ 1] 102 ld (0x0d, sp), a
+ 00004D 20 0A [ 2] 103 jra 00106$
+ 00004F 104 00102$:
+ 105 ; ../sincosf.c: 66: { y=x; sign=0; }
+ 00004F 16 13 [ 2] 106 ldw y, (0x13, sp)
+ 000051 17 0A [ 2] 107 ldw (0x0a, sp), y
+ 000053 16 11 [ 2] 108 ldw y, (0x11, sp)
+ 000055 17 08 [ 2] 109 ldw (0x08, sp), y
+ 000057 0F 0D [ 1] 110 clr (0x0d, sp)
+ 000059 111 00106$:
+ 112 ; ../sincosf.c: 69: if(y>YMAX)
+ 000059 1E 0A [ 2] 113 ldw x, (0x0a, sp)
+ 00005B 89 [ 2] 114 pushw x
+ 00005C 1E 0A [ 2] 115 ldw x, (0x0a, sp)
+ 00005E 89 [ 2] 116 pushw x
+ 00005F 4B 00 [ 1] 117 push #0x00
+ 000061 4B 0C [ 1] 118 push #0x0c
+ 000063 4B 49 [ 1] 119 push #0x49
+ 000065 4B 46 [ 1] 120 push #0x46
+ 000067 8Ds00r00r00 [ 5] 121 callf ___fslt
+ 00006B 5B 08 [ 2] 122 addw sp, #8
+ 00006D 6B 0C [ 1] 123 ld (0x0c, sp), a
+ 00006F 27 0D [ 1] 124 jreq 00108$
+ 125 ; ../sincosf.c: 71: errno=ERANGE;
+ 000071 AE 00 22 [ 2] 126 ldw x, #0x0022
+ 000074 CFu00u00 [ 2] 127 ldw _errno+0, x
+ 128 ; ../sincosf.c: 72: return 0.0;
+ 000077 5F [ 1] 129 clrw x
+ 000078 90 5F [ 1] 130 clrw y
+ 00007A ACs00r02r69 [ 2] 131 jpf 00115$
+ 00007E 132 00108$:
+ 133 ; ../sincosf.c: 76: N=((y*iPI)+0.5); /*y is positive*/
+ 00007E 1E 0A [ 2] 134 ldw x, (0x0a, sp)
+ 000080 89 [ 2] 135 pushw x
+ 000081 1E 0A [ 2] 136 ldw x, (0x0a, sp)
+ 000083 89 [ 2] 137 pushw x
+ 000084 4B 83 [ 1] 138 push #0x83
+ 000086 4B F9 [ 1] 139 push #0xf9
+ 000088 4B A2 [ 1] 140 push #0xa2
+ 00008A 4B 3E [ 1] 141 push #0x3e
+ 00008C 8Ds00r00r00 [ 5] 142 callf ___fsmul
+ 000090 5B 08 [ 2] 143 addw sp, #8
+ 000092 4B 00 [ 1] 144 push #0x00
+ 000094 4B 00 [ 1] 145 push #0x00
+ 000096 4B 00 [ 1] 146 push #0x00
+ 000098 4B 3F [ 1] 147 push #0x3f
+ 00009A 89 [ 2] 148 pushw x
+ 00009B 90 89 [ 2] 149 pushw y
+ 00009D 8Ds00r00r00 [ 5] 150 callf ___fsadd
+ 0000A1 5B 08 [ 2] 151 addw sp, #8
+ 0000A3 89 [ 2] 152 pushw x
+ 0000A4 90 89 [ 2] 153 pushw y
+ 0000A6 8Ds00r00r00 [ 5] 154 callf ___fs2sint
+ 0000AA 5B 04 [ 2] 155 addw sp, #4
+ 156 ; ../sincosf.c: 79: if(N&1) sign=!sign;
+ 0000AC 9F [ 1] 157 ld a, xl
+ 0000AD 44 [ 1] 158 srl a
+ 0000AE 24 08 [ 1] 159 jrnc 00110$
+ 0000B0 7B 0D [ 1] 160 ld a, (0x0d, sp)
+ 0000B2 A0 01 [ 1] 161 sub a, #0x01
+ 0000B4 4F [ 1] 162 clr a
+ 0000B5 49 [ 1] 163 rlc a
+ 0000B6 6B 0D [ 1] 164 ld (0x0d, sp), a
+ 0000B8 165 00110$:
+ 166 ; ../sincosf.c: 81: XN=N;
+ 0000B8 89 [ 2] 167 pushw x
+ 0000B9 8Ds00r00r00 [ 5] 168 callf ___sint2fs
+ 0000BD 5B 02 [ 2] 169 addw sp, #2
+ 0000BF 1F 03 [ 2] 170 ldw (0x03, sp), x
+ 0000C1 17 01 [ 2] 171 ldw (0x01, sp), y
+ 172 ; ../sincosf.c: 83: if(iscos) XN-=0.5;
+ 0000C3 0D 15 [ 1] 173 tnz (0x15, sp)
+ 0000C5 27 16 [ 1] 174 jreq 00112$
+ 0000C7 5F [ 1] 175 clrw x
+ 0000C8 89 [ 2] 176 pushw x
+ 0000C9 4B 00 [ 1] 177 push #0x00
+ 0000CB 4B 3F [ 1] 178 push #0x3f
+ 0000CD 1E 07 [ 2] 179 ldw x, (0x07, sp)
+ 0000CF 89 [ 2] 180 pushw x
+ 0000D0 1E 07 [ 2] 181 ldw x, (0x07, sp)
+ 0000D2 89 [ 2] 182 pushw x
+ 0000D3 8Ds00r00r00 [ 5] 183 callf ___fssub
+ 0000D7 5B 08 [ 2] 184 addw sp, #8
+ 0000D9 1F 03 [ 2] 185 ldw (0x03, sp), x
+ 0000DB 17 01 [ 2] 186 ldw (0x01, sp), y
+ 0000DD 187 00112$:
+ 188 ; ../sincosf.c: 85: y=fabsf(x);
+ 0000DD 1E 13 [ 2] 189 ldw x, (0x13, sp)
+ 0000DF 89 [ 2] 190 pushw x
+ 0000E0 1E 13 [ 2] 191 ldw x, (0x13, sp)
+ 0000E2 89 [ 2] 192 pushw x
+ 0000E3 8Ds00r00r00 [ 5] 193 callf _fabsf
+ 0000E7 5B 04 [ 2] 194 addw sp, #4
+ 0000E9 1F 07 [ 2] 195 ldw (0x07, sp), x
+ 0000EB 17 05 [ 2] 196 ldw (0x05, sp), y
+ 197 ; ../sincosf.c: 86: r=(int)y;
+ 0000ED 1E 07 [ 2] 198 ldw x, (0x07, sp)
+ 0000EF 89 [ 2] 199 pushw x
+ 0000F0 1E 07 [ 2] 200 ldw x, (0x07, sp)
+ 0000F2 89 [ 2] 201 pushw x
+ 0000F3 8Ds00r00r00 [ 5] 202 callf ___fs2sint
+ 0000F7 5B 04 [ 2] 203 addw sp, #4
+ 0000F9 89 [ 2] 204 pushw x
+ 0000FA 8Ds00r00r00 [ 5] 205 callf ___sint2fs
+ 0000FE 5B 02 [ 2] 206 addw sp, #2
+ 000100 1F 0B [ 2] 207 ldw (0x0b, sp), x
+ 000102 17 09 [ 2] 208 ldw (0x09, sp), y
+ 209 ; ../sincosf.c: 87: g=y-r;
+ 000104 1E 0B [ 2] 210 ldw x, (0x0b, sp)
+ 000106 89 [ 2] 211 pushw x
+ 000107 1E 0B [ 2] 212 ldw x, (0x0b, sp)
+ 000109 89 [ 2] 213 pushw x
+ 00010A 1E 0B [ 2] 214 ldw x, (0x0b, sp)
+ 00010C 89 [ 2] 215 pushw x
+ 00010D 1E 0B [ 2] 216 ldw x, (0x0b, sp)
+ 00010F 89 [ 2] 217 pushw x
+ 000110 8Ds00r00r00 [ 5] 218 callf ___fssub
+ 000114 5B 08 [ 2] 219 addw sp, #8
+ 000116 1F 07 [ 2] 220 ldw (0x07, sp), x
+ 000118 17 05 [ 2] 221 ldw (0x05, sp), y
+ 222 ; ../sincosf.c: 88: f=((r-XN*C1)+g)-XN*C2;
+ 00011A 1E 03 [ 2] 223 ldw x, (0x03, sp)
+ 00011C 89 [ 2] 224 pushw x
+ 00011D 1E 03 [ 2] 225 ldw x, (0x03, sp)
+ 00011F 89 [ 2] 226 pushw x
+ 000120 5F [ 1] 227 clrw x
+ 000121 89 [ 2] 228 pushw x
+ 000122 4B 49 [ 1] 229 push #0x49
+ 000124 4B 40 [ 1] 230 push #0x40
+ 000126 8Ds00r00r00 [ 5] 231 callf ___fsmul
+ 00012A 5B 08 [ 2] 232 addw sp, #8
+ 00012C 89 [ 2] 233 pushw x
+ 00012D 90 89 [ 2] 234 pushw y
+ 00012F 1E 0F [ 2] 235 ldw x, (0x0f, sp)
+ 000131 89 [ 2] 236 pushw x
+ 000132 1E 0F [ 2] 237 ldw x, (0x0f, sp)
+ 000134 89 [ 2] 238 pushw x
+ 000135 8Ds00r00r00 [ 5] 239 callf ___fssub
+ 000139 5B 08 [ 2] 240 addw sp, #8
+ 00013B 1F 0B [ 2] 241 ldw (0x0b, sp), x
+ 00013D 1E 07 [ 2] 242 ldw x, (0x07, sp)
+ 00013F 89 [ 2] 243 pushw x
+ 000140 1E 07 [ 2] 244 ldw x, (0x07, sp)
+ 000142 89 [ 2] 245 pushw x
+ 000143 1E 0F [ 2] 246 ldw x, (0x0f, sp)
+ 000145 89 [ 2] 247 pushw x
+ 000146 90 89 [ 2] 248 pushw y
+ 000148 8Ds00r00r00 [ 5] 249 callf ___fsadd
+ 00014C 5B 08 [ 2] 250 addw sp, #8
+ 00014E 1F 0B [ 2] 251 ldw (0x0b, sp), x
+ 000150 17 09 [ 2] 252 ldw (0x09, sp), y
+ 000152 1E 03 [ 2] 253 ldw x, (0x03, sp)
+ 000154 89 [ 2] 254 pushw x
+ 000155 1E 03 [ 2] 255 ldw x, (0x03, sp)
+ 000157 89 [ 2] 256 pushw x
+ 000158 4B 22 [ 1] 257 push #0x22
+ 00015A 4B AA [ 1] 258 push #0xaa
+ 00015C 4B 7D [ 1] 259 push #0x7d
+ 00015E 4B 3A [ 1] 260 push #0x3a
+ 000160 8Ds00r00r00 [ 5] 261 callf ___fsmul
+ 000164 5B 08 [ 2] 262 addw sp, #8
+ 000166 89 [ 2] 263 pushw x
+ 000167 90 89 [ 2] 264 pushw y
+ 000169 1E 0F [ 2] 265 ldw x, (0x0f, sp)
+ 00016B 89 [ 2] 266 pushw x
+ 00016C 1E 0F [ 2] 267 ldw x, (0x0f, sp)
+ 00016E 89 [ 2] 268 pushw x
+ 00016F 8Ds00r00r00 [ 5] 269 callf ___fssub
+ 000173 5B 08 [ 2] 270 addw sp, #8
+ 000175 1F 03 [ 2] 271 ldw (0x03, sp), x
+ 000177 17 01 [ 2] 272 ldw (0x01, sp), y
+ 273 ; ../sincosf.c: 90: g=f*f;
+ 000179 1E 03 [ 2] 274 ldw x, (0x03, sp)
+ 00017B 89 [ 2] 275 pushw x
+ 00017C 1E 03 [ 2] 276 ldw x, (0x03, sp)
+ 00017E 89 [ 2] 277 pushw x
+ 00017F 1E 07 [ 2] 278 ldw x, (0x07, sp)
+ 000181 89 [ 2] 279 pushw x
+ 000182 1E 07 [ 2] 280 ldw x, (0x07, sp)
+ 000184 89 [ 2] 281 pushw x
+ 000185 8Ds00r00r00 [ 5] 282 callf ___fsmul
+ 000189 5B 08 [ 2] 283 addw sp, #8
+ 00018B 1F 07 [ 2] 284 ldw (0x07, sp), x
+ 00018D 17 05 [ 2] 285 ldw (0x05, sp), y
+ 286 ; ../sincosf.c: 91: if(g>EPS2) //Used to be if(fabsf(f)>EPS)
+ 00018F 1E 07 [ 2] 287 ldw x, (0x07, sp)
+ 000191 89 [ 2] 288 pushw x
+ 000192 1E 07 [ 2] 289 ldw x, (0x07, sp)
+ 000194 89 [ 2] 290 pushw x
+ 000195 4B F3 [ 1] 291 push #0xf3
+ 000197 4B FF [ 1] 292 push #0xff
+ 000199 4B 7F [ 1] 293 push #0x7f
+ 00019B 4B 33 [ 1] 294 push #0x33
+ 00019D 8Ds00r00r00 [ 5] 295 callf ___fslt
+ 0001A1 5B 08 [ 2] 296 addw sp, #8
+ 0001A3 4D [ 1] 297 tnz a
+ 0001A4 26 04 [ 1] 298 jrne 00159$
+ 0001A6 ACs00r02r4C [ 2] 299 jpf 00114$
+ 0001AA 300 00159$:
+ 301 ; ../sincosf.c: 93: r=(((r4*g+r3)*g+r2)*g+r1)*g;
+ 0001AA 1E 07 [ 2] 302 ldw x, (0x07, sp)
+ 0001AC 89 [ 2] 303 pushw x
+ 0001AD 1E 07 [ 2] 304 ldw x, (0x07, sp)
+ 0001AF 89 [ 2] 305 pushw x
+ 0001B0 4B 5B [ 1] 306 push #0x5b
+ 0001B2 4B 9C [ 1] 307 push #0x9c
+ 0001B4 4B 2E [ 1] 308 push #0x2e
+ 0001B6 4B 36 [ 1] 309 push #0x36
+ 0001B8 8Ds00r00r00 [ 5] 310 callf ___fsmul
+ 0001BC 5B 08 [ 2] 311 addw sp, #8
+ 0001BE 4B 22 [ 1] 312 push #0x22
+ 0001C0 4B B2 [ 1] 313 push #0xb2
+ 0001C2 4B 4F [ 1] 314 push #0x4f
+ 0001C4 4B B9 [ 1] 315 push #0xb9
+ 0001C6 89 [ 2] 316 pushw x
+ 0001C7 90 89 [ 2] 317 pushw y
+ 0001C9 8Ds00r00r00 [ 5] 318 callf ___fsadd
+ 0001CD 5B 08 [ 2] 319 addw sp, #8
+ 0001CF 1F 0B [ 2] 320 ldw (0x0b, sp), x
+ 0001D1 1E 07 [ 2] 321 ldw x, (0x07, sp)
+ 0001D3 89 [ 2] 322 pushw x
+ 0001D4 1E 07 [ 2] 323 ldw x, (0x07, sp)
+ 0001D6 89 [ 2] 324 pushw x
+ 0001D7 1E 0F [ 2] 325 ldw x, (0x0f, sp)
+ 0001D9 89 [ 2] 326 pushw x
+ 0001DA 90 89 [ 2] 327 pushw y
+ 0001DC 8Ds00r00r00 [ 5] 328 callf ___fsmul
+ 0001E0 5B 08 [ 2] 329 addw sp, #8
+ 0001E2 4B 3E [ 1] 330 push #0x3e
+ 0001E4 4B 87 [ 1] 331 push #0x87
+ 0001E6 4B 08 [ 1] 332 push #0x08
+ 0001E8 4B 3C [ 1] 333 push #0x3c
+ 0001EA 89 [ 2] 334 pushw x
+ 0001EB 90 89 [ 2] 335 pushw y
+ 0001ED 8Ds00r00r00 [ 5] 336 callf ___fsadd
+ 0001F1 5B 08 [ 2] 337 addw sp, #8
+ 0001F3 1F 0B [ 2] 338 ldw (0x0b, sp), x
+ 0001F5 1E 07 [ 2] 339 ldw x, (0x07, sp)
+ 0001F7 89 [ 2] 340 pushw x
+ 0001F8 1E 07 [ 2] 341 ldw x, (0x07, sp)
+ 0001FA 89 [ 2] 342 pushw x
+ 0001FB 1E 0F [ 2] 343 ldw x, (0x0f, sp)
+ 0001FD 89 [ 2] 344 pushw x
+ 0001FE 90 89 [ 2] 345 pushw y
+ 000200 8Ds00r00r00 [ 5] 346 callf ___fsmul
+ 000204 5B 08 [ 2] 347 addw sp, #8
+ 000206 4B A4 [ 1] 348 push #0xa4
+ 000208 4B AA [ 1] 349 push #0xaa
+ 00020A 4B 2A [ 1] 350 push #0x2a
+ 00020C 4B BE [ 1] 351 push #0xbe
+ 00020E 89 [ 2] 352 pushw x
+ 00020F 90 89 [ 2] 353 pushw y
+ 000211 8Ds00r00r00 [ 5] 354 callf ___fsadd
+ 000215 5B 08 [ 2] 355 addw sp, #8
+ 000217 1F 0B [ 2] 356 ldw (0x0b, sp), x
+ 000219 1E 07 [ 2] 357 ldw x, (0x07, sp)
+ 00021B 89 [ 2] 358 pushw x
+ 00021C 1E 07 [ 2] 359 ldw x, (0x07, sp)
+ 00021E 89 [ 2] 360 pushw x
+ 00021F 1E 0F [ 2] 361 ldw x, (0x0f, sp)
+ 000221 89 [ 2] 362 pushw x
+ 000222 90 89 [ 2] 363 pushw y
+ 000224 8Ds00r00r00 [ 5] 364 callf ___fsmul
+ 000228 5B 08 [ 2] 365 addw sp, #8
+ 366 ; ../sincosf.c: 94: f+=f*r;
+ 00022A 89 [ 2] 367 pushw x
+ 00022B 90 89 [ 2] 368 pushw y
+ 00022D 1E 07 [ 2] 369 ldw x, (0x07, sp)
+ 00022F 89 [ 2] 370 pushw x
+ 000230 1E 07 [ 2] 371 ldw x, (0x07, sp)
+ 000232 89 [ 2] 372 pushw x
+ 000233 8Ds00r00r00 [ 5] 373 callf ___fsmul
+ 000237 5B 08 [ 2] 374 addw sp, #8
+ 000239 89 [ 2] 375 pushw x
+ 00023A 90 89 [ 2] 376 pushw y
+ 00023C 1E 07 [ 2] 377 ldw x, (0x07, sp)
+ 00023E 89 [ 2] 378 pushw x
+ 00023F 1E 07 [ 2] 379 ldw x, (0x07, sp)
+ 000241 89 [ 2] 380 pushw x
+ 000242 8Ds00r00r00 [ 5] 381 callf ___fsadd
+ 000246 5B 08 [ 2] 382 addw sp, #8
+ 000248 1F 03 [ 2] 383 ldw (0x03, sp), x
+ 00024A 17 01 [ 2] 384 ldw (0x01, sp), y
+ 00024C 385 00114$:
+ 386 ; ../sincosf.c: 96: return (sign?-f:f);
+ 00024C 0D 0D [ 1] 387 tnz (0x0d, sp)
+ 00024E 27 0D [ 1] 388 jreq 00117$
+ 000250 16 03 [ 2] 389 ldw y, (0x03, sp)
+ 000252 1E 01 [ 2] 390 ldw x, (0x01, sp)
+ 000254 58 [ 2] 391 sllw x
+ 000255 8C [ 1] 392 ccf
+ 000256 56 [ 2] 393 rrcw x
+ 000257 17 0C [ 2] 394 ldw (0x0c, sp), y
+ 000259 1F 0A [ 2] 395 ldw (0x0a, sp), x
+ 00025B 20 08 [ 2] 396 jra 00118$
+ 00025D 397 00117$:
+ 00025D 16 03 [ 2] 398 ldw y, (0x03, sp)
+ 00025F 17 0C [ 2] 399 ldw (0x0c, sp), y
+ 000261 16 01 [ 2] 400 ldw y, (0x01, sp)
+ 000263 17 0A [ 2] 401 ldw (0x0a, sp), y
+ 000265 402 00118$:
+ 000265 1E 0C [ 2] 403 ldw x, (0x0c, sp)
+ 000267 16 0A [ 2] 404 ldw y, (0x0a, sp)
+ 000269 405 00115$:
+ 406 ; ../sincosf.c: 97: }
+ 000269 5B 0D [ 2] 407 addw sp, #13
+ 00026B 87 [ 5] 408 retf
+ 409 .area CODE
+ 410 .area CONST
+ 411 .area INITIALIZER
+ 412 .area CABS (ABS)
diff --git a/device/lib/stm8-large/sincosf.rel b/device/lib/stm8-large/sincosf.rel
new file mode 100644
index 0000000..59041bb
--- /dev/null
+++ b/device/lib/stm8-large/sincosf.rel
@@ -0,0 +1,161 @@
+XH3
+H B areas A global symbols
+M sincosf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _errno Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _fabsf Ref000000
+S ___sint2fs Ref000000
+S ___fs2sint Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 26C flags 0 addr 0
+S _sincosf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0D 0D 15 27 25 1E 13 89 1E 13 89 8D
+R 00 00 00 09
+T 00 00 0D 00 00 00 5B 04 4B DB 4B 0F 4B C9 4B 3F
+R 00 00 00 09 82 03 00 06
+T 00 00 1A 89 90 89 8D 00 00 00 5B 08 1F 0A 17 08
+R 00 00 00 09 82 07 00 05
+T 00 00 27 0F 0D 20 2E
+R 00 00 00 09
+T 00 00 2B
+R 00 00 00 09
+T 00 00 2B 5F 89 5F 89 1E 17 89 1E 17 89 8D
+R 00 00 00 09
+T 00 00 36 00 00 00 5B 08 4D 27 11 16 13 1E 11 58
+R 00 00 00 09 82 03 00 03
+T 00 00 43 8C 56 17 0A 1F 08 A6 01 6B 0D 20 0A
+R 00 00 00 09
+T 00 00 4F
+R 00 00 00 09
+T 00 00 4F 16 13 17 0A 16 11 17 08 0F 0D
+R 00 00 00 09
+T 00 00 59
+R 00 00 00 09
+T 00 00 59 1E 0A 89 1E 0A 89 4B 00 4B 0C 4B 49 4B
+R 00 00 00 09
+T 00 00 66 46 8D 00 00 00 5B 08 6B 0C 27 0D AE
+R 00 00 00 09 82 05 00 03
+T 00 00 72 00 22 CF 00 00 5F 90 5F AC
+R 00 00 00 09 12 06 00 02
+T 00 00 7B 00 02 69
+R 00 00 00 09 80 03 00 09
+T 00 00 7E
+R 00 00 00 09
+T 00 00 7E 1E 0A 89 1E 0A 89 4B 83 4B F9 4B A2 4B
+R 00 00 00 09
+T 00 00 8B 3E 8D 00 00 00 5B 08 4B 00 4B 00 4B 00
+R 00 00 00 09 82 05 00 01
+T 00 00 98 4B 3F 89 90 89 8D 00 00 00 5B 08 89 90
+R 00 00 00 09 82 09 00 05
+T 00 00 A5 89 8D 00 00 00 5B 04 9F 44 24 08 7B 0D
+R 00 00 00 09 82 05 00 08
+T 00 00 B2 A0 01 4F 49 6B 0D
+R 00 00 00 09
+T 00 00 B8
+R 00 00 00 09
+T 00 00 B8 89 8D 00 00 00 5B 02 1F 03 17 01 0D 15
+R 00 00 00 09 82 05 00 07
+T 00 00 C5 27 16 5F 89 4B 00 4B 3F 1E 07 89 1E 07
+R 00 00 00 09
+T 00 00 D2 89 8D 00 00 00 5B 08 1F 03 17 01
+R 00 00 00 09 82 05 00 00
+T 00 00 DD
+R 00 00 00 09
+T 00 00 DD 1E 13 89 1E 13 89 8D 00 00 00 5B 04 1F
+R 00 00 00 09 82 0A 00 06
+T 00 00 EA 07 17 05 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 F4 00 00 00 5B 04 89 8D 00 00 00 5B 02 1F
+R 00 00 00 09 82 03 00 08 82 0A 00 07
+T 00 01 01 0B 17 09 1E 0B 89 1E 0B 89 1E 0B 89 1E
+R 00 00 00 09
+T 00 01 0E 0B 89 8D 00 00 00 5B 08 1F 07 17 05 1E
+R 00 00 00 09 82 06 00 00
+T 00 01 1B 03 89 1E 03 89 5F 89 4B 49 4B 40 8D
+R 00 00 00 09
+T 00 01 27 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F
+R 00 00 00 09 82 03 00 01
+T 00 01 34 89 8D 00 00 00 5B 08 1F 0B 1E 07 89 1E
+R 00 00 00 09 82 05 00 00
+T 00 01 41 07 89 1E 0F 89 90 89 8D
+R 00 00 00 09
+T 00 01 49 00 00 00 5B 08 1F 0B 17 09 1E 03 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 01 56 03 89 4B 22 4B AA 4B 7D 4B 3A 8D
+R 00 00 00 09
+T 00 01 61 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F
+R 00 00 00 09 82 03 00 01
+T 00 01 6E 89 8D 00 00 00 5B 08 1F 03 17 01 1E 03
+R 00 00 00 09 82 05 00 00
+T 00 01 7B 89 1E 03 89 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 01 86 00 00 00 5B 08 1F 07 17 05 1E 07 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 93 07 89 4B F3 4B FF 4B 7F 4B 33 8D
+R 00 00 00 09
+T 00 01 9E 00 00 00 5B 08 4D 26 04 AC
+R 00 00 00 09 82 03 00 03
+T 00 01 A7 00 02 4C
+R 00 00 00 09 80 03 00 09
+T 00 01 AA
+R 00 00 00 09
+T 00 01 AA 1E 07 89 1E 07 89 4B 5B 4B 9C 4B 2E 4B
+R 00 00 00 09
+T 00 01 B7 36 8D 00 00 00 5B 08 4B 22 4B B2 4B 4F
+R 00 00 00 09 82 05 00 01
+T 00 01 C4 4B B9 89 90 89 8D 00 00 00 5B 08 1F 0B
+R 00 00 00 09 82 09 00 05
+T 00 01 D1 1E 07 89 1E 07 89 1E 0F 89 90 89 8D
+R 00 00 00 09
+T 00 01 DD 00 00 00 5B 08 4B 3E 4B 87 4B 08 4B 3C
+R 00 00 00 09 82 03 00 01
+T 00 01 EA 89 90 89 8D 00 00 00 5B 08 1F 0B 1E 07
+R 00 00 00 09 82 07 00 05
+T 00 01 F7 89 1E 07 89 1E 0F 89 90 89 8D
+R 00 00 00 09
+T 00 02 01 00 00 00 5B 08 4B A4 4B AA 4B 2A 4B BE
+R 00 00 00 09 82 03 00 01
+T 00 02 0E 89 90 89 8D 00 00 00 5B 08 1F 0B 1E 07
+R 00 00 00 09 82 07 00 05
+T 00 02 1B 89 1E 07 89 1E 0F 89 90 89 8D
+R 00 00 00 09
+T 00 02 25 00 00 00 5B 08 89 90 89 1E 07 89 1E 07
+R 00 00 00 09 82 03 00 01
+T 00 02 32 89 8D 00 00 00 5B 08 89 90 89 1E 07 89
+R 00 00 00 09 82 05 00 01
+T 00 02 3F 1E 07 89 8D 00 00 00 5B 08 1F 03 17 01
+R 00 00 00 09 82 07 00 05
+T 00 02 4C
+R 00 00 00 09
+T 00 02 4C 0D 0D 27 0D 16 03 1E 01 58 8C 56 17 0C
+R 00 00 00 09
+T 00 02 59 1F 0A 20 08
+R 00 00 00 09
+T 00 02 5D
+R 00 00 00 09
+T 00 02 5D 16 03 17 0C 16 01 17 0A
+R 00 00 00 09
+T 00 02 65
+R 00 00 00 09
+T 00 02 65 1E 0C 16 0A
+R 00 00 00 09
+T 00 02 69
+R 00 00 00 09
+T 00 02 69 5B 0D 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/sincosf.sym b/device/lib/stm8-large/sincosf.sym
new file mode 100644
index 0000000..efa904e
--- /dev/null
+++ b/device/lib/stm8-large/sincosf.sym
@@ -0,0 +1,37 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fs2sint ****** GX
+ ___fsadd ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ ___sint2fs ****** GX
+ _errno ****** GX
+ _fabsf ****** GX
+ 9 _sincosf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 26C flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/sincoshf.asm b/device/lib/stm8-large/sincoshf.asm
new file mode 100644
index 0000000..35c798a
--- /dev/null
+++ b/device/lib/stm8-large/sincoshf.asm
@@ -0,0 +1,367 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module sincoshf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _sincoshf
+ .globl _expf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../sincoshf.c: 56: float sincoshf(float x, bool iscosh)
+; -----------------------------------------
+; function sincoshf
+; -----------------------------------------
+_sincoshf:
+ sub sp, #10
+; ../sincoshf.c: 62: else { y=x; sign=0; }
+ ldw y, (0x10, sp)
+ ldw (0x03, sp), y
+ ldw y, (0x0e, sp)
+ ldw (0x01, sp), y
+; ../sincoshf.c: 61: if (x<0.0) { y=-x; sign=1; }
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ ld (0x0a, sp), a
+ jreq 00102$
+ ldw y, (0x10, sp)
+ ldw x, (0x0e, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+ ld a, #0x01
+ ld (0x09, sp), a
+ jra 00103$
+00102$:
+; ../sincoshf.c: 62: else { y=x; sign=0; }
+ ldw y, (0x03, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x05, sp), y
+ clr (0x09, sp)
+00103$:
+; ../sincoshf.c: 64: if ((y>1.0) || iscosh)
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fslt
+ addw sp, #8
+ ld (0x0a, sp), a
+ jrne 00117$
+ tnz (0x12, sp)
+ jrne 00160$
+ jpf 00118$
+00160$:
+00117$:
+; ../sincoshf.c: 66: if(y>YBAR)
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x10
+ push #0x41
+ callf ___fslt
+ addw sp, #8
+ ld (0x0a, sp), a
+ jreq 00110$
+; ../sincoshf.c: 68: w=y-K1;
+ push #0x00
+ push #0x73
+ push #0x31
+ push #0x3f
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+; ../sincoshf.c: 69: if (w>WMAX)
+ pushw x
+ pushw y
+ pushw x
+ pushw y
+ push #0xcf
+ push #0xbd
+ push #0x33
+ push #0x42
+ callf ___fslt
+ addw sp, #8
+ popw y
+ popw x
+ tnz a
+ jreq 00105$
+; ../sincoshf.c: 71: errno=ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../sincoshf.c: 72: z=HUGE_VALF;
+ ldw x, #0xffff
+ ldw (0x07, sp), x
+ ldw x, #0x7f7f
+ ldw (0x05, sp), x
+ jpf 00111$
+00105$:
+; ../sincoshf.c: 76: z=expf(w);
+ pushw x
+ pushw y
+ callf _expf
+ addw sp, #4
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../sincoshf.c: 77: z+=K3*z;
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ push #0x97
+ push #0x08
+ push #0x68
+ push #0x37
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+ jra 00111$
+00110$:
+; ../sincoshf.c: 82: z=expf(y);
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _expf
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../sincoshf.c: 83: w=1.0/z;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fsdiv
+ addw sp, #8
+ exgw x, y
+ ldw (0x07, sp), y
+; ../sincoshf.c: 84: if(!iscosh) w=-w;
+ tnz (0x12, sp)
+ jrne 00108$
+ ldw y, (0x07, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x07, sp), y
+00108$:
+; ../sincoshf.c: 85: z=(z+w)*0.5;
+ ldw y, (0x07, sp)
+ pushw y
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+00111$:
+; ../sincoshf.c: 87: if(sign) z=-z;
+ tnz (0x09, sp)
+ jrne 00164$
+ jpf 00119$
+00164$:
+ ldw y, (0x07, sp)
+ ldw x, (0x05, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x07, sp), y
+ ldw (0x05, sp), x
+ jpf 00119$
+00118$:
+; ../sincoshf.c: 91: if (y<EPS)
+ clrw x
+ pushw x
+ push #0x80
+ push #0x39
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00115$
+; ../sincoshf.c: 92: z=x;
+ ldw y, (0x03, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x05, sp), y
+ jpf 00119$
+00115$:
+; ../sincoshf.c: 95: z=x*x;
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x10, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../sincoshf.c: 96: z=x+x*z*P(z)/Q(z);
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ push #0xea
+ push #0xe6
+ push #0x42
+ push #0xbe
+ callf ___fsmul
+ addw sp, #8
+ push #0xf0
+ push #0x69
+ push #0xe4
+ push #0xc0
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+ push #0x93
+ push #0x4f
+ push #0x2b
+ push #0xc2
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+00119$:
+; ../sincoshf.c: 99: return z;
+ ldw x, (0x07, sp)
+ ldw y, (0x05, sp)
+; ../sincoshf.c: 100: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/sincoshf.lst b/device/lib/stm8-large/sincoshf.lst
new file mode 100644
index 0000000..d8cb8c4
--- /dev/null
+++ b/device/lib/stm8-large/sincoshf.lst
@@ -0,0 +1,367 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module sincoshf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _sincoshf
+ 12 .globl _expf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../sincoshf.c: 56: float sincoshf(float x, bool iscosh)
+ 51 ; -----------------------------------------
+ 52 ; function sincoshf
+ 53 ; -----------------------------------------
+ 000000 54 _sincoshf:
+ 000000 52 0A [ 2] 55 sub sp, #10
+ 56 ; ../sincoshf.c: 62: else { y=x; sign=0; }
+ 000002 16 10 [ 2] 57 ldw y, (0x10, sp)
+ 000004 17 03 [ 2] 58 ldw (0x03, sp), y
+ 000006 16 0E [ 2] 59 ldw y, (0x0e, sp)
+ 000008 17 01 [ 2] 60 ldw (0x01, sp), y
+ 61 ; ../sincoshf.c: 61: if (x<0.0) { y=-x; sign=1; }
+ 00000A 5F [ 1] 62 clrw x
+ 00000B 89 [ 2] 63 pushw x
+ 00000C 5F [ 1] 64 clrw x
+ 00000D 89 [ 2] 65 pushw x
+ 00000E 1E 14 [ 2] 66 ldw x, (0x14, sp)
+ 000010 89 [ 2] 67 pushw x
+ 000011 1E 14 [ 2] 68 ldw x, (0x14, sp)
+ 000013 89 [ 2] 69 pushw x
+ 000014 8Ds00r00r00 [ 5] 70 callf ___fslt
+ 000018 5B 08 [ 2] 71 addw sp, #8
+ 00001A 6B 0A [ 1] 72 ld (0x0a, sp), a
+ 00001C 27 11 [ 1] 73 jreq 00102$
+ 00001E 16 10 [ 2] 74 ldw y, (0x10, sp)
+ 000020 1E 0E [ 2] 75 ldw x, (0x0e, sp)
+ 000022 58 [ 2] 76 sllw x
+ 000023 8C [ 1] 77 ccf
+ 000024 56 [ 2] 78 rrcw x
+ 000025 17 07 [ 2] 79 ldw (0x07, sp), y
+ 000027 1F 05 [ 2] 80 ldw (0x05, sp), x
+ 000029 A6 01 [ 1] 81 ld a, #0x01
+ 00002B 6B 09 [ 1] 82 ld (0x09, sp), a
+ 00002D 20 0A [ 2] 83 jra 00103$
+ 00002F 84 00102$:
+ 85 ; ../sincoshf.c: 62: else { y=x; sign=0; }
+ 00002F 16 03 [ 2] 86 ldw y, (0x03, sp)
+ 000031 17 07 [ 2] 87 ldw (0x07, sp), y
+ 000033 16 01 [ 2] 88 ldw y, (0x01, sp)
+ 000035 17 05 [ 2] 89 ldw (0x05, sp), y
+ 000037 0F 09 [ 1] 90 clr (0x09, sp)
+ 000039 91 00103$:
+ 92 ; ../sincoshf.c: 64: if ((y>1.0) || iscosh)
+ 000039 1E 07 [ 2] 93 ldw x, (0x07, sp)
+ 00003B 89 [ 2] 94 pushw x
+ 00003C 1E 07 [ 2] 95 ldw x, (0x07, sp)
+ 00003E 89 [ 2] 96 pushw x
+ 00003F 5F [ 1] 97 clrw x
+ 000040 89 [ 2] 98 pushw x
+ 000041 4B 80 [ 1] 99 push #0x80
+ 000043 4B 3F [ 1] 100 push #0x3f
+ 000045 8Ds00r00r00 [ 5] 101 callf ___fslt
+ 000049 5B 08 [ 2] 102 addw sp, #8
+ 00004B 6B 0A [ 1] 103 ld (0x0a, sp), a
+ 00004D 26 08 [ 1] 104 jrne 00117$
+ 00004F 0D 12 [ 1] 105 tnz (0x12, sp)
+ 000051 26 04 [ 1] 106 jrne 00160$
+ 000053 ACs00r01r50 [ 2] 107 jpf 00118$
+ 000057 108 00160$:
+ 000057 109 00117$:
+ 110 ; ../sincoshf.c: 66: if(y>YBAR)
+ 000057 1E 07 [ 2] 111 ldw x, (0x07, sp)
+ 000059 89 [ 2] 112 pushw x
+ 00005A 1E 07 [ 2] 113 ldw x, (0x07, sp)
+ 00005C 89 [ 2] 114 pushw x
+ 00005D 5F [ 1] 115 clrw x
+ 00005E 89 [ 2] 116 pushw x
+ 00005F 4B 10 [ 1] 117 push #0x10
+ 000061 4B 41 [ 1] 118 push #0x41
+ 000063 8Ds00r00r00 [ 5] 119 callf ___fslt
+ 000067 5B 08 [ 2] 120 addw sp, #8
+ 000069 6B 0A [ 1] 121 ld (0x0a, sp), a
+ 00006B 27 78 [ 1] 122 jreq 00110$
+ 123 ; ../sincoshf.c: 68: w=y-K1;
+ 00006D 4B 00 [ 1] 124 push #0x00
+ 00006F 4B 73 [ 1] 125 push #0x73
+ 000071 4B 31 [ 1] 126 push #0x31
+ 000073 4B 3F [ 1] 127 push #0x3f
+ 000075 1E 0B [ 2] 128 ldw x, (0x0b, sp)
+ 000077 89 [ 2] 129 pushw x
+ 000078 1E 0B [ 2] 130 ldw x, (0x0b, sp)
+ 00007A 89 [ 2] 131 pushw x
+ 00007B 8Ds00r00r00 [ 5] 132 callf ___fssub
+ 00007F 5B 08 [ 2] 133 addw sp, #8
+ 134 ; ../sincoshf.c: 69: if (w>WMAX)
+ 000081 89 [ 2] 135 pushw x
+ 000082 90 89 [ 2] 136 pushw y
+ 000084 89 [ 2] 137 pushw x
+ 000085 90 89 [ 2] 138 pushw y
+ 000087 4B CF [ 1] 139 push #0xcf
+ 000089 4B BD [ 1] 140 push #0xbd
+ 00008B 4B 33 [ 1] 141 push #0x33
+ 00008D 4B 42 [ 1] 142 push #0x42
+ 00008F 8Ds00r00r00 [ 5] 143 callf ___fslt
+ 000093 5B 08 [ 2] 144 addw sp, #8
+ 000095 90 85 [ 2] 145 popw y
+ 000097 85 [ 2] 146 popw x
+ 000098 4D [ 1] 147 tnz a
+ 000099 27 14 [ 1] 148 jreq 00105$
+ 149 ; ../sincoshf.c: 71: errno=ERANGE;
+ 00009B AE 00 22 [ 2] 150 ldw x, #0x0022
+ 00009E CFu00u00 [ 2] 151 ldw _errno+0, x
+ 152 ; ../sincoshf.c: 72: z=HUGE_VALF;
+ 0000A1 AE FF FF [ 2] 153 ldw x, #0xffff
+ 0000A4 1F 07 [ 2] 154 ldw (0x07, sp), x
+ 0000A6 AE 7F 7F [ 2] 155 ldw x, #0x7f7f
+ 0000A9 1F 05 [ 2] 156 ldw (0x05, sp), x
+ 0000AB ACs00r01r39 [ 2] 157 jpf 00111$
+ 0000AF 158 00105$:
+ 159 ; ../sincoshf.c: 76: z=expf(w);
+ 0000AF 89 [ 2] 160 pushw x
+ 0000B0 90 89 [ 2] 161 pushw y
+ 0000B2 8Ds00r00r00 [ 5] 162 callf _expf
+ 0000B6 5B 04 [ 2] 163 addw sp, #4
+ 0000B8 1F 07 [ 2] 164 ldw (0x07, sp), x
+ 0000BA 17 05 [ 2] 165 ldw (0x05, sp), y
+ 166 ; ../sincoshf.c: 77: z+=K3*z;
+ 0000BC 1E 07 [ 2] 167 ldw x, (0x07, sp)
+ 0000BE 89 [ 2] 168 pushw x
+ 0000BF 1E 07 [ 2] 169 ldw x, (0x07, sp)
+ 0000C1 89 [ 2] 170 pushw x
+ 0000C2 4B 97 [ 1] 171 push #0x97
+ 0000C4 4B 08 [ 1] 172 push #0x08
+ 0000C6 4B 68 [ 1] 173 push #0x68
+ 0000C8 4B 37 [ 1] 174 push #0x37
+ 0000CA 8Ds00r00r00 [ 5] 175 callf ___fsmul
+ 0000CE 5B 08 [ 2] 176 addw sp, #8
+ 0000D0 89 [ 2] 177 pushw x
+ 0000D1 90 89 [ 2] 178 pushw y
+ 0000D3 1E 0B [ 2] 179 ldw x, (0x0b, sp)
+ 0000D5 89 [ 2] 180 pushw x
+ 0000D6 1E 0B [ 2] 181 ldw x, (0x0b, sp)
+ 0000D8 89 [ 2] 182 pushw x
+ 0000D9 8Ds00r00r00 [ 5] 183 callf ___fsadd
+ 0000DD 5B 08 [ 2] 184 addw sp, #8
+ 0000DF 1F 07 [ 2] 185 ldw (0x07, sp), x
+ 0000E1 17 05 [ 2] 186 ldw (0x05, sp), y
+ 0000E3 20 54 [ 2] 187 jra 00111$
+ 0000E5 188 00110$:
+ 189 ; ../sincoshf.c: 82: z=expf(y);
+ 0000E5 1E 07 [ 2] 190 ldw x, (0x07, sp)
+ 0000E7 89 [ 2] 191 pushw x
+ 0000E8 1E 07 [ 2] 192 ldw x, (0x07, sp)
+ 0000EA 89 [ 2] 193 pushw x
+ 0000EB 8Ds00r00r00 [ 5] 194 callf _expf
+ 0000EF 5B 04 [ 2] 195 addw sp, #4
+ 0000F1 1F 03 [ 2] 196 ldw (0x03, sp), x
+ 0000F3 17 01 [ 2] 197 ldw (0x01, sp), y
+ 198 ; ../sincoshf.c: 83: w=1.0/z;
+ 0000F5 1E 03 [ 2] 199 ldw x, (0x03, sp)
+ 0000F7 89 [ 2] 200 pushw x
+ 0000F8 1E 03 [ 2] 201 ldw x, (0x03, sp)
+ 0000FA 89 [ 2] 202 pushw x
+ 0000FB 5F [ 1] 203 clrw x
+ 0000FC 89 [ 2] 204 pushw x
+ 0000FD 4B 80 [ 1] 205 push #0x80
+ 0000FF 4B 3F [ 1] 206 push #0x3f
+ 000101 8Ds00r00r00 [ 5] 207 callf ___fsdiv
+ 000105 5B 08 [ 2] 208 addw sp, #8
+ 000107 51 [ 1] 209 exgw x, y
+ 000108 17 07 [ 2] 210 ldw (0x07, sp), y
+ 211 ; ../sincoshf.c: 84: if(!iscosh) w=-w;
+ 00010A 0D 12 [ 1] 212 tnz (0x12, sp)
+ 00010C 26 07 [ 1] 213 jrne 00108$
+ 00010E 16 07 [ 2] 214 ldw y, (0x07, sp)
+ 000110 58 [ 2] 215 sllw x
+ 000111 8C [ 1] 216 ccf
+ 000112 56 [ 2] 217 rrcw x
+ 000113 17 07 [ 2] 218 ldw (0x07, sp), y
+ 000115 219 00108$:
+ 220 ; ../sincoshf.c: 85: z=(z+w)*0.5;
+ 000115 16 07 [ 2] 221 ldw y, (0x07, sp)
+ 000117 90 89 [ 2] 222 pushw y
+ 000119 89 [ 2] 223 pushw x
+ 00011A 1E 07 [ 2] 224 ldw x, (0x07, sp)
+ 00011C 89 [ 2] 225 pushw x
+ 00011D 1E 07 [ 2] 226 ldw x, (0x07, sp)
+ 00011F 89 [ 2] 227 pushw x
+ 000120 8Ds00r00r00 [ 5] 228 callf ___fsadd
+ 000124 5B 08 [ 2] 229 addw sp, #8
+ 000126 89 [ 2] 230 pushw x
+ 000127 90 89 [ 2] 231 pushw y
+ 000129 5F [ 1] 232 clrw x
+ 00012A 89 [ 2] 233 pushw x
+ 00012B 4B 00 [ 1] 234 push #0x00
+ 00012D 4B 3F [ 1] 235 push #0x3f
+ 00012F 8Ds00r00r00 [ 5] 236 callf ___fsmul
+ 000133 5B 08 [ 2] 237 addw sp, #8
+ 000135 1F 07 [ 2] 238 ldw (0x07, sp), x
+ 000137 17 05 [ 2] 239 ldw (0x05, sp), y
+ 000139 240 00111$:
+ 241 ; ../sincoshf.c: 87: if(sign) z=-z;
+ 000139 0D 09 [ 1] 242 tnz (0x09, sp)
+ 00013B 26 04 [ 1] 243 jrne 00164$
+ 00013D ACs00r02r0B [ 2] 244 jpf 00119$
+ 000141 245 00164$:
+ 000141 16 07 [ 2] 246 ldw y, (0x07, sp)
+ 000143 1E 05 [ 2] 247 ldw x, (0x05, sp)
+ 000145 58 [ 2] 248 sllw x
+ 000146 8C [ 1] 249 ccf
+ 000147 56 [ 2] 250 rrcw x
+ 000148 17 07 [ 2] 251 ldw (0x07, sp), y
+ 00014A 1F 05 [ 2] 252 ldw (0x05, sp), x
+ 00014C ACs00r02r0B [ 2] 253 jpf 00119$
+ 000150 254 00118$:
+ 255 ; ../sincoshf.c: 91: if (y<EPS)
+ 000150 5F [ 1] 256 clrw x
+ 000151 89 [ 2] 257 pushw x
+ 000152 4B 80 [ 1] 258 push #0x80
+ 000154 4B 39 [ 1] 259 push #0x39
+ 000156 1E 0B [ 2] 260 ldw x, (0x0b, sp)
+ 000158 89 [ 2] 261 pushw x
+ 000159 1E 0B [ 2] 262 ldw x, (0x0b, sp)
+ 00015B 89 [ 2] 263 pushw x
+ 00015C 8Ds00r00r00 [ 5] 264 callf ___fslt
+ 000160 5B 08 [ 2] 265 addw sp, #8
+ 000162 4D [ 1] 266 tnz a
+ 000163 27 0C [ 1] 267 jreq 00115$
+ 268 ; ../sincoshf.c: 92: z=x;
+ 000165 16 03 [ 2] 269 ldw y, (0x03, sp)
+ 000167 17 07 [ 2] 270 ldw (0x07, sp), y
+ 000169 16 01 [ 2] 271 ldw y, (0x01, sp)
+ 00016B 17 05 [ 2] 272 ldw (0x05, sp), y
+ 00016D ACs00r02r0B [ 2] 273 jpf 00119$
+ 000171 274 00115$:
+ 275 ; ../sincoshf.c: 95: z=x*x;
+ 000171 1E 10 [ 2] 276 ldw x, (0x10, sp)
+ 000173 89 [ 2] 277 pushw x
+ 000174 1E 10 [ 2] 278 ldw x, (0x10, sp)
+ 000176 89 [ 2] 279 pushw x
+ 000177 1E 14 [ 2] 280 ldw x, (0x14, sp)
+ 000179 89 [ 2] 281 pushw x
+ 00017A 1E 14 [ 2] 282 ldw x, (0x14, sp)
+ 00017C 89 [ 2] 283 pushw x
+ 00017D 8Ds00r00r00 [ 5] 284 callf ___fsmul
+ 000181 5B 08 [ 2] 285 addw sp, #8
+ 000183 1F 05 [ 2] 286 ldw (0x05, sp), x
+ 000185 17 03 [ 2] 287 ldw (0x03, sp), y
+ 288 ; ../sincoshf.c: 96: z=x+x*z*P(z)/Q(z);
+ 000187 1E 05 [ 2] 289 ldw x, (0x05, sp)
+ 000189 89 [ 2] 290 pushw x
+ 00018A 1E 05 [ 2] 291 ldw x, (0x05, sp)
+ 00018C 89 [ 2] 292 pushw x
+ 00018D 1E 14 [ 2] 293 ldw x, (0x14, sp)
+ 00018F 89 [ 2] 294 pushw x
+ 000190 1E 14 [ 2] 295 ldw x, (0x14, sp)
+ 000192 89 [ 2] 296 pushw x
+ 000193 8Ds00r00r00 [ 5] 297 callf ___fsmul
+ 000197 5B 08 [ 2] 298 addw sp, #8
+ 000199 1F 09 [ 2] 299 ldw (0x09, sp), x
+ 00019B 17 07 [ 2] 300 ldw (0x07, sp), y
+ 00019D 1E 05 [ 2] 301 ldw x, (0x05, sp)
+ 00019F 89 [ 2] 302 pushw x
+ 0001A0 1E 05 [ 2] 303 ldw x, (0x05, sp)
+ 0001A2 89 [ 2] 304 pushw x
+ 0001A3 4B EA [ 1] 305 push #0xea
+ 0001A5 4B E6 [ 1] 306 push #0xe6
+ 0001A7 4B 42 [ 1] 307 push #0x42
+ 0001A9 4B BE [ 1] 308 push #0xbe
+ 0001AB 8Ds00r00r00 [ 5] 309 callf ___fsmul
+ 0001AF 5B 08 [ 2] 310 addw sp, #8
+ 0001B1 4B F0 [ 1] 311 push #0xf0
+ 0001B3 4B 69 [ 1] 312 push #0x69
+ 0001B5 4B E4 [ 1] 313 push #0xe4
+ 0001B7 4B C0 [ 1] 314 push #0xc0
+ 0001B9 89 [ 2] 315 pushw x
+ 0001BA 90 89 [ 2] 316 pushw y
+ 0001BC 8Ds00r00r00 [ 5] 317 callf ___fsadd
+ 0001C0 5B 08 [ 2] 318 addw sp, #8
+ 0001C2 89 [ 2] 319 pushw x
+ 0001C3 90 89 [ 2] 320 pushw y
+ 0001C5 1E 0D [ 2] 321 ldw x, (0x0d, sp)
+ 0001C7 89 [ 2] 322 pushw x
+ 0001C8 1E 0D [ 2] 323 ldw x, (0x0d, sp)
+ 0001CA 89 [ 2] 324 pushw x
+ 0001CB 8Ds00r00r00 [ 5] 325 callf ___fsmul
+ 0001CF 5B 08 [ 2] 326 addw sp, #8
+ 0001D1 1F 09 [ 2] 327 ldw (0x09, sp), x
+ 0001D3 17 07 [ 2] 328 ldw (0x07, sp), y
+ 0001D5 4B 93 [ 1] 329 push #0x93
+ 0001D7 4B 4F [ 1] 330 push #0x4f
+ 0001D9 4B 2B [ 1] 331 push #0x2b
+ 0001DB 4B C2 [ 1] 332 push #0xc2
+ 0001DD 1E 09 [ 2] 333 ldw x, (0x09, sp)
+ 0001DF 89 [ 2] 334 pushw x
+ 0001E0 1E 09 [ 2] 335 ldw x, (0x09, sp)
+ 0001E2 89 [ 2] 336 pushw x
+ 0001E3 8Ds00r00r00 [ 5] 337 callf ___fsadd
+ 0001E7 5B 08 [ 2] 338 addw sp, #8
+ 0001E9 89 [ 2] 339 pushw x
+ 0001EA 90 89 [ 2] 340 pushw y
+ 0001EC 1E 0D [ 2] 341 ldw x, (0x0d, sp)
+ 0001EE 89 [ 2] 342 pushw x
+ 0001EF 1E 0D [ 2] 343 ldw x, (0x0d, sp)
+ 0001F1 89 [ 2] 344 pushw x
+ 0001F2 8Ds00r00r00 [ 5] 345 callf ___fsdiv
+ 0001F6 5B 08 [ 2] 346 addw sp, #8
+ 0001F8 89 [ 2] 347 pushw x
+ 0001F9 90 89 [ 2] 348 pushw y
+ 0001FB 1E 14 [ 2] 349 ldw x, (0x14, sp)
+ 0001FD 89 [ 2] 350 pushw x
+ 0001FE 1E 14 [ 2] 351 ldw x, (0x14, sp)
+ 000200 89 [ 2] 352 pushw x
+ 000201 8Ds00r00r00 [ 5] 353 callf ___fsadd
+ 000205 5B 08 [ 2] 354 addw sp, #8
+ 000207 1F 07 [ 2] 355 ldw (0x07, sp), x
+ 000209 17 05 [ 2] 356 ldw (0x05, sp), y
+ 00020B 357 00119$:
+ 358 ; ../sincoshf.c: 99: return z;
+ 00020B 1E 07 [ 2] 359 ldw x, (0x07, sp)
+ 00020D 16 05 [ 2] 360 ldw y, (0x05, sp)
+ 361 ; ../sincoshf.c: 100: }
+ 00020F 5B 0A [ 2] 362 addw sp, #10
+ 000211 87 [ 5] 363 retf
+ 364 .area CODE
+ 365 .area CONST
+ 366 .area INITIALIZER
+ 367 .area CABS (ABS)
diff --git a/device/lib/stm8-large/sincoshf.rel b/device/lib/stm8-large/sincoshf.rel
new file mode 100644
index 0000000..687f3b2
--- /dev/null
+++ b/device/lib/stm8-large/sincoshf.rel
@@ -0,0 +1,146 @@
+XH3
+H B areas 9 global symbols
+M sincoshf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _errno Ref000000
+S _expf Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 212 flags 0 addr 0
+S _sincoshf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 16 10 17 03 16 0E 17 01 5F 89 5F
+R 00 00 00 09
+T 00 00 0D 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 15 00 00 00 5B 08 6B 0A 27 11 16 10 1E 0E
+R 00 00 00 09 82 03 00 04
+T 00 00 22 58 8C 56 17 07 1F 05 A6 01 6B 09 20 0A
+R 00 00 00 09
+T 00 00 2F
+R 00 00 00 09
+T 00 00 2F 16 03 17 07 16 01 17 05 0F 09
+R 00 00 00 09
+T 00 00 39
+R 00 00 00 09
+T 00 00 39 1E 07 89 1E 07 89 5F 89 4B 80 4B 3F 8D
+R 00 00 00 09
+T 00 00 46 00 00 00 5B 08 6B 0A 26 08 0D 12 26 04
+R 00 00 00 09 82 03 00 04
+T 00 00 53 AC 00 01 50
+R 00 00 00 09 80 04 00 09
+T 00 00 57
+R 00 00 00 09
+T 00 00 57
+R 00 00 00 09
+T 00 00 57 1E 07 89 1E 07 89 5F 89 4B 10 4B 41 8D
+R 00 00 00 09
+T 00 00 64 00 00 00 5B 08 6B 0A 27 78 4B 00 4B 73
+R 00 00 00 09 82 03 00 04
+T 00 00 71 4B 31 4B 3F 1E 0B 89 1E 0B 89 8D
+R 00 00 00 09
+T 00 00 7C 00 00 00 5B 08 89 90 89 89 90 89 4B CF
+R 00 00 00 09 82 03 00 00
+T 00 00 89 4B BD 4B 33 4B 42 8D 00 00 00 5B 08 90
+R 00 00 00 09 82 0A 00 04
+T 00 00 96 85 85 4D 27 14 AE 00 22 CF 00 00 AE
+R 00 00 00 09 12 0C 00 02
+T 00 00 A2 FF FF 1F 07 AE 7F 7F 1F 05 AC
+R 00 00 00 09
+T 00 00 AC 00 01 39
+R 00 00 00 09 80 03 00 09
+T 00 00 AF
+R 00 00 00 09
+T 00 00 AF 89 90 89 8D 00 00 00 5B 04 1F 07 17 05
+R 00 00 00 09 82 07 00 03
+T 00 00 BC 1E 07 89 1E 07 89 4B 97 4B 08 4B 68 4B
+R 00 00 00 09
+T 00 00 C9 37 8D 00 00 00 5B 08 89 90 89 1E 0B 89
+R 00 00 00 09 82 05 00 01
+T 00 00 D6 1E 0B 89 8D 00 00 00 5B 08 1F 07 17 05
+R 00 00 00 09 82 07 00 06
+T 00 00 E3 20 54
+R 00 00 00 09
+T 00 00 E5
+R 00 00 00 09
+T 00 00 E5 1E 07 89 1E 07 89 8D 00 00 00 5B 04 1F
+R 00 00 00 09 82 0A 00 03
+T 00 00 F2 03 17 01 1E 03 89 1E 03 89 5F 89 4B 80
+R 00 00 00 09
+T 00 00 FF 4B 3F 8D 00 00 00 5B 08 51 17 07 0D 12
+R 00 00 00 09 82 06 00 07
+T 00 01 0C 26 07 16 07 58 8C 56 17 07
+R 00 00 00 09
+T 00 01 15
+R 00 00 00 09
+T 00 01 15 16 07 90 89 89 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 01 21 00 00 00 5B 08 89 90 89 5F 89 4B 00 4B
+R 00 00 00 09 82 03 00 06
+T 00 01 2E 3F 8D 00 00 00 5B 08 1F 07 17 05
+R 00 00 00 09 82 05 00 01
+T 00 01 39
+R 00 00 00 09
+T 00 01 39 0D 09 26 04 AC 00 02 0B
+R 00 00 00 09 80 08 00 09
+T 00 01 41
+R 00 00 00 09
+T 00 01 41 16 07 1E 05 58 8C 56 17 07 1F 05 AC
+R 00 00 00 09
+T 00 01 4D 00 02 0B
+R 00 00 00 09 80 03 00 09
+T 00 01 50
+R 00 00 00 09
+T 00 01 50 5F 89 4B 80 4B 39 1E 0B 89 1E 0B 89 8D
+R 00 00 00 09
+T 00 01 5D 00 00 00 5B 08 4D 27 0C 16 03 17 07 16
+R 00 00 00 09 82 03 00 04
+T 00 01 6A 01 17 05 AC 00 02 0B
+R 00 00 00 09 80 07 00 09
+T 00 01 71
+R 00 00 00 09
+T 00 01 71 1E 10 89 1E 10 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 01 7E 00 00 00 5B 08 1F 05 17 03 1E 05 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 8B 05 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 01 94 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 A1 05 89 4B EA 4B E6 4B 42 4B BE 8D
+R 00 00 00 09
+T 00 01 AC 00 00 00 5B 08 4B F0 4B 69 4B E4 4B C0
+R 00 00 00 09 82 03 00 01
+T 00 01 B9 89 90 89 8D 00 00 00 5B 08 89 90 89 1E
+R 00 00 00 09 82 07 00 06
+T 00 01 C6 0D 89 1E 0D 89 8D 00 00 00 5B 08 1F 09
+R 00 00 00 09 82 09 00 01
+T 00 01 D3 17 07 4B 93 4B 4F 4B 2B 4B C2 1E 09 89
+R 00 00 00 09
+T 00 01 E0 1E 09 89 8D 00 00 00 5B 08 89 90 89 1E
+R 00 00 00 09 82 07 00 06
+T 00 01 ED 0D 89 1E 0D 89 8D 00 00 00 5B 08 89 90
+R 00 00 00 09 82 09 00 07
+T 00 01 FA 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 02 02 00 00 00 5B 08 1F 07 17 05
+R 00 00 00 09 82 03 00 06
+T 00 02 0B
+R 00 00 00 09
+T 00 02 0B 1E 07 16 05 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/sincoshf.sym b/device/lib/stm8-large/sincoshf.sym
new file mode 100644
index 0000000..f73efcc
--- /dev/null
+++ b/device/lib/stm8-large/sincoshf.sym
@@ -0,0 +1,35 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ _errno ****** GX
+ _expf ****** GX
+ 9 _sincoshf 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 212 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/sinf.asm b/device/lib/stm8-large/sinf.asm
new file mode 100644
index 0000000..4dd92df
--- /dev/null
+++ b/device/lib/stm8-large/sinf.asm
@@ -0,0 +1,79 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module sinf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _sincosf
+ .globl _sinf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../sinf.c: 36: float sinf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function sinf
+; -----------------------------------------
+_sinf:
+; ../sinf.c: 38: if (x==0.0) return 0.0;
+ ldw x, (0x06, sp)
+ jrne 00102$
+ ldw x, (0x04, sp)
+ sllw x
+ jrne 00102$
+ clrw x
+ clrw y
+ jra 00103$
+00102$:
+; ../sinf.c: 39: return sincosf(x, 0);
+ push #0x00
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _sincosf
+ addw sp, #5
+00103$:
+; ../sinf.c: 40: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/sinf.lst b/device/lib/stm8-large/sinf.lst
new file mode 100644
index 0000000..547c0e7
--- /dev/null
+++ b/device/lib/stm8-large/sinf.lst
@@ -0,0 +1,79 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module sinf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _sincosf
+ 12 .globl _sinf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../sinf.c: 36: float sinf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function sinf
+ 53 ; -----------------------------------------
+ 000000 54 _sinf:
+ 55 ; ../sinf.c: 38: if (x==0.0) return 0.0;
+ 000000 1E 06 [ 2] 56 ldw x, (0x06, sp)
+ 000002 26 0A [ 1] 57 jrne 00102$
+ 000004 1E 04 [ 2] 58 ldw x, (0x04, sp)
+ 000006 58 [ 2] 59 sllw x
+ 000007 26 05 [ 1] 60 jrne 00102$
+ 000009 5F [ 1] 61 clrw x
+ 00000A 90 5F [ 1] 62 clrw y
+ 00000C 20 0E [ 2] 63 jra 00103$
+ 00000E 64 00102$:
+ 65 ; ../sinf.c: 39: return sincosf(x, 0);
+ 00000E 4B 00 [ 1] 66 push #0x00
+ 000010 1E 07 [ 2] 67 ldw x, (0x07, sp)
+ 000012 89 [ 2] 68 pushw x
+ 000013 1E 07 [ 2] 69 ldw x, (0x07, sp)
+ 000015 89 [ 2] 70 pushw x
+ 000016 8Ds00r00r00 [ 5] 71 callf _sincosf
+ 00001A 5B 05 [ 2] 72 addw sp, #5
+ 00001C 73 00103$:
+ 74 ; ../sinf.c: 40: }
+ 00001C 87 [ 5] 75 retf
+ 76 .area CODE
+ 77 .area CONST
+ 78 .area INITIALIZER
+ 79 .area CABS (ABS)
diff --git a/device/lib/stm8-large/sinf.rel b/device/lib/stm8-large/sinf.rel
new file mode 100644
index 0000000..b08a621
--- /dev/null
+++ b/device/lib/stm8-large/sinf.rel
@@ -0,0 +1,34 @@
+XH3
+H B areas 3 global symbols
+M sinf
+O -mstm8
+S _sincosf Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1D flags 0 addr 0
+S _sinf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 06 26 0A 1E 04 58 26 05 5F 90 5F 20
+R 00 00 00 09
+T 00 00 0D 0E
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 4B 00 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 17 00 00 00 5B 05
+R 00 00 00 09 82 03 00 00
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/sinf.sym b/device/lib/stm8-large/sinf.sym
new file mode 100644
index 0000000..8d0b330
--- /dev/null
+++ b/device/lib/stm8-large/sinf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _sincosf ****** GX
+ 9 _sinf 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/sinhf.asm b/device/lib/stm8-large/sinhf.asm
new file mode 100644
index 0000000..5724c65
--- /dev/null
+++ b/device/lib/stm8-large/sinhf.asm
@@ -0,0 +1,68 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module sinhf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _sincoshf
+ .globl _sinhf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../sinhf.c: 36: float sinhf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function sinhf
+; -----------------------------------------
+_sinhf:
+; ../sinhf.c: 38: return sincoshf(x, 0);
+ push #0x00
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _sincoshf
+ addw sp, #5
+; ../sinhf.c: 39: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/sinhf.lst b/device/lib/stm8-large/sinhf.lst
new file mode 100644
index 0000000..5795311
--- /dev/null
+++ b/device/lib/stm8-large/sinhf.lst
@@ -0,0 +1,68 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module sinhf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _sincoshf
+ 12 .globl _sinhf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../sinhf.c: 36: float sinhf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function sinhf
+ 53 ; -----------------------------------------
+ 000000 54 _sinhf:
+ 55 ; ../sinhf.c: 38: return sincoshf(x, 0);
+ 000000 4B 00 [ 1] 56 push #0x00
+ 000002 1E 07 [ 2] 57 ldw x, (0x07, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 07 [ 2] 59 ldw x, (0x07, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf _sincoshf
+ 00000C 5B 05 [ 2] 62 addw sp, #5
+ 63 ; ../sinhf.c: 39: }
+ 00000E 87 [ 5] 64 retf
+ 65 .area CODE
+ 66 .area CONST
+ 67 .area INITIALIZER
+ 68 .area CABS (ABS)
diff --git a/device/lib/stm8-large/sinhf.rel b/device/lib/stm8-large/sinhf.rel
new file mode 100644
index 0000000..5d917ac
--- /dev/null
+++ b/device/lib/stm8-large/sinhf.rel
@@ -0,0 +1,24 @@
+XH3
+H B areas 3 global symbols
+M sinhf
+O -mstm8
+S .__.ABS. Def000000
+S _sincoshf Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size F flags 0 addr 0
+S _sinhf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 4B 00 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 05 87
+R 00 00 00 09 82 03 00 01
diff --git a/device/lib/stm8-large/sinhf.sym b/device/lib/stm8-large/sinhf.sym
new file mode 100644
index 0000000..cd6e543
--- /dev/null
+++ b/device/lib/stm8-large/sinhf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _sincoshf ****** GX
+ 9 _sinhf 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/sprintf.asm b/device/lib/stm8-large/sprintf.asm
new file mode 100644
index 0000000..342a5fb
--- /dev/null
+++ b/device/lib/stm8-large/sprintf.asm
@@ -0,0 +1,127 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module sprintf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl __print_format
+ .globl _vsprintf
+ .globl _sprintf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../sprintf.c: 34: put_char_to_string (char c, void* p) _REENTRANT
+; -----------------------------------------
+; function put_char_to_string
+; -----------------------------------------
+_put_char_to_string:
+ sub sp, #2
+; ../sprintf.c: 36: char **buf = (char **)p;
+ ldw y, (0x07, sp)
+; ../sprintf.c: 37: *(*buf)++ = c;
+ ldw x, y
+ ldw x, (x)
+ ldw (0x01, sp), x
+ incw x
+ ldw (y), x
+ ldw x, (0x01, sp)
+ ld a, (0x06, sp)
+ ld (x), a
+; ../sprintf.c: 38: }
+ addw sp, #2
+ retf
+; ../sprintf.c: 41: vsprintf (char *buf, const char *format, va_list ap)
+; -----------------------------------------
+; function vsprintf
+; -----------------------------------------
+_vsprintf:
+; ../sprintf.c: 44: i = _print_format (put_char_to_string, &buf, format, ap);
+ ldw x, sp
+ addw x, #4
+ ldw y, (0x08, sp)
+ pushw y
+ ldw y, (0x08, sp)
+ pushw y
+ pushw x
+ push #<(_put_char_to_string + 0)
+ push #((_put_char_to_string + 0) >> 8)
+ push #((_put_char_to_string + 0) >> 16)
+ callf __print_format
+ addw sp, #9
+; ../sprintf.c: 45: *buf = 0;
+ ldw y, (0x04, sp)
+ clr (y)
+; ../sprintf.c: 46: return i;
+; ../sprintf.c: 47: }
+ retf
+; ../sprintf.c: 50: sprintf (char *buf, const char *format, ...)
+; -----------------------------------------
+; function sprintf
+; -----------------------------------------
+_sprintf:
+; ../sprintf.c: 55: va_start (arg, format);
+ ldw x, sp
+ addw x, #6
+ incw x
+ incw x
+ exgw x, y
+; ../sprintf.c: 56: i = _print_format (put_char_to_string, &buf, format, arg);
+ ldw x, sp
+ addw x, #4
+ pushw y
+ ldw y, (0x08, sp)
+ pushw y
+ pushw x
+ push #<(_put_char_to_string + 0)
+ push #((_put_char_to_string + 0) >> 8)
+ push #((_put_char_to_string + 0) >> 16)
+ callf __print_format
+ addw sp, #9
+; ../sprintf.c: 57: *buf = 0;
+ ldw y, (0x04, sp)
+ clr (y)
+; ../sprintf.c: 60: return i;
+; ../sprintf.c: 61: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/sprintf.lst b/device/lib/stm8-large/sprintf.lst
new file mode 100644
index 0000000..4c52c01
--- /dev/null
+++ b/device/lib/stm8-large/sprintf.lst
@@ -0,0 +1,127 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module sprintf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl __print_format
+ 12 .globl _vsprintf
+ 13 .globl _sprintf
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../sprintf.c: 34: put_char_to_string (char c, void* p) _REENTRANT
+ 52 ; -----------------------------------------
+ 53 ; function put_char_to_string
+ 54 ; -----------------------------------------
+ 000000 55 _put_char_to_string:
+ 000000 52 02 [ 2] 56 sub sp, #2
+ 57 ; ../sprintf.c: 36: char **buf = (char **)p;
+ 000002 16 07 [ 2] 58 ldw y, (0x07, sp)
+ 59 ; ../sprintf.c: 37: *(*buf)++ = c;
+ 000004 93 [ 1] 60 ldw x, y
+ 000005 FE [ 2] 61 ldw x, (x)
+ 000006 1F 01 [ 2] 62 ldw (0x01, sp), x
+ 000008 5C [ 1] 63 incw x
+ 000009 90 FF [ 2] 64 ldw (y), x
+ 00000B 1E 01 [ 2] 65 ldw x, (0x01, sp)
+ 00000D 7B 06 [ 1] 66 ld a, (0x06, sp)
+ 00000F F7 [ 1] 67 ld (x), a
+ 68 ; ../sprintf.c: 38: }
+ 000010 5B 02 [ 2] 69 addw sp, #2
+ 000012 87 [ 5] 70 retf
+ 71 ; ../sprintf.c: 41: vsprintf (char *buf, const char *format, va_list ap)
+ 72 ; -----------------------------------------
+ 73 ; function vsprintf
+ 74 ; -----------------------------------------
+ 000013 75 _vsprintf:
+ 76 ; ../sprintf.c: 44: i = _print_format (put_char_to_string, &buf, format, ap);
+ 000013 96 [ 1] 77 ldw x, sp
+ 000014 1C 00 04 [ 2] 78 addw x, #4
+ 000017 16 08 [ 2] 79 ldw y, (0x08, sp)
+ 000019 90 89 [ 2] 80 pushw y
+ 00001B 16 08 [ 2] 81 ldw y, (0x08, sp)
+ 00001D 90 89 [ 2] 82 pushw y
+ 00001F 89 [ 2] 83 pushw x
+ 000020 4Br00 [ 1] 84 push #<(_put_char_to_string + 0)
+ 000022 4Bs00 [ 1] 85 push #((_put_char_to_string + 0) >> 8)
+ 000024 4Bs00 [ 1] 86 push #((_put_char_to_string + 0) >> 16)
+ 000026 8Ds00r00r00 [ 5] 87 callf __print_format
+ 00002A 5B 09 [ 2] 88 addw sp, #9
+ 89 ; ../sprintf.c: 45: *buf = 0;
+ 00002C 16 04 [ 2] 90 ldw y, (0x04, sp)
+ 00002E 90 7F [ 1] 91 clr (y)
+ 92 ; ../sprintf.c: 46: return i;
+ 93 ; ../sprintf.c: 47: }
+ 000030 87 [ 5] 94 retf
+ 95 ; ../sprintf.c: 50: sprintf (char *buf, const char *format, ...)
+ 96 ; -----------------------------------------
+ 97 ; function sprintf
+ 98 ; -----------------------------------------
+ 000031 99 _sprintf:
+ 100 ; ../sprintf.c: 55: va_start (arg, format);
+ 000031 96 [ 1] 101 ldw x, sp
+ 000032 1C 00 06 [ 2] 102 addw x, #6
+ 000035 5C [ 1] 103 incw x
+ 000036 5C [ 1] 104 incw x
+ 000037 51 [ 1] 105 exgw x, y
+ 106 ; ../sprintf.c: 56: i = _print_format (put_char_to_string, &buf, format, arg);
+ 000038 96 [ 1] 107 ldw x, sp
+ 000039 1C 00 04 [ 2] 108 addw x, #4
+ 00003C 90 89 [ 2] 109 pushw y
+ 00003E 16 08 [ 2] 110 ldw y, (0x08, sp)
+ 000040 90 89 [ 2] 111 pushw y
+ 000042 89 [ 2] 112 pushw x
+ 000043 4Br00 [ 1] 113 push #<(_put_char_to_string + 0)
+ 000045 4Bs00 [ 1] 114 push #((_put_char_to_string + 0) >> 8)
+ 000047 4Bs00 [ 1] 115 push #((_put_char_to_string + 0) >> 16)
+ 000049 8Ds00r00r00 [ 5] 116 callf __print_format
+ 00004D 5B 09 [ 2] 117 addw sp, #9
+ 118 ; ../sprintf.c: 57: *buf = 0;
+ 00004F 16 04 [ 2] 119 ldw y, (0x04, sp)
+ 000051 90 7F [ 1] 120 clr (y)
+ 121 ; ../sprintf.c: 60: return i;
+ 122 ; ../sprintf.c: 61: }
+ 000053 87 [ 5] 123 retf
+ 124 .area CODE
+ 125 .area CONST
+ 126 .area INITIALIZER
+ 127 .area CABS (ABS)
diff --git a/device/lib/stm8-large/sprintf.rel b/device/lib/stm8-large/sprintf.rel
new file mode 100644
index 0000000..b36c719
--- /dev/null
+++ b/device/lib/stm8-large/sprintf.rel
@@ -0,0 +1,45 @@
+XH3
+H B areas 4 global symbols
+M sprintf
+O -mstm8
+S __print_format Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 54 flags 0 addr 0
+S _vsprintf Def000013
+S _sprintf Def000031
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 02 16 07 93 FE 1F 01 5C 90 FF 1E 01
+R 00 00 00 09
+T 00 00 0D 7B 06 F7 5B 02 87
+R 00 00 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 96 1C 00 04 16 08 90 89 16 08 90 89 89
+R 00 00 00 09
+T 00 00 20 4B 00 00 00 4B 00 00 00 4B
+R 00 00 00 09 F1 09 04 00 09 F1 81 08 00 09
+T 00 00 25 00 00 00 8D 00 00 00 5B 09 16 04 90 7F
+R 00 00 00 09 F3 01 03 00 09 82 07 00 00
+T 00 00 30 87
+R 00 00 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 96 1C 00 06 5C 5C 51 96 1C 00 04 90 89
+R 00 00 00 09
+T 00 00 3E 16 08 90 89 89 4B 00 00 00 4B 00 00 00
+R 00 00 00 09 F1 09 09 00 09 F1 81 0D 00 09
+T 00 00 47 4B 00 00 00 8D 00 00 00 5B 09 16 04 90
+R 00 00 00 09 F3 01 04 00 09 82 08 00 00
+T 00 00 52 7F 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/sprintf.sym b/device/lib/stm8-large/sprintf.sym
new file mode 100644
index 0000000..44e387e
--- /dev/null
+++ b/device/lib/stm8-large/sprintf.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __print_format ****** GX
+ 9 _put_char_to_string 000000 R
+ 9 _sprintf 000031 GR
+ 9 _vsprintf 000013 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 54 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/sqrtf.asm b/device/lib/stm8-large/sqrtf.asm
new file mode 100644
index 0000000..fe3b2cd
--- /dev/null
+++ b/device/lib/stm8-large/sqrtf.asm
@@ -0,0 +1,229 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module sqrtf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _ldexpf
+ .globl _frexpf
+ .globl _sqrtf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../sqrtf.c: 37: float sqrtf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function sqrtf
+; -----------------------------------------
+_sqrtf:
+ sub sp, #10
+; ../sqrtf.c: 42: if (x==0.0) return x;
+ ldw x, (0x10, sp)
+ jrne 00107$
+ ldw x, (0x0e, sp)
+ sllw x
+ jrne 00107$
+ ldw x, (0x10, sp)
+ ldw y, (0x0e, sp)
+ jpf 00111$
+00107$:
+; ../sqrtf.c: 43: else if (x==1.0) return 1.0;
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fseq
+ addw sp, #8
+ tnz a
+ jreq 00104$
+ clrw x
+ ldw y, #0x3f80
+ jpf 00111$
+00104$:
+; ../sqrtf.c: 44: else if (x<0.0)
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00108$
+; ../sqrtf.c: 46: errno=EDOM;
+ ldw x, #0x0021
+ ldw _errno+0, x
+; ../sqrtf.c: 47: return 0.0;
+ clrw x
+ clrw y
+ jpf 00111$
+00108$:
+; ../sqrtf.c: 49: f=frexpf(x, &n);
+ ldw x, sp
+ incw x
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf _frexpf
+ addw sp, #6
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../sqrtf.c: 50: y=0.41731+0.59016*f; /*Educated guess*/
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ push #0xba
+ push #0x14
+ push #0x17
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ push #0xa8
+ push #0xa9
+ push #0xd5
+ push #0x3e
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../sqrtf.c: 52: y+=f/y;
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+; ../sqrtf.c: 53: y=ldexpf(y, -2) + f/y; /*Faster version of 0.25 * y + f/y*/
+ pushw x
+ pushw y
+ push #0xfe
+ push #0xff
+ pushw x
+ pushw y
+ callf _ldexpf
+ addw sp, #6
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ popw y
+ pushw y
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../sqrtf.c: 55: if (n&1)
+ ld a, (0x02, sp)
+ srl a
+ jrnc 00110$
+; ../sqrtf.c: 57: y*=0.7071067812;
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0xf3
+ push #0x04
+ push #0x35
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../sqrtf.c: 58: ++n;
+ ldw x, (0x01, sp)
+ incw x
+ ldw (0x01, sp), x
+00110$:
+; ../sqrtf.c: 60: return ldexpf(y, n/2);
+ push #0x02
+ push #0x00
+ ldw x, (0x03, sp)
+ pushw x
+ callf __divsint
+ addw sp, #4
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf _ldexpf
+ addw sp, #6
+00111$:
+; ../sqrtf.c: 61: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/sqrtf.lst b/device/lib/stm8-large/sqrtf.lst
new file mode 100644
index 0000000..8abb11d
--- /dev/null
+++ b/device/lib/stm8-large/sqrtf.lst
@@ -0,0 +1,229 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module sqrtf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _ldexpf
+ 12 .globl _frexpf
+ 13 .globl _sqrtf
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../sqrtf.c: 37: float sqrtf(float x) _FLOAT_FUNC_REENTRANT
+ 52 ; -----------------------------------------
+ 53 ; function sqrtf
+ 54 ; -----------------------------------------
+ 000000 55 _sqrtf:
+ 000000 52 0A [ 2] 56 sub sp, #10
+ 57 ; ../sqrtf.c: 42: if (x==0.0) return x;
+ 000002 1E 10 [ 2] 58 ldw x, (0x10, sp)
+ 000004 26 0D [ 1] 59 jrne 00107$
+ 000006 1E 0E [ 2] 60 ldw x, (0x0e, sp)
+ 000008 58 [ 2] 61 sllw x
+ 000009 26 08 [ 1] 62 jrne 00107$
+ 00000B 1E 10 [ 2] 63 ldw x, (0x10, sp)
+ 00000D 16 0E [ 2] 64 ldw y, (0x0e, sp)
+ 00000F ACs00r01r21 [ 2] 65 jpf 00111$
+ 000013 66 00107$:
+ 67 ; ../sqrtf.c: 43: else if (x==1.0) return 1.0;
+ 000013 5F [ 1] 68 clrw x
+ 000014 89 [ 2] 69 pushw x
+ 000015 4B 80 [ 1] 70 push #0x80
+ 000017 4B 3F [ 1] 71 push #0x3f
+ 000019 1E 14 [ 2] 72 ldw x, (0x14, sp)
+ 00001B 89 [ 2] 73 pushw x
+ 00001C 1E 14 [ 2] 74 ldw x, (0x14, sp)
+ 00001E 89 [ 2] 75 pushw x
+ 00001F 8Ds00r00r00 [ 5] 76 callf ___fseq
+ 000023 5B 08 [ 2] 77 addw sp, #8
+ 000025 4D [ 1] 78 tnz a
+ 000026 27 09 [ 1] 79 jreq 00104$
+ 000028 5F [ 1] 80 clrw x
+ 000029 90 AE 3F 80 [ 2] 81 ldw y, #0x3f80
+ 00002D ACs00r01r21 [ 2] 82 jpf 00111$
+ 000031 83 00104$:
+ 84 ; ../sqrtf.c: 44: else if (x<0.0)
+ 000031 5F [ 1] 85 clrw x
+ 000032 89 [ 2] 86 pushw x
+ 000033 5F [ 1] 87 clrw x
+ 000034 89 [ 2] 88 pushw x
+ 000035 1E 14 [ 2] 89 ldw x, (0x14, sp)
+ 000037 89 [ 2] 90 pushw x
+ 000038 1E 14 [ 2] 91 ldw x, (0x14, sp)
+ 00003A 89 [ 2] 92 pushw x
+ 00003B 8Ds00r00r00 [ 5] 93 callf ___fslt
+ 00003F 5B 08 [ 2] 94 addw sp, #8
+ 000041 4D [ 1] 95 tnz a
+ 000042 27 0D [ 1] 96 jreq 00108$
+ 97 ; ../sqrtf.c: 46: errno=EDOM;
+ 000044 AE 00 21 [ 2] 98 ldw x, #0x0021
+ 000047 CFu00u00 [ 2] 99 ldw _errno+0, x
+ 100 ; ../sqrtf.c: 47: return 0.0;
+ 00004A 5F [ 1] 101 clrw x
+ 00004B 90 5F [ 1] 102 clrw y
+ 00004D ACs00r01r21 [ 2] 103 jpf 00111$
+ 000051 104 00108$:
+ 105 ; ../sqrtf.c: 49: f=frexpf(x, &n);
+ 000051 96 [ 1] 106 ldw x, sp
+ 000052 5C [ 1] 107 incw x
+ 000053 89 [ 2] 108 pushw x
+ 000054 1E 12 [ 2] 109 ldw x, (0x12, sp)
+ 000056 89 [ 2] 110 pushw x
+ 000057 1E 12 [ 2] 111 ldw x, (0x12, sp)
+ 000059 89 [ 2] 112 pushw x
+ 00005A 8Ds00r00r00 [ 5] 113 callf _frexpf
+ 00005E 5B 06 [ 2] 114 addw sp, #6
+ 000060 1F 05 [ 2] 115 ldw (0x05, sp), x
+ 000062 17 03 [ 2] 116 ldw (0x03, sp), y
+ 117 ; ../sqrtf.c: 50: y=0.41731+0.59016*f; /*Educated guess*/
+ 000064 1E 05 [ 2] 118 ldw x, (0x05, sp)
+ 000066 89 [ 2] 119 pushw x
+ 000067 1E 05 [ 2] 120 ldw x, (0x05, sp)
+ 000069 89 [ 2] 121 pushw x
+ 00006A 4B BA [ 1] 122 push #0xba
+ 00006C 4B 14 [ 1] 123 push #0x14
+ 00006E 4B 17 [ 1] 124 push #0x17
+ 000070 4B 3F [ 1] 125 push #0x3f
+ 000072 8Ds00r00r00 [ 5] 126 callf ___fsmul
+ 000076 5B 08 [ 2] 127 addw sp, #8
+ 000078 4B A8 [ 1] 128 push #0xa8
+ 00007A 4B A9 [ 1] 129 push #0xa9
+ 00007C 4B D5 [ 1] 130 push #0xd5
+ 00007E 4B 3E [ 1] 131 push #0x3e
+ 000080 89 [ 2] 132 pushw x
+ 000081 90 89 [ 2] 133 pushw y
+ 000083 8Ds00r00r00 [ 5] 134 callf ___fsadd
+ 000087 5B 08 [ 2] 135 addw sp, #8
+ 000089 1F 09 [ 2] 136 ldw (0x09, sp), x
+ 00008B 17 07 [ 2] 137 ldw (0x07, sp), y
+ 138 ; ../sqrtf.c: 52: y+=f/y;
+ 00008D 1E 09 [ 2] 139 ldw x, (0x09, sp)
+ 00008F 89 [ 2] 140 pushw x
+ 000090 1E 09 [ 2] 141 ldw x, (0x09, sp)
+ 000092 89 [ 2] 142 pushw x
+ 000093 1E 09 [ 2] 143 ldw x, (0x09, sp)
+ 000095 89 [ 2] 144 pushw x
+ 000096 1E 09 [ 2] 145 ldw x, (0x09, sp)
+ 000098 89 [ 2] 146 pushw x
+ 000099 8Ds00r00r00 [ 5] 147 callf ___fsdiv
+ 00009D 5B 08 [ 2] 148 addw sp, #8
+ 00009F 89 [ 2] 149 pushw x
+ 0000A0 90 89 [ 2] 150 pushw y
+ 0000A2 1E 0D [ 2] 151 ldw x, (0x0d, sp)
+ 0000A4 89 [ 2] 152 pushw x
+ 0000A5 1E 0D [ 2] 153 ldw x, (0x0d, sp)
+ 0000A7 89 [ 2] 154 pushw x
+ 0000A8 8Ds00r00r00 [ 5] 155 callf ___fsadd
+ 0000AC 5B 08 [ 2] 156 addw sp, #8
+ 157 ; ../sqrtf.c: 53: y=ldexpf(y, -2) + f/y; /*Faster version of 0.25 * y + f/y*/
+ 0000AE 89 [ 2] 158 pushw x
+ 0000AF 90 89 [ 2] 159 pushw y
+ 0000B1 4B FE [ 1] 160 push #0xfe
+ 0000B3 4B FF [ 1] 161 push #0xff
+ 0000B5 89 [ 2] 162 pushw x
+ 0000B6 90 89 [ 2] 163 pushw y
+ 0000B8 8Ds00r00r00 [ 5] 164 callf _ldexpf
+ 0000BC 5B 06 [ 2] 165 addw sp, #6
+ 0000BE 1F 0D [ 2] 166 ldw (0x0d, sp), x
+ 0000C0 17 0B [ 2] 167 ldw (0x0b, sp), y
+ 0000C2 90 85 [ 2] 168 popw y
+ 0000C4 90 89 [ 2] 169 pushw y
+ 0000C6 1E 09 [ 2] 170 ldw x, (0x09, sp)
+ 0000C8 89 [ 2] 171 pushw x
+ 0000C9 1E 09 [ 2] 172 ldw x, (0x09, sp)
+ 0000CB 89 [ 2] 173 pushw x
+ 0000CC 8Ds00r00r00 [ 5] 174 callf ___fsdiv
+ 0000D0 5B 08 [ 2] 175 addw sp, #8
+ 0000D2 89 [ 2] 176 pushw x
+ 0000D3 90 89 [ 2] 177 pushw y
+ 0000D5 1E 0D [ 2] 178 ldw x, (0x0d, sp)
+ 0000D7 89 [ 2] 179 pushw x
+ 0000D8 1E 0D [ 2] 180 ldw x, (0x0d, sp)
+ 0000DA 89 [ 2] 181 pushw x
+ 0000DB 8Ds00r00r00 [ 5] 182 callf ___fsadd
+ 0000DF 5B 08 [ 2] 183 addw sp, #8
+ 0000E1 1F 09 [ 2] 184 ldw (0x09, sp), x
+ 0000E3 17 07 [ 2] 185 ldw (0x07, sp), y
+ 186 ; ../sqrtf.c: 55: if (n&1)
+ 0000E5 7B 02 [ 1] 187 ld a, (0x02, sp)
+ 0000E7 44 [ 1] 188 srl a
+ 0000E8 24 1D [ 1] 189 jrnc 00110$
+ 190 ; ../sqrtf.c: 57: y*=0.7071067812;
+ 0000EA 1E 09 [ 2] 191 ldw x, (0x09, sp)
+ 0000EC 89 [ 2] 192 pushw x
+ 0000ED 1E 09 [ 2] 193 ldw x, (0x09, sp)
+ 0000EF 89 [ 2] 194 pushw x
+ 0000F0 4B F3 [ 1] 195 push #0xf3
+ 0000F2 4B 04 [ 1] 196 push #0x04
+ 0000F4 4B 35 [ 1] 197 push #0x35
+ 0000F6 4B 3F [ 1] 198 push #0x3f
+ 0000F8 8Ds00r00r00 [ 5] 199 callf ___fsmul
+ 0000FC 5B 08 [ 2] 200 addw sp, #8
+ 0000FE 1F 09 [ 2] 201 ldw (0x09, sp), x
+ 000100 17 07 [ 2] 202 ldw (0x07, sp), y
+ 203 ; ../sqrtf.c: 58: ++n;
+ 000102 1E 01 [ 2] 204 ldw x, (0x01, sp)
+ 000104 5C [ 1] 205 incw x
+ 000105 1F 01 [ 2] 206 ldw (0x01, sp), x
+ 000107 207 00110$:
+ 208 ; ../sqrtf.c: 60: return ldexpf(y, n/2);
+ 000107 4B 02 [ 1] 209 push #0x02
+ 000109 4B 00 [ 1] 210 push #0x00
+ 00010B 1E 03 [ 2] 211 ldw x, (0x03, sp)
+ 00010D 89 [ 2] 212 pushw x
+ 00010E 8Ds00r00r00 [ 5] 213 callf __divsint
+ 000112 5B 04 [ 2] 214 addw sp, #4
+ 000114 89 [ 2] 215 pushw x
+ 000115 1E 0B [ 2] 216 ldw x, (0x0b, sp)
+ 000117 89 [ 2] 217 pushw x
+ 000118 1E 0B [ 2] 218 ldw x, (0x0b, sp)
+ 00011A 89 [ 2] 219 pushw x
+ 00011B 8Ds00r00r00 [ 5] 220 callf _ldexpf
+ 00011F 5B 06 [ 2] 221 addw sp, #6
+ 000121 222 00111$:
+ 223 ; ../sqrtf.c: 61: }
+ 000121 5B 0A [ 2] 224 addw sp, #10
+ 000123 87 [ 5] 225 retf
+ 226 .area CODE
+ 227 .area CONST
+ 228 .area INITIALIZER
+ 229 .area CABS (ABS)
diff --git a/device/lib/stm8-large/sqrtf.rel b/device/lib/stm8-large/sqrtf.rel
new file mode 100644
index 0000000..e0651cd
--- /dev/null
+++ b/device/lib/stm8-large/sqrtf.rel
@@ -0,0 +1,92 @@
+XH3
+H B areas B global symbols
+M sqrtf
+O -mstm8
+S ___fsmul Ref000000
+S _errno Ref000000
+S ___fseq Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _ldexpf Ref000000
+S _frexpf Ref000000
+S ___fsdiv Ref000000
+S __divsint Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 124 flags 0 addr 0
+S _sqrtf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 1E 10 26 0D 1E 0E 58 26 08 1E 10
+R 00 00 00 09
+T 00 00 0D 16 0E AC 00 01 21
+R 00 00 00 09 80 06 00 09
+T 00 00 13
+R 00 00 00 09
+T 00 00 13 5F 89 4B 80 4B 3F 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 20 00 00 00 5B 08 4D 27 09 5F 90 AE 3F 80
+R 00 00 00 09 82 03 00 02
+T 00 00 2D AC 00 01 21
+R 00 00 00 09 80 04 00 09
+T 00 00 31
+R 00 00 00 09
+T 00 00 31 5F 89 5F 89 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 3C 00 00 00 5B 08 4D 27 0D AE 00 21 CF
+R 00 00 00 09 82 03 00 03
+T 00 00 48 00 00 5F 90 5F AC 00 01 21
+R 00 00 00 09 12 03 00 01 80 09 00 09
+T 00 00 51
+R 00 00 00 09
+T 00 00 51 96 5C 89 1E 12 89 1E 12 89 8D
+R 00 00 00 09
+T 00 00 5B 00 00 00 5B 06 1F 05 17 03 1E 05 89 1E
+R 00 00 00 09 82 03 00 07
+T 00 00 68 05 89 4B BA 4B 14 4B 17 4B 3F 8D
+R 00 00 00 09
+T 00 00 73 00 00 00 5B 08 4B A8 4B A9 4B D5 4B 3E
+R 00 00 00 09 82 03 00 00
+T 00 00 80 89 90 89 8D 00 00 00 5B 08 1F 09 17 07
+R 00 00 00 09 82 07 00 05
+T 00 00 8D 1E 09 89 1E 09 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 00 9A 00 00 00 5B 08 89 90 89 1E 0D 89 1E 0D
+R 00 00 00 09 82 03 00 08
+T 00 00 A7 89 8D 00 00 00 5B 08 89 90 89 4B FE 4B
+R 00 00 00 09 82 05 00 05
+T 00 00 B4 FF 89 90 89 8D 00 00 00 5B 06 1F 0D 17
+R 00 00 00 09 82 08 00 06
+T 00 00 C1 0B 90 85 90 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 00 CD 00 00 00 5B 08 89 90 89 1E 0D 89 1E 0D
+R 00 00 00 09 82 03 00 08
+T 00 00 DA 89 8D 00 00 00 5B 08 1F 09 17 07 7B 02
+R 00 00 00 09 82 05 00 05
+T 00 00 E7 44 24 1D 1E 09 89 1E 09 89 4B F3 4B 04
+R 00 00 00 09
+T 00 00 F4 4B 35 4B 3F 8D 00 00 00 5B 08 1F 09 17
+R 00 00 00 09 82 08 00 00
+T 00 01 01 07 1E 01 5C 1F 01
+R 00 00 00 09
+T 00 01 07
+R 00 00 00 09
+T 00 01 07 4B 02 4B 00 1E 03 89 8D
+R 00 00 00 09
+T 00 01 0F 00 00 00 5B 04 89 1E 0B 89 1E 0B 89 8D
+R 00 00 00 09 82 03 00 09
+T 00 01 1C 00 00 00 5B 06
+R 00 00 00 09 82 03 00 06
+T 00 01 21
+R 00 00 00 09
+T 00 01 21 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/sqrtf.sym b/device/lib/stm8-large/sqrtf.sym
new file mode 100644
index 0000000..bbce94b
--- /dev/null
+++ b/device/lib/stm8-large/sqrtf.sym
@@ -0,0 +1,38 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fseq ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ __divsint ****** GX
+ _errno ****** GX
+ _frexpf ****** GX
+ _ldexpf ****** GX
+ 9 _sqrtf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 124 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/strdup.asm b/device/lib/stm8-large/strdup.asm
new file mode 100644
index 0000000..eb76711
--- /dev/null
+++ b/device/lib/stm8-large/strdup.asm
@@ -0,0 +1,84 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module strdup
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _malloc
+ .globl _strlen
+ .globl _strcpy
+ .globl _strdup
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../strdup.c: 33: char *strdup (const char *s)
+; -----------------------------------------
+; function strdup
+; -----------------------------------------
+_strdup:
+; ../strdup.c: 35: char *r = malloc(strlen(s) + 1);
+ ldw x, (0x04, sp)
+ pushw x
+ callf _strlen
+ addw sp, #2
+ incw x
+ pushw x
+ callf _malloc
+ addw sp, #2
+; ../strdup.c: 36: if (r)
+ tnzw x
+ jreq 00102$
+; ../strdup.c: 37: strcpy(r, s);
+ pushw x
+ ldw y, (0x06, sp)
+ pushw y
+ pushw x
+ callf _strcpy
+ addw sp, #4
+ popw x
+00102$:
+; ../strdup.c: 38: return (r);
+; ../strdup.c: 39: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/strdup.lst b/device/lib/stm8-large/strdup.lst
new file mode 100644
index 0000000..8997409
--- /dev/null
+++ b/device/lib/stm8-large/strdup.lst
@@ -0,0 +1,84 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module strdup
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _malloc
+ 12 .globl _strlen
+ 13 .globl _strcpy
+ 14 .globl _strdup
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area DATA
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../strdup.c: 33: char *strdup (const char *s)
+ 53 ; -----------------------------------------
+ 54 ; function strdup
+ 55 ; -----------------------------------------
+ 000000 56 _strdup:
+ 57 ; ../strdup.c: 35: char *r = malloc(strlen(s) + 1);
+ 000000 1E 04 [ 2] 58 ldw x, (0x04, sp)
+ 000002 89 [ 2] 59 pushw x
+ 000003 8Ds00r00r00 [ 5] 60 callf _strlen
+ 000007 5B 02 [ 2] 61 addw sp, #2
+ 000009 5C [ 1] 62 incw x
+ 00000A 89 [ 2] 63 pushw x
+ 00000B 8Ds00r00r00 [ 5] 64 callf _malloc
+ 00000F 5B 02 [ 2] 65 addw sp, #2
+ 66 ; ../strdup.c: 36: if (r)
+ 000011 5D [ 2] 67 tnzw x
+ 000012 27 0D [ 1] 68 jreq 00102$
+ 69 ; ../strdup.c: 37: strcpy(r, s);
+ 000014 89 [ 2] 70 pushw x
+ 000015 16 06 [ 2] 71 ldw y, (0x06, sp)
+ 000017 90 89 [ 2] 72 pushw y
+ 000019 89 [ 2] 73 pushw x
+ 00001A 8Ds00r00r00 [ 5] 74 callf _strcpy
+ 00001E 5B 04 [ 2] 75 addw sp, #4
+ 000020 85 [ 2] 76 popw x
+ 000021 77 00102$:
+ 78 ; ../strdup.c: 38: return (r);
+ 79 ; ../strdup.c: 39: }
+ 000021 87 [ 5] 80 retf
+ 81 .area CODE
+ 82 .area CONST
+ 83 .area INITIALIZER
+ 84 .area CABS (ABS)
diff --git a/device/lib/stm8-large/strdup.rel b/device/lib/stm8-large/strdup.rel
new file mode 100644
index 0000000..2cb3a0d
--- /dev/null
+++ b/device/lib/stm8-large/strdup.rel
@@ -0,0 +1,32 @@
+XH3
+H B areas 5 global symbols
+M strdup
+O -mstm8
+S _strcpy Ref000000
+S _malloc Ref000000
+S .__.ABS. Def000000
+S _strlen Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 22 flags 0 addr 0
+S _strdup Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 89 8D 00 00 00 5B 02 5C 89 8D
+R 00 00 00 09 82 07 00 03
+T 00 00 0C 00 00 00 5B 02 5D 27 0D 89 16 06 90 89
+R 00 00 00 09 82 03 00 01
+T 00 00 19 89 8D 00 00 00 5B 04 85
+R 00 00 00 09 82 05 00 00
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/strdup.sym b/device/lib/stm8-large/strdup.sym
new file mode 100644
index 0000000..110011b
--- /dev/null
+++ b/device/lib/stm8-large/strdup.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _malloc ****** GX
+ _strcpy ****** GX
+ 9 _strdup 000000 GR
+ _strlen ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 22 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/strndup.asm b/device/lib/stm8-large/strndup.asm
new file mode 100644
index 0000000..3903cf5
--- /dev/null
+++ b/device/lib/stm8-large/strndup.asm
@@ -0,0 +1,104 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module strndup
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _malloc
+ .globl ___memcpy
+ .globl _strlen
+ .globl _strndup
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../strndup.c: 33: char *strndup (const char *s, size_t n)
+; -----------------------------------------
+; function strndup
+; -----------------------------------------
+_strndup:
+ sub sp, #4
+; ../strndup.c: 35: size_t l = strlen (s);
+ ldw x, (0x08, sp)
+ pushw x
+ callf _strlen
+ addw sp, #2
+; ../strndup.c: 36: if (l > n)
+ ldw (0x01, sp), x
+ cpw x, (0x0a, sp)
+ jrule 00102$
+; ../strndup.c: 37: l = n;
+ ldw y, (0x0a, sp)
+ ldw (0x01, sp), y
+00102$:
+; ../strndup.c: 38: char *r = malloc (l + 1);
+ ldw x, (0x01, sp)
+ incw x
+ pushw x
+ callf _malloc
+ addw sp, #2
+; ../strndup.c: 39: if (r)
+ ldw (0x03, sp), x
+ jreq 00104$
+; ../strndup.c: 41: memcpy (r, s, l);
+ ldw y, (0x08, sp)
+ ldw x, (0x03, sp)
+ ld a, (0x02, sp)
+ push a
+ ld a, (0x02, sp)
+ push a
+ pushw y
+ pushw x
+ callf ___memcpy
+ addw sp, #6
+; ../strndup.c: 42: r[l] = 0;
+ ldw x, (0x03, sp)
+ addw x, (0x01, sp)
+ clr (x)
+00104$:
+; ../strndup.c: 44: return (r);
+ ldw x, (0x03, sp)
+; ../strndup.c: 45: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/strndup.lst b/device/lib/stm8-large/strndup.lst
new file mode 100644
index 0000000..1cd441d
--- /dev/null
+++ b/device/lib/stm8-large/strndup.lst
@@ -0,0 +1,104 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module strndup
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _malloc
+ 12 .globl ___memcpy
+ 13 .globl _strlen
+ 14 .globl _strndup
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area DATA
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../strndup.c: 33: char *strndup (const char *s, size_t n)
+ 53 ; -----------------------------------------
+ 54 ; function strndup
+ 55 ; -----------------------------------------
+ 000000 56 _strndup:
+ 000000 52 04 [ 2] 57 sub sp, #4
+ 58 ; ../strndup.c: 35: size_t l = strlen (s);
+ 000002 1E 08 [ 2] 59 ldw x, (0x08, sp)
+ 000004 89 [ 2] 60 pushw x
+ 000005 8Ds00r00r00 [ 5] 61 callf _strlen
+ 000009 5B 02 [ 2] 62 addw sp, #2
+ 63 ; ../strndup.c: 36: if (l > n)
+ 00000B 1F 01 [ 2] 64 ldw (0x01, sp), x
+ 00000D 13 0A [ 2] 65 cpw x, (0x0a, sp)
+ 00000F 23 04 [ 2] 66 jrule 00102$
+ 67 ; ../strndup.c: 37: l = n;
+ 000011 16 0A [ 2] 68 ldw y, (0x0a, sp)
+ 000013 17 01 [ 2] 69 ldw (0x01, sp), y
+ 000015 70 00102$:
+ 71 ; ../strndup.c: 38: char *r = malloc (l + 1);
+ 000015 1E 01 [ 2] 72 ldw x, (0x01, sp)
+ 000017 5C [ 1] 73 incw x
+ 000018 89 [ 2] 74 pushw x
+ 000019 8Ds00r00r00 [ 5] 75 callf _malloc
+ 00001D 5B 02 [ 2] 76 addw sp, #2
+ 77 ; ../strndup.c: 39: if (r)
+ 00001F 1F 03 [ 2] 78 ldw (0x03, sp), x
+ 000021 27 19 [ 1] 79 jreq 00104$
+ 80 ; ../strndup.c: 41: memcpy (r, s, l);
+ 000023 16 08 [ 2] 81 ldw y, (0x08, sp)
+ 000025 1E 03 [ 2] 82 ldw x, (0x03, sp)
+ 000027 7B 02 [ 1] 83 ld a, (0x02, sp)
+ 000029 88 [ 1] 84 push a
+ 00002A 7B 02 [ 1] 85 ld a, (0x02, sp)
+ 00002C 88 [ 1] 86 push a
+ 00002D 90 89 [ 2] 87 pushw y
+ 00002F 89 [ 2] 88 pushw x
+ 000030 8Ds00r00r00 [ 5] 89 callf ___memcpy
+ 000034 5B 06 [ 2] 90 addw sp, #6
+ 91 ; ../strndup.c: 42: r[l] = 0;
+ 000036 1E 03 [ 2] 92 ldw x, (0x03, sp)
+ 000038 72 FB 01 [ 2] 93 addw x, (0x01, sp)
+ 00003B 7F [ 1] 94 clr (x)
+ 00003C 95 00104$:
+ 96 ; ../strndup.c: 44: return (r);
+ 00003C 1E 03 [ 2] 97 ldw x, (0x03, sp)
+ 98 ; ../strndup.c: 45: }
+ 00003E 5B 04 [ 2] 99 addw sp, #4
+ 000040 87 [ 5] 100 retf
+ 101 .area CODE
+ 102 .area CONST
+ 103 .area INITIALIZER
+ 104 .area CABS (ABS)
diff --git a/device/lib/stm8-large/strndup.rel b/device/lib/stm8-large/strndup.rel
new file mode 100644
index 0000000..b73f022
--- /dev/null
+++ b/device/lib/stm8-large/strndup.rel
@@ -0,0 +1,38 @@
+XH3
+H B areas 5 global symbols
+M strndup
+O -mstm8
+S _malloc Ref000000
+S .__.ABS. Def000000
+S ___memcpy Ref000000
+S _strlen Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 41 flags 0 addr 0
+S _strndup Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 1E 08 89 8D 00 00 00 5B 02 1F 01
+R 00 00 00 09 82 09 00 03
+T 00 00 0D 13 0A 23 04 16 0A 17 01
+R 00 00 00 09
+T 00 00 15
+R 00 00 00 09
+T 00 00 15 1E 01 5C 89 8D 00 00 00 5B 02 1F 03 27
+R 00 00 00 09 82 08 00 00
+T 00 00 22 19 16 08 1E 03 7B 02 88 7B 02 88 90 89
+R 00 00 00 09
+T 00 00 2F 89 8D 00 00 00 5B 06 1E 03 72 FB 01 7F
+R 00 00 00 09 82 05 00 02
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 1E 03 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/strndup.sym b/device/lib/stm8-large/strndup.sym
new file mode 100644
index 0000000..6da76c0
--- /dev/null
+++ b/device/lib/stm8-large/strndup.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___memcpy ****** GX
+ _malloc ****** GX
+ _strlen ****** GX
+ 9 _strndup 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 41 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/strtol.asm b/device/lib/stm8-large/strtol.asm
new file mode 100644
index 0000000..6ddf19e
--- /dev/null
+++ b/device/lib/stm8-large/strtol.asm
@@ -0,0 +1,224 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module strtol
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strtoul
+ .globl _strtol
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../strtol.c: 38: long int strtol(const char *nptr, char **endptr, int base)
+; -----------------------------------------
+; function strtol
+; -----------------------------------------
+_strtol:
+ sub sp, #11
+; ../strtol.c: 40: const char *ptr = nptr;
+ ldw y, (0x0f, sp)
+; ../strtol.c: 45: while (isblank (*ptr))
+00101$:
+ ld a, (y)
+ ld (0x09, sp), a
+; ../strtol.c: 46: ptr++;
+ ldw x, y
+ incw x
+ ldw (0x0a, sp), x
+; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ cp a, #0x20
+ jreq 00132$
+ cp a, #0x09
+ jrne 00158$
+00132$:
+; ../strtol.c: 46: ptr++;
+ ldw y, (0x0a, sp)
+ jra 00101$
+00158$:
+ ldw (0x03, sp), y
+; ../strtol.c: 50: if (*ptr == '-')
+ ld a, (0x09, sp)
+; ../strtol.c: 52: neg = true;
+ sub a, #0x2d
+ jrne 00105$
+ inc a
+ ld (0x05, sp), a
+; ../strtol.c: 53: ptr++;
+ ldw y, (0x0a, sp)
+ ldw (0x03, sp), y
+; ../strtol.c: 56: neg = false;
+ .byte 0xc5
+00105$:
+ clr (0x05, sp)
+00106$:
+; ../strtol.c: 62: *endptr = nptr;
+ ldw y, (0x11, sp)
+ ldw (0x06, sp), y
+; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+'))
+ tnz (0x05, sp)
+ jreq 00110$
+ ldw x, (0x03, sp)
+ ld a, (x)
+ ld xl, a
+; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ cp a, #0x20
+ jreq 00109$
+ cp a, #0x09
+ jreq 00109$
+; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+'))
+ ld a, xl
+ cp a, #0x2d
+ jreq 00109$
+ ld a, xl
+ cp a, #0x2b
+ jrne 00110$
+00109$:
+; ../strtol.c: 61: if (endptr)
+ ldw x, (0x11, sp)
+ jreq 00108$
+; ../strtol.c: 62: *endptr = nptr;
+ ldw x, (0x06, sp)
+ ldw y, (0x0f, sp)
+ ldw (x), y
+00108$:
+; ../strtol.c: 63: return (0);
+ clrw x
+ clrw y
+ jpf 00129$
+00110$:
+; ../strtol.c: 66: u = strtoul(ptr, &rptr, base);
+ ldw x, sp
+ incw x
+ ldw y, (0x13, sp)
+ pushw y
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _strtoul
+ addw sp, #6
+ ldw (0x0a, sp), x
+ ldw (0x08, sp), y
+; ../strtol.c: 69: if (rptr == ptr)
+ ldw x, (0x01, sp)
+ cpw x, (0x03, sp)
+ jrne 00117$
+; ../strtol.c: 71: if (endptr)
+ ldw x, (0x11, sp)
+ jreq 00115$
+; ../strtol.c: 72: *endptr = nptr;
+ ldw x, (0x06, sp)
+ ldw y, (0x0f, sp)
+ ldw (x), y
+00115$:
+; ../strtol.c: 73: return (0);
+ clrw x
+ clrw y
+ jra 00129$
+00117$:
+; ../strtol.c: 76: if (endptr)
+ ldw x, (0x11, sp)
+ jreq 00119$
+; ../strtol.c: 77: *endptr = rptr;
+ ldw x, (0x06, sp)
+ ldw y, (0x01, sp)
+ ldw (x), y
+00119$:
+; ../strtol.c: 80: if (!neg && u > LONG_MAX)
+ tnz (0x05, sp)
+ jrne 00124$
+ clrw x
+ decw x
+ cpw x, (0x0a, sp)
+ ld a, #0xff
+ sbc a, (0x09, sp)
+ ld a, #0x7f
+ sbc a, (0x08, sp)
+ jrnc 00124$
+; ../strtol.c: 82: errno = ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../strtol.c: 83: return (LONG_MAX);
+ clrw x
+ decw x
+ ldw y, #0x7fff
+ jra 00129$
+00124$:
+; ../strtol.c: 85: else if (neg && u > -LONG_MIN)
+ tnz (0x05, sp)
+ jreq 00125$
+ clrw x
+ cpw x, (0x0a, sp)
+ clr a
+ sbc a, (0x09, sp)
+ ld a, #0x80
+ sbc a, (0x08, sp)
+ jrnc 00125$
+; ../strtol.c: 87: errno = ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../strtol.c: 88: return (LONG_MIN);
+ clrw x
+ ldw y, #0x8000
+ jra 00129$
+00125$:
+; ../strtol.c: 91: return (neg ? -u : u);
+ tnz (0x05, sp)
+ jreq 00137$
+ ldw y, (0x0a, sp)
+ negw y
+ ldw x, (0x08, sp)
+ jrnc 00258$
+ incw x
+00258$:
+ negw x
+ ldw (0x0a, sp), y
+ ldw (0x08, sp), x
+00137$:
+ ldw x, (0x0a, sp)
+ ldw y, (0x08, sp)
+00129$:
+; ../strtol.c: 92: }
+ addw sp, #11
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/strtol.lst b/device/lib/stm8-large/strtol.lst
new file mode 100644
index 0000000..7f0bef8
--- /dev/null
+++ b/device/lib/stm8-large/strtol.lst
@@ -0,0 +1,224 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module strtol
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strtoul
+ 12 .globl _strtol
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../strtol.c: 38: long int strtol(const char *nptr, char **endptr, int base)
+ 51 ; -----------------------------------------
+ 52 ; function strtol
+ 53 ; -----------------------------------------
+ 000000 54 _strtol:
+ 000000 52 0B [ 2] 55 sub sp, #11
+ 56 ; ../strtol.c: 40: const char *ptr = nptr;
+ 000002 16 0F [ 2] 57 ldw y, (0x0f, sp)
+ 58 ; ../strtol.c: 45: while (isblank (*ptr))
+ 000004 59 00101$:
+ 000004 90 F6 [ 1] 60 ld a, (y)
+ 000006 6B 09 [ 1] 61 ld (0x09, sp), a
+ 62 ; ../strtol.c: 46: ptr++;
+ 000008 93 [ 1] 63 ldw x, y
+ 000009 5C [ 1] 64 incw x
+ 00000A 1F 0A [ 2] 65 ldw (0x0a, sp), x
+ 66 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ 00000C A1 20 [ 1] 67 cp a, #0x20
+ 00000E 27 04 [ 1] 68 jreq 00132$
+ 000010 A1 09 [ 1] 69 cp a, #0x09
+ 000012 26 04 [ 1] 70 jrne 00158$
+ 000014 71 00132$:
+ 72 ; ../strtol.c: 46: ptr++;
+ 000014 16 0A [ 2] 73 ldw y, (0x0a, sp)
+ 000016 20 EC [ 2] 74 jra 00101$
+ 000018 75 00158$:
+ 000018 17 03 [ 2] 76 ldw (0x03, sp), y
+ 77 ; ../strtol.c: 50: if (*ptr == '-')
+ 00001A 7B 09 [ 1] 78 ld a, (0x09, sp)
+ 79 ; ../strtol.c: 52: neg = true;
+ 00001C A0 2D [ 1] 80 sub a, #0x2d
+ 00001E 26 08 [ 1] 81 jrne 00105$
+ 000020 4C [ 1] 82 inc a
+ 000021 6B 05 [ 1] 83 ld (0x05, sp), a
+ 84 ; ../strtol.c: 53: ptr++;
+ 000023 16 0A [ 2] 85 ldw y, (0x0a, sp)
+ 000025 17 03 [ 2] 86 ldw (0x03, sp), y
+ 87 ; ../strtol.c: 56: neg = false;
+ 000027 C5 88 .byte 0xc5
+ 000028 89 00105$:
+ 000028 0F 05 [ 1] 90 clr (0x05, sp)
+ 00002A 91 00106$:
+ 92 ; ../strtol.c: 62: *endptr = nptr;
+ 00002A 16 11 [ 2] 93 ldw y, (0x11, sp)
+ 00002C 17 06 [ 2] 94 ldw (0x06, sp), y
+ 95 ; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+'))
+ 00002E 0D 05 [ 1] 96 tnz (0x05, sp)
+ 000030 27 26 [ 1] 97 jreq 00110$
+ 000032 1E 03 [ 2] 98 ldw x, (0x03, sp)
+ 000034 F6 [ 1] 99 ld a, (x)
+ 000035 97 [ 1] 100 ld xl, a
+ 101 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ 000036 A1 20 [ 1] 102 cp a, #0x20
+ 000038 27 0E [ 1] 103 jreq 00109$
+ 00003A A1 09 [ 1] 104 cp a, #0x09
+ 00003C 27 0A [ 1] 105 jreq 00109$
+ 106 ; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+'))
+ 00003E 9F [ 1] 107 ld a, xl
+ 00003F A1 2D [ 1] 108 cp a, #0x2d
+ 000041 27 05 [ 1] 109 jreq 00109$
+ 000043 9F [ 1] 110 ld a, xl
+ 000044 A1 2B [ 1] 111 cp a, #0x2b
+ 000046 26 10 [ 1] 112 jrne 00110$
+ 000048 113 00109$:
+ 114 ; ../strtol.c: 61: if (endptr)
+ 000048 1E 11 [ 2] 115 ldw x, (0x11, sp)
+ 00004A 27 05 [ 1] 116 jreq 00108$
+ 117 ; ../strtol.c: 62: *endptr = nptr;
+ 00004C 1E 06 [ 2] 118 ldw x, (0x06, sp)
+ 00004E 16 0F [ 2] 119 ldw y, (0x0f, sp)
+ 000050 FF [ 2] 120 ldw (x), y
+ 000051 121 00108$:
+ 122 ; ../strtol.c: 63: return (0);
+ 000051 5F [ 1] 123 clrw x
+ 000052 90 5F [ 1] 124 clrw y
+ 000054 ACs00r00rDC [ 2] 125 jpf 00129$
+ 000058 126 00110$:
+ 127 ; ../strtol.c: 66: u = strtoul(ptr, &rptr, base);
+ 000058 96 [ 1] 128 ldw x, sp
+ 000059 5C [ 1] 129 incw x
+ 00005A 16 13 [ 2] 130 ldw y, (0x13, sp)
+ 00005C 90 89 [ 2] 131 pushw y
+ 00005E 89 [ 2] 132 pushw x
+ 00005F 1E 07 [ 2] 133 ldw x, (0x07, sp)
+ 000061 89 [ 2] 134 pushw x
+ 000062 8Ds00r00r00 [ 5] 135 callf _strtoul
+ 000066 5B 06 [ 2] 136 addw sp, #6
+ 000068 1F 0A [ 2] 137 ldw (0x0a, sp), x
+ 00006A 17 08 [ 2] 138 ldw (0x08, sp), y
+ 139 ; ../strtol.c: 69: if (rptr == ptr)
+ 00006C 1E 01 [ 2] 140 ldw x, (0x01, sp)
+ 00006E 13 03 [ 2] 141 cpw x, (0x03, sp)
+ 000070 26 0E [ 1] 142 jrne 00117$
+ 143 ; ../strtol.c: 71: if (endptr)
+ 000072 1E 11 [ 2] 144 ldw x, (0x11, sp)
+ 000074 27 05 [ 1] 145 jreq 00115$
+ 146 ; ../strtol.c: 72: *endptr = nptr;
+ 000076 1E 06 [ 2] 147 ldw x, (0x06, sp)
+ 000078 16 0F [ 2] 148 ldw y, (0x0f, sp)
+ 00007A FF [ 2] 149 ldw (x), y
+ 00007B 150 00115$:
+ 151 ; ../strtol.c: 73: return (0);
+ 00007B 5F [ 1] 152 clrw x
+ 00007C 90 5F [ 1] 153 clrw y
+ 00007E 20 5C [ 2] 154 jra 00129$
+ 000080 155 00117$:
+ 156 ; ../strtol.c: 76: if (endptr)
+ 000080 1E 11 [ 2] 157 ldw x, (0x11, sp)
+ 000082 27 05 [ 1] 158 jreq 00119$
+ 159 ; ../strtol.c: 77: *endptr = rptr;
+ 000084 1E 06 [ 2] 160 ldw x, (0x06, sp)
+ 000086 16 01 [ 2] 161 ldw y, (0x01, sp)
+ 000088 FF [ 2] 162 ldw (x), y
+ 000089 163 00119$:
+ 164 ; ../strtol.c: 80: if (!neg && u > LONG_MAX)
+ 000089 0D 05 [ 1] 165 tnz (0x05, sp)
+ 00008B 26 1C [ 1] 166 jrne 00124$
+ 00008D 5F [ 1] 167 clrw x
+ 00008E 5A [ 2] 168 decw x
+ 00008F 13 0A [ 2] 169 cpw x, (0x0a, sp)
+ 000091 A6 FF [ 1] 170 ld a, #0xff
+ 000093 12 09 [ 1] 171 sbc a, (0x09, sp)
+ 000095 A6 7F [ 1] 172 ld a, #0x7f
+ 000097 12 08 [ 1] 173 sbc a, (0x08, sp)
+ 000099 24 0E [ 1] 174 jrnc 00124$
+ 175 ; ../strtol.c: 82: errno = ERANGE;
+ 00009B AE 00 22 [ 2] 176 ldw x, #0x0022
+ 00009E CFu00u00 [ 2] 177 ldw _errno+0, x
+ 178 ; ../strtol.c: 83: return (LONG_MAX);
+ 0000A1 5F [ 1] 179 clrw x
+ 0000A2 5A [ 2] 180 decw x
+ 0000A3 90 AE 7F FF [ 2] 181 ldw y, #0x7fff
+ 0000A7 20 33 [ 2] 182 jra 00129$
+ 0000A9 183 00124$:
+ 184 ; ../strtol.c: 85: else if (neg && u > -LONG_MIN)
+ 0000A9 0D 05 [ 1] 185 tnz (0x05, sp)
+ 0000AB 27 19 [ 1] 186 jreq 00125$
+ 0000AD 5F [ 1] 187 clrw x
+ 0000AE 13 0A [ 2] 188 cpw x, (0x0a, sp)
+ 0000B0 4F [ 1] 189 clr a
+ 0000B1 12 09 [ 1] 190 sbc a, (0x09, sp)
+ 0000B3 A6 80 [ 1] 191 ld a, #0x80
+ 0000B5 12 08 [ 1] 192 sbc a, (0x08, sp)
+ 0000B7 24 0D [ 1] 193 jrnc 00125$
+ 194 ; ../strtol.c: 87: errno = ERANGE;
+ 0000B9 AE 00 22 [ 2] 195 ldw x, #0x0022
+ 0000BC CFu00u00 [ 2] 196 ldw _errno+0, x
+ 197 ; ../strtol.c: 88: return (LONG_MIN);
+ 0000BF 5F [ 1] 198 clrw x
+ 0000C0 90 AE 80 00 [ 2] 199 ldw y, #0x8000
+ 0000C4 20 16 [ 2] 200 jra 00129$
+ 0000C6 201 00125$:
+ 202 ; ../strtol.c: 91: return (neg ? -u : u);
+ 0000C6 0D 05 [ 1] 203 tnz (0x05, sp)
+ 0000C8 27 0E [ 1] 204 jreq 00137$
+ 0000CA 16 0A [ 2] 205 ldw y, (0x0a, sp)
+ 0000CC 90 50 [ 2] 206 negw y
+ 0000CE 1E 08 [ 2] 207 ldw x, (0x08, sp)
+ 0000D0 24 01 [ 1] 208 jrnc 00258$
+ 0000D2 5C [ 1] 209 incw x
+ 0000D3 210 00258$:
+ 0000D3 50 [ 2] 211 negw x
+ 0000D4 17 0A [ 2] 212 ldw (0x0a, sp), y
+ 0000D6 1F 08 [ 2] 213 ldw (0x08, sp), x
+ 0000D8 214 00137$:
+ 0000D8 1E 0A [ 2] 215 ldw x, (0x0a, sp)
+ 0000DA 16 08 [ 2] 216 ldw y, (0x08, sp)
+ 0000DC 217 00129$:
+ 218 ; ../strtol.c: 92: }
+ 0000DC 5B 0B [ 2] 219 addw sp, #11
+ 0000DE 87 [ 5] 220 retf
+ 221 .area CODE
+ 222 .area CONST
+ 223 .area INITIALIZER
+ 224 .area CABS (ABS)
diff --git a/device/lib/stm8-large/strtol.rel b/device/lib/stm8-large/strtol.rel
new file mode 100644
index 0000000..03f3b4e
--- /dev/null
+++ b/device/lib/stm8-large/strtol.rel
@@ -0,0 +1,107 @@
+XH3
+H B areas 4 global symbols
+M strtol
+O -mstm8
+S _errno Ref000000
+S .__.ABS. Def000000
+S _strtoul Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size DF flags 0 addr 0
+S _strtol Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0B 16 0F
+R 00 00 00 09
+T 00 00 04
+R 00 00 00 09
+T 00 00 04 90 F6 6B 09 93 5C 1F 0A A1 20 27 04 A1
+R 00 00 00 09
+T 00 00 11 09 26 04
+R 00 00 00 09
+T 00 00 14
+R 00 00 00 09
+T 00 00 14 16 0A 20 EC
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 17 03 7B 09 A0 2D 26 08 4C 6B 05 16 0A
+R 00 00 00 09
+T 00 00 25 17 03 C5
+R 00 00 00 09
+T 00 00 28
+R 00 00 00 09
+T 00 00 28 0F 05
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 16 11 17 06 0D 05 27 26 1E 03 F6 97 A1
+R 00 00 00 09
+T 00 00 37 20 27 0E A1 09 27 0A 9F A1 2D 27 05 9F
+R 00 00 00 09
+T 00 00 44 A1 2B 26 10
+R 00 00 00 09
+T 00 00 48
+R 00 00 00 09
+T 00 00 48 1E 11 27 05 1E 06 16 0F FF
+R 00 00 00 09
+T 00 00 51
+R 00 00 00 09
+T 00 00 51 5F 90 5F AC 00 00 DC
+R 00 00 00 09 80 07 00 09
+T 00 00 58
+R 00 00 00 09
+T 00 00 58 96 5C 16 13 90 89 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 63 00 00 00 5B 06 1F 0A 17 08 1E 01 13 03
+R 00 00 00 09 82 03 00 02
+T 00 00 70 26 0E 1E 11 27 05 1E 06 16 0F FF
+R 00 00 00 09
+T 00 00 7B
+R 00 00 00 09
+T 00 00 7B 5F 90 5F 20 5C
+R 00 00 00 09
+T 00 00 80
+R 00 00 00 09
+T 00 00 80 1E 11 27 05 1E 06 16 01 FF
+R 00 00 00 09
+T 00 00 89
+R 00 00 00 09
+T 00 00 89 0D 05 26 1C 5F 5A 13 0A A6 FF 12 09 A6
+R 00 00 00 09
+T 00 00 96 7F 12 08 24 0E AE 00 22 CF 00 00 5F 5A
+R 00 00 00 09 12 0C 00 00
+T 00 00 A3 90 AE 7F FF 20 33
+R 00 00 00 09
+T 00 00 A9
+R 00 00 00 09
+T 00 00 A9 0D 05 27 19 5F 13 0A 4F 12 09 A6 80 12
+R 00 00 00 09
+T 00 00 B6 08 24 0D AE 00 22 CF 00 00 5F 90 AE
+R 00 00 00 09 12 0A 00 00
+T 00 00 C2 80 00 20 16
+R 00 00 00 09
+T 00 00 C6
+R 00 00 00 09
+T 00 00 C6 0D 05 27 0E 16 0A 90 50 1E 08 24 01 5C
+R 00 00 00 09
+T 00 00 D3
+R 00 00 00 09
+T 00 00 D3 50 17 0A 1F 08
+R 00 00 00 09
+T 00 00 D8
+R 00 00 00 09
+T 00 00 D8 1E 0A 16 08
+R 00 00 00 09
+T 00 00 DC
+R 00 00 00 09
+T 00 00 DC 5B 0B 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/strtol.sym b/device/lib/stm8-large/strtol.sym
new file mode 100644
index 0000000..bd79def
--- /dev/null
+++ b/device/lib/stm8-large/strtol.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _errno ****** GX
+ 9 _strtol 000000 GR
+ _strtoul ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size DF flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/strtoul.asm b/device/lib/stm8-large/strtoul.asm
new file mode 100644
index 0000000..1b4c642
--- /dev/null
+++ b/device/lib/stm8-large/strtoul.asm
@@ -0,0 +1,402 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module strtoul
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strncmp
+ .globl _strtoul
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../strtoul.c: 37: static signed char _isdigit(const char c, unsigned char base)
+; -----------------------------------------
+; function _isdigit
+; -----------------------------------------
+__isdigit:
+; ../strtoul.c: 42: v = c - '0';
+; ../strtoul.c: 41: if (c >= '0' && c <= '9')
+ ld a, (0x04, sp)
+ ld xl, a
+ cp a, #0x30
+ jrc 00110$
+ ld a, (0x04, sp)
+ cp a, #0x39
+ jrugt 00110$
+; ../strtoul.c: 42: v = c - '0';
+ ld a, xl
+ sub a, #0x30
+ jra 00111$
+00110$:
+; ../strtoul.c: 43: else if (c >= 'a' && c <='z')
+ ld a, (0x04, sp)
+ cp a, #0x61
+ jrc 00106$
+ cp a, #0x7a
+ jrugt 00106$
+; ../strtoul.c: 44: v = c - 'a' + 10;
+ ld a, xl
+ add a, #0xa9
+ jra 00111$
+00106$:
+; ../strtoul.c: 45: else if (c >= 'A' && c <='Z')
+ ld a, (0x04, sp)
+ cp a, #0x41
+ jrc 00102$
+ cp a, #0x5a
+ jrugt 00102$
+; ../strtoul.c: 46: v = c - 'A' + 10;
+ ld a, xl
+ add a, #0xc9
+ jra 00111$
+00102$:
+; ../strtoul.c: 48: return (-1);
+ ld a, #0xff
+ jra 00115$
+00111$:
+; ../strtoul.c: 50: if (v >= base)
+ cp a, (0x05, sp)
+ jrc 00114$
+; ../strtoul.c: 51: return (-1);
+ ld a, #0xff
+; ../strtoul.c: 53: return (v);
+00114$:
+00115$:
+; ../strtoul.c: 54: }
+ retf
+; ../strtoul.c: 56: unsigned long int strtoul(const char *nptr, char **endptr, int base)
+; -----------------------------------------
+; function strtoul
+; -----------------------------------------
+_strtoul:
+ sub sp, #20
+; ../strtoul.c: 58: const char *ptr = nptr;
+ ldw y, (0x18, sp)
+; ../strtoul.c: 60: bool range_error = false;
+ clr (0x05, sp)
+; ../strtoul.c: 61: bool neg = false;
+ clr (0x06, sp)
+; ../strtoul.c: 63: while (isblank (*ptr))
+00101$:
+ ld a, (y)
+ ld xl, a
+; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ cp a, #0x20
+ jreq 00140$
+ cp a, #0x09
+ jrne 00163$
+00140$:
+; ../strtoul.c: 64: ptr++;
+ incw y
+ jra 00101$
+00163$:
+ ldw (0x13, sp), y
+; ../strtoul.c: 67: switch(*ptr)
+ ld a, xl
+ cp a, #0x2b
+ jreq 00105$
+ ld a, xl
+; ../strtoul.c: 70: neg = true;
+ sub a, #0x2d
+ jrne 00106$
+ inc a
+ ld (0x06, sp), a
+; ../strtoul.c: 71: case '+':
+00105$:
+; ../strtoul.c: 72: ptr++;
+ ldw x, (0x13, sp)
+ incw x
+ ldw (0x13, sp), x
+; ../strtoul.c: 73: }
+00106$:
+; ../strtoul.c: 81: ptr += 2;
+ ldw x, (0x13, sp)
+ incw x
+ incw x
+ ldw (0x11, sp), x
+; ../strtoul.c: 76: if (!base)
+ ldw x, (0x1c, sp)
+ jrne 00119$
+; ../strtoul.c: 78: if (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2))
+ push #0x02
+ push #0x00
+ push #<(___str_0 + 0)
+ push #((___str_0 + 0) >> 8)
+ ldw x, (0x17, sp)
+ pushw x
+ callf _strncmp
+ addw sp, #6
+ tnzw x
+ jreq 00110$
+ push #0x02
+ push #0x00
+ push #<(___str_1 + 0)
+ push #((___str_1 + 0) >> 8)
+ ldw x, (0x17, sp)
+ pushw x
+ callf _strncmp
+ addw sp, #6
+ tnzw x
+ jrne 00111$
+00110$:
+; ../strtoul.c: 80: base = 16;
+ ldw x, #0x0010
+ ldw (0x1c, sp), x
+; ../strtoul.c: 81: ptr += 2;
+ ldw y, (0x11, sp)
+ ldw (0x13, sp), y
+ jra 00120$
+00111$:
+; ../strtoul.c: 83: else if (*ptr == '0')
+ ldw x, (0x13, sp)
+ ld a, (x)
+ cp a, #0x30
+ jrne 00108$
+; ../strtoul.c: 85: base = 8;
+ ldw x, #0x0008
+ ldw (0x1c, sp), x
+; ../strtoul.c: 86: ptr++;
+ ldw x, (0x13, sp)
+ incw x
+ ldw (0x13, sp), x
+ jra 00120$
+00108$:
+; ../strtoul.c: 89: base = 10;
+ ldw x, #0x000a
+ ldw (0x1c, sp), x
+ jra 00120$
+00119$:
+; ../strtoul.c: 92: else if (base == 16 && (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2)))
+ ldw x, (0x1c, sp)
+ cpw x, #0x0010
+ jrne 00120$
+ push #0x02
+ push #0x00
+ push #<(___str_0 + 0)
+ push #((___str_0 + 0) >> 8)
+ ldw x, (0x17, sp)
+ pushw x
+ callf _strncmp
+ addw sp, #6
+ tnzw x
+ jreq 00114$
+ push #0x02
+ push #0x00
+ push #<(___str_1 + 0)
+ push #((___str_1 + 0) >> 8)
+ ldw x, (0x17, sp)
+ pushw x
+ callf _strncmp
+ addw sp, #6
+ tnzw x
+ jrne 00120$
+00114$:
+; ../strtoul.c: 93: ptr += 2;
+ ldw y, (0x11, sp)
+ ldw (0x13, sp), y
+00120$:
+; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0)
+ ld a, (0x1d, sp)
+ ld (0x07, sp), a
+ ldw x, (0x13, sp)
+ ld a, (x)
+ ld xl, a
+ ld a, (0x07, sp)
+ push a
+ ld a, xl
+ push a
+ callf __isdigit
+ addw sp, #2
+; ../strtoul.c: 100: *endptr = (char*)nptr;
+ ldw y, (0x1a, sp)
+ ldw (0x08, sp), y
+; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0)
+ tnz a
+ jrpl 00124$
+; ../strtoul.c: 99: if (endptr)
+ ldw x, (0x1a, sp)
+ jreq 00122$
+; ../strtoul.c: 100: *endptr = (char*)nptr;
+ ldw x, (0x08, sp)
+ ldw y, (0x18, sp)
+ ldw (x), y
+00122$:
+; ../strtoul.c: 101: return (0);
+ clrw x
+ clrw y
+ jpf 00137$
+00124$:
+; ../strtoul.c: 104: for (ret = 0;; ptr++)
+ clrw x
+ ldw (0x11, sp), x
+ ldw (0x0f, sp), x
+00135$:
+; ../strtoul.c: 107: signed char digit = _isdigit (*ptr, base);
+ ldw x, (0x13, sp)
+ ld a, (x)
+ ld xl, a
+ ld a, (0x07, sp)
+ push a
+ ld a, xl
+ push a
+ callf __isdigit
+ addw sp, #2
+; ../strtoul.c: 109: if (digit < 0)
+ ld (0x0a, sp), a
+ jrmi 00129$
+; ../strtoul.c: 112: oldret = ret;
+ ldw y, (0x11, sp)
+ ldw (0x0d, sp), y
+ ldw y, (0x0f, sp)
+ ldw (0x0b, sp), y
+; ../strtoul.c: 113: ret *= base;
+ ldw y, (0x1c, sp)
+ clrw x
+ tnzw y
+ jrpl 00261$
+ decw x
+00261$:
+ pushw y
+ pushw x
+ ldw x, (0x15, sp)
+ pushw x
+ ldw x, (0x15, sp)
+ pushw x
+ callf __mullong
+ addw sp, #8
+ ldw (0x11, sp), x
+ ldw (0x0f, sp), y
+; ../strtoul.c: 114: if (ret < oldret)
+ ldw x, (0x11, sp)
+ cpw x, (0x0d, sp)
+ ld a, (0x10, sp)
+ sbc a, (0x0c, sp)
+ ld a, (0x0f, sp)
+ sbc a, (0x0b, sp)
+ jrnc 00128$
+; ../strtoul.c: 115: range_error = true;
+ ld a, #0x01
+ ld (0x05, sp), a
+00128$:
+; ../strtoul.c: 117: ret += (unsigned char)digit;
+ ld a, (0x0a, sp)
+ ld (0x04, sp), a
+ clr (0x03, sp)
+ clr (0x02, sp)
+ clr (0x01, sp)
+ ldw x, (0x11, sp)
+ addw x, (0x03, sp)
+ ldw (0x0c, sp), x
+ ld a, (0x10, sp)
+ adc a, (0x02, sp)
+ ld (0x0b, sp), a
+ ld a, (0x0f, sp)
+ adc a, (0x01, sp)
+ ld (0x0a, sp), a
+ ldw y, (0x0c, sp)
+ ldw (0x11, sp), y
+ ldw y, (0x0a, sp)
+ ldw (0x0f, sp), y
+; ../strtoul.c: 104: for (ret = 0;; ptr++)
+ ldw x, (0x13, sp)
+ incw x
+ ldw (0x13, sp), x
+ jra 00135$
+00129$:
+; ../strtoul.c: 120: if (endptr)
+ ldw x, (0x1a, sp)
+ jreq 00131$
+; ../strtoul.c: 121: *endptr = (char*)ptr;
+ ldw x, (0x08, sp)
+ ldw y, (0x13, sp)
+ ldw (x), y
+00131$:
+; ../strtoul.c: 123: if (range_error)
+ tnz (0x05, sp)
+ jreq 00133$
+; ../strtoul.c: 125: errno = ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../strtoul.c: 126: return (ULONG_MAX);
+ clrw x
+ decw x
+ ldw y, x
+ jra 00137$
+00133$:
+; ../strtoul.c: 129: return (neg ? -ret : ret);
+ tnz (0x06, sp)
+ jreq 00142$
+ ldw y, (0x11, sp)
+ negw y
+ ldw x, (0x0f, sp)
+ jrnc 00267$
+ incw x
+00267$:
+ negw x
+ ldw (0x0c, sp), y
+ ldw (0x0a, sp), x
+ jra 00143$
+00142$:
+ ldw y, (0x11, sp)
+ ldw (0x0c, sp), y
+ ldw y, (0x0f, sp)
+ ldw (0x0a, sp), y
+00143$:
+ ldw x, (0x0c, sp)
+ ldw y, (0x0a, sp)
+00137$:
+; ../strtoul.c: 130: }
+ addw sp, #20
+ retf
+ .area CODE
+ .area CONST
+ .area CONST
+___str_0:
+ .ascii "0x"
+ .db 0x00
+ .area CODE
+ .area CONST
+___str_1:
+ .ascii "0X"
+ .db 0x00
+ .area CODE
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/strtoul.lst b/device/lib/stm8-large/strtoul.lst
new file mode 100644
index 0000000..0758d99
--- /dev/null
+++ b/device/lib/stm8-large/strtoul.lst
@@ -0,0 +1,402 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module strtoul
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strncmp
+ 12 .globl _strtoul
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../strtoul.c: 37: static signed char _isdigit(const char c, unsigned char base)
+ 51 ; -----------------------------------------
+ 52 ; function _isdigit
+ 53 ; -----------------------------------------
+ 000000 54 __isdigit:
+ 55 ; ../strtoul.c: 42: v = c - '0';
+ 56 ; ../strtoul.c: 41: if (c >= '0' && c <= '9')
+ 000000 7B 04 [ 1] 57 ld a, (0x04, sp)
+ 000002 97 [ 1] 58 ld xl, a
+ 000003 A1 30 [ 1] 59 cp a, #0x30
+ 000005 25 0B [ 1] 60 jrc 00110$
+ 000007 7B 04 [ 1] 61 ld a, (0x04, sp)
+ 000009 A1 39 [ 1] 62 cp a, #0x39
+ 00000B 22 05 [ 1] 63 jrugt 00110$
+ 64 ; ../strtoul.c: 42: v = c - '0';
+ 00000D 9F [ 1] 65 ld a, xl
+ 00000E A0 30 [ 1] 66 sub a, #0x30
+ 000010 20 22 [ 2] 67 jra 00111$
+ 000012 68 00110$:
+ 69 ; ../strtoul.c: 43: else if (c >= 'a' && c <='z')
+ 000012 7B 04 [ 1] 70 ld a, (0x04, sp)
+ 000014 A1 61 [ 1] 71 cp a, #0x61
+ 000016 25 09 [ 1] 72 jrc 00106$
+ 000018 A1 7A [ 1] 73 cp a, #0x7a
+ 00001A 22 05 [ 1] 74 jrugt 00106$
+ 75 ; ../strtoul.c: 44: v = c - 'a' + 10;
+ 00001C 9F [ 1] 76 ld a, xl
+ 00001D AB A9 [ 1] 77 add a, #0xa9
+ 00001F 20 13 [ 2] 78 jra 00111$
+ 000021 79 00106$:
+ 80 ; ../strtoul.c: 45: else if (c >= 'A' && c <='Z')
+ 000021 7B 04 [ 1] 81 ld a, (0x04, sp)
+ 000023 A1 41 [ 1] 82 cp a, #0x41
+ 000025 25 09 [ 1] 83 jrc 00102$
+ 000027 A1 5A [ 1] 84 cp a, #0x5a
+ 000029 22 05 [ 1] 85 jrugt 00102$
+ 86 ; ../strtoul.c: 46: v = c - 'A' + 10;
+ 00002B 9F [ 1] 87 ld a, xl
+ 00002C AB C9 [ 1] 88 add a, #0xc9
+ 00002E 20 04 [ 2] 89 jra 00111$
+ 000030 90 00102$:
+ 91 ; ../strtoul.c: 48: return (-1);
+ 000030 A6 FF [ 1] 92 ld a, #0xff
+ 000032 20 06 [ 2] 93 jra 00115$
+ 000034 94 00111$:
+ 95 ; ../strtoul.c: 50: if (v >= base)
+ 000034 11 05 [ 1] 96 cp a, (0x05, sp)
+ 000036 25 02 [ 1] 97 jrc 00114$
+ 98 ; ../strtoul.c: 51: return (-1);
+ 000038 A6 FF [ 1] 99 ld a, #0xff
+ 100 ; ../strtoul.c: 53: return (v);
+ 00003A 101 00114$:
+ 00003A 102 00115$:
+ 103 ; ../strtoul.c: 54: }
+ 00003A 87 [ 5] 104 retf
+ 105 ; ../strtoul.c: 56: unsigned long int strtoul(const char *nptr, char **endptr, int base)
+ 106 ; -----------------------------------------
+ 107 ; function strtoul
+ 108 ; -----------------------------------------
+ 00003B 109 _strtoul:
+ 00003B 52 14 [ 2] 110 sub sp, #20
+ 111 ; ../strtoul.c: 58: const char *ptr = nptr;
+ 00003D 16 18 [ 2] 112 ldw y, (0x18, sp)
+ 113 ; ../strtoul.c: 60: bool range_error = false;
+ 00003F 0F 05 [ 1] 114 clr (0x05, sp)
+ 115 ; ../strtoul.c: 61: bool neg = false;
+ 000041 0F 06 [ 1] 116 clr (0x06, sp)
+ 117 ; ../strtoul.c: 63: while (isblank (*ptr))
+ 000043 118 00101$:
+ 000043 90 F6 [ 1] 119 ld a, (y)
+ 000045 97 [ 1] 120 ld xl, a
+ 121 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t');
+ 000046 A1 20 [ 1] 122 cp a, #0x20
+ 000048 27 04 [ 1] 123 jreq 00140$
+ 00004A A1 09 [ 1] 124 cp a, #0x09
+ 00004C 26 04 [ 1] 125 jrne 00163$
+ 00004E 126 00140$:
+ 127 ; ../strtoul.c: 64: ptr++;
+ 00004E 90 5C [ 1] 128 incw y
+ 000050 20 F1 [ 2] 129 jra 00101$
+ 000052 130 00163$:
+ 000052 17 13 [ 2] 131 ldw (0x13, sp), y
+ 132 ; ../strtoul.c: 67: switch(*ptr)
+ 000054 9F [ 1] 133 ld a, xl
+ 000055 A1 2B [ 1] 134 cp a, #0x2b
+ 000057 27 08 [ 1] 135 jreq 00105$
+ 000059 9F [ 1] 136 ld a, xl
+ 137 ; ../strtoul.c: 70: neg = true;
+ 00005A A0 2D [ 1] 138 sub a, #0x2d
+ 00005C 26 08 [ 1] 139 jrne 00106$
+ 00005E 4C [ 1] 140 inc a
+ 00005F 6B 06 [ 1] 141 ld (0x06, sp), a
+ 142 ; ../strtoul.c: 71: case '+':
+ 000061 143 00105$:
+ 144 ; ../strtoul.c: 72: ptr++;
+ 000061 1E 13 [ 2] 145 ldw x, (0x13, sp)
+ 000063 5C [ 1] 146 incw x
+ 000064 1F 13 [ 2] 147 ldw (0x13, sp), x
+ 148 ; ../strtoul.c: 73: }
+ 000066 149 00106$:
+ 150 ; ../strtoul.c: 81: ptr += 2;
+ 000066 1E 13 [ 2] 151 ldw x, (0x13, sp)
+ 000068 5C [ 1] 152 incw x
+ 000069 5C [ 1] 153 incw x
+ 00006A 1F 11 [ 2] 154 ldw (0x11, sp), x
+ 155 ; ../strtoul.c: 76: if (!base)
+ 00006C 1E 1C [ 2] 156 ldw x, (0x1c, sp)
+ 00006E 26 4D [ 1] 157 jrne 00119$
+ 158 ; ../strtoul.c: 78: if (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2))
+ 000070 4B 02 [ 1] 159 push #0x02
+ 000072 4B 00 [ 1] 160 push #0x00
+ 000074 4Br00 [ 1] 161 push #<(___str_0 + 0)
+ 000076 4Bs00 [ 1] 162 push #((___str_0 + 0) >> 8)
+ 000078 1E 17 [ 2] 163 ldw x, (0x17, sp)
+ 00007A 89 [ 2] 164 pushw x
+ 00007B 8Ds00r00r00 [ 5] 165 callf _strncmp
+ 00007F 5B 06 [ 2] 166 addw sp, #6
+ 000081 5D [ 2] 167 tnzw x
+ 000082 27 14 [ 1] 168 jreq 00110$
+ 000084 4B 02 [ 1] 169 push #0x02
+ 000086 4B 00 [ 1] 170 push #0x00
+ 000088 4Br03 [ 1] 171 push #<(___str_1 + 0)
+ 00008A 4Bs00 [ 1] 172 push #((___str_1 + 0) >> 8)
+ 00008C 1E 17 [ 2] 173 ldw x, (0x17, sp)
+ 00008E 89 [ 2] 174 pushw x
+ 00008F 8Ds00r00r00 [ 5] 175 callf _strncmp
+ 000093 5B 06 [ 2] 176 addw sp, #6
+ 000095 5D [ 2] 177 tnzw x
+ 000096 26 0B [ 1] 178 jrne 00111$
+ 000098 179 00110$:
+ 180 ; ../strtoul.c: 80: base = 16;
+ 000098 AE 00 10 [ 2] 181 ldw x, #0x0010
+ 00009B 1F 1C [ 2] 182 ldw (0x1c, sp), x
+ 183 ; ../strtoul.c: 81: ptr += 2;
+ 00009D 16 11 [ 2] 184 ldw y, (0x11, sp)
+ 00009F 17 13 [ 2] 185 ldw (0x13, sp), y
+ 0000A1 20 4D [ 2] 186 jra 00120$
+ 0000A3 187 00111$:
+ 188 ; ../strtoul.c: 83: else if (*ptr == '0')
+ 0000A3 1E 13 [ 2] 189 ldw x, (0x13, sp)
+ 0000A5 F6 [ 1] 190 ld a, (x)
+ 0000A6 A1 30 [ 1] 191 cp a, #0x30
+ 0000A8 26 0C [ 1] 192 jrne 00108$
+ 193 ; ../strtoul.c: 85: base = 8;
+ 0000AA AE 00 08 [ 2] 194 ldw x, #0x0008
+ 0000AD 1F 1C [ 2] 195 ldw (0x1c, sp), x
+ 196 ; ../strtoul.c: 86: ptr++;
+ 0000AF 1E 13 [ 2] 197 ldw x, (0x13, sp)
+ 0000B1 5C [ 1] 198 incw x
+ 0000B2 1F 13 [ 2] 199 ldw (0x13, sp), x
+ 0000B4 20 3A [ 2] 200 jra 00120$
+ 0000B6 201 00108$:
+ 202 ; ../strtoul.c: 89: base = 10;
+ 0000B6 AE 00 0A [ 2] 203 ldw x, #0x000a
+ 0000B9 1F 1C [ 2] 204 ldw (0x1c, sp), x
+ 0000BB 20 33 [ 2] 205 jra 00120$
+ 0000BD 206 00119$:
+ 207 ; ../strtoul.c: 92: else if (base == 16 && (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2)))
+ 0000BD 1E 1C [ 2] 208 ldw x, (0x1c, sp)
+ 0000BF A3 00 10 [ 2] 209 cpw x, #0x0010
+ 0000C2 26 2C [ 1] 210 jrne 00120$
+ 0000C4 4B 02 [ 1] 211 push #0x02
+ 0000C6 4B 00 [ 1] 212 push #0x00
+ 0000C8 4Br00 [ 1] 213 push #<(___str_0 + 0)
+ 0000CA 4Bs00 [ 1] 214 push #((___str_0 + 0) >> 8)
+ 0000CC 1E 17 [ 2] 215 ldw x, (0x17, sp)
+ 0000CE 89 [ 2] 216 pushw x
+ 0000CF 8Ds00r00r00 [ 5] 217 callf _strncmp
+ 0000D3 5B 06 [ 2] 218 addw sp, #6
+ 0000D5 5D [ 2] 219 tnzw x
+ 0000D6 27 14 [ 1] 220 jreq 00114$
+ 0000D8 4B 02 [ 1] 221 push #0x02
+ 0000DA 4B 00 [ 1] 222 push #0x00
+ 0000DC 4Br03 [ 1] 223 push #<(___str_1 + 0)
+ 0000DE 4Bs00 [ 1] 224 push #((___str_1 + 0) >> 8)
+ 0000E0 1E 17 [ 2] 225 ldw x, (0x17, sp)
+ 0000E2 89 [ 2] 226 pushw x
+ 0000E3 8Ds00r00r00 [ 5] 227 callf _strncmp
+ 0000E7 5B 06 [ 2] 228 addw sp, #6
+ 0000E9 5D [ 2] 229 tnzw x
+ 0000EA 26 04 [ 1] 230 jrne 00120$
+ 0000EC 231 00114$:
+ 232 ; ../strtoul.c: 93: ptr += 2;
+ 0000EC 16 11 [ 2] 233 ldw y, (0x11, sp)
+ 0000EE 17 13 [ 2] 234 ldw (0x13, sp), y
+ 0000F0 235 00120$:
+ 236 ; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0)
+ 0000F0 7B 1D [ 1] 237 ld a, (0x1d, sp)
+ 0000F2 6B 07 [ 1] 238 ld (0x07, sp), a
+ 0000F4 1E 13 [ 2] 239 ldw x, (0x13, sp)
+ 0000F6 F6 [ 1] 240 ld a, (x)
+ 0000F7 97 [ 1] 241 ld xl, a
+ 0000F8 7B 07 [ 1] 242 ld a, (0x07, sp)
+ 0000FA 88 [ 1] 243 push a
+ 0000FB 9F [ 1] 244 ld a, xl
+ 0000FC 88 [ 1] 245 push a
+ 0000FD 8Ds00r00r00 [ 5] 246 callf __isdigit
+ 000101 5B 02 [ 2] 247 addw sp, #2
+ 248 ; ../strtoul.c: 100: *endptr = (char*)nptr;
+ 000103 16 1A [ 2] 249 ldw y, (0x1a, sp)
+ 000105 17 08 [ 2] 250 ldw (0x08, sp), y
+ 251 ; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0)
+ 000107 4D [ 1] 252 tnz a
+ 000108 2A 10 [ 1] 253 jrpl 00124$
+ 254 ; ../strtoul.c: 99: if (endptr)
+ 00010A 1E 1A [ 2] 255 ldw x, (0x1a, sp)
+ 00010C 27 05 [ 1] 256 jreq 00122$
+ 257 ; ../strtoul.c: 100: *endptr = (char*)nptr;
+ 00010E 1E 08 [ 2] 258 ldw x, (0x08, sp)
+ 000110 16 18 [ 2] 259 ldw y, (0x18, sp)
+ 000112 FF [ 2] 260 ldw (x), y
+ 000113 261 00122$:
+ 262 ; ../strtoul.c: 101: return (0);
+ 000113 5F [ 1] 263 clrw x
+ 000114 90 5F [ 1] 264 clrw y
+ 000116 ACs00r01rCC [ 2] 265 jpf 00137$
+ 00011A 266 00124$:
+ 267 ; ../strtoul.c: 104: for (ret = 0;; ptr++)
+ 00011A 5F [ 1] 268 clrw x
+ 00011B 1F 11 [ 2] 269 ldw (0x11, sp), x
+ 00011D 1F 0F [ 2] 270 ldw (0x0f, sp), x
+ 00011F 271 00135$:
+ 272 ; ../strtoul.c: 107: signed char digit = _isdigit (*ptr, base);
+ 00011F 1E 13 [ 2] 273 ldw x, (0x13, sp)
+ 000121 F6 [ 1] 274 ld a, (x)
+ 000122 97 [ 1] 275 ld xl, a
+ 000123 7B 07 [ 1] 276 ld a, (0x07, sp)
+ 000125 88 [ 1] 277 push a
+ 000126 9F [ 1] 278 ld a, xl
+ 000127 88 [ 1] 279 push a
+ 000128 8Ds00r00r00 [ 5] 280 callf __isdigit
+ 00012C 5B 02 [ 2] 281 addw sp, #2
+ 282 ; ../strtoul.c: 109: if (digit < 0)
+ 00012E 6B 0A [ 1] 283 ld (0x0a, sp), a
+ 000130 2B 61 [ 1] 284 jrmi 00129$
+ 285 ; ../strtoul.c: 112: oldret = ret;
+ 000132 16 11 [ 2] 286 ldw y, (0x11, sp)
+ 000134 17 0D [ 2] 287 ldw (0x0d, sp), y
+ 000136 16 0F [ 2] 288 ldw y, (0x0f, sp)
+ 000138 17 0B [ 2] 289 ldw (0x0b, sp), y
+ 290 ; ../strtoul.c: 113: ret *= base;
+ 00013A 16 1C [ 2] 291 ldw y, (0x1c, sp)
+ 00013C 5F [ 1] 292 clrw x
+ 00013D 90 5D [ 2] 293 tnzw y
+ 00013F 2A 01 [ 1] 294 jrpl 00261$
+ 000141 5A [ 2] 295 decw x
+ 000142 296 00261$:
+ 000142 90 89 [ 2] 297 pushw y
+ 000144 89 [ 2] 298 pushw x
+ 000145 1E 15 [ 2] 299 ldw x, (0x15, sp)
+ 000147 89 [ 2] 300 pushw x
+ 000148 1E 15 [ 2] 301 ldw x, (0x15, sp)
+ 00014A 89 [ 2] 302 pushw x
+ 00014B 8Ds00r00r00 [ 5] 303 callf __mullong
+ 00014F 5B 08 [ 2] 304 addw sp, #8
+ 000151 1F 11 [ 2] 305 ldw (0x11, sp), x
+ 000153 17 0F [ 2] 306 ldw (0x0f, sp), y
+ 307 ; ../strtoul.c: 114: if (ret < oldret)
+ 000155 1E 11 [ 2] 308 ldw x, (0x11, sp)
+ 000157 13 0D [ 2] 309 cpw x, (0x0d, sp)
+ 000159 7B 10 [ 1] 310 ld a, (0x10, sp)
+ 00015B 12 0C [ 1] 311 sbc a, (0x0c, sp)
+ 00015D 7B 0F [ 1] 312 ld a, (0x0f, sp)
+ 00015F 12 0B [ 1] 313 sbc a, (0x0b, sp)
+ 000161 24 04 [ 1] 314 jrnc 00128$
+ 315 ; ../strtoul.c: 115: range_error = true;
+ 000163 A6 01 [ 1] 316 ld a, #0x01
+ 000165 6B 05 [ 1] 317 ld (0x05, sp), a
+ 000167 318 00128$:
+ 319 ; ../strtoul.c: 117: ret += (unsigned char)digit;
+ 000167 7B 0A [ 1] 320 ld a, (0x0a, sp)
+ 000169 6B 04 [ 1] 321 ld (0x04, sp), a
+ 00016B 0F 03 [ 1] 322 clr (0x03, sp)
+ 00016D 0F 02 [ 1] 323 clr (0x02, sp)
+ 00016F 0F 01 [ 1] 324 clr (0x01, sp)
+ 000171 1E 11 [ 2] 325 ldw x, (0x11, sp)
+ 000173 72 FB 03 [ 2] 326 addw x, (0x03, sp)
+ 000176 1F 0C [ 2] 327 ldw (0x0c, sp), x
+ 000178 7B 10 [ 1] 328 ld a, (0x10, sp)
+ 00017A 19 02 [ 1] 329 adc a, (0x02, sp)
+ 00017C 6B 0B [ 1] 330 ld (0x0b, sp), a
+ 00017E 7B 0F [ 1] 331 ld a, (0x0f, sp)
+ 000180 19 01 [ 1] 332 adc a, (0x01, sp)
+ 000182 6B 0A [ 1] 333 ld (0x0a, sp), a
+ 000184 16 0C [ 2] 334 ldw y, (0x0c, sp)
+ 000186 17 11 [ 2] 335 ldw (0x11, sp), y
+ 000188 16 0A [ 2] 336 ldw y, (0x0a, sp)
+ 00018A 17 0F [ 2] 337 ldw (0x0f, sp), y
+ 338 ; ../strtoul.c: 104: for (ret = 0;; ptr++)
+ 00018C 1E 13 [ 2] 339 ldw x, (0x13, sp)
+ 00018E 5C [ 1] 340 incw x
+ 00018F 1F 13 [ 2] 341 ldw (0x13, sp), x
+ 000191 20 8C [ 2] 342 jra 00135$
+ 000193 343 00129$:
+ 344 ; ../strtoul.c: 120: if (endptr)
+ 000193 1E 1A [ 2] 345 ldw x, (0x1a, sp)
+ 000195 27 05 [ 1] 346 jreq 00131$
+ 347 ; ../strtoul.c: 121: *endptr = (char*)ptr;
+ 000197 1E 08 [ 2] 348 ldw x, (0x08, sp)
+ 000199 16 13 [ 2] 349 ldw y, (0x13, sp)
+ 00019B FF [ 2] 350 ldw (x), y
+ 00019C 351 00131$:
+ 352 ; ../strtoul.c: 123: if (range_error)
+ 00019C 0D 05 [ 1] 353 tnz (0x05, sp)
+ 00019E 27 0C [ 1] 354 jreq 00133$
+ 355 ; ../strtoul.c: 125: errno = ERANGE;
+ 0001A0 AE 00 22 [ 2] 356 ldw x, #0x0022
+ 0001A3 CFu00u00 [ 2] 357 ldw _errno+0, x
+ 358 ; ../strtoul.c: 126: return (ULONG_MAX);
+ 0001A6 5F [ 1] 359 clrw x
+ 0001A7 5A [ 2] 360 decw x
+ 0001A8 90 93 [ 1] 361 ldw y, x
+ 0001AA 20 20 [ 2] 362 jra 00137$
+ 0001AC 363 00133$:
+ 364 ; ../strtoul.c: 129: return (neg ? -ret : ret);
+ 0001AC 0D 06 [ 1] 365 tnz (0x06, sp)
+ 0001AE 27 10 [ 1] 366 jreq 00142$
+ 0001B0 16 11 [ 2] 367 ldw y, (0x11, sp)
+ 0001B2 90 50 [ 2] 368 negw y
+ 0001B4 1E 0F [ 2] 369 ldw x, (0x0f, sp)
+ 0001B6 24 01 [ 1] 370 jrnc 00267$
+ 0001B8 5C [ 1] 371 incw x
+ 0001B9 372 00267$:
+ 0001B9 50 [ 2] 373 negw x
+ 0001BA 17 0C [ 2] 374 ldw (0x0c, sp), y
+ 0001BC 1F 0A [ 2] 375 ldw (0x0a, sp), x
+ 0001BE 20 08 [ 2] 376 jra 00143$
+ 0001C0 377 00142$:
+ 0001C0 16 11 [ 2] 378 ldw y, (0x11, sp)
+ 0001C2 17 0C [ 2] 379 ldw (0x0c, sp), y
+ 0001C4 16 0F [ 2] 380 ldw y, (0x0f, sp)
+ 0001C6 17 0A [ 2] 381 ldw (0x0a, sp), y
+ 0001C8 382 00143$:
+ 0001C8 1E 0C [ 2] 383 ldw x, (0x0c, sp)
+ 0001CA 16 0A [ 2] 384 ldw y, (0x0a, sp)
+ 0001CC 385 00137$:
+ 386 ; ../strtoul.c: 130: }
+ 0001CC 5B 14 [ 2] 387 addw sp, #20
+ 0001CE 87 [ 5] 388 retf
+ 389 .area CODE
+ 390 .area CONST
+ 391 .area CONST
+ 000000 392 ___str_0:
+ 000000 30 78 393 .ascii "0x"
+ 000002 00 394 .db 0x00
+ 395 .area CODE
+ 396 .area CONST
+ 000003 397 ___str_1:
+ 000003 30 58 398 .ascii "0X"
+ 000005 00 399 .db 0x00
+ 400 .area CODE
+ 401 .area INITIALIZER
+ 402 .area CABS (ABS)
diff --git a/device/lib/stm8-large/strtoul.rel b/device/lib/stm8-large/strtoul.rel
new file mode 100644
index 0000000..18fa286
--- /dev/null
+++ b/device/lib/stm8-large/strtoul.rel
@@ -0,0 +1,198 @@
+XH3
+H B areas 5 global symbols
+M strtoul
+O -mstm8
+S _errno Ref000000
+S .__.ABS. Def000000
+S _strncmp Ref000000
+S __mullong Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 6 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1CF flags 0 addr 0
+S _strtoul Def00003B
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 7B 04 97 A1 30 25 0B 7B 04 A1 39 22 05
+R 00 00 00 09
+T 00 00 0D 9F A0 30 20 22
+R 00 00 00 09
+T 00 00 12
+R 00 00 00 09
+T 00 00 12 7B 04 A1 61 25 09 A1 7A 22 05 9F AB A9
+R 00 00 00 09
+T 00 00 1F 20 13
+R 00 00 00 09
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 7B 04 A1 41 25 09 A1 5A 22 05 9F AB C9
+R 00 00 00 09
+T 00 00 2E 20 04
+R 00 00 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 A6 FF 20 06
+R 00 00 00 09
+T 00 00 34
+R 00 00 00 09
+T 00 00 34 11 05 25 02 A6 FF
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A
+R 00 00 00 09
+T 00 00 3A 87
+R 00 00 00 09
+T 00 00 3B
+R 00 00 00 09
+T 00 00 3B 52 14 16 18 0F 05 0F 06
+R 00 00 00 09
+T 00 00 43
+R 00 00 00 09
+T 00 00 43 90 F6 97 A1 20 27 04 A1 09 26 04
+R 00 00 00 09
+T 00 00 4E
+R 00 00 00 09
+T 00 00 4E 90 5C 20 F1
+R 00 00 00 09
+T 00 00 52
+R 00 00 00 09
+T 00 00 52 17 13 9F A1 2B 27 08 9F A0 2D 26 08 4C
+R 00 00 00 09
+T 00 00 5F 6B 06
+R 00 00 00 09
+T 00 00 61
+R 00 00 00 09
+T 00 00 61 1E 13 5C 1F 13
+R 00 00 00 09
+T 00 00 66
+R 00 00 00 09
+T 00 00 66 1E 13 5C 5C 1F 11 1E 1C 26 4D 4B 02 4B
+R 00 00 00 09
+T 00 00 73 00 4B 00 00 00 4B 00 00 00 1E 17 89 8D
+R 00 00 00 09 F1 09 05 00 07 F1 81 09 00 07
+T 00 00 7C 00 00 00 5B 06 5D 27 14 4B 02 4B 00 4B
+R 00 00 00 09 82 03 00 02
+T 00 00 89 00 00 03 4B 00 00 03 1E 17 89 8D
+R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07
+T 00 00 90 00 00 00 5B 06 5D 26 0B
+R 00 00 00 09 82 03 00 02
+T 00 00 98
+R 00 00 00 09
+T 00 00 98 AE 00 10 1F 1C 16 11 17 13 20 4D
+R 00 00 00 09
+T 00 00 A3
+R 00 00 00 09
+T 00 00 A3 1E 13 F6 A1 30 26 0C AE 00 08 1F 1C 1E
+R 00 00 00 09
+T 00 00 B0 13 5C 1F 13 20 3A
+R 00 00 00 09
+T 00 00 B6
+R 00 00 00 09
+T 00 00 B6 AE 00 0A 1F 1C 20 33
+R 00 00 00 09
+T 00 00 BD
+R 00 00 00 09
+T 00 00 BD 1E 1C A3 00 10 26 2C 4B 02 4B 00 4B
+R 00 00 00 09
+T 00 00 C9 00 00 00 4B 00 00 00 1E 17 89 8D
+R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07
+T 00 00 D0 00 00 00 5B 06 5D 27 14 4B 02 4B 00 4B
+R 00 00 00 09 82 03 00 02
+T 00 00 DD 00 00 03 4B 00 00 03 1E 17 89 8D
+R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07
+T 00 00 E4 00 00 00 5B 06 5D 26 04
+R 00 00 00 09 82 03 00 02
+T 00 00 EC
+R 00 00 00 09
+T 00 00 EC 16 11 17 13
+R 00 00 00 09
+T 00 00 F0
+R 00 00 00 09
+T 00 00 F0 7B 1D 6B 07 1E 13 F6 97 7B 07 88 9F 88
+R 00 00 00 09
+T 00 00 FD 8D 00 00 00 5B 02 16 1A 17 08 4D 2A 10
+R 00 00 00 09 80 04 00 09
+T 00 01 0A 1E 1A 27 05 1E 08 16 18 FF
+R 00 00 00 09
+T 00 01 13
+R 00 00 00 09
+T 00 01 13 5F 90 5F AC 00 01 CC
+R 00 00 00 09 80 07 00 09
+T 00 01 1A
+R 00 00 00 09
+T 00 01 1A 5F 1F 11 1F 0F
+R 00 00 00 09
+T 00 01 1F
+R 00 00 00 09
+T 00 01 1F 1E 13 F6 97 7B 07 88 9F 88 8D
+R 00 00 00 09
+T 00 01 29 00 00 00 5B 02 6B 0A 2B 61 16 11 17 0D
+R 00 00 00 09 80 03 00 09
+T 00 01 36 16 0F 17 0B 16 1C 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 01 42
+R 00 00 00 09
+T 00 01 42 90 89 89 1E 15 89 1E 15 89 8D
+R 00 00 00 09
+T 00 01 4C 00 00 00 5B 08 1F 11 17 0F 1E 11 13 0D
+R 00 00 00 09 82 03 00 03
+T 00 01 59 7B 10 12 0C 7B 0F 12 0B 24 04 A6 01 6B
+R 00 00 00 09
+T 00 01 66 05
+R 00 00 00 09
+T 00 01 67
+R 00 00 00 09
+T 00 01 67 7B 0A 6B 04 0F 03 0F 02 0F 01 1E 11 72
+R 00 00 00 09
+T 00 01 74 FB 03 1F 0C 7B 10 19 02 6B 0B 7B 0F 19
+R 00 00 00 09
+T 00 01 81 01 6B 0A 16 0C 17 11 16 0A 17 0F 1E 13
+R 00 00 00 09
+T 00 01 8E 5C 1F 13 20 8C
+R 00 00 00 09
+T 00 01 93
+R 00 00 00 09
+T 00 01 93 1E 1A 27 05 1E 08 16 13 FF
+R 00 00 00 09
+T 00 01 9C
+R 00 00 00 09
+T 00 01 9C 0D 05 27 0C AE 00 22 CF 00 00 5F 5A 90
+R 00 00 00 09 12 0B 00 00
+T 00 01 A9 93 20 20
+R 00 00 00 09
+T 00 01 AC
+R 00 00 00 09
+T 00 01 AC 0D 06 27 10 16 11 90 50 1E 0F 24 01 5C
+R 00 00 00 09
+T 00 01 B9
+R 00 00 00 09
+T 00 01 B9 50 17 0C 1F 0A 20 08
+R 00 00 00 09
+T 00 01 C0
+R 00 00 00 09
+T 00 01 C0 16 11 17 0C 16 0F 17 0A
+R 00 00 00 09
+T 00 01 C8
+R 00 00 00 09
+T 00 01 C8 1E 0C 16 0A
+R 00 00 00 09
+T 00 01 CC
+R 00 00 00 09
+T 00 01 CC 5B 14 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 30 78 00
+R 00 00 00 07
+T 00 00 03
+R 00 00 00 07
+T 00 00 03 30 58 00
+R 00 00 00 07
diff --git a/device/lib/stm8-large/strtoul.sym b/device/lib/stm8-large/strtoul.sym
new file mode 100644
index 0000000..43db608
--- /dev/null
+++ b/device/lib/stm8-large/strtoul.sym
@@ -0,0 +1,35 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 7 ___str_0 000000 R
+ 7 ___str_1 000003 R
+ 9 __isdigit 000000 R
+ __mullong ****** GX
+ _errno ****** GX
+ _strncmp ****** GX
+ 9 _strtoul 00003B GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 6 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1CF flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/strxfrm.asm b/device/lib/stm8-large/strxfrm.asm
new file mode 100644
index 0000000..b8c05cb
--- /dev/null
+++ b/device/lib/stm8-large/strxfrm.asm
@@ -0,0 +1,76 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module strxfrm
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _strlen
+ .globl _strncpy
+ .globl _strxfrm
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../strxfrm.c: 31: size_t strxfrm(char *dest, const char *src, size_t n)
+; -----------------------------------------
+; function strxfrm
+; -----------------------------------------
+_strxfrm:
+; ../strxfrm.c: 33: strncpy(dest, src, n);
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ callf _strncpy
+ addw sp, #6
+; ../strxfrm.c: 34: return(strlen(src) + 1);
+ ldw x, (0x06, sp)
+ pushw x
+ callf _strlen
+ addw sp, #2
+ incw x
+; ../strxfrm.c: 35: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/strxfrm.lst b/device/lib/stm8-large/strxfrm.lst
new file mode 100644
index 0000000..22840ed
--- /dev/null
+++ b/device/lib/stm8-large/strxfrm.lst
@@ -0,0 +1,76 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module strxfrm
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _strlen
+ 12 .globl _strncpy
+ 13 .globl _strxfrm
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../strxfrm.c: 31: size_t strxfrm(char *dest, const char *src, size_t n)
+ 52 ; -----------------------------------------
+ 53 ; function strxfrm
+ 54 ; -----------------------------------------
+ 000000 55 _strxfrm:
+ 56 ; ../strxfrm.c: 33: strncpy(dest, src, n);
+ 000000 1E 08 [ 2] 57 ldw x, (0x08, sp)
+ 000002 89 [ 2] 58 pushw x
+ 000003 1E 08 [ 2] 59 ldw x, (0x08, sp)
+ 000005 89 [ 2] 60 pushw x
+ 000006 1E 08 [ 2] 61 ldw x, (0x08, sp)
+ 000008 89 [ 2] 62 pushw x
+ 000009 8Ds00r00r00 [ 5] 63 callf _strncpy
+ 00000D 5B 06 [ 2] 64 addw sp, #6
+ 65 ; ../strxfrm.c: 34: return(strlen(src) + 1);
+ 00000F 1E 06 [ 2] 66 ldw x, (0x06, sp)
+ 000011 89 [ 2] 67 pushw x
+ 000012 8Ds00r00r00 [ 5] 68 callf _strlen
+ 000016 5B 02 [ 2] 69 addw sp, #2
+ 000018 5C [ 1] 70 incw x
+ 71 ; ../strxfrm.c: 35: }
+ 000019 87 [ 5] 72 retf
+ 73 .area CODE
+ 74 .area CONST
+ 75 .area INITIALIZER
+ 76 .area CABS (ABS)
diff --git a/device/lib/stm8-large/strxfrm.rel b/device/lib/stm8-large/strxfrm.rel
new file mode 100644
index 0000000..fd6fb14
--- /dev/null
+++ b/device/lib/stm8-large/strxfrm.rel
@@ -0,0 +1,27 @@
+XH3
+H B areas 4 global symbols
+M strxfrm
+O -mstm8
+S .__.ABS. Def000000
+S _strncpy Ref000000
+S _strlen Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1A flags 0 addr 0
+S _strxfrm Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 08 89 1E 08 89 1E 08 89 8D
+R 00 00 00 09
+T 00 00 0A 00 00 00 5B 06 1E 06 89 8D
+R 00 00 00 09 82 03 00 01
+T 00 00 13 00 00 00 5B 02 5C 87
+R 00 00 00 09 82 03 00 02
diff --git a/device/lib/stm8-large/strxfrm.sym b/device/lib/stm8-large/strxfrm.sym
new file mode 100644
index 0000000..247920a
--- /dev/null
+++ b/device/lib/stm8-large/strxfrm.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _strlen ****** GX
+ _strncpy ****** GX
+ 9 _strxfrm 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/tancotf.asm b/device/lib/stm8-large/tancotf.asm
new file mode 100644
index 0000000..e5d6c0b
--- /dev/null
+++ b/device/lib/stm8-large/tancotf.asm
@@ -0,0 +1,408 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module tancotf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _tancotf
+ .globl _fabsf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../tancotf.c: 53: float tancotf(float x, bool iscotan)
+; -----------------------------------------
+; function tancotf
+; -----------------------------------------
+_tancotf:
+ sub sp, #14
+; ../tancotf.c: 58: if (fabsf(x) > YMAX)
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ pushw x
+ pushw y
+ push #0x00
+ push #0x08
+ push #0xc9
+ push #0x45
+ callf ___fslt
+ addw sp, #8
+ ld (0x0e, sp), a
+ jreq 00102$
+; ../tancotf.c: 60: errno = ERANGE;
+ ldw x, #0x0022
+ ldw _errno+0, x
+; ../tancotf.c: 61: return 0.0;
+ clrw x
+ clrw y
+ jpf 00115$
+00102$:
+; ../tancotf.c: 65: n=(x*TWO_O_PI+(x>0.0?0.5:-0.5)); /*works for +-x*/
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ push #0x83
+ push #0xf9
+ push #0x22
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00117$
+ clrw x
+ ldw (0x0d, sp), x
+ ldw x, #0x3f00
+ ldw (0x0b, sp), x
+ jra 00118$
+00117$:
+ clrw x
+ ldw (0x0d, sp), x
+ ldw x, #0xbf00
+ ldw (0x0b, sp), x
+00118$:
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ callf ___fs2sint
+ addw sp, #4
+; ../tancotf.c: 66: xn=n;
+ ldw (0x01, sp), x
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../tancotf.c: 68: xnum=(int)x;
+ ldw x, (0x14, sp)
+ pushw x
+ ldw x, (0x14, sp)
+ pushw x
+ callf ___fs2sint
+ addw sp, #4
+ pushw x
+ callf ___sint2fs
+ addw sp, #2
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+; ../tancotf.c: 69: xden=x-xnum;
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../tancotf.c: 70: f=((xnum-xn*C1)+xden)-xn*C2;
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0xc9
+ push #0x3f
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ push #0x22
+ push #0xaa
+ push #0xfd
+ push #0x39
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fssub
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+; ../tancotf.c: 72: if (fabsf(f) < EPS)
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ push #0x00
+ push #0x00
+ push #0x80
+ push #0x39
+ pushw x
+ pushw y
+ callf ___fslt
+ addw sp, #8
+ ld (0x0a, sp), a
+ jreq 00104$
+; ../tancotf.c: 74: xnum = f;
+ ldw y, (0x0d, sp)
+ ldw (0x05, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x03, sp), y
+; ../tancotf.c: 75: xden = 1.0;
+ clrw x
+ ldw (0x0d, sp), x
+ ldw x, #0x3f80
+ ldw (0x0b, sp), x
+ jpf 00105$
+00104$:
+; ../tancotf.c: 79: g = f*f;
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x09, sp), x
+ ldw (0x07, sp), y
+; ../tancotf.c: 80: xnum = P(f,g);
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0xb8
+ push #0x33
+ push #0xc4
+ push #0xbd
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x05, sp), x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x05, sp), x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x05, sp), x
+ ldw (0x03, sp), y
+; ../tancotf.c: 81: xden = Q(g);
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ push #0x75
+ push #0x33
+ push #0x1f
+ push #0x3c
+ callf ___fsmul
+ addw sp, #8
+ push #0xaf
+ push #0xb7
+ push #0xdb
+ push #0xbe
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ push #0x00
+ push #0x00
+ push #0x80
+ push #0x3f
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+00105$:
+; ../tancotf.c: 84: if(n&1)
+ ld a, (0x02, sp)
+ srl a
+ jrnc 00113$
+; ../tancotf.c: 87: if(iscotan) return (-xnum/xden);
+ tnz (0x16, sp)
+ jreq 00107$
+ ldw y, (0x05, sp)
+ ldw x, (0x03, sp)
+ sllw x
+ ccf
+ rrcw x
+ ld a, (0x0e, sp)
+ push a
+ ld a, (0x0e, sp)
+ push a
+ ld a, (0x0e, sp)
+ push a
+ ld a, (0x0e, sp)
+ push a
+ pushw y
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ jra 00115$
+00107$:
+; ../tancotf.c: 88: else return (-xden/xnum);
+ ldw y, (0x0d, sp)
+ ldw x, (0x0b, sp)
+ sllw x
+ ccf
+ rrcw x
+ ld a, (0x06, sp)
+ push a
+ ld a, (0x06, sp)
+ push a
+ ld a, (0x06, sp)
+ push a
+ ld a, (0x06, sp)
+ push a
+ pushw y
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ jra 00115$
+00113$:
+; ../tancotf.c: 92: if(iscotan) return (xden/xnum);
+ tnz (0x16, sp)
+ jreq 00110$
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ jra 00115$
+00110$:
+; ../tancotf.c: 93: else return (xnum/xden);
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+00115$:
+; ../tancotf.c: 95: }
+ addw sp, #14
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/tancotf.lst b/device/lib/stm8-large/tancotf.lst
new file mode 100644
index 0000000..c903f3d
--- /dev/null
+++ b/device/lib/stm8-large/tancotf.lst
@@ -0,0 +1,408 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module tancotf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _tancotf
+ 12 .globl _fabsf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../tancotf.c: 53: float tancotf(float x, bool iscotan)
+ 51 ; -----------------------------------------
+ 52 ; function tancotf
+ 53 ; -----------------------------------------
+ 000000 54 _tancotf:
+ 000000 52 0E [ 2] 55 sub sp, #14
+ 56 ; ../tancotf.c: 58: if (fabsf(x) > YMAX)
+ 000002 1E 14 [ 2] 57 ldw x, (0x14, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 14 [ 2] 59 ldw x, (0x14, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf _fabsf
+ 00000C 5B 04 [ 2] 62 addw sp, #4
+ 00000E 89 [ 2] 63 pushw x
+ 00000F 90 89 [ 2] 64 pushw y
+ 000011 4B 00 [ 1] 65 push #0x00
+ 000013 4B 08 [ 1] 66 push #0x08
+ 000015 4B C9 [ 1] 67 push #0xc9
+ 000017 4B 45 [ 1] 68 push #0x45
+ 000019 8Ds00r00r00 [ 5] 69 callf ___fslt
+ 00001D 5B 08 [ 2] 70 addw sp, #8
+ 00001F 6B 0E [ 1] 71 ld (0x0e, sp), a
+ 000021 27 0D [ 1] 72 jreq 00102$
+ 73 ; ../tancotf.c: 60: errno = ERANGE;
+ 000023 AE 00 22 [ 2] 74 ldw x, #0x0022
+ 000026 CFu00u00 [ 2] 75 ldw _errno+0, x
+ 76 ; ../tancotf.c: 61: return 0.0;
+ 000029 5F [ 1] 77 clrw x
+ 00002A 90 5F [ 1] 78 clrw y
+ 00002C ACs00r02r66 [ 2] 79 jpf 00115$
+ 000030 80 00102$:
+ 81 ; ../tancotf.c: 65: n=(x*TWO_O_PI+(x>0.0?0.5:-0.5)); /*works for +-x*/
+ 000030 1E 14 [ 2] 82 ldw x, (0x14, sp)
+ 000032 89 [ 2] 83 pushw x
+ 000033 1E 14 [ 2] 84 ldw x, (0x14, sp)
+ 000035 89 [ 2] 85 pushw x
+ 000036 4B 83 [ 1] 86 push #0x83
+ 000038 4B F9 [ 1] 87 push #0xf9
+ 00003A 4B 22 [ 1] 88 push #0x22
+ 00003C 4B 3F [ 1] 89 push #0x3f
+ 00003E 8Ds00r00r00 [ 5] 90 callf ___fsmul
+ 000042 5B 08 [ 2] 91 addw sp, #8
+ 000044 1F 09 [ 2] 92 ldw (0x09, sp), x
+ 000046 17 07 [ 2] 93 ldw (0x07, sp), y
+ 000048 1E 14 [ 2] 94 ldw x, (0x14, sp)
+ 00004A 89 [ 2] 95 pushw x
+ 00004B 1E 14 [ 2] 96 ldw x, (0x14, sp)
+ 00004D 89 [ 2] 97 pushw x
+ 00004E 5F [ 1] 98 clrw x
+ 00004F 89 [ 2] 99 pushw x
+ 000050 5F [ 1] 100 clrw x
+ 000051 89 [ 2] 101 pushw x
+ 000052 8Ds00r00r00 [ 5] 102 callf ___fslt
+ 000056 5B 08 [ 2] 103 addw sp, #8
+ 000058 4D [ 1] 104 tnz a
+ 000059 27 0A [ 1] 105 jreq 00117$
+ 00005B 5F [ 1] 106 clrw x
+ 00005C 1F 0D [ 2] 107 ldw (0x0d, sp), x
+ 00005E AE 3F 00 [ 2] 108 ldw x, #0x3f00
+ 000061 1F 0B [ 2] 109 ldw (0x0b, sp), x
+ 000063 20 08 [ 2] 110 jra 00118$
+ 000065 111 00117$:
+ 000065 5F [ 1] 112 clrw x
+ 000066 1F 0D [ 2] 113 ldw (0x0d, sp), x
+ 000068 AE BF 00 [ 2] 114 ldw x, #0xbf00
+ 00006B 1F 0B [ 2] 115 ldw (0x0b, sp), x
+ 00006D 116 00118$:
+ 00006D 1E 0D [ 2] 117 ldw x, (0x0d, sp)
+ 00006F 89 [ 2] 118 pushw x
+ 000070 1E 0D [ 2] 119 ldw x, (0x0d, sp)
+ 000072 89 [ 2] 120 pushw x
+ 000073 1E 0D [ 2] 121 ldw x, (0x0d, sp)
+ 000075 89 [ 2] 122 pushw x
+ 000076 1E 0D [ 2] 123 ldw x, (0x0d, sp)
+ 000078 89 [ 2] 124 pushw x
+ 000079 8Ds00r00r00 [ 5] 125 callf ___fsadd
+ 00007D 5B 08 [ 2] 126 addw sp, #8
+ 00007F 89 [ 2] 127 pushw x
+ 000080 90 89 [ 2] 128 pushw y
+ 000082 8Ds00r00r00 [ 5] 129 callf ___fs2sint
+ 000086 5B 04 [ 2] 130 addw sp, #4
+ 131 ; ../tancotf.c: 66: xn=n;
+ 000088 1F 01 [ 2] 132 ldw (0x01, sp), x
+ 00008A 89 [ 2] 133 pushw x
+ 00008B 8Ds00r00r00 [ 5] 134 callf ___sint2fs
+ 00008F 5B 02 [ 2] 135 addw sp, #2
+ 000091 1F 05 [ 2] 136 ldw (0x05, sp), x
+ 000093 17 03 [ 2] 137 ldw (0x03, sp), y
+ 138 ; ../tancotf.c: 68: xnum=(int)x;
+ 000095 1E 14 [ 2] 139 ldw x, (0x14, sp)
+ 000097 89 [ 2] 140 pushw x
+ 000098 1E 14 [ 2] 141 ldw x, (0x14, sp)
+ 00009A 89 [ 2] 142 pushw x
+ 00009B 8Ds00r00r00 [ 5] 143 callf ___fs2sint
+ 00009F 5B 04 [ 2] 144 addw sp, #4
+ 0000A1 89 [ 2] 145 pushw x
+ 0000A2 8Ds00r00r00 [ 5] 146 callf ___sint2fs
+ 0000A6 5B 02 [ 2] 147 addw sp, #2
+ 0000A8 1F 0D [ 2] 148 ldw (0x0d, sp), x
+ 0000AA 17 0B [ 2] 149 ldw (0x0b, sp), y
+ 150 ; ../tancotf.c: 69: xden=x-xnum;
+ 0000AC 1E 0D [ 2] 151 ldw x, (0x0d, sp)
+ 0000AE 89 [ 2] 152 pushw x
+ 0000AF 1E 0D [ 2] 153 ldw x, (0x0d, sp)
+ 0000B1 89 [ 2] 154 pushw x
+ 0000B2 1E 18 [ 2] 155 ldw x, (0x18, sp)
+ 0000B4 89 [ 2] 156 pushw x
+ 0000B5 1E 18 [ 2] 157 ldw x, (0x18, sp)
+ 0000B7 89 [ 2] 158 pushw x
+ 0000B8 8Ds00r00r00 [ 5] 159 callf ___fssub
+ 0000BC 5B 08 [ 2] 160 addw sp, #8
+ 0000BE 1F 09 [ 2] 161 ldw (0x09, sp), x
+ 0000C0 17 07 [ 2] 162 ldw (0x07, sp), y
+ 163 ; ../tancotf.c: 70: f=((xnum-xn*C1)+xden)-xn*C2;
+ 0000C2 1E 05 [ 2] 164 ldw x, (0x05, sp)
+ 0000C4 89 [ 2] 165 pushw x
+ 0000C5 1E 05 [ 2] 166 ldw x, (0x05, sp)
+ 0000C7 89 [ 2] 167 pushw x
+ 0000C8 5F [ 1] 168 clrw x
+ 0000C9 89 [ 2] 169 pushw x
+ 0000CA 4B C9 [ 1] 170 push #0xc9
+ 0000CC 4B 3F [ 1] 171 push #0x3f
+ 0000CE 8Ds00r00r00 [ 5] 172 callf ___fsmul
+ 0000D2 5B 08 [ 2] 173 addw sp, #8
+ 0000D4 89 [ 2] 174 pushw x
+ 0000D5 90 89 [ 2] 175 pushw y
+ 0000D7 1E 11 [ 2] 176 ldw x, (0x11, sp)
+ 0000D9 89 [ 2] 177 pushw x
+ 0000DA 1E 11 [ 2] 178 ldw x, (0x11, sp)
+ 0000DC 89 [ 2] 179 pushw x
+ 0000DD 8Ds00r00r00 [ 5] 180 callf ___fssub
+ 0000E1 5B 08 [ 2] 181 addw sp, #8
+ 0000E3 1F 0D [ 2] 182 ldw (0x0d, sp), x
+ 0000E5 1E 09 [ 2] 183 ldw x, (0x09, sp)
+ 0000E7 89 [ 2] 184 pushw x
+ 0000E8 1E 09 [ 2] 185 ldw x, (0x09, sp)
+ 0000EA 89 [ 2] 186 pushw x
+ 0000EB 1E 11 [ 2] 187 ldw x, (0x11, sp)
+ 0000ED 89 [ 2] 188 pushw x
+ 0000EE 90 89 [ 2] 189 pushw y
+ 0000F0 8Ds00r00r00 [ 5] 190 callf ___fsadd
+ 0000F4 5B 08 [ 2] 191 addw sp, #8
+ 0000F6 1F 0D [ 2] 192 ldw (0x0d, sp), x
+ 0000F8 17 0B [ 2] 193 ldw (0x0b, sp), y
+ 0000FA 1E 05 [ 2] 194 ldw x, (0x05, sp)
+ 0000FC 89 [ 2] 195 pushw x
+ 0000FD 1E 05 [ 2] 196 ldw x, (0x05, sp)
+ 0000FF 89 [ 2] 197 pushw x
+ 000100 4B 22 [ 1] 198 push #0x22
+ 000102 4B AA [ 1] 199 push #0xaa
+ 000104 4B FD [ 1] 200 push #0xfd
+ 000106 4B 39 [ 1] 201 push #0x39
+ 000108 8Ds00r00r00 [ 5] 202 callf ___fsmul
+ 00010C 5B 08 [ 2] 203 addw sp, #8
+ 00010E 89 [ 2] 204 pushw x
+ 00010F 90 89 [ 2] 205 pushw y
+ 000111 1E 11 [ 2] 206 ldw x, (0x11, sp)
+ 000113 89 [ 2] 207 pushw x
+ 000114 1E 11 [ 2] 208 ldw x, (0x11, sp)
+ 000116 89 [ 2] 209 pushw x
+ 000117 8Ds00r00r00 [ 5] 210 callf ___fssub
+ 00011B 5B 08 [ 2] 211 addw sp, #8
+ 00011D 1F 0D [ 2] 212 ldw (0x0d, sp), x
+ 00011F 17 0B [ 2] 213 ldw (0x0b, sp), y
+ 214 ; ../tancotf.c: 72: if (fabsf(f) < EPS)
+ 000121 1E 0D [ 2] 215 ldw x, (0x0d, sp)
+ 000123 89 [ 2] 216 pushw x
+ 000124 1E 0D [ 2] 217 ldw x, (0x0d, sp)
+ 000126 89 [ 2] 218 pushw x
+ 000127 8Ds00r00r00 [ 5] 219 callf _fabsf
+ 00012B 5B 04 [ 2] 220 addw sp, #4
+ 00012D 4B 00 [ 1] 221 push #0x00
+ 00012F 4B 00 [ 1] 222 push #0x00
+ 000131 4B 80 [ 1] 223 push #0x80
+ 000133 4B 39 [ 1] 224 push #0x39
+ 000135 89 [ 2] 225 pushw x
+ 000136 90 89 [ 2] 226 pushw y
+ 000138 8Ds00r00r00 [ 5] 227 callf ___fslt
+ 00013C 5B 08 [ 2] 228 addw sp, #8
+ 00013E 6B 0A [ 1] 229 ld (0x0a, sp), a
+ 000140 27 14 [ 1] 230 jreq 00104$
+ 231 ; ../tancotf.c: 74: xnum = f;
+ 000142 16 0D [ 2] 232 ldw y, (0x0d, sp)
+ 000144 17 05 [ 2] 233 ldw (0x05, sp), y
+ 000146 16 0B [ 2] 234 ldw y, (0x0b, sp)
+ 000148 17 03 [ 2] 235 ldw (0x03, sp), y
+ 236 ; ../tancotf.c: 75: xden = 1.0;
+ 00014A 5F [ 1] 237 clrw x
+ 00014B 1F 0D [ 2] 238 ldw (0x0d, sp), x
+ 00014D AE 3F 80 [ 2] 239 ldw x, #0x3f80
+ 000150 1F 0B [ 2] 240 ldw (0x0b, sp), x
+ 000152 ACs00r01rF7 [ 2] 241 jpf 00105$
+ 000156 242 00104$:
+ 243 ; ../tancotf.c: 79: g = f*f;
+ 000156 1E 0D [ 2] 244 ldw x, (0x0d, sp)
+ 000158 89 [ 2] 245 pushw x
+ 000159 1E 0D [ 2] 246 ldw x, (0x0d, sp)
+ 00015B 89 [ 2] 247 pushw x
+ 00015C 1E 11 [ 2] 248 ldw x, (0x11, sp)
+ 00015E 89 [ 2] 249 pushw x
+ 00015F 1E 11 [ 2] 250 ldw x, (0x11, sp)
+ 000161 89 [ 2] 251 pushw x
+ 000162 8Ds00r00r00 [ 5] 252 callf ___fsmul
+ 000166 5B 08 [ 2] 253 addw sp, #8
+ 000168 1F 09 [ 2] 254 ldw (0x09, sp), x
+ 00016A 17 07 [ 2] 255 ldw (0x07, sp), y
+ 256 ; ../tancotf.c: 80: xnum = P(f,g);
+ 00016C 1E 09 [ 2] 257 ldw x, (0x09, sp)
+ 00016E 89 [ 2] 258 pushw x
+ 00016F 1E 09 [ 2] 259 ldw x, (0x09, sp)
+ 000171 89 [ 2] 260 pushw x
+ 000172 4B B8 [ 1] 261 push #0xb8
+ 000174 4B 33 [ 1] 262 push #0x33
+ 000176 4B C4 [ 1] 263 push #0xc4
+ 000178 4B BD [ 1] 264 push #0xbd
+ 00017A 8Ds00r00r00 [ 5] 265 callf ___fsmul
+ 00017E 5B 08 [ 2] 266 addw sp, #8
+ 000180 1F 05 [ 2] 267 ldw (0x05, sp), x
+ 000182 1E 0D [ 2] 268 ldw x, (0x0d, sp)
+ 000184 89 [ 2] 269 pushw x
+ 000185 1E 0D [ 2] 270 ldw x, (0x0d, sp)
+ 000187 89 [ 2] 271 pushw x
+ 000188 1E 09 [ 2] 272 ldw x, (0x09, sp)
+ 00018A 89 [ 2] 273 pushw x
+ 00018B 90 89 [ 2] 274 pushw y
+ 00018D 8Ds00r00r00 [ 5] 275 callf ___fsmul
+ 000191 5B 08 [ 2] 276 addw sp, #8
+ 000193 1F 05 [ 2] 277 ldw (0x05, sp), x
+ 000195 1E 0D [ 2] 278 ldw x, (0x0d, sp)
+ 000197 89 [ 2] 279 pushw x
+ 000198 1E 0D [ 2] 280 ldw x, (0x0d, sp)
+ 00019A 89 [ 2] 281 pushw x
+ 00019B 1E 09 [ 2] 282 ldw x, (0x09, sp)
+ 00019D 89 [ 2] 283 pushw x
+ 00019E 90 89 [ 2] 284 pushw y
+ 0001A0 8Ds00r00r00 [ 5] 285 callf ___fsadd
+ 0001A4 5B 08 [ 2] 286 addw sp, #8
+ 0001A6 1F 05 [ 2] 287 ldw (0x05, sp), x
+ 0001A8 17 03 [ 2] 288 ldw (0x03, sp), y
+ 289 ; ../tancotf.c: 81: xden = Q(g);
+ 0001AA 1E 09 [ 2] 290 ldw x, (0x09, sp)
+ 0001AC 89 [ 2] 291 pushw x
+ 0001AD 1E 09 [ 2] 292 ldw x, (0x09, sp)
+ 0001AF 89 [ 2] 293 pushw x
+ 0001B0 4B 75 [ 1] 294 push #0x75
+ 0001B2 4B 33 [ 1] 295 push #0x33
+ 0001B4 4B 1F [ 1] 296 push #0x1f
+ 0001B6 4B 3C [ 1] 297 push #0x3c
+ 0001B8 8Ds00r00r00 [ 5] 298 callf ___fsmul
+ 0001BC 5B 08 [ 2] 299 addw sp, #8
+ 0001BE 4B AF [ 1] 300 push #0xaf
+ 0001C0 4B B7 [ 1] 301 push #0xb7
+ 0001C2 4B DB [ 1] 302 push #0xdb
+ 0001C4 4B BE [ 1] 303 push #0xbe
+ 0001C6 89 [ 2] 304 pushw x
+ 0001C7 90 89 [ 2] 305 pushw y
+ 0001C9 8Ds00r00r00 [ 5] 306 callf ___fsadd
+ 0001CD 5B 08 [ 2] 307 addw sp, #8
+ 0001CF 1F 0D [ 2] 308 ldw (0x0d, sp), x
+ 0001D1 1E 09 [ 2] 309 ldw x, (0x09, sp)
+ 0001D3 89 [ 2] 310 pushw x
+ 0001D4 1E 09 [ 2] 311 ldw x, (0x09, sp)
+ 0001D6 89 [ 2] 312 pushw x
+ 0001D7 1E 11 [ 2] 313 ldw x, (0x11, sp)
+ 0001D9 89 [ 2] 314 pushw x
+ 0001DA 90 89 [ 2] 315 pushw y
+ 0001DC 8Ds00r00r00 [ 5] 316 callf ___fsmul
+ 0001E0 5B 08 [ 2] 317 addw sp, #8
+ 0001E2 4B 00 [ 1] 318 push #0x00
+ 0001E4 4B 00 [ 1] 319 push #0x00
+ 0001E6 4B 80 [ 1] 320 push #0x80
+ 0001E8 4B 3F [ 1] 321 push #0x3f
+ 0001EA 89 [ 2] 322 pushw x
+ 0001EB 90 89 [ 2] 323 pushw y
+ 0001ED 8Ds00r00r00 [ 5] 324 callf ___fsadd
+ 0001F1 5B 08 [ 2] 325 addw sp, #8
+ 0001F3 1F 0D [ 2] 326 ldw (0x0d, sp), x
+ 0001F5 17 0B [ 2] 327 ldw (0x0b, sp), y
+ 0001F7 328 00105$:
+ 329 ; ../tancotf.c: 84: if(n&1)
+ 0001F7 7B 02 [ 1] 330 ld a, (0x02, sp)
+ 0001F9 44 [ 1] 331 srl a
+ 0001FA 24 40 [ 1] 332 jrnc 00113$
+ 333 ; ../tancotf.c: 87: if(iscotan) return (-xnum/xden);
+ 0001FC 0D 16 [ 1] 334 tnz (0x16, sp)
+ 0001FE 27 1E [ 1] 335 jreq 00107$
+ 000200 16 05 [ 2] 336 ldw y, (0x05, sp)
+ 000202 1E 03 [ 2] 337 ldw x, (0x03, sp)
+ 000204 58 [ 2] 338 sllw x
+ 000205 8C [ 1] 339 ccf
+ 000206 56 [ 2] 340 rrcw x
+ 000207 7B 0E [ 1] 341 ld a, (0x0e, sp)
+ 000209 88 [ 1] 342 push a
+ 00020A 7B 0E [ 1] 343 ld a, (0x0e, sp)
+ 00020C 88 [ 1] 344 push a
+ 00020D 7B 0E [ 1] 345 ld a, (0x0e, sp)
+ 00020F 88 [ 1] 346 push a
+ 000210 7B 0E [ 1] 347 ld a, (0x0e, sp)
+ 000212 88 [ 1] 348 push a
+ 000213 90 89 [ 2] 349 pushw y
+ 000215 89 [ 2] 350 pushw x
+ 000216 8Ds00r00r00 [ 5] 351 callf ___fsdiv
+ 00021A 5B 08 [ 2] 352 addw sp, #8
+ 00021C 20 48 [ 2] 353 jra 00115$
+ 00021E 354 00107$:
+ 355 ; ../tancotf.c: 88: else return (-xden/xnum);
+ 00021E 16 0D [ 2] 356 ldw y, (0x0d, sp)
+ 000220 1E 0B [ 2] 357 ldw x, (0x0b, sp)
+ 000222 58 [ 2] 358 sllw x
+ 000223 8C [ 1] 359 ccf
+ 000224 56 [ 2] 360 rrcw x
+ 000225 7B 06 [ 1] 361 ld a, (0x06, sp)
+ 000227 88 [ 1] 362 push a
+ 000228 7B 06 [ 1] 363 ld a, (0x06, sp)
+ 00022A 88 [ 1] 364 push a
+ 00022B 7B 06 [ 1] 365 ld a, (0x06, sp)
+ 00022D 88 [ 1] 366 push a
+ 00022E 7B 06 [ 1] 367 ld a, (0x06, sp)
+ 000230 88 [ 1] 368 push a
+ 000231 90 89 [ 2] 369 pushw y
+ 000233 89 [ 2] 370 pushw x
+ 000234 8Ds00r00r00 [ 5] 371 callf ___fsdiv
+ 000238 5B 08 [ 2] 372 addw sp, #8
+ 00023A 20 2A [ 2] 373 jra 00115$
+ 00023C 374 00113$:
+ 375 ; ../tancotf.c: 92: if(iscotan) return (xden/xnum);
+ 00023C 0D 16 [ 1] 376 tnz (0x16, sp)
+ 00023E 27 14 [ 1] 377 jreq 00110$
+ 000240 1E 05 [ 2] 378 ldw x, (0x05, sp)
+ 000242 89 [ 2] 379 pushw x
+ 000243 1E 05 [ 2] 380 ldw x, (0x05, sp)
+ 000245 89 [ 2] 381 pushw x
+ 000246 1E 11 [ 2] 382 ldw x, (0x11, sp)
+ 000248 89 [ 2] 383 pushw x
+ 000249 1E 11 [ 2] 384 ldw x, (0x11, sp)
+ 00024B 89 [ 2] 385 pushw x
+ 00024C 8Ds00r00r00 [ 5] 386 callf ___fsdiv
+ 000250 5B 08 [ 2] 387 addw sp, #8
+ 000252 20 12 [ 2] 388 jra 00115$
+ 000254 389 00110$:
+ 390 ; ../tancotf.c: 93: else return (xnum/xden);
+ 000254 1E 0D [ 2] 391 ldw x, (0x0d, sp)
+ 000256 89 [ 2] 392 pushw x
+ 000257 1E 0D [ 2] 393 ldw x, (0x0d, sp)
+ 000259 89 [ 2] 394 pushw x
+ 00025A 1E 09 [ 2] 395 ldw x, (0x09, sp)
+ 00025C 89 [ 2] 396 pushw x
+ 00025D 1E 09 [ 2] 397 ldw x, (0x09, sp)
+ 00025F 89 [ 2] 398 pushw x
+ 000260 8Ds00r00r00 [ 5] 399 callf ___fsdiv
+ 000264 5B 08 [ 2] 400 addw sp, #8
+ 000266 401 00115$:
+ 402 ; ../tancotf.c: 95: }
+ 000266 5B 0E [ 2] 403 addw sp, #14
+ 000268 87 [ 5] 404 retf
+ 405 .area CODE
+ 406 .area CONST
+ 407 .area INITIALIZER
+ 408 .area CABS (ABS)
diff --git a/device/lib/stm8-large/tancotf.rel b/device/lib/stm8-large/tancotf.rel
new file mode 100644
index 0000000..fa4af26
--- /dev/null
+++ b/device/lib/stm8-large/tancotf.rel
@@ -0,0 +1,158 @@
+XH3
+H B areas B global symbols
+M tancotf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _errno Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _fabsf Ref000000
+S ___sint2fs Ref000000
+S ___fs2sint Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 269 flags 0 addr 0
+S _tancotf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0E 1E 14 89 1E 14 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 89 90 89 4B 00 4B 08 4B
+R 00 00 00 09 82 03 00 06
+T 00 00 16 C9 4B 45 8D 00 00 00 5B 08 6B 0E 27 0D
+R 00 00 00 09 82 07 00 03
+T 00 00 23 AE 00 22 CF 00 00 5F 90 5F AC
+R 00 00 00 09 12 07 00 02
+T 00 00 2D 00 02 66
+R 00 00 00 09 80 03 00 09
+T 00 00 30
+R 00 00 00 09
+T 00 00 30 1E 14 89 1E 14 89 4B 83 4B F9 4B 22 4B
+R 00 00 00 09
+T 00 00 3D 3F 8D 00 00 00 5B 08 1F 09 17 07 1E 14
+R 00 00 00 09 82 05 00 01
+T 00 00 4A 89 1E 14 89 5F 89 5F 89 8D
+R 00 00 00 09
+T 00 00 53 00 00 00 5B 08 4D 27 0A 5F 1F 0D AE
+R 00 00 00 09 82 03 00 03
+T 00 00 5F 3F 00 1F 0B 20 08
+R 00 00 00 09
+T 00 00 65
+R 00 00 00 09
+T 00 00 65 5F 1F 0D AE BF 00 1F 0B
+R 00 00 00 09
+T 00 00 6D
+R 00 00 00 09
+T 00 00 6D 1E 0D 89 1E 0D 89 1E 0D 89 1E 0D 89 8D
+R 00 00 00 09
+T 00 00 7A 00 00 00 5B 08 89 90 89 8D
+R 00 00 00 09 82 03 00 05
+T 00 00 83 00 00 00 5B 04 1F 01 89 8D
+R 00 00 00 09 82 03 00 08
+T 00 00 8C 00 00 00 5B 02 1F 05 17 03 1E 14 89 1E
+R 00 00 00 09 82 03 00 07
+T 00 00 99 14 89 8D 00 00 00 5B 04 89 8D
+R 00 00 00 09 82 06 00 08
+T 00 00 A3 00 00 00 5B 02 1F 0D 17 0B 1E 0D 89 1E
+R 00 00 00 09 82 03 00 07
+T 00 00 B0 0D 89 1E 18 89 1E 18 89 8D
+R 00 00 00 09
+T 00 00 B9 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E
+R 00 00 00 09 82 03 00 00
+T 00 00 C6 05 89 5F 89 4B C9 4B 3F 8D
+R 00 00 00 09
+T 00 00 CF 00 00 00 5B 08 89 90 89 1E 11 89 1E 11
+R 00 00 00 09 82 03 00 01
+T 00 00 DC 89 8D 00 00 00 5B 08 1F 0D 1E 09 89 1E
+R 00 00 00 09 82 05 00 00
+T 00 00 E9 09 89 1E 11 89 90 89 8D
+R 00 00 00 09
+T 00 00 F1 00 00 00 5B 08 1F 0D 17 0B 1E 05 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 00 FE 05 89 4B 22 4B AA 4B FD 4B 39 8D
+R 00 00 00 09
+T 00 01 09 00 00 00 5B 08 89 90 89 1E 11 89 1E 11
+R 00 00 00 09 82 03 00 01
+T 00 01 16 89 8D 00 00 00 5B 08 1F 0D 17 0B 1E 0D
+R 00 00 00 09 82 05 00 00
+T 00 01 23 89 1E 0D 89 8D 00 00 00 5B 04 4B 00 4B
+R 00 00 00 09 82 08 00 06
+T 00 01 30 00 4B 80 4B 39 89 90 89 8D
+R 00 00 00 09
+T 00 01 39 00 00 00 5B 08 6B 0A 27 14 16 0D 17 05
+R 00 00 00 09 82 03 00 03
+T 00 01 46 16 0B 17 03 5F 1F 0D AE 3F 80 1F 0B AC
+R 00 00 00 09
+T 00 01 53 00 01 F7
+R 00 00 00 09 80 03 00 09
+T 00 01 56
+R 00 00 00 09
+T 00 01 56 1E 0D 89 1E 0D 89 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 01 63 00 00 00 5B 08 1F 09 17 07 1E 09 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 70 09 89 4B B8 4B 33 4B C4 4B BD 8D
+R 00 00 00 09
+T 00 01 7B 00 00 00 5B 08 1F 05 1E 0D 89 1E 0D 89
+R 00 00 00 09 82 03 00 01
+T 00 01 88 1E 09 89 90 89 8D 00 00 00 5B 08 1F 05
+R 00 00 00 09 82 09 00 01
+T 00 01 95 1E 0D 89 1E 0D 89 1E 09 89 90 89 8D
+R 00 00 00 09
+T 00 01 A1 00 00 00 5B 08 1F 05 17 03 1E 09 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 01 AE 09 89 4B 75 4B 33 4B 1F 4B 3C 8D
+R 00 00 00 09
+T 00 01 B9 00 00 00 5B 08 4B AF 4B B7 4B DB 4B BE
+R 00 00 00 09 82 03 00 01
+T 00 01 C6 89 90 89 8D 00 00 00 5B 08 1F 0D 1E 09
+R 00 00 00 09 82 07 00 05
+T 00 01 D3 89 1E 09 89 1E 11 89 90 89 8D
+R 00 00 00 09
+T 00 01 DD 00 00 00 5B 08 4B 00 4B 00 4B 80 4B 3F
+R 00 00 00 09 82 03 00 01
+T 00 01 EA 89 90 89 8D 00 00 00 5B 08 1F 0D 17 0B
+R 00 00 00 09 82 07 00 05
+T 00 01 F7
+R 00 00 00 09
+T 00 01 F7 7B 02 44 24 40 0D 16 27 1E 16 05 1E 03
+R 00 00 00 09
+T 00 02 04 58 8C 56 7B 0E 88 7B 0E 88 7B 0E 88 7B
+R 00 00 00 09
+T 00 02 11 0E 88 90 89 89 8D 00 00 00 5B 08 20 48
+R 00 00 00 09 82 09 00 09
+T 00 02 1E
+R 00 00 00 09
+T 00 02 1E 16 0D 1E 0B 58 8C 56 7B 06 88 7B 06 88
+R 00 00 00 09
+T 00 02 2B 7B 06 88 7B 06 88 90 89 89 8D
+R 00 00 00 09
+T 00 02 35 00 00 00 5B 08 20 2A
+R 00 00 00 09 82 03 00 09
+T 00 02 3C
+R 00 00 00 09
+T 00 02 3C 0D 16 27 14 1E 05 89 1E 05 89 1E 11 89
+R 00 00 00 09
+T 00 02 49 1E 11 89 8D 00 00 00 5B 08 20 12
+R 00 00 00 09 82 07 00 09
+T 00 02 54
+R 00 00 00 09
+T 00 02 54 1E 0D 89 1E 0D 89 1E 09 89 1E 09 89 8D
+R 00 00 00 09
+T 00 02 61 00 00 00 5B 08
+R 00 00 00 09 82 03 00 09
+T 00 02 66
+R 00 00 00 09
+T 00 02 66 5B 0E 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/tancotf.sym b/device/lib/stm8-large/tancotf.sym
new file mode 100644
index 0000000..6d26191
--- /dev/null
+++ b/device/lib/stm8-large/tancotf.sym
@@ -0,0 +1,38 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fs2sint ****** GX
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ ___sint2fs ****** GX
+ _errno ****** GX
+ _fabsf ****** GX
+ 9 _tancotf 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 269 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/tanf.asm b/device/lib/stm8-large/tanf.asm
new file mode 100644
index 0000000..71c8b45
--- /dev/null
+++ b/device/lib/stm8-large/tanf.asm
@@ -0,0 +1,68 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module tanf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _tancotf
+ .globl _tanf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../tanf.c: 36: float tanf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function tanf
+; -----------------------------------------
+_tanf:
+; ../tanf.c: 38: return tancotf(x, 0);
+ push #0x00
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf _tancotf
+ addw sp, #5
+; ../tanf.c: 39: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/tanf.lst b/device/lib/stm8-large/tanf.lst
new file mode 100644
index 0000000..73c8525
--- /dev/null
+++ b/device/lib/stm8-large/tanf.lst
@@ -0,0 +1,68 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module tanf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _tancotf
+ 12 .globl _tanf
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../tanf.c: 36: float tanf(float x) _FLOAT_FUNC_REENTRANT
+ 51 ; -----------------------------------------
+ 52 ; function tanf
+ 53 ; -----------------------------------------
+ 000000 54 _tanf:
+ 55 ; ../tanf.c: 38: return tancotf(x, 0);
+ 000000 4B 00 [ 1] 56 push #0x00
+ 000002 1E 07 [ 2] 57 ldw x, (0x07, sp)
+ 000004 89 [ 2] 58 pushw x
+ 000005 1E 07 [ 2] 59 ldw x, (0x07, sp)
+ 000007 89 [ 2] 60 pushw x
+ 000008 8Ds00r00r00 [ 5] 61 callf _tancotf
+ 00000C 5B 05 [ 2] 62 addw sp, #5
+ 63 ; ../tanf.c: 39: }
+ 00000E 87 [ 5] 64 retf
+ 65 .area CODE
+ 66 .area CONST
+ 67 .area INITIALIZER
+ 68 .area CABS (ABS)
diff --git a/device/lib/stm8-large/tanf.rel b/device/lib/stm8-large/tanf.rel
new file mode 100644
index 0000000..1acf668
--- /dev/null
+++ b/device/lib/stm8-large/tanf.rel
@@ -0,0 +1,24 @@
+XH3
+H B areas 3 global symbols
+M tanf
+O -mstm8
+S _tancotf Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size F flags 0 addr 0
+S _tanf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 4B 00 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 05 87
+R 00 00 00 09 82 03 00 00
diff --git a/device/lib/stm8-large/tanf.sym b/device/lib/stm8-large/tanf.sym
new file mode 100644
index 0000000..68d5b97
--- /dev/null
+++ b/device/lib/stm8-large/tanf.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _tancotf ****** GX
+ 9 _tanf 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/tanhf.asm b/device/lib/stm8-large/tanhf.asm
new file mode 100644
index 0000000..f1bbc31
--- /dev/null
+++ b/device/lib/stm8-large/tanhf.asm
@@ -0,0 +1,296 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module tanhf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _fabsf
+ .globl _expf
+ .globl _tanhf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../tanhf.c: 50: float tanhf(float x) _FLOAT_FUNC_REENTRANT
+; -----------------------------------------
+; function tanhf
+; -----------------------------------------
+_tanhf:
+ sub sp, #12
+; ../tanhf.c: 54: f=fabsf(x);
+ ldw x, (0x12, sp)
+ pushw x
+ ldw x, (0x12, sp)
+ pushw x
+ callf _fabsf
+ addw sp, #4
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../tanhf.c: 55: if(f>SBIG) r=1.0;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ push #0xb0
+ push #0x2c
+ push #0x10
+ push #0x41
+ callf ___fslt
+ addw sp, #8
+ ld (0x0c, sp), a
+ jreq 00108$
+ clrw x
+ ldw (0x0b, sp), x
+ ldw x, #0x3f80
+ ldw (0x09, sp), x
+ jpf 00109$
+00108$:
+; ../tanhf.c: 56: else if(f>K1)
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ push #0x54
+ push #0x9f
+ push #0x0c
+ push #0x3f
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00105$
+; ../tanhf.c: 58: r=0.5-1.0/(expf(f+f)+1.0);
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf _expf
+ addw sp, #4
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #0x80
+ push #0x3f
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ clrw x
+ pushw x
+ push #0x00
+ push #0x3f
+ callf ___fssub
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+; ../tanhf.c: 59: r+=r;
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ jpf 00109$
+00105$:
+; ../tanhf.c: 61: else if(f<EPS) r=f;
+ clrw x
+ pushw x
+ push #0x80
+ push #0x39
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00102$
+ ldw y, (0x03, sp)
+ ldw (0x0b, sp), y
+ ldw y, (0x01, sp)
+ ldw (0x09, sp), y
+ jpf 00109$
+00102$:
+; ../tanhf.c: 64: g=f*f;
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x03, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x07, sp), x
+ ldw (0x05, sp), y
+; ../tanhf.c: 65: r=f+f*(P(g)/Q(g));
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ push #0xb2
+ push #0x11
+ push #0x7b
+ push #0xbb
+ callf ___fsmul
+ addw sp, #8
+ push #0xc6
+ push #0xe2
+ push #0x52
+ push #0xbf
+ pushw x
+ pushw y
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ pushw y
+ callf ___fsmul
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+ push #0x1a
+ push #0x2a
+ push #0x1e
+ push #0x40
+ ldw x, (0x0b, sp)
+ pushw x
+ ldw x, (0x0b, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x0f, sp)
+ pushw x
+ ldw x, (0x0f, sp)
+ pushw x
+ callf ___fsdiv
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsmul
+ addw sp, #8
+ pushw x
+ pushw y
+ ldw x, (0x07, sp)
+ pushw x
+ ldw x, (0x07, sp)
+ pushw x
+ callf ___fsadd
+ addw sp, #8
+ ldw (0x0b, sp), x
+ ldw (0x09, sp), y
+00109$:
+; ../tanhf.c: 67: if(x<0.0) r=-r;
+ clrw x
+ pushw x
+ clrw x
+ pushw x
+ ldw x, (0x16, sp)
+ pushw x
+ ldw x, (0x16, sp)
+ pushw x
+ callf ___fslt
+ addw sp, #8
+ tnz a
+ jreq 00111$
+ ldw y, (0x0b, sp)
+ ldw x, (0x09, sp)
+ sllw x
+ ccf
+ rrcw x
+ ldw (0x0b, sp), y
+ ldw (0x09, sp), x
+00111$:
+; ../tanhf.c: 68: return r;
+ ldw x, (0x0b, sp)
+ ldw y, (0x09, sp)
+; ../tanhf.c: 69: }
+ addw sp, #12
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/tanhf.lst b/device/lib/stm8-large/tanhf.lst
new file mode 100644
index 0000000..e9d0504
--- /dev/null
+++ b/device/lib/stm8-large/tanhf.lst
@@ -0,0 +1,296 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module tanhf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _fabsf
+ 12 .globl _expf
+ 13 .globl _tanhf
+ 14 ;--------------------------------------------------------
+ 15 ; ram data
+ 16 ;--------------------------------------------------------
+ 17 .area DATA
+ 18 ;--------------------------------------------------------
+ 19 ; ram data
+ 20 ;--------------------------------------------------------
+ 21 .area INITIALIZED
+ 22 ;--------------------------------------------------------
+ 23 ; absolute external ram data
+ 24 ;--------------------------------------------------------
+ 25 .area DABS (ABS)
+ 26
+ 27 ; default segment ordering for linker
+ 28 .area HOME
+ 29 .area GSINIT
+ 30 .area GSFINAL
+ 31 .area CONST
+ 32 .area INITIALIZER
+ 33 .area CODE
+ 34
+ 35 ;--------------------------------------------------------
+ 36 ; global & static initialisations
+ 37 ;--------------------------------------------------------
+ 38 .area HOME
+ 39 .area GSINIT
+ 40 .area GSFINAL
+ 41 .area GSINIT
+ 42 ;--------------------------------------------------------
+ 43 ; Home
+ 44 ;--------------------------------------------------------
+ 45 .area HOME
+ 46 .area HOME
+ 47 ;--------------------------------------------------------
+ 48 ; code
+ 49 ;--------------------------------------------------------
+ 50 .area CODE
+ 51 ; ../tanhf.c: 50: float tanhf(float x) _FLOAT_FUNC_REENTRANT
+ 52 ; -----------------------------------------
+ 53 ; function tanhf
+ 54 ; -----------------------------------------
+ 000000 55 _tanhf:
+ 000000 52 0C [ 2] 56 sub sp, #12
+ 57 ; ../tanhf.c: 54: f=fabsf(x);
+ 000002 1E 12 [ 2] 58 ldw x, (0x12, sp)
+ 000004 89 [ 2] 59 pushw x
+ 000005 1E 12 [ 2] 60 ldw x, (0x12, sp)
+ 000007 89 [ 2] 61 pushw x
+ 000008 8Ds00r00r00 [ 5] 62 callf _fabsf
+ 00000C 5B 04 [ 2] 63 addw sp, #4
+ 00000E 1F 03 [ 2] 64 ldw (0x03, sp), x
+ 000010 17 01 [ 2] 65 ldw (0x01, sp), y
+ 66 ; ../tanhf.c: 55: if(f>SBIG) r=1.0;
+ 000012 1E 03 [ 2] 67 ldw x, (0x03, sp)
+ 000014 89 [ 2] 68 pushw x
+ 000015 1E 03 [ 2] 69 ldw x, (0x03, sp)
+ 000017 89 [ 2] 70 pushw x
+ 000018 4B B0 [ 1] 71 push #0xb0
+ 00001A 4B 2C [ 1] 72 push #0x2c
+ 00001C 4B 10 [ 1] 73 push #0x10
+ 00001E 4B 41 [ 1] 74 push #0x41
+ 000020 8Ds00r00r00 [ 5] 75 callf ___fslt
+ 000024 5B 08 [ 2] 76 addw sp, #8
+ 000026 6B 0C [ 1] 77 ld (0x0c, sp), a
+ 000028 27 0C [ 1] 78 jreq 00108$
+ 00002A 5F [ 1] 79 clrw x
+ 00002B 1F 0B [ 2] 80 ldw (0x0b, sp), x
+ 00002D AE 3F 80 [ 2] 81 ldw x, #0x3f80
+ 000030 1F 09 [ 2] 82 ldw (0x09, sp), x
+ 000032 ACs00r01r80 [ 2] 83 jpf 00109$
+ 000036 84 00108$:
+ 85 ; ../tanhf.c: 56: else if(f>K1)
+ 000036 1E 03 [ 2] 86 ldw x, (0x03, sp)
+ 000038 89 [ 2] 87 pushw x
+ 000039 1E 03 [ 2] 88 ldw x, (0x03, sp)
+ 00003B 89 [ 2] 89 pushw x
+ 00003C 4B 54 [ 1] 90 push #0x54
+ 00003E 4B 9F [ 1] 91 push #0x9f
+ 000040 4B 0C [ 1] 92 push #0x0c
+ 000042 4B 3F [ 1] 93 push #0x3f
+ 000044 8Ds00r00r00 [ 5] 94 callf ___fslt
+ 000048 5B 08 [ 2] 95 addw sp, #8
+ 00004A 4D [ 1] 96 tnz a
+ 00004B 27 7B [ 1] 97 jreq 00105$
+ 98 ; ../tanhf.c: 58: r=0.5-1.0/(expf(f+f)+1.0);
+ 00004D 1E 03 [ 2] 99 ldw x, (0x03, sp)
+ 00004F 89 [ 2] 100 pushw x
+ 000050 1E 03 [ 2] 101 ldw x, (0x03, sp)
+ 000052 89 [ 2] 102 pushw x
+ 000053 1E 07 [ 2] 103 ldw x, (0x07, sp)
+ 000055 89 [ 2] 104 pushw x
+ 000056 1E 07 [ 2] 105 ldw x, (0x07, sp)
+ 000058 89 [ 2] 106 pushw x
+ 000059 8Ds00r00r00 [ 5] 107 callf ___fsadd
+ 00005D 5B 08 [ 2] 108 addw sp, #8
+ 00005F 1F 0B [ 2] 109 ldw (0x0b, sp), x
+ 000061 17 09 [ 2] 110 ldw (0x09, sp), y
+ 000063 1E 0B [ 2] 111 ldw x, (0x0b, sp)
+ 000065 89 [ 2] 112 pushw x
+ 000066 1E 0B [ 2] 113 ldw x, (0x0b, sp)
+ 000068 89 [ 2] 114 pushw x
+ 000069 8Ds00r00r00 [ 5] 115 callf _expf
+ 00006D 5B 04 [ 2] 116 addw sp, #4
+ 00006F 1F 0B [ 2] 117 ldw (0x0b, sp), x
+ 000071 17 09 [ 2] 118 ldw (0x09, sp), y
+ 000073 5F [ 1] 119 clrw x
+ 000074 89 [ 2] 120 pushw x
+ 000075 4B 80 [ 1] 121 push #0x80
+ 000077 4B 3F [ 1] 122 push #0x3f
+ 000079 1E 0F [ 2] 123 ldw x, (0x0f, sp)
+ 00007B 89 [ 2] 124 pushw x
+ 00007C 1E 0F [ 2] 125 ldw x, (0x0f, sp)
+ 00007E 89 [ 2] 126 pushw x
+ 00007F 8Ds00r00r00 [ 5] 127 callf ___fsadd
+ 000083 5B 08 [ 2] 128 addw sp, #8
+ 000085 1F 0B [ 2] 129 ldw (0x0b, sp), x
+ 000087 17 09 [ 2] 130 ldw (0x09, sp), y
+ 000089 1E 0B [ 2] 131 ldw x, (0x0b, sp)
+ 00008B 89 [ 2] 132 pushw x
+ 00008C 1E 0B [ 2] 133 ldw x, (0x0b, sp)
+ 00008E 89 [ 2] 134 pushw x
+ 00008F 5F [ 1] 135 clrw x
+ 000090 89 [ 2] 136 pushw x
+ 000091 4B 80 [ 1] 137 push #0x80
+ 000093 4B 3F [ 1] 138 push #0x3f
+ 000095 8Ds00r00r00 [ 5] 139 callf ___fsdiv
+ 000099 5B 08 [ 2] 140 addw sp, #8
+ 00009B 89 [ 2] 141 pushw x
+ 00009C 90 89 [ 2] 142 pushw y
+ 00009E 5F [ 1] 143 clrw x
+ 00009F 89 [ 2] 144 pushw x
+ 0000A0 4B 00 [ 1] 145 push #0x00
+ 0000A2 4B 3F [ 1] 146 push #0x3f
+ 0000A4 8Ds00r00r00 [ 5] 147 callf ___fssub
+ 0000A8 5B 08 [ 2] 148 addw sp, #8
+ 0000AA 1F 0B [ 2] 149 ldw (0x0b, sp), x
+ 0000AC 17 09 [ 2] 150 ldw (0x09, sp), y
+ 151 ; ../tanhf.c: 59: r+=r;
+ 0000AE 1E 0B [ 2] 152 ldw x, (0x0b, sp)
+ 0000B0 89 [ 2] 153 pushw x
+ 0000B1 1E 0B [ 2] 154 ldw x, (0x0b, sp)
+ 0000B3 89 [ 2] 155 pushw x
+ 0000B4 1E 0F [ 2] 156 ldw x, (0x0f, sp)
+ 0000B6 89 [ 2] 157 pushw x
+ 0000B7 1E 0F [ 2] 158 ldw x, (0x0f, sp)
+ 0000B9 89 [ 2] 159 pushw x
+ 0000BA 8Ds00r00r00 [ 5] 160 callf ___fsadd
+ 0000BE 5B 08 [ 2] 161 addw sp, #8
+ 0000C0 1F 0B [ 2] 162 ldw (0x0b, sp), x
+ 0000C2 17 09 [ 2] 163 ldw (0x09, sp), y
+ 0000C4 ACs00r01r80 [ 2] 164 jpf 00109$
+ 0000C8 165 00105$:
+ 166 ; ../tanhf.c: 61: else if(f<EPS) r=f;
+ 0000C8 5F [ 1] 167 clrw x
+ 0000C9 89 [ 2] 168 pushw x
+ 0000CA 4B 80 [ 1] 169 push #0x80
+ 0000CC 4B 39 [ 1] 170 push #0x39
+ 0000CE 1E 07 [ 2] 171 ldw x, (0x07, sp)
+ 0000D0 89 [ 2] 172 pushw x
+ 0000D1 1E 07 [ 2] 173 ldw x, (0x07, sp)
+ 0000D3 89 [ 2] 174 pushw x
+ 0000D4 8Ds00r00r00 [ 5] 175 callf ___fslt
+ 0000D8 5B 08 [ 2] 176 addw sp, #8
+ 0000DA 4D [ 1] 177 tnz a
+ 0000DB 27 0C [ 1] 178 jreq 00102$
+ 0000DD 16 03 [ 2] 179 ldw y, (0x03, sp)
+ 0000DF 17 0B [ 2] 180 ldw (0x0b, sp), y
+ 0000E1 16 01 [ 2] 181 ldw y, (0x01, sp)
+ 0000E3 17 09 [ 2] 182 ldw (0x09, sp), y
+ 0000E5 ACs00r01r80 [ 2] 183 jpf 00109$
+ 0000E9 184 00102$:
+ 185 ; ../tanhf.c: 64: g=f*f;
+ 0000E9 1E 03 [ 2] 186 ldw x, (0x03, sp)
+ 0000EB 89 [ 2] 187 pushw x
+ 0000EC 1E 03 [ 2] 188 ldw x, (0x03, sp)
+ 0000EE 89 [ 2] 189 pushw x
+ 0000EF 1E 07 [ 2] 190 ldw x, (0x07, sp)
+ 0000F1 89 [ 2] 191 pushw x
+ 0000F2 1E 07 [ 2] 192 ldw x, (0x07, sp)
+ 0000F4 89 [ 2] 193 pushw x
+ 0000F5 8Ds00r00r00 [ 5] 194 callf ___fsmul
+ 0000F9 5B 08 [ 2] 195 addw sp, #8
+ 0000FB 1F 07 [ 2] 196 ldw (0x07, sp), x
+ 0000FD 17 05 [ 2] 197 ldw (0x05, sp), y
+ 198 ; ../tanhf.c: 65: r=f+f*(P(g)/Q(g));
+ 0000FF 1E 07 [ 2] 199 ldw x, (0x07, sp)
+ 000101 89 [ 2] 200 pushw x
+ 000102 1E 07 [ 2] 201 ldw x, (0x07, sp)
+ 000104 89 [ 2] 202 pushw x
+ 000105 4B B2 [ 1] 203 push #0xb2
+ 000107 4B 11 [ 1] 204 push #0x11
+ 000109 4B 7B [ 1] 205 push #0x7b
+ 00010B 4B BB [ 1] 206 push #0xbb
+ 00010D 8Ds00r00r00 [ 5] 207 callf ___fsmul
+ 000111 5B 08 [ 2] 208 addw sp, #8
+ 000113 4B C6 [ 1] 209 push #0xc6
+ 000115 4B E2 [ 1] 210 push #0xe2
+ 000117 4B 52 [ 1] 211 push #0x52
+ 000119 4B BF [ 1] 212 push #0xbf
+ 00011B 89 [ 2] 213 pushw x
+ 00011C 90 89 [ 2] 214 pushw y
+ 00011E 8Ds00r00r00 [ 5] 215 callf ___fsadd
+ 000122 5B 08 [ 2] 216 addw sp, #8
+ 000124 1F 0B [ 2] 217 ldw (0x0b, sp), x
+ 000126 1E 07 [ 2] 218 ldw x, (0x07, sp)
+ 000128 89 [ 2] 219 pushw x
+ 000129 1E 07 [ 2] 220 ldw x, (0x07, sp)
+ 00012B 89 [ 2] 221 pushw x
+ 00012C 1E 0F [ 2] 222 ldw x, (0x0f, sp)
+ 00012E 89 [ 2] 223 pushw x
+ 00012F 90 89 [ 2] 224 pushw y
+ 000131 8Ds00r00r00 [ 5] 225 callf ___fsmul
+ 000135 5B 08 [ 2] 226 addw sp, #8
+ 000137 1F 0B [ 2] 227 ldw (0x0b, sp), x
+ 000139 17 09 [ 2] 228 ldw (0x09, sp), y
+ 00013B 4B 1A [ 1] 229 push #0x1a
+ 00013D 4B 2A [ 1] 230 push #0x2a
+ 00013F 4B 1E [ 1] 231 push #0x1e
+ 000141 4B 40 [ 1] 232 push #0x40
+ 000143 1E 0B [ 2] 233 ldw x, (0x0b, sp)
+ 000145 89 [ 2] 234 pushw x
+ 000146 1E 0B [ 2] 235 ldw x, (0x0b, sp)
+ 000148 89 [ 2] 236 pushw x
+ 000149 8Ds00r00r00 [ 5] 237 callf ___fsadd
+ 00014D 5B 08 [ 2] 238 addw sp, #8
+ 00014F 89 [ 2] 239 pushw x
+ 000150 90 89 [ 2] 240 pushw y
+ 000152 1E 0F [ 2] 241 ldw x, (0x0f, sp)
+ 000154 89 [ 2] 242 pushw x
+ 000155 1E 0F [ 2] 243 ldw x, (0x0f, sp)
+ 000157 89 [ 2] 244 pushw x
+ 000158 8Ds00r00r00 [ 5] 245 callf ___fsdiv
+ 00015C 5B 08 [ 2] 246 addw sp, #8
+ 00015E 89 [ 2] 247 pushw x
+ 00015F 90 89 [ 2] 248 pushw y
+ 000161 1E 07 [ 2] 249 ldw x, (0x07, sp)
+ 000163 89 [ 2] 250 pushw x
+ 000164 1E 07 [ 2] 251 ldw x, (0x07, sp)
+ 000166 89 [ 2] 252 pushw x
+ 000167 8Ds00r00r00 [ 5] 253 callf ___fsmul
+ 00016B 5B 08 [ 2] 254 addw sp, #8
+ 00016D 89 [ 2] 255 pushw x
+ 00016E 90 89 [ 2] 256 pushw y
+ 000170 1E 07 [ 2] 257 ldw x, (0x07, sp)
+ 000172 89 [ 2] 258 pushw x
+ 000173 1E 07 [ 2] 259 ldw x, (0x07, sp)
+ 000175 89 [ 2] 260 pushw x
+ 000176 8Ds00r00r00 [ 5] 261 callf ___fsadd
+ 00017A 5B 08 [ 2] 262 addw sp, #8
+ 00017C 1F 0B [ 2] 263 ldw (0x0b, sp), x
+ 00017E 17 09 [ 2] 264 ldw (0x09, sp), y
+ 000180 265 00109$:
+ 266 ; ../tanhf.c: 67: if(x<0.0) r=-r;
+ 000180 5F [ 1] 267 clrw x
+ 000181 89 [ 2] 268 pushw x
+ 000182 5F [ 1] 269 clrw x
+ 000183 89 [ 2] 270 pushw x
+ 000184 1E 16 [ 2] 271 ldw x, (0x16, sp)
+ 000186 89 [ 2] 272 pushw x
+ 000187 1E 16 [ 2] 273 ldw x, (0x16, sp)
+ 000189 89 [ 2] 274 pushw x
+ 00018A 8Ds00r00r00 [ 5] 275 callf ___fslt
+ 00018E 5B 08 [ 2] 276 addw sp, #8
+ 000190 4D [ 1] 277 tnz a
+ 000191 27 0B [ 1] 278 jreq 00111$
+ 000193 16 0B [ 2] 279 ldw y, (0x0b, sp)
+ 000195 1E 09 [ 2] 280 ldw x, (0x09, sp)
+ 000197 58 [ 2] 281 sllw x
+ 000198 8C [ 1] 282 ccf
+ 000199 56 [ 2] 283 rrcw x
+ 00019A 17 0B [ 2] 284 ldw (0x0b, sp), y
+ 00019C 1F 09 [ 2] 285 ldw (0x09, sp), x
+ 00019E 286 00111$:
+ 287 ; ../tanhf.c: 68: return r;
+ 00019E 1E 0B [ 2] 288 ldw x, (0x0b, sp)
+ 0001A0 16 09 [ 2] 289 ldw y, (0x09, sp)
+ 290 ; ../tanhf.c: 69: }
+ 0001A2 5B 0C [ 2] 291 addw sp, #12
+ 0001A4 87 [ 5] 292 retf
+ 293 .area CODE
+ 294 .area CONST
+ 295 .area INITIALIZER
+ 296 .area CABS (ABS)
diff --git a/device/lib/stm8-large/tanhf.rel b/device/lib/stm8-large/tanhf.rel
new file mode 100644
index 0000000..f9b4cbd
--- /dev/null
+++ b/device/lib/stm8-large/tanhf.rel
@@ -0,0 +1,112 @@
+XH3
+H B areas 9 global symbols
+M tanhf
+O -mstm8
+S ___fssub Ref000000
+S ___fsmul Ref000000
+S _expf Ref000000
+S ___fslt Ref000000
+S .__.ABS. Def000000
+S ___fsadd Ref000000
+S _fabsf Ref000000
+S ___fsdiv Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1A5 flags 0 addr 0
+S _tanhf Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0C 1E 12 89 1E 12 89 8D
+R 00 00 00 09
+T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 89 1E
+R 00 00 00 09 82 03 00 06
+T 00 00 16 03 89 4B B0 4B 2C 4B 10 4B 41 8D
+R 00 00 00 09
+T 00 00 21 00 00 00 5B 08 6B 0C 27 0C 5F 1F 0B AE
+R 00 00 00 09 82 03 00 03
+T 00 00 2E 3F 80 1F 09 AC 00 01 80
+R 00 00 00 09 80 08 00 09
+T 00 00 36
+R 00 00 00 09
+T 00 00 36 1E 03 89 1E 03 89 4B 54 4B 9F 4B 0C 4B
+R 00 00 00 09
+T 00 00 43 3F 8D 00 00 00 5B 08 4D 27 7B 1E 03 89
+R 00 00 00 09 82 05 00 03
+T 00 00 50 1E 03 89 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 5A 00 00 00 5B 08 1F 0B 17 09 1E 0B 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 00 67 0B 89 8D 00 00 00 5B 04 1F 0B 17 09 5F
+R 00 00 00 09 82 06 00 02
+T 00 00 74 89 4B 80 4B 3F 1E 0F 89 1E 0F 89 8D
+R 00 00 00 09
+T 00 00 80 00 00 00 5B 08 1F 0B 17 09 1E 0B 89 1E
+R 00 00 00 09 82 03 00 05
+T 00 00 8D 0B 89 5F 89 4B 80 4B 3F 8D
+R 00 00 00 09
+T 00 00 96 00 00 00 5B 08 89 90 89 5F 89 4B 00 4B
+R 00 00 00 09 82 03 00 07
+T 00 00 A3 3F 8D 00 00 00 5B 08 1F 0B 17 09 1E 0B
+R 00 00 00 09 82 05 00 00
+T 00 00 B0 89 1E 0B 89 1E 0F 89 1E 0F 89 8D
+R 00 00 00 09
+T 00 00 BB 00 00 00 5B 08 1F 0B 17 09 AC
+R 00 00 00 09 82 03 00 05
+T 00 00 C5 00 01 80
+R 00 00 00 09 80 03 00 09
+T 00 00 C8
+R 00 00 00 09
+T 00 00 C8 5F 89 4B 80 4B 39 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 D5 00 00 00 5B 08 4D 27 0C 16 03 17 0B 16
+R 00 00 00 09 82 03 00 03
+T 00 00 E2 01 17 09 AC 00 01 80
+R 00 00 00 09 80 07 00 09
+T 00 00 E9
+R 00 00 00 09
+T 00 00 E9 1E 03 89 1E 03 89 1E 07 89 1E 07 89 8D
+R 00 00 00 09
+T 00 00 F6 00 00 00 5B 08 1F 07 17 05 1E 07 89 1E
+R 00 00 00 09 82 03 00 01
+T 00 01 03 07 89 4B B2 4B 11 4B 7B 4B BB 8D
+R 00 00 00 09
+T 00 01 0E 00 00 00 5B 08 4B C6 4B E2 4B 52 4B BF
+R 00 00 00 09 82 03 00 01
+T 00 01 1B 89 90 89 8D 00 00 00 5B 08 1F 0B 1E 07
+R 00 00 00 09 82 07 00 05
+T 00 01 28 89 1E 07 89 1E 0F 89 90 89 8D
+R 00 00 00 09
+T 00 01 32 00 00 00 5B 08 1F 0B 17 09 4B 1A 4B 2A
+R 00 00 00 09 82 03 00 01
+T 00 01 3F 4B 1E 4B 40 1E 0B 89 1E 0B 89 8D
+R 00 00 00 09
+T 00 01 4A 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F
+R 00 00 00 09 82 03 00 05
+T 00 01 57 89 8D 00 00 00 5B 08 89 90 89 1E 07 89
+R 00 00 00 09 82 05 00 07
+T 00 01 64 1E 07 89 8D 00 00 00 5B 08 89 90 89 1E
+R 00 00 00 09 82 07 00 01
+T 00 01 71 07 89 1E 07 89 8D 00 00 00 5B 08 1F 0B
+R 00 00 00 09 82 09 00 05
+T 00 01 7E 17 09
+R 00 00 00 09
+T 00 01 80
+R 00 00 00 09
+T 00 01 80 5F 89 5F 89 1E 16 89 1E 16 89 8D
+R 00 00 00 09
+T 00 01 8B 00 00 00 5B 08 4D 27 0B 16 0B 1E 09 58
+R 00 00 00 09 82 03 00 03
+T 00 01 98 8C 56 17 0B 1F 09
+R 00 00 00 09
+T 00 01 9E
+R 00 00 00 09
+T 00 01 9E 1E 0B 16 09 5B 0C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/tanhf.sym b/device/lib/stm8-large/tanhf.sym
new file mode 100644
index 0000000..b48e873
--- /dev/null
+++ b/device/lib/stm8-large/tanhf.sym
@@ -0,0 +1,35 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ ___fsadd ****** GX
+ ___fsdiv ****** GX
+ ___fslt ****** GX
+ ___fsmul ****** GX
+ ___fssub ****** GX
+ _expf ****** GX
+ _fabsf ****** GX
+ 9 _tanhf 000000 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1A5 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/time.asm b/device/lib/stm8-large/time.asm
new file mode 100644
index 0000000..833ab96
--- /dev/null
+++ b/device/lib/stm8-large/time.asm
@@ -0,0 +1,988 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module time
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl ___day
+ .globl ___month
+ .globl _RtcRead
+ .globl _sprintf
+ .globl _time
+ .globl _asctime
+ .globl _ctime
+ .globl _localtime
+ .globl _gmtime
+ .globl _mktime
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+_ascTimeBuffer:
+ .ds 32
+_lastTime:
+ .ds 12
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../time.c: 42: unsigned char RtcRead(struct tm *timeptr) {
+; -----------------------------------------
+; function RtcRead
+; -----------------------------------------
+_RtcRead:
+; ../time.c: 45: return 0;
+ clr a
+; ../time.c: 46: }
+ retf
+; ../time.c: 50: time_t time(time_t *timeptr) {
+; -----------------------------------------
+; function time
+; -----------------------------------------
+_time:
+ sub sp, #16
+; ../time.c: 52: time_t t=(time_t) -1;
+ ldw x, #0xffff
+ ldw (0x0f, sp), x
+ ldw x, #0xffff
+ ldw (0x0d, sp), x
+; ../time.c: 54: if (RtcRead(&now)) {
+ ldw x, sp
+ incw x
+ ldw y, x
+ pushw x
+ pushw y
+ callf _RtcRead
+ addw sp, #2
+ popw x
+ tnz a
+ jreq 00102$
+; ../time.c: 55: t=mktime(&now);
+ pushw x
+ callf _mktime
+ addw sp, #2
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+00102$:
+; ../time.c: 57: if (timeptr) {
+; ../time.c: 58: *timeptr=t;
+ ldw x, (0x14, sp)
+ jreq 00104$
+ ldw y, (0x0f, sp)
+ ldw (0x2, x), y
+ ldw y, (0x0d, sp)
+ ldw (x), y
+00104$:
+; ../time.c: 60: return t;
+ ldw x, (0x0f, sp)
+ ldw y, (0x0d, sp)
+; ../time.c: 61: }
+ addw sp, #16
+ retf
+; ../time.c: 73: static void CheckTime(struct tm *timeptr) {
+; -----------------------------------------
+; function CheckTime
+; -----------------------------------------
+_CheckTime:
+; ../time.c: 84: if (timeptr->tm_sec>59) timeptr->tm_sec=59;
+ ldw y, (0x04, sp)
+ ld a, (y)
+ cp a, #0x3b
+ jrule 00102$
+ ld a, #0x3b
+ ld (y), a
+00102$:
+; ../time.c: 85: if (timeptr->tm_min>59) timeptr->tm_min=59;
+ ldw x, y
+ incw x
+ ld a, (x)
+ cp a, #0x3b
+ jrule 00104$
+ ld a, #0x3b
+ ld (x), a
+00104$:
+; ../time.c: 86: if (timeptr->tm_hour>23) timeptr->tm_hour=23;
+ ldw x, y
+ incw x
+ incw x
+ ld a, (x)
+ cp a, #0x17
+ jrule 00106$
+ ld a, #0x17
+ ld (x), a
+00106$:
+; ../time.c: 87: if (timeptr->tm_wday>6) timeptr->tm_wday=6;
+ ldw x, y
+ addw x, #0x0007
+ ld a, (x)
+ cp a, #0x06
+ jrule 00108$
+ ld a, #0x06
+ ld (x), a
+00108$:
+; ../time.c: 88: if (timeptr->tm_mday<1) timeptr->tm_mday=1;
+ ldw x, y
+ addw x, #0x0003
+ ld a, (x)
+ cp a, #0x01
+ jrnc 00112$
+ ld a, #0x01
+ ld (x), a
+ jra 00113$
+00112$:
+; ../time.c: 89: else if (timeptr->tm_mday>31) timeptr->tm_mday=31;
+ cp a, #0x1f
+ jrule 00113$
+ ld a, #0x1f
+ ld (x), a
+00113$:
+; ../time.c: 90: if (timeptr->tm_mon>11) timeptr->tm_mon=11;
+ ldw x, y
+ addw x, #0x0004
+ ld a, (x)
+ cp a, #0x0b
+ jrule 00115$
+ ld a, #0x0b
+ ld (x), a
+00115$:
+; ../time.c: 91: if (timeptr->tm_year<0) timeptr->tm_year=0;
+ addw y, #0x0005
+ ldw x, y
+ ldw x, (x)
+ jrpl 00118$
+ ldw x, y
+ clr (0x1, x)
+ clr (x)
+00118$:
+; ../time.c: 92: }
+ retf
+; ../time.c: 95: char *asctime(struct tm *timeptr) {
+; -----------------------------------------
+; function asctime
+; -----------------------------------------
+_asctime:
+ sub sp, #12
+; ../time.c: 96: CheckTime(timeptr);
+ ldw x, (0x10, sp)
+ pushw x
+ callf _CheckTime
+ addw sp, #2
+; ../time.c: 100: timeptr->tm_year+1900);
+ ldw y, (0x10, sp)
+ ldw x, y
+ ldw x, (0x5, x)
+ addw x, #0x076c
+ ldw (0x01, sp), x
+; ../time.c: 99: timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec,
+ ld a, (y)
+ ld (0x04, sp), a
+ clr (0x03, sp)
+ ldw x, y
+ ld a, (0x1, x)
+ ld (0x06, sp), a
+ clr (0x05, sp)
+ ldw x, y
+ ld a, (0x2, x)
+ ld (0x08, sp), a
+ clr (0x07, sp)
+; ../time.c: 98: __day[timeptr->tm_wday], __month[timeptr->tm_mon], timeptr->tm_mday,
+ ldw x, y
+ ld a, (0x3, x)
+ ld (0x0a, sp), a
+ clr (0x09, sp)
+ ldw x, y
+ ld a, (0x4, x)
+ clrw x
+ ld xl, a
+ sllw x
+ addw x, #(___month + 0)
+ clr a
+ adc a, #((___month + 0) >> 16)
+ ldw x, (x)
+ ldw (0x0b, sp), x
+ ld a, (0x7, y)
+ clrw x
+ ld xl, a
+ sllw x
+ addw x, #(___day + 0)
+ clr a
+ adc a, #((___day + 0) >> 16)
+ ldw x, (x)
+ ldw y, x
+; ../time.c: 97: sprintf (ascTimeBuffer, "%s %s %2d %02d:%02d:%02d %04d\n",
+ ldw x, (0x01, sp)
+ pushw x
+ ldw x, (0x05, sp)
+ pushw x
+ ldw x, (0x09, sp)
+ pushw x
+ ldw x, (0x0d, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x15, sp)
+ pushw x
+ pushw y
+ push #<(___str_0 + 0)
+ push #((___str_0 + 0) >> 8)
+ push #<(_ascTimeBuffer + 0)
+ push #((_ascTimeBuffer + 0) >> 8)
+ callf _sprintf
+ addw sp, #18
+; ../time.c: 101: return ascTimeBuffer;
+ ldw x, #(_ascTimeBuffer + 0)
+; ../time.c: 102: }
+ addw sp, #12
+ retf
+; ../time.c: 104: char *ctime(time_t *timep) {
+; -----------------------------------------
+; function ctime
+; -----------------------------------------
+_ctime:
+; ../time.c: 105: return asctime(localtime(timep));
+ ldw x, (0x04, sp)
+ pushw x
+ callf _localtime
+ addw sp, #2
+ pushw x
+ callf _asctime
+ addw sp, #2
+; ../time.c: 106: }
+ retf
+; ../time.c: 121: struct tm *localtime(time_t *timep) {
+; -----------------------------------------
+; function localtime
+; -----------------------------------------
+_localtime:
+; ../time.c: 122: return gmtime(timep);
+ ldw x, (0x04, sp)
+ pushw x
+ callf _gmtime
+ addw sp, #2
+; ../time.c: 123: }
+ retf
+; ../time.c: 125: struct tm *gmtime(time_t *timep) {
+; -----------------------------------------
+; function gmtime
+; -----------------------------------------
+_gmtime:
+ sub sp, #16
+; ../time.c: 126: unsigned long epoch=*timep;
+ ldw x, (0x14, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ ldw (0x0f, sp), y
+ ldw (0x0d, sp), x
+; ../time.c: 131: lastTime.tm_sec=epoch%60;
+ push #0x3c
+ clrw x
+ pushw x
+ push #0x00
+ ldw x, (0x13, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ callf __modulong
+ addw sp, #8
+ ld a, xl
+ ld _lastTime+0, a
+; ../time.c: 132: epoch/=60; // now it is minutes
+ push #0x3c
+ clrw x
+ pushw x
+ push #0x00
+ ldw x, (0x13, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ callf __divulong
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+; ../time.c: 133: lastTime.tm_min=epoch%60;
+ ldw x, #(_lastTime + 0)+1
+ ldw (0x0f, sp), x
+ push #0x3c
+ clrw x
+ pushw x
+ push #0x00
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf __modulong
+ addw sp, #8
+ ld a, xl
+ ldw x, (0x0f, sp)
+ ld (x), a
+; ../time.c: 134: epoch/=60; // now it is hours
+ push #0x3c
+ clrw x
+ pushw x
+ push #0x00
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf __divulong
+ addw sp, #8
+ ldw (0x0d, sp), x
+ ldw (0x0b, sp), y
+; ../time.c: 135: lastTime.tm_hour=epoch%24;
+ ldw x, #(_lastTime + 0)+2
+ ldw (0x0f, sp), x
+ push #0x18
+ clrw x
+ pushw x
+ push #0x00
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf __modulong
+ addw sp, #8
+ ld a, xl
+ ldw x, (0x0f, sp)
+ ld (x), a
+; ../time.c: 136: epoch/=24; // now it is days
+ push #0x18
+ clrw x
+ pushw x
+ push #0x00
+ ldw x, (0x11, sp)
+ pushw x
+ ldw x, (0x11, sp)
+ pushw x
+ callf __divulong
+ addw sp, #8
+ ldw (0x03, sp), x
+ ldw (0x01, sp), y
+; ../time.c: 137: lastTime.tm_wday=(epoch+4)%7;
+ ldw x, #(_lastTime + 0)+7
+ ldw (0x0f, sp), x
+ ldw x, (0x03, sp)
+ addw x, #0x0004
+ ldw y, (0x01, sp)
+ jrnc 00164$
+ incw y
+00164$:
+ push #0x07
+ push #0x00
+ push #0x00
+ push #0x00
+ pushw x
+ pushw y
+ callf __modulong
+ addw sp, #8
+ ld a, xl
+ ldw x, (0x0f, sp)
+ ld (x), a
+; ../time.c: 140: days=0;
+ clrw x
+ ldw (0x07, sp), x
+ ldw (0x05, sp), x
+; ../time.c: 141: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch) {
+ ldw x, #0x07b2
+ ldw (0x0f, sp), x
+00101$:
+ ld a, (0x10, sp)
+ and a, #0x03
+ ld (0x0a, sp), a
+ clr (0x09, sp)
+ ldw x, (0x09, sp)
+ jrne 00118$
+ ldw x, #0x016e
+ ldw (0x0d, sp), x
+ jra 00119$
+00118$:
+ ldw x, #0x016d
+ ldw (0x0d, sp), x
+00119$:
+ ldw y, (0x0d, sp)
+ clrw x
+ tnzw y
+ jrpl 00166$
+ decw x
+00166$:
+ addw y, (0x07, sp)
+ ldw (0x0d, sp), y
+ ld a, xl
+ adc a, (0x06, sp)
+ ld (0x0c, sp), a
+ ld a, xh
+ adc a, (0x05, sp)
+ ld (0x0b, sp), a
+ ldw y, (0x0d, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x0b, sp)
+ ldw (0x05, sp), y
+ ldw x, (0x03, sp)
+ cpw x, (0x0d, sp)
+ ld a, (0x02, sp)
+ sbc a, (0x0c, sp)
+ ld a, (0x01, sp)
+ sbc a, (0x0b, sp)
+ jrc 00103$
+; ../time.c: 142: year++;
+ ldw x, (0x0f, sp)
+ incw x
+ ldw (0x0f, sp), x
+ jra 00101$
+00103$:
+; ../time.c: 144: lastTime.tm_year=year-1900;
+ ldw x, #(_lastTime + 0)+5
+ ldw y, (0x0f, sp)
+ subw y, #0x076c
+ ldw (x), y
+; ../time.c: 146: days -= LEAP_YEAR(year) ? 366 : 365;
+ ldw y, (0x09, sp)
+ ldw (0x0f, sp), y
+ ldw x, (0x09, sp)
+ jrne 00120$
+ ldw x, #0x016e
+ .byte 0xbc
+00120$:
+ ldw x, #0x016d
+00121$:
+ ldw (0x0d, sp), x
+ clrw x
+ tnz (0x0d, sp)
+ jrpl 00170$
+ decw x
+00170$:
+ ldw y, (0x07, sp)
+ subw y, (0x0d, sp)
+ ld a, (0x06, sp)
+ pushw x
+ sbc a, (#2, sp)
+ popw x
+ ld xl, a
+ ld a, (0x05, sp)
+ pushw x
+ sbc a, (#1, sp)
+ popw x
+ ldw (0x0d, sp), y
+; ../time.c: 147: epoch -= days; // now it is days in this year, starting at 0
+ ldw y, (0x03, sp)
+ subw y, (0x0d, sp)
+ push a
+ ld a, (0x03, sp)
+ pushw x
+ sbc a, (#2, sp)
+ popw x
+ ld xl, a
+ ld a, (0x02, sp)
+ sbc a, (1, sp)
+ ld xh, a
+ pop a
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+; ../time.c: 148: lastTime.tm_yday=epoch;
+ ldw x, #(_lastTime + 0)+8
+ ldw y, (0x08, sp)
+ ldw (x), y
+; ../time.c: 153: for (month=0; month<12; month++) {
+ clr (0x0e, sp)
+00114$:
+; ../time.c: 154: if (month==1) { // februari
+ ld a, (0x0e, sp)
+ dec a
+ jrne 00108$
+; ../time.c: 155: if (LEAP_YEAR(year)) {
+ ldw x, (0x0f, sp)
+ jrne 00105$
+; ../time.c: 156: monthLength=29;
+ ld a, #0x1d
+ jra 00109$
+00105$:
+; ../time.c: 158: monthLength=28;
+ ld a, #0x1c
+ jra 00109$
+00108$:
+; ../time.c: 161: monthLength = monthDays[month];
+ clrw x
+ ld a, (0x0e, sp)
+ ld xl, a
+ addw x, #(_monthDays + 0)
+ ldw (0x0c, sp), x
+ clr a
+ adc a, #((_monthDays + 0) >> 16)
+ ldw x, (0x0c, sp)
+ ld a, (x)
+00109$:
+; ../time.c: 164: if (epoch>=monthLength) {
+ ld (0x0d, sp), a
+ clr (0x0c, sp)
+ clr (0x0b, sp)
+ clr (0x0a, sp)
+ ldw x, (0x08, sp)
+ cpw x, (0x0c, sp)
+ ld a, (0x07, sp)
+ sbc a, (0x0b, sp)
+ ld a, (0x06, sp)
+ sbc a, (0x0a, sp)
+ jrc 00113$
+; ../time.c: 165: epoch-=monthLength;
+ ldw y, (0x08, sp)
+ subw y, (0x0c, sp)
+ ld a, (0x07, sp)
+ sbc a, (0x0b, sp)
+ ld xl, a
+ ld a, (0x06, sp)
+ sbc a, (0x0a, sp)
+ ld xh, a
+ ldw (0x08, sp), y
+ ldw (0x06, sp), x
+; ../time.c: 153: for (month=0; month<12; month++) {
+ inc (0x0e, sp)
+ ld a, (0x0e, sp)
+ cp a, #0x0c
+ jrc 00114$
+00113$:
+; ../time.c: 170: lastTime.tm_mon=month;
+ ldw x, #(_lastTime + 0)+4
+ ld a, (0x0e, sp)
+ ld (x), a
+; ../time.c: 171: lastTime.tm_mday=epoch+1;
+ ldw x, #(_lastTime + 0)+3
+ ld a, (0x09, sp)
+ inc a
+ ld (x), a
+; ../time.c: 173: lastTime.tm_isdst=0;
+ ldw x, #(_lastTime + 0)+10
+ clr (x)
+; ../time.c: 175: return &lastTime;
+ ldw x, #(_lastTime + 0)
+; ../time.c: 176: }
+ addw sp, #16
+ retf
+; ../time.c: 179: time_t mktime(struct tm *timeptr) {
+; -----------------------------------------
+; function mktime
+; -----------------------------------------
+_mktime:
+ sub sp, #18
+; ../time.c: 180: int year=timeptr->tm_year+1900, month=timeptr->tm_mon, i;
+ ldw y, (0x16, sp)
+ ldw (0x01, sp), y
+ ldw x, y
+ ldw x, (0x5, x)
+ addw x, #0x076c
+ ldw (0x0b, sp), x
+ ldw x, (0x01, sp)
+ ld a, (0x4, x)
+ clrw x
+ ld xl, a
+ ldw (0x03, sp), x
+; ../time.c: 183: CheckTime(timeptr);
+ ldw x, (0x01, sp)
+ pushw x
+ callf _CheckTime
+ addw sp, #2
+; ../time.c: 186: seconds= (year-1970)*(60*60*24L*365);
+ ldw x, (0x0b, sp)
+ subw x, #0x07b2
+ clrw y
+ tnzw x
+ jrpl 00154$
+ decw y
+00154$:
+ pushw x
+ pushw y
+ push #0x80
+ push #0x33
+ push #0xe1
+ push #0x01
+ callf __mullong
+ addw sp, #8
+; ../time.c: 189: for (i=1970; i<year; i++) {
+ ldw (0x11, sp), x
+ ldw (0x0f, sp), y
+ ldw x, #0x07b2
+ ldw (0x0d, sp), x
+00110$:
+ ldw x, (0x0d, sp)
+ cpw x, (0x0b, sp)
+ jrsge 00124$
+; ../time.c: 190: if (LEAP_YEAR(i)) {
+ push #0x04
+ push #0x00
+ ldw x, (0x0f, sp)
+ pushw x
+ callf __modsint
+ addw sp, #4
+ tnzw x
+ jrne 00111$
+; ../time.c: 191: seconds+= 60*60*24L;
+ ldw x, (0x11, sp)
+ addw x, #0x5180
+ ldw (0x11, sp), x
+ ld a, (0x10, sp)
+ adc a, #0x01
+ ld (0x10, sp), a
+ ld a, (0x0f, sp)
+ adc a, #0x00
+ ld (0x0f, sp), a
+00111$:
+; ../time.c: 189: for (i=1970; i<year; i++) {
+ ldw x, (0x0d, sp)
+ incw x
+ ldw (0x0d, sp), x
+ jra 00110$
+00124$:
+ ldw y, (0x11, sp)
+ ldw (0x07, sp), y
+ ldw y, (0x0f, sp)
+ ldw (0x05, sp), y
+; ../time.c: 196: for (i=0; i<month; i++) {
+ push #0x04
+ push #0x00
+ ldw x, (0x0d, sp)
+ pushw x
+ callf __modsint
+ addw sp, #4
+ ldw (0x09, sp), x
+ clrw y
+00113$:
+ exgw x, y
+ cpw x, (0x03, sp)
+ exgw x, y
+ jrsge 00108$
+; ../time.c: 197: if (i==1 && LEAP_YEAR(year)) {
+ cpw y, #0x0001
+ jrne 00105$
+ ldw x, (0x09, sp)
+ jrne 00105$
+; ../time.c: 198: seconds+= 60*60*24L*29;
+ ldw x, (0x07, sp)
+ addw x, #0x3b80
+ ldw (0x11, sp), x
+ ldw x, (0x05, sp)
+ jrnc 00163$
+ incw x
+00163$:
+ addw x, #0x0026
+ ldw (0x05, sp), x
+ ldw x, (0x11, sp)
+ ldw (0x07, sp), x
+ jra 00114$
+00105$:
+; ../time.c: 200: seconds+= 60*60*24L*monthDays[i];
+ ldw x, y
+ addw x, #(_monthDays + 0)
+ clr a
+ adc a, #((_monthDays + 0) >> 16)
+ ld a, (x)
+ ld xl, a
+ ld (0x12, sp), a
+ exg a, xl
+ clr (0x11, sp)
+ clr (0x10, sp)
+ clr (0x0f, sp)
+ pushw y
+ ldw x, (0x13, sp)
+ pushw x
+ ldw x, (0x13, sp)
+ pushw x
+ push #0x80
+ push #0x51
+ push #0x01
+ push #0x00
+ callf __mullong
+ addw sp, #8
+ ldw (0x0f, sp), x
+ ldw (0x0d, sp), y
+ popw y
+ ldw x, (0x07, sp)
+ addw x, (0x0d, sp)
+ ldw (0x11, sp), x
+ ldw x, (0x05, sp)
+ jrnc 00164$
+ incw x
+00164$:
+ addw x, (0x0b, sp)
+ ldw (0x05, sp), x
+ ldw x, (0x11, sp)
+ ldw (0x07, sp), x
+00114$:
+; ../time.c: 196: for (i=0; i<month; i++) {
+ incw y
+ jra 00113$
+00108$:
+; ../time.c: 204: seconds+= (timeptr->tm_mday-1)*60*60*24L;
+ ldw x, (0x01, sp)
+ ld a, (0x3, x)
+ clrw x
+ ld xl, a
+ decw x
+ clrw y
+ tnzw x
+ jrpl 00165$
+ decw y
+00165$:
+ pushw x
+ pushw y
+ push #0x80
+ push #0x51
+ push #0x01
+ push #0x00
+ callf __mullong
+ addw sp, #8
+ exgw x, y
+ addw y, (0x07, sp)
+ ld a, xl
+ adc a, (0x06, sp)
+ rlwa x
+ adc a, (0x05, sp)
+ ld xh, a
+ ldw (0x11, sp), y
+ ldw (0x0f, sp), x
+; ../time.c: 205: seconds+= timeptr->tm_hour*60*60L;
+ ldw x, (0x01, sp)
+ ld a, (0x2, x)
+ clrw x
+ ld xl, a
+ clrw y
+ pushw x
+ pushw y
+ push #0x10
+ push #0x0e
+ clrw x
+ pushw x
+ callf __mullong
+ addw sp, #8
+ ld a, yl
+ addw x, (0x11, sp)
+ adc a, (0x10, sp)
+ rlwa y
+ adc a, (0x0f, sp)
+ ld yh, a
+ ldw (0x0d, sp), x
+; ../time.c: 206: seconds+= timeptr->tm_min*60;
+ ldw x, (0x01, sp)
+ ld a, (0x1, x)
+ clrw x
+ ld xl, a
+ pushw x
+ sllw x
+ sllw x
+ sllw x
+ sllw x
+ subw x, (1, sp)
+ sllw x
+ sllw x
+ addw sp, #2
+ ldw (0x11, sp), x
+ ld a, (0x11, sp)
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld (0x10, sp), a
+ ld (0x0f, sp), a
+ ldw x, (0x0d, sp)
+ addw x, (0x11, sp)
+ ld a, yl
+ adc a, (0x10, sp)
+ push a
+ ld a, yh
+ adc a, (0x10, sp)
+ ld yh, a
+ pop a
+ ldw (0x11, sp), x
+ ld (0x10, sp), a
+; ../time.c: 207: seconds+= timeptr->tm_sec;
+ ldw x, (0x01, sp)
+ ld a, (x)
+ clrw x
+ ld xl, a
+ ldw (0x0d, sp), x
+ ld a, (0x0d, sp)
+ rlc a
+ clr a
+ sbc a, #0x00
+ ld (0x0c, sp), a
+ ld (0x0b, sp), a
+ ldw x, (0x11, sp)
+ addw x, (0x0d, sp)
+ ld a, (0x10, sp)
+ adc a, (0x0c, sp)
+ rlwa y
+ adc a, (0x0b, sp)
+ ld yh, a
+; ../time.c: 208: return seconds;
+; ../time.c: 209: }
+ addw sp, #18
+ retf
+ .area CODE
+ .area CONST
+_monthDays:
+ .db #0x1f ; 31
+ .db #0x1c ; 28
+ .db #0x1f ; 31
+ .db #0x1e ; 30
+ .db #0x1f ; 31
+ .db #0x1e ; 30
+ .db #0x1f ; 31
+ .db #0x1f ; 31
+ .db #0x1e ; 30
+ .db #0x1f ; 31
+ .db #0x1e ; 30
+ .db #0x1f ; 31
+___month:
+ .dw __str_1
+ .dw __str_2
+ .dw __str_3
+ .dw __str_4
+ .dw __str_5
+ .dw __str_6
+ .dw __str_7
+ .dw __str_8
+ .dw __str_9
+ .dw __str_10
+ .dw __str_11
+ .dw __str_12
+___day:
+ .dw __str_13
+ .dw __str_14
+ .dw __str_15
+ .dw __str_16
+ .dw __str_17
+ .dw __str_18
+ .dw __str_19
+ .area CONST
+___str_0:
+ .ascii "%s %s %2d %02d:%02d:%02d %04d"
+ .db 0x0a
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_1:
+ .ascii "Jan"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_2:
+ .ascii "Feb"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_3:
+ .ascii "Mar"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_4:
+ .ascii "Apr"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_5:
+ .ascii "May"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_6:
+ .ascii "Jun"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_7:
+ .ascii "Jul"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_8:
+ .ascii "Aug"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_9:
+ .ascii "Sep"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_10:
+ .ascii "Oct"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_11:
+ .ascii "Nov"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_12:
+ .ascii "Dec"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_13:
+ .ascii "Sun"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_14:
+ .ascii "Mon"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_15:
+ .ascii "Tue"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_16:
+ .ascii "Wed"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_17:
+ .ascii "Thu"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_18:
+ .ascii "Fri"
+ .db 0x00
+ .area CODE
+ .area CONST
+__str_19:
+ .ascii "Sat"
+ .db 0x00
+ .area CODE
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/time.lst b/device/lib/stm8-large/time.lst
new file mode 100644
index 0000000..f242328
--- /dev/null
+++ b/device/lib/stm8-large/time.lst
@@ -0,0 +1,992 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module time
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl ___day
+ 12 .globl ___month
+ 13 .globl _RtcRead
+ 14 .globl _sprintf
+ 15 .globl _time
+ 16 .globl _asctime
+ 17 .globl _ctime
+ 18 .globl _localtime
+ 19 .globl _gmtime
+ 20 .globl _mktime
+ 21 ;--------------------------------------------------------
+ 22 ; ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DATA
+ 000000 25 _ascTimeBuffer:
+ 000000 26 .ds 32
+ 000020 27 _lastTime:
+ 000020 28 .ds 12
+ 29 ;--------------------------------------------------------
+ 30 ; ram data
+ 31 ;--------------------------------------------------------
+ 32 .area INITIALIZED
+ 33 ;--------------------------------------------------------
+ 34 ; absolute external ram data
+ 35 ;--------------------------------------------------------
+ 36 .area DABS (ABS)
+ 37
+ 38 ; default segment ordering for linker
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area CONST
+ 43 .area INITIALIZER
+ 44 .area CODE
+ 45
+ 46 ;--------------------------------------------------------
+ 47 ; global & static initialisations
+ 48 ;--------------------------------------------------------
+ 49 .area HOME
+ 50 .area GSINIT
+ 51 .area GSFINAL
+ 52 .area GSINIT
+ 53 ;--------------------------------------------------------
+ 54 ; Home
+ 55 ;--------------------------------------------------------
+ 56 .area HOME
+ 57 .area HOME
+ 58 ;--------------------------------------------------------
+ 59 ; code
+ 60 ;--------------------------------------------------------
+ 61 .area CODE
+ 62 ; ../time.c: 42: unsigned char RtcRead(struct tm *timeptr) {
+ 63 ; -----------------------------------------
+ 64 ; function RtcRead
+ 65 ; -----------------------------------------
+ 000000 66 _RtcRead:
+ 67 ; ../time.c: 45: return 0;
+ 000000 4F [ 1] 68 clr a
+ 69 ; ../time.c: 46: }
+ 000001 87 [ 5] 70 retf
+ 71 ; ../time.c: 50: time_t time(time_t *timeptr) {
+ 72 ; -----------------------------------------
+ 73 ; function time
+ 74 ; -----------------------------------------
+ 000002 75 _time:
+ 000002 52 10 [ 2] 76 sub sp, #16
+ 77 ; ../time.c: 52: time_t t=(time_t) -1;
+ 000004 AE FF FF [ 2] 78 ldw x, #0xffff
+ 000007 1F 0F [ 2] 79 ldw (0x0f, sp), x
+ 000009 AE FF FF [ 2] 80 ldw x, #0xffff
+ 00000C 1F 0D [ 2] 81 ldw (0x0d, sp), x
+ 82 ; ../time.c: 54: if (RtcRead(&now)) {
+ 00000E 96 [ 1] 83 ldw x, sp
+ 00000F 5C [ 1] 84 incw x
+ 000010 90 93 [ 1] 85 ldw y, x
+ 000012 89 [ 2] 86 pushw x
+ 000013 90 89 [ 2] 87 pushw y
+ 000015 8Ds00r00r00 [ 5] 88 callf _RtcRead
+ 000019 5B 02 [ 2] 89 addw sp, #2
+ 00001B 85 [ 2] 90 popw x
+ 00001C 4D [ 1] 91 tnz a
+ 00001D 27 0B [ 1] 92 jreq 00102$
+ 93 ; ../time.c: 55: t=mktime(&now);
+ 00001F 89 [ 2] 94 pushw x
+ 000020 8Ds00r02rFB [ 5] 95 callf _mktime
+ 000024 5B 02 [ 2] 96 addw sp, #2
+ 000026 1F 0F [ 2] 97 ldw (0x0f, sp), x
+ 000028 17 0D [ 2] 98 ldw (0x0d, sp), y
+ 00002A 99 00102$:
+ 100 ; ../time.c: 57: if (timeptr) {
+ 101 ; ../time.c: 58: *timeptr=t;
+ 00002A 1E 14 [ 2] 102 ldw x, (0x14, sp)
+ 00002C 27 07 [ 1] 103 jreq 00104$
+ 00002E 16 0F [ 2] 104 ldw y, (0x0f, sp)
+ 000030 EF 02 [ 2] 105 ldw (0x2, x), y
+ 000032 16 0D [ 2] 106 ldw y, (0x0d, sp)
+ 000034 FF [ 2] 107 ldw (x), y
+ 000035 108 00104$:
+ 109 ; ../time.c: 60: return t;
+ 000035 1E 0F [ 2] 110 ldw x, (0x0f, sp)
+ 000037 16 0D [ 2] 111 ldw y, (0x0d, sp)
+ 112 ; ../time.c: 61: }
+ 000039 5B 10 [ 2] 113 addw sp, #16
+ 00003B 87 [ 5] 114 retf
+ 115 ; ../time.c: 73: static void CheckTime(struct tm *timeptr) {
+ 116 ; -----------------------------------------
+ 117 ; function CheckTime
+ 118 ; -----------------------------------------
+ 00003C 119 _CheckTime:
+ 120 ; ../time.c: 84: if (timeptr->tm_sec>59) timeptr->tm_sec=59;
+ 00003C 16 04 [ 2] 121 ldw y, (0x04, sp)
+ 00003E 90 F6 [ 1] 122 ld a, (y)
+ 000040 A1 3B [ 1] 123 cp a, #0x3b
+ 000042 23 04 [ 2] 124 jrule 00102$
+ 000044 A6 3B [ 1] 125 ld a, #0x3b
+ 000046 90 F7 [ 1] 126 ld (y), a
+ 000048 127 00102$:
+ 128 ; ../time.c: 85: if (timeptr->tm_min>59) timeptr->tm_min=59;
+ 000048 93 [ 1] 129 ldw x, y
+ 000049 5C [ 1] 130 incw x
+ 00004A F6 [ 1] 131 ld a, (x)
+ 00004B A1 3B [ 1] 132 cp a, #0x3b
+ 00004D 23 03 [ 2] 133 jrule 00104$
+ 00004F A6 3B [ 1] 134 ld a, #0x3b
+ 000051 F7 [ 1] 135 ld (x), a
+ 000052 136 00104$:
+ 137 ; ../time.c: 86: if (timeptr->tm_hour>23) timeptr->tm_hour=23;
+ 000052 93 [ 1] 138 ldw x, y
+ 000053 5C [ 1] 139 incw x
+ 000054 5C [ 1] 140 incw x
+ 000055 F6 [ 1] 141 ld a, (x)
+ 000056 A1 17 [ 1] 142 cp a, #0x17
+ 000058 23 03 [ 2] 143 jrule 00106$
+ 00005A A6 17 [ 1] 144 ld a, #0x17
+ 00005C F7 [ 1] 145 ld (x), a
+ 00005D 146 00106$:
+ 147 ; ../time.c: 87: if (timeptr->tm_wday>6) timeptr->tm_wday=6;
+ 00005D 93 [ 1] 148 ldw x, y
+ 00005E 1C 00 07 [ 2] 149 addw x, #0x0007
+ 000061 F6 [ 1] 150 ld a, (x)
+ 000062 A1 06 [ 1] 151 cp a, #0x06
+ 000064 23 03 [ 2] 152 jrule 00108$
+ 000066 A6 06 [ 1] 153 ld a, #0x06
+ 000068 F7 [ 1] 154 ld (x), a
+ 000069 155 00108$:
+ 156 ; ../time.c: 88: if (timeptr->tm_mday<1) timeptr->tm_mday=1;
+ 000069 93 [ 1] 157 ldw x, y
+ 00006A 1C 00 03 [ 2] 158 addw x, #0x0003
+ 00006D F6 [ 1] 159 ld a, (x)
+ 00006E A1 01 [ 1] 160 cp a, #0x01
+ 000070 24 05 [ 1] 161 jrnc 00112$
+ 000072 A6 01 [ 1] 162 ld a, #0x01
+ 000074 F7 [ 1] 163 ld (x), a
+ 000075 20 07 [ 2] 164 jra 00113$
+ 000077 165 00112$:
+ 166 ; ../time.c: 89: else if (timeptr->tm_mday>31) timeptr->tm_mday=31;
+ 000077 A1 1F [ 1] 167 cp a, #0x1f
+ 000079 23 03 [ 2] 168 jrule 00113$
+ 00007B A6 1F [ 1] 169 ld a, #0x1f
+ 00007D F7 [ 1] 170 ld (x), a
+ 00007E 171 00113$:
+ 172 ; ../time.c: 90: if (timeptr->tm_mon>11) timeptr->tm_mon=11;
+ 00007E 93 [ 1] 173 ldw x, y
+ 00007F 1C 00 04 [ 2] 174 addw x, #0x0004
+ 000082 F6 [ 1] 175 ld a, (x)
+ 000083 A1 0B [ 1] 176 cp a, #0x0b
+ 000085 23 03 [ 2] 177 jrule 00115$
+ 000087 A6 0B [ 1] 178 ld a, #0x0b
+ 000089 F7 [ 1] 179 ld (x), a
+ 00008A 180 00115$:
+ 181 ; ../time.c: 91: if (timeptr->tm_year<0) timeptr->tm_year=0;
+ 00008A 72 A9 00 05 [ 2] 182 addw y, #0x0005
+ 00008E 93 [ 1] 183 ldw x, y
+ 00008F FE [ 2] 184 ldw x, (x)
+ 000090 2A 04 [ 1] 185 jrpl 00118$
+ 000092 93 [ 1] 186 ldw x, y
+ 000093 6F 01 [ 1] 187 clr (0x1, x)
+ 000095 7F [ 1] 188 clr (x)
+ 000096 189 00118$:
+ 190 ; ../time.c: 92: }
+ 000096 87 [ 5] 191 retf
+ 192 ; ../time.c: 95: char *asctime(struct tm *timeptr) {
+ 193 ; -----------------------------------------
+ 194 ; function asctime
+ 195 ; -----------------------------------------
+ 000097 196 _asctime:
+ 000097 52 0C [ 2] 197 sub sp, #12
+ 198 ; ../time.c: 96: CheckTime(timeptr);
+ 000099 1E 10 [ 2] 199 ldw x, (0x10, sp)
+ 00009B 89 [ 2] 200 pushw x
+ 00009C 8Ds00r00r3C [ 5] 201 callf _CheckTime
+ 0000A0 5B 02 [ 2] 202 addw sp, #2
+ 203 ; ../time.c: 100: timeptr->tm_year+1900);
+ 0000A2 16 10 [ 2] 204 ldw y, (0x10, sp)
+ 0000A4 93 [ 1] 205 ldw x, y
+ 0000A5 EE 05 [ 2] 206 ldw x, (0x5, x)
+ 0000A7 1C 07 6C [ 2] 207 addw x, #0x076c
+ 0000AA 1F 01 [ 2] 208 ldw (0x01, sp), x
+ 209 ; ../time.c: 99: timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec,
+ 0000AC 90 F6 [ 1] 210 ld a, (y)
+ 0000AE 6B 04 [ 1] 211 ld (0x04, sp), a
+ 0000B0 0F 03 [ 1] 212 clr (0x03, sp)
+ 0000B2 93 [ 1] 213 ldw x, y
+ 0000B3 E6 01 [ 1] 214 ld a, (0x1, x)
+ 0000B5 6B 06 [ 1] 215 ld (0x06, sp), a
+ 0000B7 0F 05 [ 1] 216 clr (0x05, sp)
+ 0000B9 93 [ 1] 217 ldw x, y
+ 0000BA E6 02 [ 1] 218 ld a, (0x2, x)
+ 0000BC 6B 08 [ 1] 219 ld (0x08, sp), a
+ 0000BE 0F 07 [ 1] 220 clr (0x07, sp)
+ 221 ; ../time.c: 98: __day[timeptr->tm_wday], __month[timeptr->tm_mon], timeptr->tm_mday,
+ 0000C0 93 [ 1] 222 ldw x, y
+ 0000C1 E6 03 [ 1] 223 ld a, (0x3, x)
+ 0000C3 6B 0A [ 1] 224 ld (0x0a, sp), a
+ 0000C5 0F 09 [ 1] 225 clr (0x09, sp)
+ 0000C7 93 [ 1] 226 ldw x, y
+ 0000C8 E6 04 [ 1] 227 ld a, (0x4, x)
+ 0000CA 5F [ 1] 228 clrw x
+ 0000CB 97 [ 1] 229 ld xl, a
+ 0000CC 58 [ 2] 230 sllw x
+ 0000CD 1Cr00r0C [ 2] 231 addw x, #(___month + 0)
+ 0000D0 4F [ 1] 232 clr a
+ 0000D1 A9s00 [ 1] 233 adc a, #((___month + 0) >> 16)
+ 0000D3 FE [ 2] 234 ldw x, (x)
+ 0000D4 1F 0B [ 2] 235 ldw (0x0b, sp), x
+ 0000D6 90 E6 07 [ 1] 236 ld a, (0x7, y)
+ 0000D9 5F [ 1] 237 clrw x
+ 0000DA 97 [ 1] 238 ld xl, a
+ 0000DB 58 [ 2] 239 sllw x
+ 0000DC 1Cr00r24 [ 2] 240 addw x, #(___day + 0)
+ 0000DF 4F [ 1] 241 clr a
+ 0000E0 A9s00 [ 1] 242 adc a, #((___day + 0) >> 16)
+ 0000E2 FE [ 2] 243 ldw x, (x)
+ 0000E3 90 93 [ 1] 244 ldw y, x
+ 245 ; ../time.c: 97: sprintf (ascTimeBuffer, "%s %s %2d %02d:%02d:%02d %04d\n",
+ 0000E5 1E 01 [ 2] 246 ldw x, (0x01, sp)
+ 0000E7 89 [ 2] 247 pushw x
+ 0000E8 1E 05 [ 2] 248 ldw x, (0x05, sp)
+ 0000EA 89 [ 2] 249 pushw x
+ 0000EB 1E 09 [ 2] 250 ldw x, (0x09, sp)
+ 0000ED 89 [ 2] 251 pushw x
+ 0000EE 1E 0D [ 2] 252 ldw x, (0x0d, sp)
+ 0000F0 89 [ 2] 253 pushw x
+ 0000F1 1E 11 [ 2] 254 ldw x, (0x11, sp)
+ 0000F3 89 [ 2] 255 pushw x
+ 0000F4 1E 15 [ 2] 256 ldw x, (0x15, sp)
+ 0000F6 89 [ 2] 257 pushw x
+ 0000F7 90 89 [ 2] 258 pushw y
+ 0000F9 4Br32 [ 1] 259 push #<(___str_0 + 0)
+ 0000FB 4Bs00 [ 1] 260 push #((___str_0 + 0) >> 8)
+ 0000FD 4Br00 [ 1] 261 push #<(_ascTimeBuffer + 0)
+ 0000FF 4Bs00 [ 1] 262 push #((_ascTimeBuffer + 0) >> 8)
+ 000101 8Ds00r00r00 [ 5] 263 callf _sprintf
+ 000105 5B 12 [ 2] 264 addw sp, #18
+ 265 ; ../time.c: 101: return ascTimeBuffer;
+ 000107 AEr00r00 [ 2] 266 ldw x, #(_ascTimeBuffer + 0)
+ 267 ; ../time.c: 102: }
+ 00010A 5B 0C [ 2] 268 addw sp, #12
+ 00010C 87 [ 5] 269 retf
+ 270 ; ../time.c: 104: char *ctime(time_t *timep) {
+ 271 ; -----------------------------------------
+ 272 ; function ctime
+ 273 ; -----------------------------------------
+ 00010D 274 _ctime:
+ 275 ; ../time.c: 105: return asctime(localtime(timep));
+ 00010D 1E 04 [ 2] 276 ldw x, (0x04, sp)
+ 00010F 89 [ 2] 277 pushw x
+ 000110 8Ds00r01r1E [ 5] 278 callf _localtime
+ 000114 5B 02 [ 2] 279 addw sp, #2
+ 000116 89 [ 2] 280 pushw x
+ 000117 8Ds00r00r97 [ 5] 281 callf _asctime
+ 00011B 5B 02 [ 2] 282 addw sp, #2
+ 283 ; ../time.c: 106: }
+ 00011D 87 [ 5] 284 retf
+ 285 ; ../time.c: 121: struct tm *localtime(time_t *timep) {
+ 286 ; -----------------------------------------
+ 287 ; function localtime
+ 288 ; -----------------------------------------
+ 00011E 289 _localtime:
+ 290 ; ../time.c: 122: return gmtime(timep);
+ 00011E 1E 04 [ 2] 291 ldw x, (0x04, sp)
+ 000120 89 [ 2] 292 pushw x
+ 000121 8Ds00r01r28 [ 5] 293 callf _gmtime
+ 000125 5B 02 [ 2] 294 addw sp, #2
+ 295 ; ../time.c: 123: }
+ 000127 87 [ 5] 296 retf
+ 297 ; ../time.c: 125: struct tm *gmtime(time_t *timep) {
+ 298 ; -----------------------------------------
+ 299 ; function gmtime
+ 300 ; -----------------------------------------
+ 000128 301 _gmtime:
+ 000128 52 10 [ 2] 302 sub sp, #16
+ 303 ; ../time.c: 126: unsigned long epoch=*timep;
+ 00012A 1E 14 [ 2] 304 ldw x, (0x14, sp)
+ 00012C 90 93 [ 1] 305 ldw y, x
+ 00012E 90 EE 02 [ 2] 306 ldw y, (0x2, y)
+ 000131 FE [ 2] 307 ldw x, (x)
+ 000132 17 0F [ 2] 308 ldw (0x0f, sp), y
+ 000134 1F 0D [ 2] 309 ldw (0x0d, sp), x
+ 310 ; ../time.c: 131: lastTime.tm_sec=epoch%60;
+ 000136 4B 3C [ 1] 311 push #0x3c
+ 000138 5F [ 1] 312 clrw x
+ 000139 89 [ 2] 313 pushw x
+ 00013A 4B 00 [ 1] 314 push #0x00
+ 00013C 1E 13 [ 2] 315 ldw x, (0x13, sp)
+ 00013E 89 [ 2] 316 pushw x
+ 00013F 1E 13 [ 2] 317 ldw x, (0x13, sp)
+ 000141 89 [ 2] 318 pushw x
+ 000142 8Ds00r00r00 [ 5] 319 callf __modulong
+ 000146 5B 08 [ 2] 320 addw sp, #8
+ 000148 9F [ 1] 321 ld a, xl
+ 000149 C7u00u20 [ 1] 322 ld _lastTime+0, a
+ 323 ; ../time.c: 132: epoch/=60; // now it is minutes
+ 00014C 4B 3C [ 1] 324 push #0x3c
+ 00014E 5F [ 1] 325 clrw x
+ 00014F 89 [ 2] 326 pushw x
+ 000150 4B 00 [ 1] 327 push #0x00
+ 000152 1E 13 [ 2] 328 ldw x, (0x13, sp)
+ 000154 89 [ 2] 329 pushw x
+ 000155 1E 13 [ 2] 330 ldw x, (0x13, sp)
+ 000157 89 [ 2] 331 pushw x
+ 000158 8Ds00r00r00 [ 5] 332 callf __divulong
+ 00015C 5B 08 [ 2] 333 addw sp, #8
+ 00015E 1F 0D [ 2] 334 ldw (0x0d, sp), x
+ 000160 17 0B [ 2] 335 ldw (0x0b, sp), y
+ 336 ; ../time.c: 133: lastTime.tm_min=epoch%60;
+ 000162 AEr00r21 [ 2] 337 ldw x, #(_lastTime + 0)+1
+ 000165 1F 0F [ 2] 338 ldw (0x0f, sp), x
+ 000167 4B 3C [ 1] 339 push #0x3c
+ 000169 5F [ 1] 340 clrw x
+ 00016A 89 [ 2] 341 pushw x
+ 00016B 4B 00 [ 1] 342 push #0x00
+ 00016D 1E 11 [ 2] 343 ldw x, (0x11, sp)
+ 00016F 89 [ 2] 344 pushw x
+ 000170 1E 11 [ 2] 345 ldw x, (0x11, sp)
+ 000172 89 [ 2] 346 pushw x
+ 000173 8Ds00r00r00 [ 5] 347 callf __modulong
+ 000177 5B 08 [ 2] 348 addw sp, #8
+ 000179 9F [ 1] 349 ld a, xl
+ 00017A 1E 0F [ 2] 350 ldw x, (0x0f, sp)
+ 00017C F7 [ 1] 351 ld (x), a
+ 352 ; ../time.c: 134: epoch/=60; // now it is hours
+ 00017D 4B 3C [ 1] 353 push #0x3c
+ 00017F 5F [ 1] 354 clrw x
+ 000180 89 [ 2] 355 pushw x
+ 000181 4B 00 [ 1] 356 push #0x00
+ 000183 1E 11 [ 2] 357 ldw x, (0x11, sp)
+ 000185 89 [ 2] 358 pushw x
+ 000186 1E 11 [ 2] 359 ldw x, (0x11, sp)
+ 000188 89 [ 2] 360 pushw x
+ 000189 8Ds00r00r00 [ 5] 361 callf __divulong
+ 00018D 5B 08 [ 2] 362 addw sp, #8
+ 00018F 1F 0D [ 2] 363 ldw (0x0d, sp), x
+ 000191 17 0B [ 2] 364 ldw (0x0b, sp), y
+ 365 ; ../time.c: 135: lastTime.tm_hour=epoch%24;
+ 000193 AEr00r22 [ 2] 366 ldw x, #(_lastTime + 0)+2
+ 000196 1F 0F [ 2] 367 ldw (0x0f, sp), x
+ 000198 4B 18 [ 1] 368 push #0x18
+ 00019A 5F [ 1] 369 clrw x
+ 00019B 89 [ 2] 370 pushw x
+ 00019C 4B 00 [ 1] 371 push #0x00
+ 00019E 1E 11 [ 2] 372 ldw x, (0x11, sp)
+ 0001A0 89 [ 2] 373 pushw x
+ 0001A1 1E 11 [ 2] 374 ldw x, (0x11, sp)
+ 0001A3 89 [ 2] 375 pushw x
+ 0001A4 8Ds00r00r00 [ 5] 376 callf __modulong
+ 0001A8 5B 08 [ 2] 377 addw sp, #8
+ 0001AA 9F [ 1] 378 ld a, xl
+ 0001AB 1E 0F [ 2] 379 ldw x, (0x0f, sp)
+ 0001AD F7 [ 1] 380 ld (x), a
+ 381 ; ../time.c: 136: epoch/=24; // now it is days
+ 0001AE 4B 18 [ 1] 382 push #0x18
+ 0001B0 5F [ 1] 383 clrw x
+ 0001B1 89 [ 2] 384 pushw x
+ 0001B2 4B 00 [ 1] 385 push #0x00
+ 0001B4 1E 11 [ 2] 386 ldw x, (0x11, sp)
+ 0001B6 89 [ 2] 387 pushw x
+ 0001B7 1E 11 [ 2] 388 ldw x, (0x11, sp)
+ 0001B9 89 [ 2] 389 pushw x
+ 0001BA 8Ds00r00r00 [ 5] 390 callf __divulong
+ 0001BE 5B 08 [ 2] 391 addw sp, #8
+ 0001C0 1F 03 [ 2] 392 ldw (0x03, sp), x
+ 0001C2 17 01 [ 2] 393 ldw (0x01, sp), y
+ 394 ; ../time.c: 137: lastTime.tm_wday=(epoch+4)%7;
+ 0001C4 AEr00r27 [ 2] 395 ldw x, #(_lastTime + 0)+7
+ 0001C7 1F 0F [ 2] 396 ldw (0x0f, sp), x
+ 0001C9 1E 03 [ 2] 397 ldw x, (0x03, sp)
+ 0001CB 1C 00 04 [ 2] 398 addw x, #0x0004
+ 0001CE 16 01 [ 2] 399 ldw y, (0x01, sp)
+ 0001D0 24 02 [ 1] 400 jrnc 00164$
+ 0001D2 90 5C [ 1] 401 incw y
+ 0001D4 402 00164$:
+ 0001D4 4B 07 [ 1] 403 push #0x07
+ 0001D6 4B 00 [ 1] 404 push #0x00
+ 0001D8 4B 00 [ 1] 405 push #0x00
+ 0001DA 4B 00 [ 1] 406 push #0x00
+ 0001DC 89 [ 2] 407 pushw x
+ 0001DD 90 89 [ 2] 408 pushw y
+ 0001DF 8Ds00r00r00 [ 5] 409 callf __modulong
+ 0001E3 5B 08 [ 2] 410 addw sp, #8
+ 0001E5 9F [ 1] 411 ld a, xl
+ 0001E6 1E 0F [ 2] 412 ldw x, (0x0f, sp)
+ 0001E8 F7 [ 1] 413 ld (x), a
+ 414 ; ../time.c: 140: days=0;
+ 0001E9 5F [ 1] 415 clrw x
+ 0001EA 1F 07 [ 2] 416 ldw (0x07, sp), x
+ 0001EC 1F 05 [ 2] 417 ldw (0x05, sp), x
+ 418 ; ../time.c: 141: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch) {
+ 0001EE AE 07 B2 [ 2] 419 ldw x, #0x07b2
+ 0001F1 1F 0F [ 2] 420 ldw (0x0f, sp), x
+ 0001F3 421 00101$:
+ 0001F3 7B 10 [ 1] 422 ld a, (0x10, sp)
+ 0001F5 A4 03 [ 1] 423 and a, #0x03
+ 0001F7 6B 0A [ 1] 424 ld (0x0a, sp), a
+ 0001F9 0F 09 [ 1] 425 clr (0x09, sp)
+ 0001FB 1E 09 [ 2] 426 ldw x, (0x09, sp)
+ 0001FD 26 07 [ 1] 427 jrne 00118$
+ 0001FF AE 01 6E [ 2] 428 ldw x, #0x016e
+ 000202 1F 0D [ 2] 429 ldw (0x0d, sp), x
+ 000204 20 05 [ 2] 430 jra 00119$
+ 000206 431 00118$:
+ 000206 AE 01 6D [ 2] 432 ldw x, #0x016d
+ 000209 1F 0D [ 2] 433 ldw (0x0d, sp), x
+ 00020B 434 00119$:
+ 00020B 16 0D [ 2] 435 ldw y, (0x0d, sp)
+ 00020D 5F [ 1] 436 clrw x
+ 00020E 90 5D [ 2] 437 tnzw y
+ 000210 2A 01 [ 1] 438 jrpl 00166$
+ 000212 5A [ 2] 439 decw x
+ 000213 440 00166$:
+ 000213 72 F9 07 [ 2] 441 addw y, (0x07, sp)
+ 000216 17 0D [ 2] 442 ldw (0x0d, sp), y
+ 000218 9F [ 1] 443 ld a, xl
+ 000219 19 06 [ 1] 444 adc a, (0x06, sp)
+ 00021B 6B 0C [ 1] 445 ld (0x0c, sp), a
+ 00021D 9E [ 1] 446 ld a, xh
+ 00021E 19 05 [ 1] 447 adc a, (0x05, sp)
+ 000220 6B 0B [ 1] 448 ld (0x0b, sp), a
+ 000222 16 0D [ 2] 449 ldw y, (0x0d, sp)
+ 000224 17 07 [ 2] 450 ldw (0x07, sp), y
+ 000226 16 0B [ 2] 451 ldw y, (0x0b, sp)
+ 000228 17 05 [ 2] 452 ldw (0x05, sp), y
+ 00022A 1E 03 [ 2] 453 ldw x, (0x03, sp)
+ 00022C 13 0D [ 2] 454 cpw x, (0x0d, sp)
+ 00022E 7B 02 [ 1] 455 ld a, (0x02, sp)
+ 000230 12 0C [ 1] 456 sbc a, (0x0c, sp)
+ 000232 7B 01 [ 1] 457 ld a, (0x01, sp)
+ 000234 12 0B [ 1] 458 sbc a, (0x0b, sp)
+ 000236 25 07 [ 1] 459 jrc 00103$
+ 460 ; ../time.c: 142: year++;
+ 000238 1E 0F [ 2] 461 ldw x, (0x0f, sp)
+ 00023A 5C [ 1] 462 incw x
+ 00023B 1F 0F [ 2] 463 ldw (0x0f, sp), x
+ 00023D 20 B4 [ 2] 464 jra 00101$
+ 00023F 465 00103$:
+ 466 ; ../time.c: 144: lastTime.tm_year=year-1900;
+ 00023F AEr00r25 [ 2] 467 ldw x, #(_lastTime + 0)+5
+ 000242 16 0F [ 2] 468 ldw y, (0x0f, sp)
+ 000244 72 A2 07 6C [ 2] 469 subw y, #0x076c
+ 000248 FF [ 2] 470 ldw (x), y
+ 471 ; ../time.c: 146: days -= LEAP_YEAR(year) ? 366 : 365;
+ 000249 16 09 [ 2] 472 ldw y, (0x09, sp)
+ 00024B 17 0F [ 2] 473 ldw (0x0f, sp), y
+ 00024D 1E 09 [ 2] 474 ldw x, (0x09, sp)
+ 00024F 26 04 [ 1] 475 jrne 00120$
+ 000251 AE 01 6E [ 2] 476 ldw x, #0x016e
+ 000254 BC 477 .byte 0xbc
+ 000255 478 00120$:
+ 000255 AE 01 6D [ 2] 479 ldw x, #0x016d
+ 000258 480 00121$:
+ 000258 1F 0D [ 2] 481 ldw (0x0d, sp), x
+ 00025A 5F [ 1] 482 clrw x
+ 00025B 0D 0D [ 1] 483 tnz (0x0d, sp)
+ 00025D 2A 01 [ 1] 484 jrpl 00170$
+ 00025F 5A [ 2] 485 decw x
+ 000260 486 00170$:
+ 000260 16 07 [ 2] 487 ldw y, (0x07, sp)
+ 000262 72 F2 0D [ 2] 488 subw y, (0x0d, sp)
+ 000265 7B 06 [ 1] 489 ld a, (0x06, sp)
+ 000267 89 [ 2] 490 pushw x
+ 000268 12 02 [ 1] 491 sbc a, (#2, sp)
+ 00026A 85 [ 2] 492 popw x
+ 00026B 97 [ 1] 493 ld xl, a
+ 00026C 7B 05 [ 1] 494 ld a, (0x05, sp)
+ 00026E 89 [ 2] 495 pushw x
+ 00026F 12 01 [ 1] 496 sbc a, (#1, sp)
+ 000271 85 [ 2] 497 popw x
+ 000272 17 0D [ 2] 498 ldw (0x0d, sp), y
+ 499 ; ../time.c: 147: epoch -= days; // now it is days in this year, starting at 0
+ 000274 16 03 [ 2] 500 ldw y, (0x03, sp)
+ 000276 72 F2 0D [ 2] 501 subw y, (0x0d, sp)
+ 000279 88 [ 1] 502 push a
+ 00027A 7B 03 [ 1] 503 ld a, (0x03, sp)
+ 00027C 89 [ 2] 504 pushw x
+ 00027D 12 02 [ 1] 505 sbc a, (#2, sp)
+ 00027F 85 [ 2] 506 popw x
+ 000280 97 [ 1] 507 ld xl, a
+ 000281 7B 02 [ 1] 508 ld a, (0x02, sp)
+ 000283 12 01 [ 1] 509 sbc a, (1, sp)
+ 000285 95 [ 1] 510 ld xh, a
+ 000286 84 [ 1] 511 pop a
+ 000287 17 08 [ 2] 512 ldw (0x08, sp), y
+ 000289 1F 06 [ 2] 513 ldw (0x06, sp), x
+ 514 ; ../time.c: 148: lastTime.tm_yday=epoch;
+ 00028B AEr00r28 [ 2] 515 ldw x, #(_lastTime + 0)+8
+ 00028E 16 08 [ 2] 516 ldw y, (0x08, sp)
+ 000290 FF [ 2] 517 ldw (x), y
+ 518 ; ../time.c: 153: for (month=0; month<12; month++) {
+ 000291 0F 0E [ 1] 519 clr (0x0e, sp)
+ 000293 520 00114$:
+ 521 ; ../time.c: 154: if (month==1) { // februari
+ 000293 7B 0E [ 1] 522 ld a, (0x0e, sp)
+ 000295 4A [ 1] 523 dec a
+ 000296 26 0C [ 1] 524 jrne 00108$
+ 525 ; ../time.c: 155: if (LEAP_YEAR(year)) {
+ 000298 1E 0F [ 2] 526 ldw x, (0x0f, sp)
+ 00029A 26 04 [ 1] 527 jrne 00105$
+ 528 ; ../time.c: 156: monthLength=29;
+ 00029C A6 1D [ 1] 529 ld a, #0x1d
+ 00029E 20 13 [ 2] 530 jra 00109$
+ 0002A0 531 00105$:
+ 532 ; ../time.c: 158: monthLength=28;
+ 0002A0 A6 1C [ 1] 533 ld a, #0x1c
+ 0002A2 20 0F [ 2] 534 jra 00109$
+ 0002A4 535 00108$:
+ 536 ; ../time.c: 161: monthLength = monthDays[month];
+ 0002A4 5F [ 1] 537 clrw x
+ 0002A5 7B 0E [ 1] 538 ld a, (0x0e, sp)
+ 0002A7 97 [ 1] 539 ld xl, a
+ 0002A8 1Cr00r00 [ 2] 540 addw x, #(_monthDays + 0)
+ 0002AB 1F 0C [ 2] 541 ldw (0x0c, sp), x
+ 0002AD 4F [ 1] 542 clr a
+ 0002AE A9s00 [ 1] 543 adc a, #((_monthDays + 0) >> 16)
+ 0002B0 1E 0C [ 2] 544 ldw x, (0x0c, sp)
+ 0002B2 F6 [ 1] 545 ld a, (x)
+ 0002B3 546 00109$:
+ 547 ; ../time.c: 164: if (epoch>=monthLength) {
+ 0002B3 6B 0D [ 1] 548 ld (0x0d, sp), a
+ 0002B5 0F 0C [ 1] 549 clr (0x0c, sp)
+ 0002B7 0F 0B [ 1] 550 clr (0x0b, sp)
+ 0002B9 0F 0A [ 1] 551 clr (0x0a, sp)
+ 0002BB 1E 08 [ 2] 552 ldw x, (0x08, sp)
+ 0002BD 13 0C [ 2] 553 cpw x, (0x0c, sp)
+ 0002BF 7B 07 [ 1] 554 ld a, (0x07, sp)
+ 0002C1 12 0B [ 1] 555 sbc a, (0x0b, sp)
+ 0002C3 7B 06 [ 1] 556 ld a, (0x06, sp)
+ 0002C5 12 0A [ 1] 557 sbc a, (0x0a, sp)
+ 0002C7 25 1B [ 1] 558 jrc 00113$
+ 559 ; ../time.c: 165: epoch-=monthLength;
+ 0002C9 16 08 [ 2] 560 ldw y, (0x08, sp)
+ 0002CB 72 F2 0C [ 2] 561 subw y, (0x0c, sp)
+ 0002CE 7B 07 [ 1] 562 ld a, (0x07, sp)
+ 0002D0 12 0B [ 1] 563 sbc a, (0x0b, sp)
+ 0002D2 97 [ 1] 564 ld xl, a
+ 0002D3 7B 06 [ 1] 565 ld a, (0x06, sp)
+ 0002D5 12 0A [ 1] 566 sbc a, (0x0a, sp)
+ 0002D7 95 [ 1] 567 ld xh, a
+ 0002D8 17 08 [ 2] 568 ldw (0x08, sp), y
+ 0002DA 1F 06 [ 2] 569 ldw (0x06, sp), x
+ 570 ; ../time.c: 153: for (month=0; month<12; month++) {
+ 0002DC 0C 0E [ 1] 571 inc (0x0e, sp)
+ 0002DE 7B 0E [ 1] 572 ld a, (0x0e, sp)
+ 0002E0 A1 0C [ 1] 573 cp a, #0x0c
+ 0002E2 25 AF [ 1] 574 jrc 00114$
+ 0002E4 575 00113$:
+ 576 ; ../time.c: 170: lastTime.tm_mon=month;
+ 0002E4 AEr00r24 [ 2] 577 ldw x, #(_lastTime + 0)+4
+ 0002E7 7B 0E [ 1] 578 ld a, (0x0e, sp)
+ 0002E9 F7 [ 1] 579 ld (x), a
+ 580 ; ../time.c: 171: lastTime.tm_mday=epoch+1;
+ 0002EA AEr00r23 [ 2] 581 ldw x, #(_lastTime + 0)+3
+ 0002ED 7B 09 [ 1] 582 ld a, (0x09, sp)
+ 0002EF 4C [ 1] 583 inc a
+ 0002F0 F7 [ 1] 584 ld (x), a
+ 585 ; ../time.c: 173: lastTime.tm_isdst=0;
+ 0002F1 AEr00r2A [ 2] 586 ldw x, #(_lastTime + 0)+10
+ 0002F4 7F [ 1] 587 clr (x)
+ 588 ; ../time.c: 175: return &lastTime;
+ 0002F5 AEr00r20 [ 2] 589 ldw x, #(_lastTime + 0)
+ 590 ; ../time.c: 176: }
+ 0002F8 5B 10 [ 2] 591 addw sp, #16
+ 0002FA 87 [ 5] 592 retf
+ 593 ; ../time.c: 179: time_t mktime(struct tm *timeptr) {
+ 594 ; -----------------------------------------
+ 595 ; function mktime
+ 596 ; -----------------------------------------
+ 0002FB 597 _mktime:
+ 0002FB 52 12 [ 2] 598 sub sp, #18
+ 599 ; ../time.c: 180: int year=timeptr->tm_year+1900, month=timeptr->tm_mon, i;
+ 0002FD 16 16 [ 2] 600 ldw y, (0x16, sp)
+ 0002FF 17 01 [ 2] 601 ldw (0x01, sp), y
+ 000301 93 [ 1] 602 ldw x, y
+ 000302 EE 05 [ 2] 603 ldw x, (0x5, x)
+ 000304 1C 07 6C [ 2] 604 addw x, #0x076c
+ 000307 1F 0B [ 2] 605 ldw (0x0b, sp), x
+ 000309 1E 01 [ 2] 606 ldw x, (0x01, sp)
+ 00030B E6 04 [ 1] 607 ld a, (0x4, x)
+ 00030D 5F [ 1] 608 clrw x
+ 00030E 97 [ 1] 609 ld xl, a
+ 00030F 1F 03 [ 2] 610 ldw (0x03, sp), x
+ 611 ; ../time.c: 183: CheckTime(timeptr);
+ 000311 1E 01 [ 2] 612 ldw x, (0x01, sp)
+ 000313 89 [ 2] 613 pushw x
+ 000314 8Ds00r00r3C [ 5] 614 callf _CheckTime
+ 000318 5B 02 [ 2] 615 addw sp, #2
+ 616 ; ../time.c: 186: seconds= (year-1970)*(60*60*24L*365);
+ 00031A 1E 0B [ 2] 617 ldw x, (0x0b, sp)
+ 00031C 1D 07 B2 [ 2] 618 subw x, #0x07b2
+ 00031F 90 5F [ 1] 619 clrw y
+ 000321 5D [ 2] 620 tnzw x
+ 000322 2A 02 [ 1] 621 jrpl 00154$
+ 000324 90 5A [ 2] 622 decw y
+ 000326 623 00154$:
+ 000326 89 [ 2] 624 pushw x
+ 000327 90 89 [ 2] 625 pushw y
+ 000329 4B 80 [ 1] 626 push #0x80
+ 00032B 4B 33 [ 1] 627 push #0x33
+ 00032D 4B E1 [ 1] 628 push #0xe1
+ 00032F 4B 01 [ 1] 629 push #0x01
+ 000331 8Ds00r00r00 [ 5] 630 callf __mullong
+ 000335 5B 08 [ 2] 631 addw sp, #8
+ 632 ; ../time.c: 189: for (i=1970; i<year; i++) {
+ 000337 1F 11 [ 2] 633 ldw (0x11, sp), x
+ 000339 17 0F [ 2] 634 ldw (0x0f, sp), y
+ 00033B AE 07 B2 [ 2] 635 ldw x, #0x07b2
+ 00033E 1F 0D [ 2] 636 ldw (0x0d, sp), x
+ 000340 637 00110$:
+ 000340 1E 0D [ 2] 638 ldw x, (0x0d, sp)
+ 000342 13 0B [ 2] 639 cpw x, (0x0b, sp)
+ 000344 2E 2A [ 1] 640 jrsge 00124$
+ 641 ; ../time.c: 190: if (LEAP_YEAR(i)) {
+ 000346 4B 04 [ 1] 642 push #0x04
+ 000348 4B 00 [ 1] 643 push #0x00
+ 00034A 1E 0F [ 2] 644 ldw x, (0x0f, sp)
+ 00034C 89 [ 2] 645 pushw x
+ 00034D 8Ds00r00r00 [ 5] 646 callf __modsint
+ 000351 5B 04 [ 2] 647 addw sp, #4
+ 000353 5D [ 2] 648 tnzw x
+ 000354 26 13 [ 1] 649 jrne 00111$
+ 650 ; ../time.c: 191: seconds+= 60*60*24L;
+ 000356 1E 11 [ 2] 651 ldw x, (0x11, sp)
+ 000358 1C 51 80 [ 2] 652 addw x, #0x5180
+ 00035B 1F 11 [ 2] 653 ldw (0x11, sp), x
+ 00035D 7B 10 [ 1] 654 ld a, (0x10, sp)
+ 00035F A9 01 [ 1] 655 adc a, #0x01
+ 000361 6B 10 [ 1] 656 ld (0x10, sp), a
+ 000363 7B 0F [ 1] 657 ld a, (0x0f, sp)
+ 000365 A9 00 [ 1] 658 adc a, #0x00
+ 000367 6B 0F [ 1] 659 ld (0x0f, sp), a
+ 000369 660 00111$:
+ 661 ; ../time.c: 189: for (i=1970; i<year; i++) {
+ 000369 1E 0D [ 2] 662 ldw x, (0x0d, sp)
+ 00036B 5C [ 1] 663 incw x
+ 00036C 1F 0D [ 2] 664 ldw (0x0d, sp), x
+ 00036E 20 D0 [ 2] 665 jra 00110$
+ 000370 666 00124$:
+ 000370 16 11 [ 2] 667 ldw y, (0x11, sp)
+ 000372 17 07 [ 2] 668 ldw (0x07, sp), y
+ 000374 16 0F [ 2] 669 ldw y, (0x0f, sp)
+ 000376 17 05 [ 2] 670 ldw (0x05, sp), y
+ 671 ; ../time.c: 196: for (i=0; i<month; i++) {
+ 000378 4B 04 [ 1] 672 push #0x04
+ 00037A 4B 00 [ 1] 673 push #0x00
+ 00037C 1E 0D [ 2] 674 ldw x, (0x0d, sp)
+ 00037E 89 [ 2] 675 pushw x
+ 00037F 8Ds00r00r00 [ 5] 676 callf __modsint
+ 000383 5B 04 [ 2] 677 addw sp, #4
+ 000385 1F 09 [ 2] 678 ldw (0x09, sp), x
+ 000387 90 5F [ 1] 679 clrw y
+ 000389 680 00113$:
+ 000389 51 [ 1] 681 exgw x, y
+ 00038A 13 03 [ 2] 682 cpw x, (0x03, sp)
+ 00038C 51 [ 1] 683 exgw x, y
+ 00038D 2E 68 [ 1] 684 jrsge 00108$
+ 685 ; ../time.c: 197: if (i==1 && LEAP_YEAR(year)) {
+ 00038F 90 A3 00 01 [ 2] 686 cpw y, #0x0001
+ 000393 26 1B [ 1] 687 jrne 00105$
+ 000395 1E 09 [ 2] 688 ldw x, (0x09, sp)
+ 000397 26 17 [ 1] 689 jrne 00105$
+ 690 ; ../time.c: 198: seconds+= 60*60*24L*29;
+ 000399 1E 07 [ 2] 691 ldw x, (0x07, sp)
+ 00039B 1C 3B 80 [ 2] 692 addw x, #0x3b80
+ 00039E 1F 11 [ 2] 693 ldw (0x11, sp), x
+ 0003A0 1E 05 [ 2] 694 ldw x, (0x05, sp)
+ 0003A2 24 01 [ 1] 695 jrnc 00163$
+ 0003A4 5C [ 1] 696 incw x
+ 0003A5 697 00163$:
+ 0003A5 1C 00 26 [ 2] 698 addw x, #0x0026
+ 0003A8 1F 05 [ 2] 699 ldw (0x05, sp), x
+ 0003AA 1E 11 [ 2] 700 ldw x, (0x11, sp)
+ 0003AC 1F 07 [ 2] 701 ldw (0x07, sp), x
+ 0003AE 20 43 [ 2] 702 jra 00114$
+ 0003B0 703 00105$:
+ 704 ; ../time.c: 200: seconds+= 60*60*24L*monthDays[i];
+ 0003B0 93 [ 1] 705 ldw x, y
+ 0003B1 1Cr00r00 [ 2] 706 addw x, #(_monthDays + 0)
+ 0003B4 4F [ 1] 707 clr a
+ 0003B5 A9s00 [ 1] 708 adc a, #((_monthDays + 0) >> 16)
+ 0003B7 F6 [ 1] 709 ld a, (x)
+ 0003B8 97 [ 1] 710 ld xl, a
+ 0003B9 6B 12 [ 1] 711 ld (0x12, sp), a
+ 0003BB 41 [ 1] 712 exg a, xl
+ 0003BC 0F 11 [ 1] 713 clr (0x11, sp)
+ 0003BE 0F 10 [ 1] 714 clr (0x10, sp)
+ 0003C0 0F 0F [ 1] 715 clr (0x0f, sp)
+ 0003C2 90 89 [ 2] 716 pushw y
+ 0003C4 1E 13 [ 2] 717 ldw x, (0x13, sp)
+ 0003C6 89 [ 2] 718 pushw x
+ 0003C7 1E 13 [ 2] 719 ldw x, (0x13, sp)
+ 0003C9 89 [ 2] 720 pushw x
+ 0003CA 4B 80 [ 1] 721 push #0x80
+ 0003CC 4B 51 [ 1] 722 push #0x51
+ 0003CE 4B 01 [ 1] 723 push #0x01
+ 0003D0 4B 00 [ 1] 724 push #0x00
+ 0003D2 8Ds00r00r00 [ 5] 725 callf __mullong
+ 0003D6 5B 08 [ 2] 726 addw sp, #8
+ 0003D8 1F 0F [ 2] 727 ldw (0x0f, sp), x
+ 0003DA 17 0D [ 2] 728 ldw (0x0d, sp), y
+ 0003DC 90 85 [ 2] 729 popw y
+ 0003DE 1E 07 [ 2] 730 ldw x, (0x07, sp)
+ 0003E0 72 FB 0D [ 2] 731 addw x, (0x0d, sp)
+ 0003E3 1F 11 [ 2] 732 ldw (0x11, sp), x
+ 0003E5 1E 05 [ 2] 733 ldw x, (0x05, sp)
+ 0003E7 24 01 [ 1] 734 jrnc 00164$
+ 0003E9 5C [ 1] 735 incw x
+ 0003EA 736 00164$:
+ 0003EA 72 FB 0B [ 2] 737 addw x, (0x0b, sp)
+ 0003ED 1F 05 [ 2] 738 ldw (0x05, sp), x
+ 0003EF 1E 11 [ 2] 739 ldw x, (0x11, sp)
+ 0003F1 1F 07 [ 2] 740 ldw (0x07, sp), x
+ 0003F3 741 00114$:
+ 742 ; ../time.c: 196: for (i=0; i<month; i++) {
+ 0003F3 90 5C [ 1] 743 incw y
+ 0003F5 20 92 [ 2] 744 jra 00113$
+ 0003F7 745 00108$:
+ 746 ; ../time.c: 204: seconds+= (timeptr->tm_mday-1)*60*60*24L;
+ 0003F7 1E 01 [ 2] 747 ldw x, (0x01, sp)
+ 0003F9 E6 03 [ 1] 748 ld a, (0x3, x)
+ 0003FB 5F [ 1] 749 clrw x
+ 0003FC 97 [ 1] 750 ld xl, a
+ 0003FD 5A [ 2] 751 decw x
+ 0003FE 90 5F [ 1] 752 clrw y
+ 000400 5D [ 2] 753 tnzw x
+ 000401 2A 02 [ 1] 754 jrpl 00165$
+ 000403 90 5A [ 2] 755 decw y
+ 000405 756 00165$:
+ 000405 89 [ 2] 757 pushw x
+ 000406 90 89 [ 2] 758 pushw y
+ 000408 4B 80 [ 1] 759 push #0x80
+ 00040A 4B 51 [ 1] 760 push #0x51
+ 00040C 4B 01 [ 1] 761 push #0x01
+ 00040E 4B 00 [ 1] 762 push #0x00
+ 000410 8Ds00r00r00 [ 5] 763 callf __mullong
+ 000414 5B 08 [ 2] 764 addw sp, #8
+ 000416 51 [ 1] 765 exgw x, y
+ 000417 72 F9 07 [ 2] 766 addw y, (0x07, sp)
+ 00041A 9F [ 1] 767 ld a, xl
+ 00041B 19 06 [ 1] 768 adc a, (0x06, sp)
+ 00041D 02 [ 1] 769 rlwa x
+ 00041E 19 05 [ 1] 770 adc a, (0x05, sp)
+ 000420 95 [ 1] 771 ld xh, a
+ 000421 17 11 [ 2] 772 ldw (0x11, sp), y
+ 000423 1F 0F [ 2] 773 ldw (0x0f, sp), x
+ 774 ; ../time.c: 205: seconds+= timeptr->tm_hour*60*60L;
+ 000425 1E 01 [ 2] 775 ldw x, (0x01, sp)
+ 000427 E6 02 [ 1] 776 ld a, (0x2, x)
+ 000429 5F [ 1] 777 clrw x
+ 00042A 97 [ 1] 778 ld xl, a
+ 00042B 90 5F [ 1] 779 clrw y
+ 00042D 89 [ 2] 780 pushw x
+ 00042E 90 89 [ 2] 781 pushw y
+ 000430 4B 10 [ 1] 782 push #0x10
+ 000432 4B 0E [ 1] 783 push #0x0e
+ 000434 5F [ 1] 784 clrw x
+ 000435 89 [ 2] 785 pushw x
+ 000436 8Ds00r00r00 [ 5] 786 callf __mullong
+ 00043A 5B 08 [ 2] 787 addw sp, #8
+ 00043C 90 9F [ 1] 788 ld a, yl
+ 00043E 72 FB 11 [ 2] 789 addw x, (0x11, sp)
+ 000441 19 10 [ 1] 790 adc a, (0x10, sp)
+ 000443 90 02 [ 1] 791 rlwa y
+ 000445 19 0F [ 1] 792 adc a, (0x0f, sp)
+ 000447 90 95 [ 1] 793 ld yh, a
+ 000449 1F 0D [ 2] 794 ldw (0x0d, sp), x
+ 795 ; ../time.c: 206: seconds+= timeptr->tm_min*60;
+ 00044B 1E 01 [ 2] 796 ldw x, (0x01, sp)
+ 00044D E6 01 [ 1] 797 ld a, (0x1, x)
+ 00044F 5F [ 1] 798 clrw x
+ 000450 97 [ 1] 799 ld xl, a
+ 000451 89 [ 2] 800 pushw x
+ 000452 58 [ 2] 801 sllw x
+ 000453 58 [ 2] 802 sllw x
+ 000454 58 [ 2] 803 sllw x
+ 000455 58 [ 2] 804 sllw x
+ 000456 72 F0 01 [ 2] 805 subw x, (1, sp)
+ 000459 58 [ 2] 806 sllw x
+ 00045A 58 [ 2] 807 sllw x
+ 00045B 5B 02 [ 2] 808 addw sp, #2
+ 00045D 1F 11 [ 2] 809 ldw (0x11, sp), x
+ 00045F 7B 11 [ 1] 810 ld a, (0x11, sp)
+ 000461 49 [ 1] 811 rlc a
+ 000462 4F [ 1] 812 clr a
+ 000463 A2 00 [ 1] 813 sbc a, #0x00
+ 000465 6B 10 [ 1] 814 ld (0x10, sp), a
+ 000467 6B 0F [ 1] 815 ld (0x0f, sp), a
+ 000469 1E 0D [ 2] 816 ldw x, (0x0d, sp)
+ 00046B 72 FB 11 [ 2] 817 addw x, (0x11, sp)
+ 00046E 90 9F [ 1] 818 ld a, yl
+ 000470 19 10 [ 1] 819 adc a, (0x10, sp)
+ 000472 88 [ 1] 820 push a
+ 000473 90 9E [ 1] 821 ld a, yh
+ 000475 19 10 [ 1] 822 adc a, (0x10, sp)
+ 000477 90 95 [ 1] 823 ld yh, a
+ 000479 84 [ 1] 824 pop a
+ 00047A 1F 11 [ 2] 825 ldw (0x11, sp), x
+ 00047C 6B 10 [ 1] 826 ld (0x10, sp), a
+ 827 ; ../time.c: 207: seconds+= timeptr->tm_sec;
+ 00047E 1E 01 [ 2] 828 ldw x, (0x01, sp)
+ 000480 F6 [ 1] 829 ld a, (x)
+ 000481 5F [ 1] 830 clrw x
+ 000482 97 [ 1] 831 ld xl, a
+ 000483 1F 0D [ 2] 832 ldw (0x0d, sp), x
+ 000485 7B 0D [ 1] 833 ld a, (0x0d, sp)
+ 000487 49 [ 1] 834 rlc a
+ 000488 4F [ 1] 835 clr a
+ 000489 A2 00 [ 1] 836 sbc a, #0x00
+ 00048B 6B 0C [ 1] 837 ld (0x0c, sp), a
+ 00048D 6B 0B [ 1] 838 ld (0x0b, sp), a
+ 00048F 1E 11 [ 2] 839 ldw x, (0x11, sp)
+ 000491 72 FB 0D [ 2] 840 addw x, (0x0d, sp)
+ 000494 7B 10 [ 1] 841 ld a, (0x10, sp)
+ 000496 19 0C [ 1] 842 adc a, (0x0c, sp)
+ 000498 90 02 [ 1] 843 rlwa y
+ 00049A 19 0B [ 1] 844 adc a, (0x0b, sp)
+ 00049C 90 95 [ 1] 845 ld yh, a
+ 846 ; ../time.c: 208: return seconds;
+ 847 ; ../time.c: 209: }
+ 00049E 5B 12 [ 2] 848 addw sp, #18
+ 0004A0 87 [ 5] 849 retf
+ 850 .area CODE
+ 851 .area CONST
+ 000000 852 _monthDays:
+ 000000 1F 853 .db #0x1f ; 31
+ 000001 1C 854 .db #0x1c ; 28
+ 000002 1F 855 .db #0x1f ; 31
+ 000003 1E 856 .db #0x1e ; 30
+ 000004 1F 857 .db #0x1f ; 31
+ 000005 1E 858 .db #0x1e ; 30
+ 000006 1F 859 .db #0x1f ; 31
+ 000007 1F 860 .db #0x1f ; 31
+ 000008 1E 861 .db #0x1e ; 30
+ 000009 1F 862 .db #0x1f ; 31
+ 00000A 1E 863 .db #0x1e ; 30
+ 00000B 1F 864 .db #0x1f ; 31
+ 00000C 865 ___month:
+ 00000Cr00r51 866 .dw __str_1
+ 00000Er00r55 867 .dw __str_2
+ 000010r00r59 868 .dw __str_3
+ 000012r00r5D 869 .dw __str_4
+ 000014r00r61 870 .dw __str_5
+ 000016r00r65 871 .dw __str_6
+ 000018r00r69 872 .dw __str_7
+ 00001Ar00r6D 873 .dw __str_8
+ 00001Cr00r71 874 .dw __str_9
+ 00001Er00r75 875 .dw __str_10
+ 000020r00r79 876 .dw __str_11
+ 000022r00r7D 877 .dw __str_12
+ 000024 878 ___day:
+ 000024r00r81 879 .dw __str_13
+ 000026r00r85 880 .dw __str_14
+ 000028r00r89 881 .dw __str_15
+ 00002Ar00r8D 882 .dw __str_16
+ 00002Cr00r91 883 .dw __str_17
+ 00002Er00r95 884 .dw __str_18
+ 000030r00r99 885 .dw __str_19
+ 886 .area CONST
+ 000032 887 ___str_0:
+ 000032 25 73 20 25 73 20 25 888 .ascii "%s %s %2d %02d:%02d:%02d %04d"
+ 32 64 20 25 30 32 64
+ 3A 25 30 32 64 3A 25
+ 30 32 64 20 25 30 34
+ 64
+ 00004F 0A 889 .db 0x0a
+ 000050 00 890 .db 0x00
+ 891 .area CODE
+ 892 .area CONST
+ 000051 893 __str_1:
+ 000051 4A 61 6E 894 .ascii "Jan"
+ 000054 00 895 .db 0x00
+ 896 .area CODE
+ 897 .area CONST
+ 000055 898 __str_2:
+ 000055 46 65 62 899 .ascii "Feb"
+ 000058 00 900 .db 0x00
+ 901 .area CODE
+ 902 .area CONST
+ 000059 903 __str_3:
+ 000059 4D 61 72 904 .ascii "Mar"
+ 00005C 00 905 .db 0x00
+ 906 .area CODE
+ 907 .area CONST
+ 00005D 908 __str_4:
+ 00005D 41 70 72 909 .ascii "Apr"
+ 000060 00 910 .db 0x00
+ 911 .area CODE
+ 912 .area CONST
+ 000061 913 __str_5:
+ 000061 4D 61 79 914 .ascii "May"
+ 000064 00 915 .db 0x00
+ 916 .area CODE
+ 917 .area CONST
+ 000065 918 __str_6:
+ 000065 4A 75 6E 919 .ascii "Jun"
+ 000068 00 920 .db 0x00
+ 921 .area CODE
+ 922 .area CONST
+ 000069 923 __str_7:
+ 000069 4A 75 6C 924 .ascii "Jul"
+ 00006C 00 925 .db 0x00
+ 926 .area CODE
+ 927 .area CONST
+ 00006D 928 __str_8:
+ 00006D 41 75 67 929 .ascii "Aug"
+ 000070 00 930 .db 0x00
+ 931 .area CODE
+ 932 .area CONST
+ 000071 933 __str_9:
+ 000071 53 65 70 934 .ascii "Sep"
+ 000074 00 935 .db 0x00
+ 936 .area CODE
+ 937 .area CONST
+ 000075 938 __str_10:
+ 000075 4F 63 74 939 .ascii "Oct"
+ 000078 00 940 .db 0x00
+ 941 .area CODE
+ 942 .area CONST
+ 000079 943 __str_11:
+ 000079 4E 6F 76 944 .ascii "Nov"
+ 00007C 00 945 .db 0x00
+ 946 .area CODE
+ 947 .area CONST
+ 00007D 948 __str_12:
+ 00007D 44 65 63 949 .ascii "Dec"
+ 000080 00 950 .db 0x00
+ 951 .area CODE
+ 952 .area CONST
+ 000081 953 __str_13:
+ 000081 53 75 6E 954 .ascii "Sun"
+ 000084 00 955 .db 0x00
+ 956 .area CODE
+ 957 .area CONST
+ 000085 958 __str_14:
+ 000085 4D 6F 6E 959 .ascii "Mon"
+ 000088 00 960 .db 0x00
+ 961 .area CODE
+ 962 .area CONST
+ 000089 963 __str_15:
+ 000089 54 75 65 964 .ascii "Tue"
+ 00008C 00 965 .db 0x00
+ 966 .area CODE
+ 967 .area CONST
+ 00008D 968 __str_16:
+ 00008D 57 65 64 969 .ascii "Wed"
+ 000090 00 970 .db 0x00
+ 971 .area CODE
+ 972 .area CONST
+ 000091 973 __str_17:
+ 000091 54 68 75 974 .ascii "Thu"
+ 000094 00 975 .db 0x00
+ 976 .area CODE
+ 977 .area CONST
+ 000095 978 __str_18:
+ 000095 46 72 69 979 .ascii "Fri"
+ 000098 00 980 .db 0x00
+ 981 .area CODE
+ 982 .area CONST
+ 000099 983 __str_19:
+ 000099 53 61 74 984 .ascii "Sat"
+ 00009C 00 985 .db 0x00
+ 986 .area CODE
+ 987 .area INITIALIZER
+ 988 .area CABS (ABS)
diff --git a/device/lib/stm8-large/time.rel b/device/lib/stm8-large/time.rel
new file mode 100644
index 0000000..1d800ba
--- /dev/null
+++ b/device/lib/stm8-large/time.rel
@@ -0,0 +1,464 @@
+XH3
+H B areas F global symbols
+M time
+O -mstm8
+S .__.ABS. Def000000
+S __modulong Ref000000
+S _sprintf Ref000000
+S __divulong Ref000000
+S __modsint Ref000000
+S __mullong Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 2C flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 9D flags 0 addr 0
+S ___month Def00000C
+S ___day Def000024
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 4A1 flags 0 addr 0
+S _RtcRead Def000000
+S _asctime Def000097
+S _time Def000002
+S _localtime Def00011E
+S _gmtime Def000128
+S _mktime Def0002FB
+S _ctime Def00010D
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 01
+T 00 00 20
+R 00 00 00 01
+T 00 00 20
+R 00 00 00 01
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 4F 87
+R 00 00 00 09
+T 00 00 02
+R 00 00 00 09
+T 00 00 02 52 10 AE FF FF 1F 0F AE FF FF 1F 0D 96
+R 00 00 00 09
+T 00 00 0F 5C 90 93 89 90 89 8D 00 00 00 5B 02 85
+R 00 00 00 09 80 0A 00 09
+T 00 00 1C 4D 27 0B 89 8D 00 02 FB 5B 02 1F 0F 17
+R 00 00 00 09 80 08 00 09
+T 00 00 29 0D
+R 00 00 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 1E 14 27 07 16 0F EF 02 16 0D FF
+R 00 00 00 09
+T 00 00 35
+R 00 00 00 09
+T 00 00 35 1E 0F 16 0D 5B 10 87
+R 00 00 00 09
+T 00 00 3C
+R 00 00 00 09
+T 00 00 3C 16 04 90 F6 A1 3B 23 04 A6 3B 90 F7
+R 00 00 00 09
+T 00 00 48
+R 00 00 00 09
+T 00 00 48 93 5C F6 A1 3B 23 03 A6 3B F7
+R 00 00 00 09
+T 00 00 52
+R 00 00 00 09
+T 00 00 52 93 5C 5C F6 A1 17 23 03 A6 17 F7
+R 00 00 00 09
+T 00 00 5D
+R 00 00 00 09
+T 00 00 5D 93 1C 00 07 F6 A1 06 23 03 A6 06 F7
+R 00 00 00 09
+T 00 00 69
+R 00 00 00 09
+T 00 00 69 93 1C 00 03 F6 A1 01 24 05 A6 01 F7 20
+R 00 00 00 09
+T 00 00 76 07
+R 00 00 00 09
+T 00 00 77
+R 00 00 00 09
+T 00 00 77 A1 1F 23 03 A6 1F F7
+R 00 00 00 09
+T 00 00 7E
+R 00 00 00 09
+T 00 00 7E 93 1C 00 04 F6 A1 0B 23 03 A6 0B F7
+R 00 00 00 09
+T 00 00 8A
+R 00 00 00 09
+T 00 00 8A 72 A9 00 05 93 FE 2A 04 93 6F 01 7F
+R 00 00 00 09
+T 00 00 96
+R 00 00 00 09
+T 00 00 96 87
+R 00 00 00 09
+T 00 00 97
+R 00 00 00 09
+T 00 00 97 52 0C 1E 10 89 8D 00 00 3C 5B 02 16 10
+R 00 00 00 09 80 09 00 09
+T 00 00 A4 93 EE 05 1C 07 6C 1F 01 90 F6 6B 04 0F
+R 00 00 00 09
+T 00 00 B1 03 93 E6 01 6B 06 0F 05 93 E6 02 6B 08
+R 00 00 00 09
+T 00 00 BE 0F 07 93 E6 03 6B 0A 0F 09 93 E6 04 5F
+R 00 00 00 09
+T 00 00 CB 97 58 1C 00 0C 4F A9 00 00 0C FE 1F 0B
+R 00 00 00 09 00 06 00 07 F3 01 0A 00 07
+T 00 00 D6 90 E6 07 5F 97 58 1C 00 24 4F A9
+R 00 00 00 09 00 0A 00 07
+T 00 00 E1 00 00 24 FE 90 93 1E 01 89 1E 05 89 1E
+R 00 00 00 09 F3 01 03 00 07
+T 00 00 EC 09 89 1E 0D 89 1E 11 89 1E 15 89 90 89
+R 00 00 00 09
+T 00 00 F9 4B 00 00 32 4B 00 00 32 4B
+R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07
+T 00 00 FE 00 00 00 4B 00 00 00 8D
+R 00 00 00 09 F1 09 03 00 01 F1 81 07 00 01
+T 00 01 02 00 00 00 5B 12 AE 00 00 5B 0C 87
+R 00 00 00 09 82 03 00 02 00 09 00 01
+T 00 01 0D
+R 00 00 00 09
+T 00 01 0D 1E 04 89 8D 00 01 1E 5B 02 89 8D
+R 00 00 00 09 80 07 00 09
+T 00 01 18 00 00 97 5B 02 87
+R 00 00 00 09 80 03 00 09
+T 00 01 1E
+R 00 00 00 09
+T 00 01 1E 1E 04 89 8D 00 01 28 5B 02 87
+R 00 00 00 09 80 07 00 09
+T 00 01 28
+R 00 00 00 09
+T 00 01 28 52 10 1E 14 90 93 90 EE 02 FE 17 0F 1F
+R 00 00 00 09
+T 00 01 35 0D 4B 3C 5F 89 4B 00 1E 13 89 1E 13 89
+R 00 00 00 09
+T 00 01 42 8D 00 00 00 5B 08 9F C7 00 20 4B 3C 5F
+R 00 00 00 09 82 04 00 01 10 0B 00 01
+T 00 01 4F 89 4B 00 1E 13 89 1E 13 89 8D
+R 00 00 00 09
+T 00 01 59 00 00 00 5B 08 1F 0D 17 0B AE 00 21 1F
+R 00 00 00 09 82 03 00 03 00 0D 00 01
+T 00 01 66 0F 4B 3C 5F 89 4B 00 1E 11 89 1E 11 89
+R 00 00 00 09
+T 00 01 73 8D 00 00 00 5B 08 9F 1E 0F F7 4B 3C 5F
+R 00 00 00 09 82 04 00 01
+T 00 01 80 89 4B 00 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 01 8A 00 00 00 5B 08 1F 0D 17 0B AE 00 22 1F
+R 00 00 00 09 82 03 00 03 00 0D 00 01
+T 00 01 97 0F 4B 18 5F 89 4B 00 1E 11 89 1E 11 89
+R 00 00 00 09
+T 00 01 A4 8D 00 00 00 5B 08 9F 1E 0F F7 4B 18 5F
+R 00 00 00 09 82 04 00 01
+T 00 01 B1 89 4B 00 1E 11 89 1E 11 89 8D
+R 00 00 00 09
+T 00 01 BB 00 00 00 5B 08 1F 03 17 01 AE 00 27 1F
+R 00 00 00 09 82 03 00 03 00 0D 00 01
+T 00 01 C8 0F 1E 03 1C 00 04 16 01 24 02 90 5C
+R 00 00 00 09
+T 00 01 D4
+R 00 00 00 09
+T 00 01 D4 4B 07 4B 00 4B 00 4B 00 89 90 89 8D
+R 00 00 00 09
+T 00 01 E0 00 00 00 5B 08 9F 1E 0F F7 5F 1F 07 1F
+R 00 00 00 09 82 03 00 01
+T 00 01 ED 05 AE 07 B2 1F 0F
+R 00 00 00 09
+T 00 01 F3
+R 00 00 00 09
+T 00 01 F3 7B 10 A4 03 6B 0A 0F 09 1E 09 26 07 AE
+R 00 00 00 09
+T 00 02 00 01 6E 1F 0D 20 05
+R 00 00 00 09
+T 00 02 06
+R 00 00 00 09
+T 00 02 06 AE 01 6D 1F 0D
+R 00 00 00 09
+T 00 02 0B
+R 00 00 00 09
+T 00 02 0B 16 0D 5F 90 5D 2A 01 5A
+R 00 00 00 09
+T 00 02 13
+R 00 00 00 09
+T 00 02 13 72 F9 07 17 0D 9F 19 06 6B 0C 9E 19 05
+R 00 00 00 09
+T 00 02 20 6B 0B 16 0D 17 07 16 0B 17 05 1E 03 13
+R 00 00 00 09
+T 00 02 2D 0D 7B 02 12 0C 7B 01 12 0B 25 07 1E 0F
+R 00 00 00 09
+T 00 02 3A 5C 1F 0F 20 B4
+R 00 00 00 09
+T 00 02 3F
+R 00 00 00 09
+T 00 02 3F AE 00 25 16 0F 72 A2 07 6C FF 16 09 17
+R 00 00 00 09 00 04 00 01
+T 00 02 4C 0F 1E 09 26 04 AE 01 6E BC
+R 00 00 00 09
+T 00 02 55
+R 00 00 00 09
+T 00 02 55 AE 01 6D
+R 00 00 00 09
+T 00 02 58
+R 00 00 00 09
+T 00 02 58 1F 0D 5F 0D 0D 2A 01 5A
+R 00 00 00 09
+T 00 02 60
+R 00 00 00 09
+T 00 02 60 16 07 72 F2 0D 7B 06 89 12 02 85 97 7B
+R 00 00 00 09
+T 00 02 6D 05 89 12 01 85 17 0D 16 03 72 F2 0D 88
+R 00 00 00 09
+T 00 02 7A 7B 03 89 12 02 85 97 7B 02 12 01 95 84
+R 00 00 00 09
+T 00 02 87 17 08 1F 06 AE 00 28 16 08 FF 0F 0E
+R 00 00 00 09 00 08 00 01
+T 00 02 93
+R 00 00 00 09
+T 00 02 93 7B 0E 4A 26 0C 1E 0F 26 04 A6 1D 20 13
+R 00 00 00 09
+T 00 02 A0
+R 00 00 00 09
+T 00 02 A0 A6 1C 20 0F
+R 00 00 00 09
+T 00 02 A4
+R 00 00 00 09
+T 00 02 A4 5F 7B 0E 97 1C 00 00 1F 0C 4F A9
+R 00 00 00 09 00 08 00 07
+T 00 02 AF 00 00 00 1E 0C F6
+R 00 00 00 09 F3 01 03 00 07
+T 00 02 B3
+R 00 00 00 09
+T 00 02 B3 6B 0D 0F 0C 0F 0B 0F 0A 1E 08 13 0C 7B
+R 00 00 00 09
+T 00 02 C0 07 12 0B 7B 06 12 0A 25 1B 16 08 72 F2
+R 00 00 00 09
+T 00 02 CD 0C 7B 07 12 0B 97 7B 06 12 0A 95 17 08
+R 00 00 00 09
+T 00 02 DA 1F 06 0C 0E 7B 0E A1 0C 25 AF
+R 00 00 00 09
+T 00 02 E4
+R 00 00 00 09
+T 00 02 E4 AE 00 24 7B 0E F7 AE 00 23 7B 09 4C F7
+R 00 00 00 09 00 04 00 01 00 0A 00 01
+T 00 02 F1 AE 00 2A 7F AE 00 20 5B 10 87
+R 00 00 00 09 00 04 00 01 00 08 00 01
+T 00 02 FB
+R 00 00 00 09
+T 00 02 FB 52 12 16 16 17 01 93 EE 05 1C 07 6C 1F
+R 00 00 00 09
+T 00 03 08 0B 1E 01 E6 04 5F 97 1F 03 1E 01 89 8D
+R 00 00 00 09
+T 00 03 15 00 00 3C 5B 02 1E 0B 1D 07 B2 90 5F 5D
+R 00 00 00 09 80 03 00 09
+T 00 03 22 2A 02 90 5A
+R 00 00 00 09
+T 00 03 26
+R 00 00 00 09
+T 00 03 26 89 90 89 4B 80 4B 33 4B E1 4B 01 8D
+R 00 00 00 09
+T 00 03 32 00 00 00 5B 08 1F 11 17 0F AE 07 B2 1F
+R 00 00 00 09 82 03 00 05
+T 00 03 3F 0D
+R 00 00 00 09
+T 00 03 40
+R 00 00 00 09
+T 00 03 40 1E 0D 13 0B 2E 2A 4B 04 4B 00 1E 0F 89
+R 00 00 00 09
+T 00 03 4D 8D 00 00 00 5B 04 5D 26 13 1E 11 1C
+R 00 00 00 09 82 04 00 04
+T 00 03 59 51 80 1F 11 7B 10 A9 01 6B 10 7B 0F A9
+R 00 00 00 09
+T 00 03 66 00 6B 0F
+R 00 00 00 09
+T 00 03 69
+R 00 00 00 09
+T 00 03 69 1E 0D 5C 1F 0D 20 D0
+R 00 00 00 09
+T 00 03 70
+R 00 00 00 09
+T 00 03 70 16 11 17 07 16 0F 17 05 4B 04 4B 00 1E
+R 00 00 00 09
+T 00 03 7D 0D 89 8D 00 00 00 5B 04 1F 09 90 5F
+R 00 00 00 09 82 06 00 04
+T 00 03 89
+R 00 00 00 09
+T 00 03 89 51 13 03 51 2E 68 90 A3 00 01 26 1B 1E
+R 00 00 00 09
+T 00 03 96 09 26 17 1E 07 1C 3B 80 1F 11 1E 05 24
+R 00 00 00 09
+T 00 03 A3 01 5C
+R 00 00 00 09
+T 00 03 A5
+R 00 00 00 09
+T 00 03 A5 1C 00 26 1F 05 1E 11 1F 07 20 43
+R 00 00 00 09
+T 00 03 B0
+R 00 00 00 09
+T 00 03 B0 93 1C 00 00 4F A9 00 00 00 F6 97 6B 12
+R 00 00 00 09 00 05 00 07 F3 01 09 00 07
+T 00 03 BB 41 0F 11 0F 10 0F 0F 90 89 1E 13 89 1E
+R 00 00 00 09
+T 00 03 C8 13 89 4B 80 4B 51 4B 01 4B 00 8D
+R 00 00 00 09
+T 00 03 D3 00 00 00 5B 08 1F 0F 17 0D 90 85 1E 07
+R 00 00 00 09 82 03 00 05
+T 00 03 E0 72 FB 0D 1F 11 1E 05 24 01 5C
+R 00 00 00 09
+T 00 03 EA
+R 00 00 00 09
+T 00 03 EA 72 FB 0B 1F 05 1E 11 1F 07
+R 00 00 00 09
+T 00 03 F3
+R 00 00 00 09
+T 00 03 F3 90 5C 20 92
+R 00 00 00 09
+T 00 03 F7
+R 00 00 00 09
+T 00 03 F7 1E 01 E6 03 5F 97 5A 90 5F 5D 2A 02 90
+R 00 00 00 09
+T 00 04 04 5A
+R 00 00 00 09
+T 00 04 05
+R 00 00 00 09
+T 00 04 05 89 90 89 4B 80 4B 51 4B 01 4B 00 8D
+R 00 00 00 09
+T 00 04 11 00 00 00 5B 08 51 72 F9 07 9F 19 06 02
+R 00 00 00 09 82 03 00 05
+T 00 04 1E 19 05 95 17 11 1F 0F 1E 01 E6 02 5F 97
+R 00 00 00 09
+T 00 04 2B 90 5F 89 90 89 4B 10 4B 0E 5F 89 8D
+R 00 00 00 09
+T 00 04 37 00 00 00 5B 08 90 9F 72 FB 11 19 10 90
+R 00 00 00 09 82 03 00 05
+T 00 04 44 02 19 0F 90 95 1F 0D 1E 01 E6 01 5F 97
+R 00 00 00 09
+T 00 04 51 89 58 58 58 58 72 F0 01 58 58 5B 02 1F
+R 00 00 00 09
+T 00 04 5E 11 7B 11 49 4F A2 00 6B 10 6B 0F 1E 0D
+R 00 00 00 09
+T 00 04 6B 72 FB 11 90 9F 19 10 88 90 9E 19 10 90
+R 00 00 00 09
+T 00 04 78 95 84 1F 11 6B 10 1E 01 F6 5F 97 1F 0D
+R 00 00 00 09
+T 00 04 85 7B 0D 49 4F A2 00 6B 0C 6B 0B 1E 11 72
+R 00 00 00 09
+T 00 04 92 FB 0D 7B 10 19 0C 90 02 19 0B 90 95 5B
+R 00 00 00 09
+T 00 04 9F 12 87
+R 00 00 00 09
+T 00 00 00
+R 00 00 00 07
+T 00 00 00 1F 1C 1F 1E 1F 1E 1F 1F 1E 1F 1E 1F
+R 00 00 00 07
+T 00 00 0C
+R 00 00 00 07
+T 00 00 0C 00 51 00 55
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 10 00 59 00 5D
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 14 00 61 00 65
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 18 00 69 00 6D
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 1C 00 71 00 75
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 20 00 79 00 7D
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 24
+R 00 00 00 07
+T 00 00 24 00 81 00 85
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 28 00 89 00 8D
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 2C 00 91 00 95
+R 00 00 00 07 00 03 00 07 00 05 00 07
+T 00 00 30 00 99
+R 00 00 00 07 00 03 00 07
+T 00 00 32
+R 00 00 00 07
+T 00 00 32 25 73 20 25 73 20 25 32 64 20 25 30 32
+R 00 00 00 07
+T 00 00 3F 64 3A 25 30 32 64 3A 25 30 32 64 20 25
+R 00 00 00 07
+T 00 00 4C 30 34 64 0A 00
+R 00 00 00 07
+T 00 00 51
+R 00 00 00 07
+T 00 00 51 4A 61 6E 00
+R 00 00 00 07
+T 00 00 55
+R 00 00 00 07
+T 00 00 55 46 65 62 00
+R 00 00 00 07
+T 00 00 59
+R 00 00 00 07
+T 00 00 59 4D 61 72 00
+R 00 00 00 07
+T 00 00 5D
+R 00 00 00 07
+T 00 00 5D 41 70 72 00
+R 00 00 00 07
+T 00 00 61
+R 00 00 00 07
+T 00 00 61 4D 61 79 00
+R 00 00 00 07
+T 00 00 65
+R 00 00 00 07
+T 00 00 65 4A 75 6E 00
+R 00 00 00 07
+T 00 00 69
+R 00 00 00 07
+T 00 00 69 4A 75 6C 00
+R 00 00 00 07
+T 00 00 6D
+R 00 00 00 07
+T 00 00 6D 41 75 67 00
+R 00 00 00 07
+T 00 00 71
+R 00 00 00 07
+T 00 00 71 53 65 70 00
+R 00 00 00 07
+T 00 00 75
+R 00 00 00 07
+T 00 00 75 4F 63 74 00
+R 00 00 00 07
+T 00 00 79
+R 00 00 00 07
+T 00 00 79 4E 6F 76 00
+R 00 00 00 07
+T 00 00 7D
+R 00 00 00 07
+T 00 00 7D 44 65 63 00
+R 00 00 00 07
+T 00 00 81
+R 00 00 00 07
+T 00 00 81 53 75 6E 00
+R 00 00 00 07
+T 00 00 85
+R 00 00 00 07
+T 00 00 85 4D 6F 6E 00
+R 00 00 00 07
+T 00 00 89
+R 00 00 00 07
+T 00 00 89 54 75 65 00
+R 00 00 00 07
+T 00 00 8D
+R 00 00 00 07
+T 00 00 8D 57 65 64 00
+R 00 00 00 07
+T 00 00 91
+R 00 00 00 07
+T 00 00 91 54 68 75 00
+R 00 00 00 07
+T 00 00 95
+R 00 00 00 07
+T 00 00 95 46 72 69 00
+R 00 00 00 07
+T 00 00 99
+R 00 00 00 07
+T 00 00 99 53 61 74 00
+R 00 00 00 07
diff --git a/device/lib/stm8-large/time.sym b/device/lib/stm8-large/time.sym
new file mode 100644
index 0000000..cffbc0a
--- /dev/null
+++ b/device/lib/stm8-large/time.sym
@@ -0,0 +1,65 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _CheckTime 00003C R
+ 9 _RtcRead 000000 GR
+ 7 ___day 000024 GR
+ 7 ___month 00000C GR
+ 7 ___str_0 000032 R
+ __divulong ****** GX
+ __modsint ****** GX
+ __modulong ****** GX
+ __mullong ****** GX
+ 7 __str_1 000051 R
+ 7 __str_10 000075 R
+ 7 __str_11 000079 R
+ 7 __str_12 00007D R
+ 7 __str_13 000081 R
+ 7 __str_14 000085 R
+ 7 __str_15 000089 R
+ 7 __str_16 00008D R
+ 7 __str_17 000091 R
+ 7 __str_18 000095 R
+ 7 __str_19 000099 R
+ 7 __str_2 000055 R
+ 7 __str_3 000059 R
+ 7 __str_4 00005D R
+ 7 __str_5 000061 R
+ 7 __str_6 000065 R
+ 7 __str_7 000069 R
+ 7 __str_8 00006D R
+ 7 __str_9 000071 R
+ 1 _ascTimeBuffer 000000 R
+ 9 _asctime 000097 GR
+ 9 _ctime 00010D GR
+ 9 _gmtime 000128 GR
+ 1 _lastTime 000020 R
+ 9 _localtime 00011E GR
+ 9 _mktime 0002FB GR
+ 7 _monthDays 000000 R
+ _sprintf ****** GX
+ 9 _time 000002 GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 2C flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 9D flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 4A1 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/tolower.asm b/device/lib/stm8-large/tolower.asm
new file mode 100644
index 0000000..335ead1
--- /dev/null
+++ b/device/lib/stm8-large/tolower.asm
@@ -0,0 +1,70 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module tolower
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _tolower
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../tolower.c: 33: int tolower (int c)
+; -----------------------------------------
+; function tolower
+; -----------------------------------------
+_tolower:
+; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c);
+ ldw x, (0x04, sp)
+; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z');
+ ld a, xl
+ cp a, #0x41
+ jrc 00104$
+ cp a, #0x5a
+ jrugt 00104$
+; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c);
+ addw x, #0x0020
+00104$:
+; ../tolower.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/tolower.lst b/device/lib/stm8-large/tolower.lst
new file mode 100644
index 0000000..08875ae
--- /dev/null
+++ b/device/lib/stm8-large/tolower.lst
@@ -0,0 +1,70 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module tolower
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _tolower
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../tolower.c: 33: int tolower (int c)
+ 50 ; -----------------------------------------
+ 51 ; function tolower
+ 52 ; -----------------------------------------
+ 000000 53 _tolower:
+ 54 ; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c);
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 56 ; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z');
+ 000002 9F [ 1] 57 ld a, xl
+ 000003 A1 41 [ 1] 58 cp a, #0x41
+ 000005 25 07 [ 1] 59 jrc 00104$
+ 000007 A1 5A [ 1] 60 cp a, #0x5a
+ 000009 22 03 [ 1] 61 jrugt 00104$
+ 62 ; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c);
+ 00000B 1C 00 20 [ 2] 63 addw x, #0x0020
+ 00000E 64 00104$:
+ 65 ; ../tolower.c: 36: }
+ 00000E 87 [ 5] 66 retf
+ 67 .area CODE
+ 68 .area CONST
+ 69 .area INITIALIZER
+ 70 .area CABS (ABS)
diff --git a/device/lib/stm8-large/tolower.rel b/device/lib/stm8-large/tolower.rel
new file mode 100644
index 0000000..1191c9d
--- /dev/null
+++ b/device/lib/stm8-large/tolower.rel
@@ -0,0 +1,27 @@
+XH3
+H B areas 2 global symbols
+M tolower
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size F flags 0 addr 0
+S _tolower Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 9F A1 41 25 07 A1 5A 22 03 1C
+R 00 00 00 09
+T 00 00 0C 00 20
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/tolower.sym b/device/lib/stm8-large/tolower.sym
new file mode 100644
index 0000000..d538a62
--- /dev/null
+++ b/device/lib/stm8-large/tolower.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _tolower 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/toupper.asm b/device/lib/stm8-large/toupper.asm
new file mode 100644
index 0000000..5779408
--- /dev/null
+++ b/device/lib/stm8-large/toupper.asm
@@ -0,0 +1,70 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module toupper
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _toupper
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../toupper.c: 33: int toupper (int c)
+; -----------------------------------------
+; function toupper
+; -----------------------------------------
+_toupper:
+; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c);
+ ldw x, (0x04, sp)
+; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z');
+ ld a, xl
+ cp a, #0x61
+ jrc 00104$
+ cp a, #0x7a
+ jrugt 00104$
+; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c);
+ addw x, #0xffe0
+00104$:
+; ../toupper.c: 36: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/toupper.lst b/device/lib/stm8-large/toupper.lst
new file mode 100644
index 0000000..204d448
--- /dev/null
+++ b/device/lib/stm8-large/toupper.lst
@@ -0,0 +1,70 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module toupper
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _toupper
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../toupper.c: 33: int toupper (int c)
+ 50 ; -----------------------------------------
+ 51 ; function toupper
+ 52 ; -----------------------------------------
+ 000000 53 _toupper:
+ 54 ; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c);
+ 000000 1E 04 [ 2] 55 ldw x, (0x04, sp)
+ 56 ; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z');
+ 000002 9F [ 1] 57 ld a, xl
+ 000003 A1 61 [ 1] 58 cp a, #0x61
+ 000005 25 07 [ 1] 59 jrc 00104$
+ 000007 A1 7A [ 1] 60 cp a, #0x7a
+ 000009 22 03 [ 1] 61 jrugt 00104$
+ 62 ; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c);
+ 00000B 1C FF E0 [ 2] 63 addw x, #0xffe0
+ 00000E 64 00104$:
+ 65 ; ../toupper.c: 36: }
+ 00000E 87 [ 5] 66 retf
+ 67 .area CODE
+ 68 .area CONST
+ 69 .area INITIALIZER
+ 70 .area CABS (ABS)
diff --git a/device/lib/stm8-large/toupper.rel b/device/lib/stm8-large/toupper.rel
new file mode 100644
index 0000000..39802c0
--- /dev/null
+++ b/device/lib/stm8-large/toupper.rel
@@ -0,0 +1,27 @@
+XH3
+H B areas 2 global symbols
+M toupper
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size F flags 0 addr 0
+S _toupper Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 04 9F A1 61 25 07 A1 7A 22 03 1C
+R 00 00 00 09
+T 00 00 0C FF E0
+R 00 00 00 09
+T 00 00 0E
+R 00 00 00 09
+T 00 00 0E 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/toupper.sym b/device/lib/stm8-large/toupper.sym
new file mode 100644
index 0000000..989785f
--- /dev/null
+++ b/device/lib/stm8-large/toupper.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _toupper 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size F flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/vprintf.asm b/device/lib/stm8-large/vprintf.asm
new file mode 100644
index 0000000..988fd6e
--- /dev/null
+++ b/device/lib/stm8-large/vprintf.asm
@@ -0,0 +1,112 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module vprintf
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _putchar
+ .globl __print_format
+ .globl _vprintf
+ .globl _printf
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../vprintf.c: 34: put_char_to_stdout (char c, void* p) _REENTRANT
+; -----------------------------------------
+; function put_char_to_stdout
+; -----------------------------------------
+_put_char_to_stdout:
+; ../vprintf.c: 37: putchar (c);
+ clrw x
+ ld a, (0x04, sp)
+ ld xl, a
+ pushw x
+ callf _putchar
+ addw sp, #2
+; ../vprintf.c: 38: }
+ retf
+; ../vprintf.c: 41: vprintf (const char *format, va_list ap)
+; -----------------------------------------
+; function vprintf
+; -----------------------------------------
+_vprintf:
+; ../vprintf.c: 43: return _print_format (put_char_to_stdout, NULL, format, ap);
+ ldw x, (0x06, sp)
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #<(_put_char_to_stdout + 0)
+ push #((_put_char_to_stdout + 0) >> 8)
+ push #((_put_char_to_stdout + 0) >> 16)
+ callf __print_format
+ addw sp, #9
+; ../vprintf.c: 44: }
+ retf
+; ../vprintf.c: 47: printf (const char *format, ...)
+; -----------------------------------------
+; function printf
+; -----------------------------------------
+_printf:
+; ../vprintf.c: 52: va_start (arg, format);
+ ldw x, sp
+ addw x, #4
+ incw x
+ incw x
+; ../vprintf.c: 53: i = _print_format (put_char_to_stdout, NULL, format, arg);
+ pushw x
+ ldw x, (0x06, sp)
+ pushw x
+ clrw x
+ pushw x
+ push #<(_put_char_to_stdout + 0)
+ push #((_put_char_to_stdout + 0) >> 8)
+ push #((_put_char_to_stdout + 0) >> 16)
+ callf __print_format
+ addw sp, #9
+; ../vprintf.c: 56: return i;
+; ../vprintf.c: 57: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/vprintf.lst b/device/lib/stm8-large/vprintf.lst
new file mode 100644
index 0000000..8af1f83
--- /dev/null
+++ b/device/lib/stm8-large/vprintf.lst
@@ -0,0 +1,112 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module vprintf
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _putchar
+ 12 .globl __print_format
+ 13 .globl _vprintf
+ 14 .globl _printf
+ 15 ;--------------------------------------------------------
+ 16 ; ram data
+ 17 ;--------------------------------------------------------
+ 18 .area DATA
+ 19 ;--------------------------------------------------------
+ 20 ; ram data
+ 21 ;--------------------------------------------------------
+ 22 .area INITIALIZED
+ 23 ;--------------------------------------------------------
+ 24 ; absolute external ram data
+ 25 ;--------------------------------------------------------
+ 26 .area DABS (ABS)
+ 27
+ 28 ; default segment ordering for linker
+ 29 .area HOME
+ 30 .area GSINIT
+ 31 .area GSFINAL
+ 32 .area CONST
+ 33 .area INITIALIZER
+ 34 .area CODE
+ 35
+ 36 ;--------------------------------------------------------
+ 37 ; global & static initialisations
+ 38 ;--------------------------------------------------------
+ 39 .area HOME
+ 40 .area GSINIT
+ 41 .area GSFINAL
+ 42 .area GSINIT
+ 43 ;--------------------------------------------------------
+ 44 ; Home
+ 45 ;--------------------------------------------------------
+ 46 .area HOME
+ 47 .area HOME
+ 48 ;--------------------------------------------------------
+ 49 ; code
+ 50 ;--------------------------------------------------------
+ 51 .area CODE
+ 52 ; ../vprintf.c: 34: put_char_to_stdout (char c, void* p) _REENTRANT
+ 53 ; -----------------------------------------
+ 54 ; function put_char_to_stdout
+ 55 ; -----------------------------------------
+ 000000 56 _put_char_to_stdout:
+ 57 ; ../vprintf.c: 37: putchar (c);
+ 000000 5F [ 1] 58 clrw x
+ 000001 7B 04 [ 1] 59 ld a, (0x04, sp)
+ 000003 97 [ 1] 60 ld xl, a
+ 000004 89 [ 2] 61 pushw x
+ 000005 8Ds00r00r00 [ 5] 62 callf _putchar
+ 000009 5B 02 [ 2] 63 addw sp, #2
+ 64 ; ../vprintf.c: 38: }
+ 00000B 87 [ 5] 65 retf
+ 66 ; ../vprintf.c: 41: vprintf (const char *format, va_list ap)
+ 67 ; -----------------------------------------
+ 68 ; function vprintf
+ 69 ; -----------------------------------------
+ 00000C 70 _vprintf:
+ 71 ; ../vprintf.c: 43: return _print_format (put_char_to_stdout, NULL, format, ap);
+ 00000C 1E 06 [ 2] 72 ldw x, (0x06, sp)
+ 00000E 89 [ 2] 73 pushw x
+ 00000F 1E 06 [ 2] 74 ldw x, (0x06, sp)
+ 000011 89 [ 2] 75 pushw x
+ 000012 5F [ 1] 76 clrw x
+ 000013 89 [ 2] 77 pushw x
+ 000014 4Br00 [ 1] 78 push #<(_put_char_to_stdout + 0)
+ 000016 4Bs00 [ 1] 79 push #((_put_char_to_stdout + 0) >> 8)
+ 000018 4Bs00 [ 1] 80 push #((_put_char_to_stdout + 0) >> 16)
+ 00001A 8Ds00r00r00 [ 5] 81 callf __print_format
+ 00001E 5B 09 [ 2] 82 addw sp, #9
+ 83 ; ../vprintf.c: 44: }
+ 000020 87 [ 5] 84 retf
+ 85 ; ../vprintf.c: 47: printf (const char *format, ...)
+ 86 ; -----------------------------------------
+ 87 ; function printf
+ 88 ; -----------------------------------------
+ 000021 89 _printf:
+ 90 ; ../vprintf.c: 52: va_start (arg, format);
+ 000021 96 [ 1] 91 ldw x, sp
+ 000022 1C 00 04 [ 2] 92 addw x, #4
+ 000025 5C [ 1] 93 incw x
+ 000026 5C [ 1] 94 incw x
+ 95 ; ../vprintf.c: 53: i = _print_format (put_char_to_stdout, NULL, format, arg);
+ 000027 89 [ 2] 96 pushw x
+ 000028 1E 06 [ 2] 97 ldw x, (0x06, sp)
+ 00002A 89 [ 2] 98 pushw x
+ 00002B 5F [ 1] 99 clrw x
+ 00002C 89 [ 2] 100 pushw x
+ 00002D 4Br00 [ 1] 101 push #<(_put_char_to_stdout + 0)
+ 00002F 4Bs00 [ 1] 102 push #((_put_char_to_stdout + 0) >> 8)
+ 000031 4Bs00 [ 1] 103 push #((_put_char_to_stdout + 0) >> 16)
+ 000033 8Ds00r00r00 [ 5] 104 callf __print_format
+ 000037 5B 09 [ 2] 105 addw sp, #9
+ 106 ; ../vprintf.c: 56: return i;
+ 107 ; ../vprintf.c: 57: }
+ 000039 87 [ 5] 108 retf
+ 109 .area CODE
+ 110 .area CONST
+ 111 .area INITIALIZER
+ 112 .area CABS (ABS)
diff --git a/device/lib/stm8-large/vprintf.rel b/device/lib/stm8-large/vprintf.rel
new file mode 100644
index 0000000..7a06743
--- /dev/null
+++ b/device/lib/stm8-large/vprintf.rel
@@ -0,0 +1,40 @@
+XH3
+H B areas 5 global symbols
+M vprintf
+O -mstm8
+S __print_format Ref000000
+S _putchar Ref000000
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 3A flags 0 addr 0
+S _vprintf Def00000C
+S _printf Def000021
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 5F 7B 04 97 89 8D 00 00 00 5B 02 87
+R 00 00 00 09 82 09 00 01
+T 00 00 0C
+R 00 00 00 09
+T 00 00 0C 1E 06 89 1E 06 89 5F 89 4B 00 00 00 4B
+R 00 00 00 09 F1 09 0C 00 09
+T 00 00 17 00 00 00 4B 00 00 00 8D
+R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09
+T 00 00 1B 00 00 00 5B 09 87
+R 00 00 00 09 82 03 00 00
+T 00 00 21
+R 00 00 00 09
+T 00 00 21 96 1C 00 04 5C 5C 89 1E 06 89 5F 89 4B
+R 00 00 00 09
+T 00 00 2E 00 00 00 4B 00 00 00 4B
+R 00 00 00 09 F1 09 03 00 09 F1 81 07 00 09
+T 00 00 32 00 00 00 8D 00 00 00 5B 09 87
+R 00 00 00 09 F3 01 03 00 09 82 07 00 00
diff --git a/device/lib/stm8-large/vprintf.sym b/device/lib/stm8-large/vprintf.sym
new file mode 100644
index 0000000..6aed8a7
--- /dev/null
+++ b/device/lib/stm8-large/vprintf.sym
@@ -0,0 +1,32 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ __print_format ****** GX
+ 9 _printf 000021 GR
+ 9 _put_char_to_stdout 000000 R
+ _putchar ****** GX
+ 9 _vprintf 00000C GR
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 3A flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/wcrtomb.asm b/device/lib/stm8-large/wcrtomb.asm
new file mode 100644
index 0000000..9325675
--- /dev/null
+++ b/device/lib/stm8-large/wcrtomb.asm
@@ -0,0 +1,77 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module wcrtomb
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wctomb
+ .globl _wcrtomb
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../wcrtomb.c: 34: size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps)
+; -----------------------------------------
+; function wcrtomb
+; -----------------------------------------
+_wcrtomb:
+; ../wcrtomb.c: 40: ret = wctomb(s, wc);
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ ldw x, (0x08, sp)
+ pushw x
+ callf _wctomb
+ addw sp, #6
+; ../wcrtomb.c: 42: if(ret == (size_t)(-1))
+ cpw x, #0xffff
+ jrne 00102$
+; ../wcrtomb.c: 43: errno = EILSEQ;
+ mov _errno+1, #0x54
+ clr _errno+0
+00102$:
+; ../wcrtomb.c: 45: return(ret);
+; ../wcrtomb.c: 46: }
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcrtomb.lst b/device/lib/stm8-large/wcrtomb.lst
new file mode 100644
index 0000000..ef20f80
--- /dev/null
+++ b/device/lib/stm8-large/wcrtomb.lst
@@ -0,0 +1,77 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module wcrtomb
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wctomb
+ 12 .globl _wcrtomb
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../wcrtomb.c: 34: size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps)
+ 51 ; -----------------------------------------
+ 52 ; function wcrtomb
+ 53 ; -----------------------------------------
+ 000000 54 _wcrtomb:
+ 55 ; ../wcrtomb.c: 40: ret = wctomb(s, wc);
+ 000000 1E 08 [ 2] 56 ldw x, (0x08, sp)
+ 000002 89 [ 2] 57 pushw x
+ 000003 1E 08 [ 2] 58 ldw x, (0x08, sp)
+ 000005 89 [ 2] 59 pushw x
+ 000006 1E 08 [ 2] 60 ldw x, (0x08, sp)
+ 000008 89 [ 2] 61 pushw x
+ 000009 8Ds00r00r00 [ 5] 62 callf _wctomb
+ 00000D 5B 06 [ 2] 63 addw sp, #6
+ 64 ; ../wcrtomb.c: 42: if(ret == (size_t)(-1))
+ 00000F A3 FF FF [ 2] 65 cpw x, #0xffff
+ 000012 26 08 [ 1] 66 jrne 00102$
+ 67 ; ../wcrtomb.c: 43: errno = EILSEQ;
+ 000014 35 54u00u01 [ 1] 68 mov _errno+1, #0x54
+ 000018 72 5Fu00u00 [ 1] 69 clr _errno+0
+ 00001C 70 00102$:
+ 71 ; ../wcrtomb.c: 45: return(ret);
+ 72 ; ../wcrtomb.c: 46: }
+ 00001C 87 [ 5] 73 retf
+ 74 .area CODE
+ 75 .area CONST
+ 76 .area INITIALIZER
+ 77 .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcrtomb.rel b/device/lib/stm8-large/wcrtomb.rel
new file mode 100644
index 0000000..e9f82b5
--- /dev/null
+++ b/device/lib/stm8-large/wcrtomb.rel
@@ -0,0 +1,31 @@
+XH3
+H B areas 4 global symbols
+M wcrtomb
+O -mstm8
+S _errno Ref000000
+S .__.ABS. Def000000
+S _wctomb Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1D flags 0 addr 0
+S _wcrtomb Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 1E 08 89 1E 08 89 1E 08 89 8D
+R 00 00 00 09
+T 00 00 0A 00 00 00 5B 06 A3 FF FF 26 08 35 54
+R 00 00 00 09 82 03 00 02
+T 00 00 16 00 01 72 5F 00 00
+R 00 00 00 09 12 03 00 00 12 07 00 00
+T 00 00 1C
+R 00 00 00 09
+T 00 00 1C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/wcrtomb.sym b/device/lib/stm8-large/wcrtomb.sym
new file mode 100644
index 0000000..857566d
--- /dev/null
+++ b/device/lib/stm8-large/wcrtomb.sym
@@ -0,0 +1,31 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ _errno ****** GX
+ 9 _wcrtomb 000000 GR
+ _wctomb ****** GX
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/wcscmp.asm b/device/lib/stm8-large/wcscmp.asm
new file mode 100644
index 0000000..aa475f9
--- /dev/null
+++ b/device/lib/stm8-large/wcscmp.asm
@@ -0,0 +1,127 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module wcscmp
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wcscmp
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../wcscmp.c: 31: int wcscmp(const wchar_t *s1, const wchar_t *s2)
+; -----------------------------------------
+; function wcscmp
+; -----------------------------------------
+_wcscmp:
+ sub sp, #10
+; ../wcscmp.c: 33: while(*s1 == *s2 && *s1)
+ ldw y, (0x0e, sp)
+ ldw x, (0x10, sp)
+ ldw (0x09, sp), x
+00102$:
+ ldw x, y
+ ld a, (0x3, x)
+ ld (0x04, sp), a
+ ld a, (0x2, x)
+ ld (0x03, sp), a
+ ldw x, (x)
+ ldw (0x01, sp), x
+ ldw x, (0x09, sp)
+ ld a, (0x3, x)
+ ld (0x08, sp), a
+ ld a, (0x2, x)
+ ld (0x07, sp), a
+ ldw x, (x)
+ ldw (0x05, sp), x
+ ldw x, (0x03, sp)
+ cpw x, (0x07, sp)
+ jrne 00104$
+ ldw x, (0x01, sp)
+ cpw x, (0x05, sp)
+ jrne 00104$
+ ldw x, (0x03, sp)
+ jrne 00140$
+ ldw x, (0x01, sp)
+ jreq 00104$
+00140$:
+; ../wcscmp.c: 34: s1++, s2++;
+ addw y, #0x0004
+ ldw x, (0x09, sp)
+ addw x, #0x0004
+ ldw (0x09, sp), x
+ jra 00102$
+00104$:
+; ../wcscmp.c: 36: if(*s1 < *s2)
+ ldw x, (0x03, sp)
+ cpw x, (0x07, sp)
+ ld a, (0x02, sp)
+ sbc a, (0x06, sp)
+ ld a, (0x01, sp)
+ sbc a, (0x05, sp)
+ jrnc 00106$
+; ../wcscmp.c: 37: return(-1);
+ clrw x
+ decw x
+ jra 00109$
+00106$:
+; ../wcscmp.c: 38: if(*s1 > *s2)
+ ldw x, (0x07, sp)
+ cpw x, (0x03, sp)
+ ld a, (0x06, sp)
+ sbc a, (0x02, sp)
+ ld a, (0x05, sp)
+ sbc a, (0x01, sp)
+ jrnc 00108$
+; ../wcscmp.c: 39: return(1);
+ clrw x
+ incw x
+; ../wcscmp.c: 40: return(0);
+ .byte 0x21
+00108$:
+ clrw x
+00109$:
+; ../wcscmp.c: 41: }
+ addw sp, #10
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcscmp.lst b/device/lib/stm8-large/wcscmp.lst
new file mode 100644
index 0000000..6f09df6
--- /dev/null
+++ b/device/lib/stm8-large/wcscmp.lst
@@ -0,0 +1,127 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module wcscmp
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wcscmp
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../wcscmp.c: 31: int wcscmp(const wchar_t *s1, const wchar_t *s2)
+ 50 ; -----------------------------------------
+ 51 ; function wcscmp
+ 52 ; -----------------------------------------
+ 000000 53 _wcscmp:
+ 000000 52 0A [ 2] 54 sub sp, #10
+ 55 ; ../wcscmp.c: 33: while(*s1 == *s2 && *s1)
+ 000002 16 0E [ 2] 56 ldw y, (0x0e, sp)
+ 000004 1E 10 [ 2] 57 ldw x, (0x10, sp)
+ 000006 1F 09 [ 2] 58 ldw (0x09, sp), x
+ 000008 59 00102$:
+ 000008 93 [ 1] 60 ldw x, y
+ 000009 E6 03 [ 1] 61 ld a, (0x3, x)
+ 00000B 6B 04 [ 1] 62 ld (0x04, sp), a
+ 00000D E6 02 [ 1] 63 ld a, (0x2, x)
+ 00000F 6B 03 [ 1] 64 ld (0x03, sp), a
+ 000011 FE [ 2] 65 ldw x, (x)
+ 000012 1F 01 [ 2] 66 ldw (0x01, sp), x
+ 000014 1E 09 [ 2] 67 ldw x, (0x09, sp)
+ 000016 E6 03 [ 1] 68 ld a, (0x3, x)
+ 000018 6B 08 [ 1] 69 ld (0x08, sp), a
+ 00001A E6 02 [ 1] 70 ld a, (0x2, x)
+ 00001C 6B 07 [ 1] 71 ld (0x07, sp), a
+ 00001E FE [ 2] 72 ldw x, (x)
+ 00001F 1F 05 [ 2] 73 ldw (0x05, sp), x
+ 000021 1E 03 [ 2] 74 ldw x, (0x03, sp)
+ 000023 13 07 [ 2] 75 cpw x, (0x07, sp)
+ 000025 26 1B [ 1] 76 jrne 00104$
+ 000027 1E 01 [ 2] 77 ldw x, (0x01, sp)
+ 000029 13 05 [ 2] 78 cpw x, (0x05, sp)
+ 00002B 26 15 [ 1] 79 jrne 00104$
+ 00002D 1E 03 [ 2] 80 ldw x, (0x03, sp)
+ 00002F 26 04 [ 1] 81 jrne 00140$
+ 000031 1E 01 [ 2] 82 ldw x, (0x01, sp)
+ 000033 27 0D [ 1] 83 jreq 00104$
+ 000035 84 00140$:
+ 85 ; ../wcscmp.c: 34: s1++, s2++;
+ 000035 72 A9 00 04 [ 2] 86 addw y, #0x0004
+ 000039 1E 09 [ 2] 87 ldw x, (0x09, sp)
+ 00003B 1C 00 04 [ 2] 88 addw x, #0x0004
+ 00003E 1F 09 [ 2] 89 ldw (0x09, sp), x
+ 000040 20 C6 [ 2] 90 jra 00102$
+ 000042 91 00104$:
+ 92 ; ../wcscmp.c: 36: if(*s1 < *s2)
+ 000042 1E 03 [ 2] 93 ldw x, (0x03, sp)
+ 000044 13 07 [ 2] 94 cpw x, (0x07, sp)
+ 000046 7B 02 [ 1] 95 ld a, (0x02, sp)
+ 000048 12 06 [ 1] 96 sbc a, (0x06, sp)
+ 00004A 7B 01 [ 1] 97 ld a, (0x01, sp)
+ 00004C 12 05 [ 1] 98 sbc a, (0x05, sp)
+ 00004E 24 04 [ 1] 99 jrnc 00106$
+ 100 ; ../wcscmp.c: 37: return(-1);
+ 000050 5F [ 1] 101 clrw x
+ 000051 5A [ 2] 102 decw x
+ 000052 20 12 [ 2] 103 jra 00109$
+ 000054 104 00106$:
+ 105 ; ../wcscmp.c: 38: if(*s1 > *s2)
+ 000054 1E 07 [ 2] 106 ldw x, (0x07, sp)
+ 000056 13 03 [ 2] 107 cpw x, (0x03, sp)
+ 000058 7B 06 [ 1] 108 ld a, (0x06, sp)
+ 00005A 12 02 [ 1] 109 sbc a, (0x02, sp)
+ 00005C 7B 05 [ 1] 110 ld a, (0x05, sp)
+ 00005E 12 01 [ 1] 111 sbc a, (0x01, sp)
+ 000060 24 03 [ 1] 112 jrnc 00108$
+ 113 ; ../wcscmp.c: 39: return(1);
+ 000062 5F [ 1] 114 clrw x
+ 000063 5C [ 1] 115 incw x
+ 116 ; ../wcscmp.c: 40: return(0);
+ 000064 21 117 .byte 0x21
+ 000065 118 00108$:
+ 000065 5F [ 1] 119 clrw x
+ 000066 120 00109$:
+ 121 ; ../wcscmp.c: 41: }
+ 000066 5B 0A [ 2] 122 addw sp, #10
+ 000068 87 [ 5] 123 retf
+ 124 .area CODE
+ 125 .area CONST
+ 126 .area INITIALIZER
+ 127 .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcscmp.rel b/device/lib/stm8-large/wcscmp.rel
new file mode 100644
index 0000000..6b968bb
--- /dev/null
+++ b/device/lib/stm8-large/wcscmp.rel
@@ -0,0 +1,55 @@
+XH3
+H B areas 2 global symbols
+M wcscmp
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 69 flags 0 addr 0
+S _wcscmp Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0A 16 0E 1E 10 1F 09
+R 00 00 00 09
+T 00 00 08
+R 00 00 00 09
+T 00 00 08 93 E6 03 6B 04 E6 02 6B 03 FE 1F 01 1E
+R 00 00 00 09
+T 00 00 15 09 E6 03 6B 08 E6 02 6B 07 FE 1F 05 1E
+R 00 00 00 09
+T 00 00 22 03 13 07 26 1B 1E 01 13 05 26 15 1E 03
+R 00 00 00 09
+T 00 00 2F 26 04 1E 01 27 0D
+R 00 00 00 09
+T 00 00 35
+R 00 00 00 09
+T 00 00 35 72 A9 00 04 1E 09 1C 00 04 1F 09 20 C6
+R 00 00 00 09
+T 00 00 42
+R 00 00 00 09
+T 00 00 42 1E 03 13 07 7B 02 12 06 7B 01 12 05 24
+R 00 00 00 09
+T 00 00 4F 04 5F 5A 20 12
+R 00 00 00 09
+T 00 00 54
+R 00 00 00 09
+T 00 00 54 1E 07 13 03 7B 06 12 02 7B 05 12 01 24
+R 00 00 00 09
+T 00 00 61 03 5F 5C 21
+R 00 00 00 09
+T 00 00 65
+R 00 00 00 09
+T 00 00 65 5F
+R 00 00 00 09
+T 00 00 66
+R 00 00 00 09
+T 00 00 66 5B 0A 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/wcscmp.sym b/device/lib/stm8-large/wcscmp.sym
new file mode 100644
index 0000000..78e2207
--- /dev/null
+++ b/device/lib/stm8-large/wcscmp.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _wcscmp 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 69 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/wcslen.asm b/device/lib/stm8-large/wcslen.asm
new file mode 100644
index 0000000..a3d5862
--- /dev/null
+++ b/device/lib/stm8-large/wcslen.asm
@@ -0,0 +1,88 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module wcslen
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wcslen
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../wcslen.c: 31: size_t wcslen(const wchar_t *s)
+; -----------------------------------------
+; function wcslen
+; -----------------------------------------
+_wcslen:
+ sub sp, #6
+; ../wcslen.c: 34: while (*s)
+ clrw x
+ ldw (0x05, sp), x
+ ldw y, (0x0a, sp)
+00101$:
+ ldw x, y
+ ld a, (0x3, x)
+ ld (0x04, sp), a
+ ld a, (0x2, x)
+ ld (0x03, sp), a
+ ldw x, (x)
+ ldw (0x01, sp), x
+ ldw x, (0x03, sp)
+ jrne 00117$
+ ldw x, (0x01, sp)
+ jreq 00103$
+00117$:
+; ../wcslen.c: 36: n++;
+ ldw x, (0x05, sp)
+ incw x
+ ldw (0x05, sp), x
+; ../wcslen.c: 37: s++;
+ addw y, #0x0004
+ jra 00101$
+00103$:
+; ../wcslen.c: 40: return n;
+ ldw x, (0x05, sp)
+; ../wcslen.c: 41: }
+ addw sp, #6
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcslen.lst b/device/lib/stm8-large/wcslen.lst
new file mode 100644
index 0000000..2fe6d08
--- /dev/null
+++ b/device/lib/stm8-large/wcslen.lst
@@ -0,0 +1,88 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module wcslen
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wcslen
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../wcslen.c: 31: size_t wcslen(const wchar_t *s)
+ 50 ; -----------------------------------------
+ 51 ; function wcslen
+ 52 ; -----------------------------------------
+ 000000 53 _wcslen:
+ 000000 52 06 [ 2] 54 sub sp, #6
+ 55 ; ../wcslen.c: 34: while (*s)
+ 000002 5F [ 1] 56 clrw x
+ 000003 1F 05 [ 2] 57 ldw (0x05, sp), x
+ 000005 16 0A [ 2] 58 ldw y, (0x0a, sp)
+ 000007 59 00101$:
+ 000007 93 [ 1] 60 ldw x, y
+ 000008 E6 03 [ 1] 61 ld a, (0x3, x)
+ 00000A 6B 04 [ 1] 62 ld (0x04, sp), a
+ 00000C E6 02 [ 1] 63 ld a, (0x2, x)
+ 00000E 6B 03 [ 1] 64 ld (0x03, sp), a
+ 000010 FE [ 2] 65 ldw x, (x)
+ 000011 1F 01 [ 2] 66 ldw (0x01, sp), x
+ 000013 1E 03 [ 2] 67 ldw x, (0x03, sp)
+ 000015 26 04 [ 1] 68 jrne 00117$
+ 000017 1E 01 [ 2] 69 ldw x, (0x01, sp)
+ 000019 27 0B [ 1] 70 jreq 00103$
+ 00001B 71 00117$:
+ 72 ; ../wcslen.c: 36: n++;
+ 00001B 1E 05 [ 2] 73 ldw x, (0x05, sp)
+ 00001D 5C [ 1] 74 incw x
+ 00001E 1F 05 [ 2] 75 ldw (0x05, sp), x
+ 76 ; ../wcslen.c: 37: s++;
+ 000020 72 A9 00 04 [ 2] 77 addw y, #0x0004
+ 000024 20 E1 [ 2] 78 jra 00101$
+ 000026 79 00103$:
+ 80 ; ../wcslen.c: 40: return n;
+ 000026 1E 05 [ 2] 81 ldw x, (0x05, sp)
+ 82 ; ../wcslen.c: 41: }
+ 000028 5B 06 [ 2] 83 addw sp, #6
+ 00002A 87 [ 5] 84 retf
+ 85 .area CODE
+ 86 .area CONST
+ 87 .area INITIALIZER
+ 88 .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcslen.rel b/device/lib/stm8-large/wcslen.rel
new file mode 100644
index 0000000..d27b35f
--- /dev/null
+++ b/device/lib/stm8-large/wcslen.rel
@@ -0,0 +1,35 @@
+XH3
+H B areas 2 global symbols
+M wcslen
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 2B flags 0 addr 0
+S _wcslen Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 06 5F 1F 05 16 0A
+R 00 00 00 09
+T 00 00 07
+R 00 00 00 09
+T 00 00 07 93 E6 03 6B 04 E6 02 6B 03 FE 1F 01 1E
+R 00 00 00 09
+T 00 00 14 03 26 04 1E 01 27 0B
+R 00 00 00 09
+T 00 00 1B
+R 00 00 00 09
+T 00 00 1B 1E 05 5C 1F 05 72 A9 00 04 20 E1
+R 00 00 00 09
+T 00 00 26
+R 00 00 00 09
+T 00 00 26 1E 05 5B 06 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/wcslen.sym b/device/lib/stm8-large/wcslen.sym
new file mode 100644
index 0000000..0a2c7d3
--- /dev/null
+++ b/device/lib/stm8-large/wcslen.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _wcslen 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 2B flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/wcstombs.asm b/device/lib/stm8-large/wcstombs.asm
new file mode 100644
index 0000000..6564026
--- /dev/null
+++ b/device/lib/stm8-large/wcstombs.asm
@@ -0,0 +1,142 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module wcstombs
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wctomb
+ .globl _wcstombs
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../wcstombs.c: 33: size_t wcstombs(char *restrict s, const wchar_t *restrict pwcs, size_t n)
+; -----------------------------------------
+; function wcstombs
+; -----------------------------------------
+_wcstombs:
+ sub sp, #16
+; ../wcstombs.c: 35: size_t m = 0;
+ clrw x
+ ldw (0x09, sp), x
+; ../wcstombs.c: 38: while(n > MB_LEN_MAX || n >= wctomb(buffer, *pwcs))
+ ldw x, sp
+ addw x, #5
+ ldw (0x0b, sp), x
+ ldw y, (0x16, sp)
+ ldw (0x0f, sp), y
+00107$:
+ ldw x, (0x18, sp)
+ cpw x, #0x0004
+ jrugt 00108$
+ ldw x, (0x0f, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw (0x03, sp), y
+ ldw x, (x)
+ ldw (0x01, sp), x
+ ldw x, (0x0b, sp)
+ ldw y, (0x03, sp)
+ pushw y
+ ldw y, (0x03, sp)
+ pushw y
+ pushw x
+ callf _wctomb
+ addw sp, #6
+ ldw (0x0d, sp), x
+ ldw x, (0x18, sp)
+ cpw x, (0x0d, sp)
+ jrc 00109$
+00108$:
+; ../wcstombs.c: 40: int b = wctomb(s, *pwcs);
+ ldw x, (0x0f, sp)
+ ldw y, x
+ ldw y, (0x2, y)
+ ldw x, (x)
+ pushw y
+ pushw x
+ ldw x, (0x18, sp)
+ pushw x
+ callf _wctomb
+ addw sp, #6
+; ../wcstombs.c: 42: if(b == 1 && !*s)
+ cpw x, #0x0001
+ jrne 00102$
+ ldw y, (0x14, sp)
+ ld a, (y)
+ jreq 00109$
+; ../wcstombs.c: 43: break;
+00102$:
+; ../wcstombs.c: 44: if(b < 0)
+ tnzw x
+ jrpl 00105$
+; ../wcstombs.c: 45: return(-1);
+ clrw x
+ decw x
+ jra 00110$
+00105$:
+; ../wcstombs.c: 47: n -= b;
+ ldw (0x0d, sp), x
+ ldw y, (0x18, sp)
+ subw y, (0x0d, sp)
+ ldw (0x18, sp), y
+; ../wcstombs.c: 48: m += b;
+ ldw y, (0x09, sp)
+ addw y, (0x0d, sp)
+ ldw (0x09, sp), y
+; ../wcstombs.c: 49: s += b;
+ addw x, (0x14, sp)
+ ldw (0x14, sp), x
+; ../wcstombs.c: 50: pwcs++;
+ ldw x, (0x0f, sp)
+ addw x, #0x0004
+ ldw (0x0f, sp), x
+ jra 00107$
+00109$:
+; ../wcstombs.c: 53: return(m);
+ ldw x, (0x09, sp)
+00110$:
+; ../wcstombs.c: 54: }
+ addw sp, #16
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcstombs.lst b/device/lib/stm8-large/wcstombs.lst
new file mode 100644
index 0000000..aa8f124
--- /dev/null
+++ b/device/lib/stm8-large/wcstombs.lst
@@ -0,0 +1,142 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module wcstombs
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wctomb
+ 12 .globl _wcstombs
+ 13 ;--------------------------------------------------------
+ 14 ; ram data
+ 15 ;--------------------------------------------------------
+ 16 .area DATA
+ 17 ;--------------------------------------------------------
+ 18 ; ram data
+ 19 ;--------------------------------------------------------
+ 20 .area INITIALIZED
+ 21 ;--------------------------------------------------------
+ 22 ; absolute external ram data
+ 23 ;--------------------------------------------------------
+ 24 .area DABS (ABS)
+ 25
+ 26 ; default segment ordering for linker
+ 27 .area HOME
+ 28 .area GSINIT
+ 29 .area GSFINAL
+ 30 .area CONST
+ 31 .area INITIALIZER
+ 32 .area CODE
+ 33
+ 34 ;--------------------------------------------------------
+ 35 ; global & static initialisations
+ 36 ;--------------------------------------------------------
+ 37 .area HOME
+ 38 .area GSINIT
+ 39 .area GSFINAL
+ 40 .area GSINIT
+ 41 ;--------------------------------------------------------
+ 42 ; Home
+ 43 ;--------------------------------------------------------
+ 44 .area HOME
+ 45 .area HOME
+ 46 ;--------------------------------------------------------
+ 47 ; code
+ 48 ;--------------------------------------------------------
+ 49 .area CODE
+ 50 ; ../wcstombs.c: 33: size_t wcstombs(char *restrict s, const wchar_t *restrict pwcs, size_t n)
+ 51 ; -----------------------------------------
+ 52 ; function wcstombs
+ 53 ; -----------------------------------------
+ 000000 54 _wcstombs:
+ 000000 52 10 [ 2] 55 sub sp, #16
+ 56 ; ../wcstombs.c: 35: size_t m = 0;
+ 000002 5F [ 1] 57 clrw x
+ 000003 1F 09 [ 2] 58 ldw (0x09, sp), x
+ 59 ; ../wcstombs.c: 38: while(n > MB_LEN_MAX || n >= wctomb(buffer, *pwcs))
+ 000005 96 [ 1] 60 ldw x, sp
+ 000006 1C 00 05 [ 2] 61 addw x, #5
+ 000009 1F 0B [ 2] 62 ldw (0x0b, sp), x
+ 00000B 16 16 [ 2] 63 ldw y, (0x16, sp)
+ 00000D 17 0F [ 2] 64 ldw (0x0f, sp), y
+ 00000F 65 00107$:
+ 00000F 1E 18 [ 2] 66 ldw x, (0x18, sp)
+ 000011 A3 00 04 [ 2] 67 cpw x, #0x0004
+ 000014 22 25 [ 1] 68 jrugt 00108$
+ 000016 1E 0F [ 2] 69 ldw x, (0x0f, sp)
+ 000018 90 93 [ 1] 70 ldw y, x
+ 00001A 90 EE 02 [ 2] 71 ldw y, (0x2, y)
+ 00001D 17 03 [ 2] 72 ldw (0x03, sp), y
+ 00001F FE [ 2] 73 ldw x, (x)
+ 000020 1F 01 [ 2] 74 ldw (0x01, sp), x
+ 000022 1E 0B [ 2] 75 ldw x, (0x0b, sp)
+ 000024 16 03 [ 2] 76 ldw y, (0x03, sp)
+ 000026 90 89 [ 2] 77 pushw y
+ 000028 16 03 [ 2] 78 ldw y, (0x03, sp)
+ 00002A 90 89 [ 2] 79 pushw y
+ 00002C 89 [ 2] 80 pushw x
+ 00002D 8Ds00r00r00 [ 5] 81 callf _wctomb
+ 000031 5B 06 [ 2] 82 addw sp, #6
+ 000033 1F 0D [ 2] 83 ldw (0x0d, sp), x
+ 000035 1E 18 [ 2] 84 ldw x, (0x18, sp)
+ 000037 13 0D [ 2] 85 cpw x, (0x0d, sp)
+ 000039 25 44 [ 1] 86 jrc 00109$
+ 00003B 87 00108$:
+ 88 ; ../wcstombs.c: 40: int b = wctomb(s, *pwcs);
+ 00003B 1E 0F [ 2] 89 ldw x, (0x0f, sp)
+ 00003D 90 93 [ 1] 90 ldw y, x
+ 00003F 90 EE 02 [ 2] 91 ldw y, (0x2, y)
+ 000042 FE [ 2] 92 ldw x, (x)
+ 000043 90 89 [ 2] 93 pushw y
+ 000045 89 [ 2] 94 pushw x
+ 000046 1E 18 [ 2] 95 ldw x, (0x18, sp)
+ 000048 89 [ 2] 96 pushw x
+ 000049 8Ds00r00r00 [ 5] 97 callf _wctomb
+ 00004D 5B 06 [ 2] 98 addw sp, #6
+ 99 ; ../wcstombs.c: 42: if(b == 1 && !*s)
+ 00004F A3 00 01 [ 2] 100 cpw x, #0x0001
+ 000052 26 06 [ 1] 101 jrne 00102$
+ 000054 16 14 [ 2] 102 ldw y, (0x14, sp)
+ 000056 90 F6 [ 1] 103 ld a, (y)
+ 000058 27 25 [ 1] 104 jreq 00109$
+ 105 ; ../wcstombs.c: 43: break;
+ 00005A 106 00102$:
+ 107 ; ../wcstombs.c: 44: if(b < 0)
+ 00005A 5D [ 2] 108 tnzw x
+ 00005B 2A 04 [ 1] 109 jrpl 00105$
+ 110 ; ../wcstombs.c: 45: return(-1);
+ 00005D 5F [ 1] 111 clrw x
+ 00005E 5A [ 2] 112 decw x
+ 00005F 20 20 [ 2] 113 jra 00110$
+ 000061 114 00105$:
+ 115 ; ../wcstombs.c: 47: n -= b;
+ 000061 1F 0D [ 2] 116 ldw (0x0d, sp), x
+ 000063 16 18 [ 2] 117 ldw y, (0x18, sp)
+ 000065 72 F2 0D [ 2] 118 subw y, (0x0d, sp)
+ 000068 17 18 [ 2] 119 ldw (0x18, sp), y
+ 120 ; ../wcstombs.c: 48: m += b;
+ 00006A 16 09 [ 2] 121 ldw y, (0x09, sp)
+ 00006C 72 F9 0D [ 2] 122 addw y, (0x0d, sp)
+ 00006F 17 09 [ 2] 123 ldw (0x09, sp), y
+ 124 ; ../wcstombs.c: 49: s += b;
+ 000071 72 FB 14 [ 2] 125 addw x, (0x14, sp)
+ 000074 1F 14 [ 2] 126 ldw (0x14, sp), x
+ 127 ; ../wcstombs.c: 50: pwcs++;
+ 000076 1E 0F [ 2] 128 ldw x, (0x0f, sp)
+ 000078 1C 00 04 [ 2] 129 addw x, #0x0004
+ 00007B 1F 0F [ 2] 130 ldw (0x0f, sp), x
+ 00007D 20 90 [ 2] 131 jra 00107$
+ 00007F 132 00109$:
+ 133 ; ../wcstombs.c: 53: return(m);
+ 00007F 1E 09 [ 2] 134 ldw x, (0x09, sp)
+ 000081 135 00110$:
+ 136 ; ../wcstombs.c: 54: }
+ 000081 5B 10 [ 2] 137 addw sp, #16
+ 000083 87 [ 5] 138 retf
+ 139 .area CODE
+ 140 .area CONST
+ 141 .area INITIALIZER
+ 142 .area CABS (ABS)
diff --git a/device/lib/stm8-large/wcstombs.rel b/device/lib/stm8-large/wcstombs.rel
new file mode 100644
index 0000000..a88817a
--- /dev/null
+++ b/device/lib/stm8-large/wcstombs.rel
@@ -0,0 +1,62 @@
+XH3
+H B areas 3 global symbols
+M wcstombs
+O -mstm8
+S .__.ABS. Def000000
+S _wctomb Ref000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 84 flags 0 addr 0
+S _wcstombs Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 10 5F 1F 09 96 1C 00 05 1F 0B 16 16
+R 00 00 00 09
+T 00 00 0D 17 0F
+R 00 00 00 09
+T 00 00 0F
+R 00 00 00 09
+T 00 00 0F 1E 18 A3 00 04 22 25 1E 0F 90 93 90 EE
+R 00 00 00 09
+T 00 00 1C 02 17 03 FE 1F 01 1E 0B 16 03 90 89 16
+R 00 00 00 09
+T 00 00 29 03 90 89 89 8D 00 00 00 5B 06 1F 0D 1E
+R 00 00 00 09 82 08 00 01
+T 00 00 36 18 13 0D 25 44
+R 00 00 00 09
+T 00 00 3B
+R 00 00 00 09
+T 00 00 3B 1E 0F 90 93 90 EE 02 FE 90 89 89 1E 18
+R 00 00 00 09
+T 00 00 48 89 8D 00 00 00 5B 06 A3 00 01 26 06 16
+R 00 00 00 09 82 05 00 01
+T 00 00 55 14 90 F6 27 25
+R 00 00 00 09
+T 00 00 5A
+R 00 00 00 09
+T 00 00 5A 5D 2A 04 5F 5A 20 20
+R 00 00 00 09
+T 00 00 61
+R 00 00 00 09
+T 00 00 61 1F 0D 16 18 72 F2 0D 17 18 16 09 72 F9
+R 00 00 00 09
+T 00 00 6E 0D 17 09 72 FB 14 1F 14 1E 0F 1C 00 04
+R 00 00 00 09
+T 00 00 7B 1F 0F 20 90
+R 00 00 00 09
+T 00 00 7F
+R 00 00 00 09
+T 00 00 7F 1E 09
+R 00 00 00 09
+T 00 00 81
+R 00 00 00 09
+T 00 00 81 5B 10 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/wcstombs.sym b/device/lib/stm8-large/wcstombs.sym
new file mode 100644
index 0000000..1a999ba
--- /dev/null
+++ b/device/lib/stm8-large/wcstombs.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _wcstombs 000000 GR
+ _wctomb ****** GX
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 84 flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/wctob.asm b/device/lib/stm8-large/wctob.asm
new file mode 100644
index 0000000..53606dc
--- /dev/null
+++ b/device/lib/stm8-large/wctob.asm
@@ -0,0 +1,81 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module wctob
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wctob
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../wctob.c: 35: int wctob(wint_t c)
+; -----------------------------------------
+; function wctob
+; -----------------------------------------
+_wctob:
+ sub sp, #4
+; ../wctob.c: 37: if(c & 0xffffff80)
+ ld a, (0x0b, sp)
+ and a, #0x80
+ ld (0x04, sp), a
+ ldw x, (0x08, sp)
+ ld a, (0x0a, sp)
+ ld (0x03, sp), a
+ ldw y, (0x03, sp)
+ jrne 00110$
+ tnzw x
+ jreq 00102$
+00110$:
+; ../wctob.c: 38: return WEOF;
+ clrw x
+ decw x
+; ../wctob.c: 39: return c;
+ .byte 0xc5
+00102$:
+ ldw x, (0x0a, sp)
+00103$:
+; ../wctob.c: 40: }
+ addw sp, #4
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/wctob.lst b/device/lib/stm8-large/wctob.lst
new file mode 100644
index 0000000..2abaa67
--- /dev/null
+++ b/device/lib/stm8-large/wctob.lst
@@ -0,0 +1,81 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module wctob
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wctob
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../wctob.c: 35: int wctob(wint_t c)
+ 50 ; -----------------------------------------
+ 51 ; function wctob
+ 52 ; -----------------------------------------
+ 000000 53 _wctob:
+ 000000 52 04 [ 2] 54 sub sp, #4
+ 55 ; ../wctob.c: 37: if(c & 0xffffff80)
+ 000002 7B 0B [ 1] 56 ld a, (0x0b, sp)
+ 000004 A4 80 [ 1] 57 and a, #0x80
+ 000006 6B 04 [ 1] 58 ld (0x04, sp), a
+ 000008 1E 08 [ 2] 59 ldw x, (0x08, sp)
+ 00000A 7B 0A [ 1] 60 ld a, (0x0a, sp)
+ 00000C 6B 03 [ 1] 61 ld (0x03, sp), a
+ 00000E 16 03 [ 2] 62 ldw y, (0x03, sp)
+ 000010 26 03 [ 1] 63 jrne 00110$
+ 000012 5D [ 2] 64 tnzw x
+ 000013 27 03 [ 1] 65 jreq 00102$
+ 000015 66 00110$:
+ 67 ; ../wctob.c: 38: return WEOF;
+ 000015 5F [ 1] 68 clrw x
+ 000016 5A [ 2] 69 decw x
+ 70 ; ../wctob.c: 39: return c;
+ 000017 C5 71 .byte 0xc5
+ 000018 72 00102$:
+ 000018 1E 0A [ 2] 73 ldw x, (0x0a, sp)
+ 00001A 74 00103$:
+ 75 ; ../wctob.c: 40: }
+ 00001A 5B 04 [ 2] 76 addw sp, #4
+ 00001C 87 [ 5] 77 retf
+ 78 .area CODE
+ 79 .area CONST
+ 80 .area INITIALIZER
+ 81 .area CABS (ABS)
diff --git a/device/lib/stm8-large/wctob.rel b/device/lib/stm8-large/wctob.rel
new file mode 100644
index 0000000..7808457
--- /dev/null
+++ b/device/lib/stm8-large/wctob.rel
@@ -0,0 +1,35 @@
+XH3
+H B areas 2 global symbols
+M wctob
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 1D flags 0 addr 0
+S _wctob Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 04 7B 0B A4 80 6B 04 1E 08 7B 0A 6B
+R 00 00 00 09
+T 00 00 0D 03 16 03 26 03 5D 27 03
+R 00 00 00 09
+T 00 00 15
+R 00 00 00 09
+T 00 00 15 5F 5A C5
+R 00 00 00 09
+T 00 00 18
+R 00 00 00 09
+T 00 00 18 1E 0A
+R 00 00 00 09
+T 00 00 1A
+R 00 00 00 09
+T 00 00 1A 5B 04 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/wctob.sym b/device/lib/stm8-large/wctob.sym
new file mode 100644
index 0000000..13c8a43
--- /dev/null
+++ b/device/lib/stm8-large/wctob.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _wctob 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 1D flags 0
+ A CABS size 0 flags 8
+
diff --git a/device/lib/stm8-large/wctomb.asm b/device/lib/stm8-large/wctomb.asm
new file mode 100644
index 0000000..d27056a
--- /dev/null
+++ b/device/lib/stm8-large/wctomb.asm
@@ -0,0 +1,235 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.9.3 #11345 (Linux)
+;--------------------------------------------------------
+ .module wctomb
+ .optsdcc -mstm8
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _wctomb
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area DATA
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area DABS (ABS)
+
+; default segment ordering for linker
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area CONST
+ .area INITIALIZER
+ .area CODE
+
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area HOME
+ .area GSINIT
+ .area GSFINAL
+ .area GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area HOME
+ .area HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area CODE
+; ../wctomb.c: 31: int wctomb(char *s, wchar_t wc)
+; -----------------------------------------
+; function wctomb
+; -----------------------------------------
+_wctomb:
+ sub sp, #12
+; ../wctomb.c: 33: if(!s)
+; ../wctomb.c: 34: return(0);
+ ldw x, (0x10, sp)
+ jrne 00102$
+ jpf 00119$
+00102$:
+; ../wctomb.c: 38: s[0] = wc;
+ ldw y, (0x10, sp)
+ ldw (0x01, sp), y
+ ld a, (0x15, sp)
+; ../wctomb.c: 36: if(wc < 0x80)
+ ldw x, (0x14, sp)
+ cpw x, #0x0080
+ push a
+ ld a, (0x14, sp)
+ sbc a, #0x00
+ ld a, (0x13, sp)
+ sbc a, #0x00
+ pop a
+ jrnc 00117$
+; ../wctomb.c: 38: s[0] = wc;
+ ldw x, (0x01, sp)
+ ld (x), a
+; ../wctomb.c: 39: return(1);
+ clrw x
+ incw x
+ jpf 00119$
+00117$:
+; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0;
+ ldw x, (0x14, sp)
+ push a
+ ld a, #0x40
+ div x, a
+ pop a
+; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80;
+ ldw y, (0x01, sp)
+ incw y
+ ldw (0x03, sp), y
+ and a, #0x3f
+; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0;
+ exg a, xl
+ ld (0x08, sp), a
+ exg a, xl
+; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80;
+ or a, #0x80
+ ld (0x05, sp), a
+; ../wctomb.c: 41: else if(wc < 0x800)
+ ldw x, (0x14, sp)
+ cpw x, #0x0800
+ ld a, (0x13, sp)
+ sbc a, #0x00
+ ld a, (0x12, sp)
+ sbc a, #0x00
+ jrnc 00114$
+; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0;
+ ld a, (0x08, sp)
+ and a, #0x1f
+ or a, #0xc0
+ ldw x, (0x01, sp)
+ ld (x), a
+; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80;
+ ldw x, (0x03, sp)
+ ld a, (0x05, sp)
+ ld (x), a
+; ../wctomb.c: 45: return(2);
+ ldw x, #0x0002
+ jpf 00119$
+00114$:
+; ../wctomb.c: 47: else if(wc >= 0xd800 && wc < 0xe000) // Unpaired surrogate
+ ldw x, (0x14, sp)
+ cpw x, #0xd800
+ ld a, (0x13, sp)
+ sbc a, #0x00
+ ld a, (0x12, sp)
+ sbc a, #0x00
+ jrc 00110$
+ ldw x, (0x14, sp)
+ cpw x, #0xe000
+ ld a, (0x13, sp)
+ sbc a, #0x00
+ ld a, (0x12, sp)
+ sbc a, #0x00
+ jrnc 00110$
+; ../wctomb.c: 48: return(-1);
+ clrw x
+ decw x
+ jpf 00119$
+00110$:
+; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0;
+ ldw y, (0x12, sp)
+ ldw (0x09, sp), y
+ ldw x, (0x14, sp)
+ ld a, #0x0c
+00161$:
+ srl (0x09, sp)
+ rrc (0x0a, sp)
+ rrcw x
+ dec a
+ jrne 00161$
+ ldw (0x0b, sp), x
+; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80;
+ ldw x, (0x01, sp)
+ incw x
+ incw x
+ ldw (0x06, sp), x
+; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0;
+ ld a, (0x0c, sp)
+ ld yl, a
+; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80;
+ ld a, (0x08, sp)
+ and a, #0x3f
+ or a, #0x80
+ ld (0x08, sp), a
+; ../wctomb.c: 49: else if(wc < 0x10000)
+ ldw x, (0x12, sp)
+ cpw x, #0x0001
+ jrnc 00107$
+; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0;
+ ld a, yl
+ and a, #0x0f
+ or a, #0xe0
+ ldw x, (0x01, sp)
+ ld (x), a
+; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80;
+ ldw x, (0x03, sp)
+ ld a, (0x08, sp)
+ ld (x), a
+; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80;
+ ldw x, (0x06, sp)
+ ld a, (0x05, sp)
+ ld (x), a
+; ../wctomb.c: 54: return(3);
+ ldw x, #0x0003
+ jra 00119$
+00107$:
+; ../wctomb.c: 56: else if(wc < 0x110000)
+; ../wctomb.c: 58: s[0] = (wc >> 18) & 0x07 | 0xf0;
+ ldw x, (0x12, sp)
+ cpw x, #0x0011
+ jrnc 00104$
+ ldw (0x0b, sp), x
+ clr (0x0a, sp)
+ clr (0x09, sp)
+ srl (0x0b, sp)
+ rrc (0x0c, sp)
+ srl (0x0b, sp)
+ rrc (0x0c, sp)
+ ld a, (0x0c, sp)
+ and a, #0x07
+ or a, #0xf0
+ ldw x, (0x01, sp)
+ ld (x), a
+; ../wctomb.c: 59: s[1] = (wc >> 12) & 0x3f | 0x80;
+ ld a, yl
+ and a, #0x3f
+ or a, #0x80
+ ldw x, (0x03, sp)
+ ld (x), a
+; ../wctomb.c: 60: s[2] = (wc >> 6) & 0x3f | 0x80;
+ ldw x, (0x06, sp)
+ ld a, (0x08, sp)
+ ld (x), a
+; ../wctomb.c: 61: s[3] = (wc >> 0) & 0x3f | 0x80;
+ ldw x, (0x01, sp)
+ ld a, (0x05, sp)
+ ld (0x0003, x), a
+; ../wctomb.c: 62: return(4);
+ ldw x, #0x0004
+ jra 00119$
+00104$:
+; ../wctomb.c: 65: return(-1);
+ clrw x
+ decw x
+00119$:
+; ../wctomb.c: 66: }
+ addw sp, #12
+ retf
+ .area CODE
+ .area CONST
+ .area INITIALIZER
+ .area CABS (ABS)
diff --git a/device/lib/stm8-large/wctomb.lst b/device/lib/stm8-large/wctomb.lst
new file mode 100644
index 0000000..5f6e24a
--- /dev/null
+++ b/device/lib/stm8-large/wctomb.lst
@@ -0,0 +1,235 @@
+ 1 ;--------------------------------------------------------
+ 2 ; File Created by SDCC : free open source ANSI-C Compiler
+ 3 ; Version 3.9.3 #11345 (Linux)
+ 4 ;--------------------------------------------------------
+ 5 .module wctomb
+ 6 .optsdcc -mstm8
+ 7
+ 8 ;--------------------------------------------------------
+ 9 ; Public variables in this module
+ 10 ;--------------------------------------------------------
+ 11 .globl _wctomb
+ 12 ;--------------------------------------------------------
+ 13 ; ram data
+ 14 ;--------------------------------------------------------
+ 15 .area DATA
+ 16 ;--------------------------------------------------------
+ 17 ; ram data
+ 18 ;--------------------------------------------------------
+ 19 .area INITIALIZED
+ 20 ;--------------------------------------------------------
+ 21 ; absolute external ram data
+ 22 ;--------------------------------------------------------
+ 23 .area DABS (ABS)
+ 24
+ 25 ; default segment ordering for linker
+ 26 .area HOME
+ 27 .area GSINIT
+ 28 .area GSFINAL
+ 29 .area CONST
+ 30 .area INITIALIZER
+ 31 .area CODE
+ 32
+ 33 ;--------------------------------------------------------
+ 34 ; global & static initialisations
+ 35 ;--------------------------------------------------------
+ 36 .area HOME
+ 37 .area GSINIT
+ 38 .area GSFINAL
+ 39 .area GSINIT
+ 40 ;--------------------------------------------------------
+ 41 ; Home
+ 42 ;--------------------------------------------------------
+ 43 .area HOME
+ 44 .area HOME
+ 45 ;--------------------------------------------------------
+ 46 ; code
+ 47 ;--------------------------------------------------------
+ 48 .area CODE
+ 49 ; ../wctomb.c: 31: int wctomb(char *s, wchar_t wc)
+ 50 ; -----------------------------------------
+ 51 ; function wctomb
+ 52 ; -----------------------------------------
+ 000000 53 _wctomb:
+ 000000 52 0C [ 2] 54 sub sp, #12
+ 55 ; ../wctomb.c: 33: if(!s)
+ 56 ; ../wctomb.c: 34: return(0);
+ 000002 1E 10 [ 2] 57 ldw x, (0x10, sp)
+ 000004 26 04 [ 1] 58 jrne 00102$
+ 000006 ACs00r01r05 [ 2] 59 jpf 00119$
+ 00000A 60 00102$:
+ 61 ; ../wctomb.c: 38: s[0] = wc;
+ 00000A 16 10 [ 2] 62 ldw y, (0x10, sp)
+ 00000C 17 01 [ 2] 63 ldw (0x01, sp), y
+ 00000E 7B 15 [ 1] 64 ld a, (0x15, sp)
+ 65 ; ../wctomb.c: 36: if(wc < 0x80)
+ 000010 1E 14 [ 2] 66 ldw x, (0x14, sp)
+ 000012 A3 00 80 [ 2] 67 cpw x, #0x0080
+ 000015 88 [ 1] 68 push a
+ 000016 7B 14 [ 1] 69 ld a, (0x14, sp)
+ 000018 A2 00 [ 1] 70 sbc a, #0x00
+ 00001A 7B 13 [ 1] 71 ld a, (0x13, sp)
+ 00001C A2 00 [ 1] 72 sbc a, #0x00
+ 00001E 84 [ 1] 73 pop a
+ 00001F 24 09 [ 1] 74 jrnc 00117$
+ 75 ; ../wctomb.c: 38: s[0] = wc;
+ 000021 1E 01 [ 2] 76 ldw x, (0x01, sp)
+ 000023 F7 [ 1] 77 ld (x), a
+ 78 ; ../wctomb.c: 39: return(1);
+ 000024 5F [ 1] 79 clrw x
+ 000025 5C [ 1] 80 incw x
+ 000026 ACs00r01r05 [ 2] 81 jpf 00119$
+ 00002A 82 00117$:
+ 83 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0;
+ 00002A 1E 14 [ 2] 84 ldw x, (0x14, sp)
+ 00002C 88 [ 1] 85 push a
+ 00002D A6 40 [ 1] 86 ld a, #0x40
+ 00002F 62 [ 2] 87 div x, a
+ 000030 84 [ 1] 88 pop a
+ 89 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80;
+ 000031 16 01 [ 2] 90 ldw y, (0x01, sp)
+ 000033 90 5C [ 1] 91 incw y
+ 000035 17 03 [ 2] 92 ldw (0x03, sp), y
+ 000037 A4 3F [ 1] 93 and a, #0x3f
+ 94 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0;
+ 000039 41 [ 1] 95 exg a, xl
+ 00003A 6B 08 [ 1] 96 ld (0x08, sp), a
+ 00003C 41 [ 1] 97 exg a, xl
+ 98 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80;
+ 00003D AA 80 [ 1] 99 or a, #0x80
+ 00003F 6B 05 [ 1] 100 ld (0x05, sp), a
+ 101 ; ../wctomb.c: 41: else if(wc < 0x800)
+ 000041 1E 14 [ 2] 102 ldw x, (0x14, sp)
+ 000043 A3 08 00 [ 2] 103 cpw x, #0x0800
+ 000046 7B 13 [ 1] 104 ld a, (0x13, sp)
+ 000048 A2 00 [ 1] 105 sbc a, #0x00
+ 00004A 7B 12 [ 1] 106 ld a, (0x12, sp)
+ 00004C A2 00 [ 1] 107 sbc a, #0x00
+ 00004E 24 15 [ 1] 108 jrnc 00114$
+ 109 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0;
+ 000050 7B 08 [ 1] 110 ld a, (0x08, sp)
+ 000052 A4 1F [ 1] 111 and a, #0x1f
+ 000054 AA C0 [ 1] 112 or a, #0xc0
+ 000056 1E 01 [ 2] 113 ldw x, (0x01, sp)
+ 000058 F7 [ 1] 114 ld (x), a
+ 115 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80;
+ 000059 1E 03 [ 2] 116 ldw x, (0x03, sp)
+ 00005B 7B 05 [ 1] 117 ld a, (0x05, sp)
+ 00005D F7 [ 1] 118 ld (x), a
+ 119 ; ../wctomb.c: 45: return(2);
+ 00005E AE 00 02 [ 2] 120 ldw x, #0x0002
+ 000061 ACs00r01r05 [ 2] 121 jpf 00119$
+ 000065 122 00114$:
+ 123 ; ../wctomb.c: 47: else if(wc >= 0xd800 && wc < 0xe000) // Unpaired surrogate
+ 000065 1E 14 [ 2] 124 ldw x, (0x14, sp)
+ 000067 A3 D8 00 [ 2] 125 cpw x, #0xd800
+ 00006A 7B 13 [ 1] 126 ld a, (0x13, sp)
+ 00006C A2 00 [ 1] 127 sbc a, #0x00
+ 00006E 7B 12 [ 1] 128 ld a, (0x12, sp)
+ 000070 A2 00 [ 1] 129 sbc a, #0x00
+ 000072 25 15 [ 1] 130 jrc 00110$
+ 000074 1E 14 [ 2] 131 ldw x, (0x14, sp)
+ 000076 A3 E0 00 [ 2] 132 cpw x, #0xe000
+ 000079 7B 13 [ 1] 133 ld a, (0x13, sp)
+ 00007B A2 00 [ 1] 134 sbc a, #0x00
+ 00007D 7B 12 [ 1] 135 ld a, (0x12, sp)
+ 00007F A2 00 [ 1] 136 sbc a, #0x00
+ 000081 24 06 [ 1] 137 jrnc 00110$
+ 138 ; ../wctomb.c: 48: return(-1);
+ 000083 5F [ 1] 139 clrw x
+ 000084 5A [ 2] 140 decw x
+ 000085 ACs00r01r05 [ 2] 141 jpf 00119$
+ 000089 142 00110$:
+ 143 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0;
+ 000089 16 12 [ 2] 144 ldw y, (0x12, sp)
+ 00008B 17 09 [ 2] 145 ldw (0x09, sp), y
+ 00008D 1E 14 [ 2] 146 ldw x, (0x14, sp)
+ 00008F A6 0C [ 1] 147 ld a, #0x0c
+ 000091 148 00161$:
+ 000091 04 09 [ 1] 149 srl (0x09, sp)
+ 000093 06 0A [ 1] 150 rrc (0x0a, sp)
+ 000095 56 [ 2] 151 rrcw x
+ 000096 4A [ 1] 152 dec a
+ 000097 26 F8 [ 1] 153 jrne 00161$
+ 000099 1F 0B [ 2] 154 ldw (0x0b, sp), x
+ 155 ; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80;
+ 00009B 1E 01 [ 2] 156 ldw x, (0x01, sp)
+ 00009D 5C [ 1] 157 incw x
+ 00009E 5C [ 1] 158 incw x
+ 00009F 1F 06 [ 2] 159 ldw (0x06, sp), x
+ 160 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0;
+ 0000A1 7B 0C [ 1] 161 ld a, (0x0c, sp)
+ 0000A3 90 97 [ 1] 162 ld yl, a
+ 163 ; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80;
+ 0000A5 7B 08 [ 1] 164 ld a, (0x08, sp)
+ 0000A7 A4 3F [ 1] 165 and a, #0x3f
+ 0000A9 AA 80 [ 1] 166 or a, #0x80
+ 0000AB 6B 08 [ 1] 167 ld (0x08, sp), a
+ 168 ; ../wctomb.c: 49: else if(wc < 0x10000)
+ 0000AD 1E 12 [ 2] 169 ldw x, (0x12, sp)
+ 0000AF A3 00 01 [ 2] 170 cpw x, #0x0001
+ 0000B2 24 18 [ 1] 171 jrnc 00107$
+ 172 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0;
+ 0000B4 90 9F [ 1] 173 ld a, yl
+ 0000B6 A4 0F [ 1] 174 and a, #0x0f
+ 0000B8 AA E0 [ 1] 175 or a, #0xe0
+ 0000BA 1E 01 [ 2] 176 ldw x, (0x01, sp)
+ 0000BC F7 [ 1] 177 ld (x), a
+ 178 ; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80;
+ 0000BD 1E 03 [ 2] 179 ldw x, (0x03, sp)
+ 0000BF 7B 08 [ 1] 180 ld a, (0x08, sp)
+ 0000C1 F7 [ 1] 181 ld (x), a
+ 182 ; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80;
+ 0000C2 1E 06 [ 2] 183 ldw x, (0x06, sp)
+ 0000C4 7B 05 [ 1] 184 ld a, (0x05, sp)
+ 0000C6 F7 [ 1] 185 ld (x), a
+ 186 ; ../wctomb.c: 54: return(3);
+ 0000C7 AE 00 03 [ 2] 187 ldw x, #0x0003
+ 0000CA 20 39 [ 2] 188 jra 00119$
+ 0000CC 189 00107$:
+ 190 ; ../wctomb.c: 56: else if(wc < 0x110000)
+ 191 ; ../wctomb.c: 58: s[0] = (wc >> 18) & 0x07 | 0xf0;
+ 0000CC 1E 12 [ 2] 192 ldw x, (0x12, sp)
+ 0000CE A3 00 11 [ 2] 193 cpw x, #0x0011
+ 0000D1 24 30 [ 1] 194 jrnc 00104$
+ 0000D3 1F 0B [ 2] 195 ldw (0x0b, sp), x
+ 0000D5 0F 0A [ 1] 196 clr (0x0a, sp)
+ 0000D7 0F 09 [ 1] 197 clr (0x09, sp)
+ 0000D9 04 0B [ 1] 198 srl (0x0b, sp)
+ 0000DB 06 0C [ 1] 199 rrc (0x0c, sp)
+ 0000DD 04 0B [ 1] 200 srl (0x0b, sp)
+ 0000DF 06 0C [ 1] 201 rrc (0x0c, sp)
+ 0000E1 7B 0C [ 1] 202 ld a, (0x0c, sp)
+ 0000E3 A4 07 [ 1] 203 and a, #0x07
+ 0000E5 AA F0 [ 1] 204 or a, #0xf0
+ 0000E7 1E 01 [ 2] 205 ldw x, (0x01, sp)
+ 0000E9 F7 [ 1] 206 ld (x), a
+ 207 ; ../wctomb.c: 59: s[1] = (wc >> 12) & 0x3f | 0x80;
+ 0000EA 90 9F [ 1] 208 ld a, yl
+ 0000EC A4 3F [ 1] 209 and a, #0x3f
+ 0000EE AA 80 [ 1] 210 or a, #0x80
+ 0000F0 1E 03 [ 2] 211 ldw x, (0x03, sp)
+ 0000F2 F7 [ 1] 212 ld (x), a
+ 213 ; ../wctomb.c: 60: s[2] = (wc >> 6) & 0x3f | 0x80;
+ 0000F3 1E 06 [ 2] 214 ldw x, (0x06, sp)
+ 0000F5 7B 08 [ 1] 215 ld a, (0x08, sp)
+ 0000F7 F7 [ 1] 216 ld (x), a
+ 217 ; ../wctomb.c: 61: s[3] = (wc >> 0) & 0x3f | 0x80;
+ 0000F8 1E 01 [ 2] 218 ldw x, (0x01, sp)
+ 0000FA 7B 05 [ 1] 219 ld a, (0x05, sp)
+ 0000FC E7 03 [ 1] 220 ld (0x0003, x), a
+ 221 ; ../wctomb.c: 62: return(4);
+ 0000FE AE 00 04 [ 2] 222 ldw x, #0x0004
+ 000101 20 02 [ 2] 223 jra 00119$
+ 000103 224 00104$:
+ 225 ; ../wctomb.c: 65: return(-1);
+ 000103 5F [ 1] 226 clrw x
+ 000104 5A [ 2] 227 decw x
+ 000105 228 00119$:
+ 229 ; ../wctomb.c: 66: }
+ 000105 5B 0C [ 2] 230 addw sp, #12
+ 000107 87 [ 5] 231 retf
+ 232 .area CODE
+ 233 .area CONST
+ 234 .area INITIALIZER
+ 235 .area CABS (ABS)
diff --git a/device/lib/stm8-large/wctomb.rel b/device/lib/stm8-large/wctomb.rel
new file mode 100644
index 0000000..8a14e13
--- /dev/null
+++ b/device/lib/stm8-large/wctomb.rel
@@ -0,0 +1,85 @@
+XH3
+H B areas 2 global symbols
+M wctomb
+O -mstm8
+S .__.ABS. Def000000
+A _CODE size 0 flags 0 addr 0
+A DATA size 0 flags 0 addr 0
+A INITIALIZED size 0 flags 0 addr 0
+A DABS size 0 flags 8 addr 0
+A HOME size 0 flags 0 addr 0
+A GSINIT size 0 flags 0 addr 0
+A GSFINAL size 0 flags 0 addr 0
+A CONST size 0 flags 0 addr 0
+A INITIALIZER size 0 flags 0 addr 0
+A CODE size 108 flags 0 addr 0
+S _wctomb Def000000
+A CABS size 0 flags 8 addr 0
+T 00 00 00
+R 00 00 00 09
+T 00 00 00 52 0C 1E 10 26 04 AC 00 01 05
+R 00 00 00 09 80 0A 00 09
+T 00 00 0A
+R 00 00 00 09
+T 00 00 0A 16 10 17 01 7B 15 1E 14 A3 00 80 88 7B
+R 00 00 00 09
+T 00 00 17 14 A2 00 7B 13 A2 00 84 24 09 1E 01 F7
+R 00 00 00 09
+T 00 00 24 5F 5C AC 00 01 05
+R 00 00 00 09 80 06 00 09
+T 00 00 2A
+R 00 00 00 09
+T 00 00 2A 1E 14 88 A6 40 62 84 16 01 90 5C 17 03
+R 00 00 00 09
+T 00 00 37 A4 3F 41 6B 08 41 AA 80 6B 05 1E 14 A3
+R 00 00 00 09
+T 00 00 44 08 00 7B 13 A2 00 7B 12 A2 00 24 15 7B
+R 00 00 00 09
+T 00 00 51 08 A4 1F AA C0 1E 01 F7 1E 03 7B 05 F7
+R 00 00 00 09
+T 00 00 5E AE 00 02 AC 00 01 05
+R 00 00 00 09 80 07 00 09
+T 00 00 65
+R 00 00 00 09
+T 00 00 65 1E 14 A3 D8 00 7B 13 A2 00 7B 12 A2 00
+R 00 00 00 09
+T 00 00 72 25 15 1E 14 A3 E0 00 7B 13 A2 00 7B 12
+R 00 00 00 09
+T 00 00 7F A2 00 24 06 5F 5A AC 00 01 05
+R 00 00 00 09 80 0A 00 09
+T 00 00 89
+R 00 00 00 09
+T 00 00 89 16 12 17 09 1E 14 A6 0C
+R 00 00 00 09
+T 00 00 91
+R 00 00 00 09
+T 00 00 91 04 09 06 0A 56 4A 26 F8 1F 0B 1E 01 5C
+R 00 00 00 09
+T 00 00 9E 5C 1F 06 7B 0C 90 97 7B 08 A4 3F AA 80
+R 00 00 00 09
+T 00 00 AB 6B 08 1E 12 A3 00 01 24 18 90 9F A4 0F
+R 00 00 00 09
+T 00 00 B8 AA E0 1E 01 F7 1E 03 7B 08 F7 1E 06 7B
+R 00 00 00 09
+T 00 00 C5 05 F7 AE 00 03 20 39
+R 00 00 00 09
+T 00 00 CC
+R 00 00 00 09
+T 00 00 CC 1E 12 A3 00 11 24 30 1F 0B 0F 0A 0F 09
+R 00 00 00 09
+T 00 00 D9 04 0B 06 0C 04 0B 06 0C 7B 0C A4 07 AA
+R 00 00 00 09
+T 00 00 E6 F0 1E 01 F7 90 9F A4 3F AA 80 1E 03 F7
+R 00 00 00 09
+T 00 00 F3 1E 06 7B 08 F7 1E 01 7B 05 E7 03 AE
+R 00 00 00 09
+T 00 00 FF 00 04 20 02
+R 00 00 00 09
+T 00 01 03
+R 00 00 00 09
+T 00 01 03 5F 5A
+R 00 00 00 09
+T 00 01 05
+R 00 00 00 09
+T 00 01 05 5B 0C 87
+R 00 00 00 09
diff --git a/device/lib/stm8-large/wctomb.sym b/device/lib/stm8-large/wctomb.sym
new file mode 100644
index 0000000..0cc1fb7
--- /dev/null
+++ b/device/lib/stm8-large/wctomb.sym
@@ -0,0 +1,29 @@
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1.
+Hexadecimal [24-Bits]
+
+Symbol Table
+
+ .__.$$$. = 002710 L
+ .__.ABS. = 000000 G
+ .__.CPU. = 000000 L
+ .__.H$L. = 000001 L
+ 9 _wctomb 000000 GR
+
+
+ ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2.
+Hexadecimal [24-Bits]
+
+Area Table
+
+ 0 _CODE size 0 flags 0
+ 1 DATA size 0 flags 0
+ 2 INITIALIZED size 0 flags 0
+ 3 DABS size 0 flags 8
+ 4 HOME size 0 flags 0
+ 5 GSINIT size 0 flags 0
+ 6 GSFINAL size 0 flags 0
+ 7 CONST size 0 flags 0
+ 8 INITIALIZER size 0 flags 0
+ 9 CODE size 108 flags 0
+ A CABS size 0 flags 8
+