From 60699af63f92f43cc4b4b9e3050fcdd2a8468281 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Wed, 10 Apr 2019 15:14:00 -0400 Subject: add opengl fronend, remove sdl frontend, refactor build system --- frontends/calculator/CEdev/lib/ccleanup.src | 14 + frontends/calculator/CEdev/lib/cstartup.src | 75 + frontends/calculator/CEdev/lib/fileio/fclose.src | 53 + frontends/calculator/CEdev/lib/fileio/feof.src | 88 + frontends/calculator/CEdev/lib/fileio/fgetc.src | 39 + frontends/calculator/CEdev/lib/fileio/fgets.src | 121 ++ frontends/calculator/CEdev/lib/fileio/files.src | 13 + frontends/calculator/CEdev/lib/fileio/fopen.src | 71 + frontends/calculator/CEdev/lib/fileio/fputc.src | 43 + frontends/calculator/CEdev/lib/fileio/fputs.src | 101 ++ frontends/calculator/CEdev/lib/fileio/fread.src | 51 + frontends/calculator/CEdev/lib/fileio/fseek.src | 47 + frontends/calculator/CEdev/lib/fileio/ftell.src | 43 + frontends/calculator/CEdev/lib/fileio/fwrite.src | 51 + frontends/calculator/CEdev/lib/fileio/remove.src | 50 + frontends/calculator/CEdev/lib/libheader.src | 55 + frontends/calculator/CEdev/lib/libload.lib | 1 + frontends/calculator/CEdev/lib/libload/fileioc.lib | 35 + frontends/calculator/CEdev/lib/libload/graphx.lib | 95 + frontends/calculator/CEdev/lib/libload/keypadc.lib | 5 + frontends/calculator/CEdev/lib/linked/acos.src | 6 + frontends/calculator/CEdev/lib/linked/asin.src | 6 + frontends/calculator/CEdev/lib/linked/atan.src | 6 + frontends/calculator/CEdev/lib/linked/atan2.src | 6 + frontends/calculator/CEdev/lib/linked/atof.src | 6 + frontends/calculator/CEdev/lib/linked/ceil.src | 6 + frontends/calculator/CEdev/lib/linked/cos.src | 6 + frontends/calculator/CEdev/lib/linked/cosh.src | 6 + frontends/calculator/CEdev/lib/linked/exp.src | 6 + frontends/calculator/CEdev/lib/linked/fabs.src | 6 + frontends/calculator/CEdev/lib/linked/floor.src | 6 + frontends/calculator/CEdev/lib/linked/fmod.src | 6 + frontends/calculator/CEdev/lib/linked/frexp.src | 6 + frontends/calculator/CEdev/lib/linked/ldexp.src | 6 + frontends/calculator/CEdev/lib/linked/log.src | 6 + frontends/calculator/CEdev/lib/linked/log10.src | 6 + frontends/calculator/CEdev/lib/linked/modf.src | 6 + frontends/calculator/CEdev/lib/linked/pow.src | 6 + frontends/calculator/CEdev/lib/linked/sin.src | 6 + frontends/calculator/CEdev/lib/linked/sinh.src | 6 + frontends/calculator/CEdev/lib/linked/sqrt.src | 6 + frontends/calculator/CEdev/lib/linked/strtod.src | 6 + frontends/calculator/CEdev/lib/linked/tan.src | 6 + frontends/calculator/CEdev/lib/linked/tanh.src | 6 + frontends/calculator/CEdev/lib/linked/ufltinfo.src | 7 + frontends/calculator/CEdev/lib/linked/ufltrnd.src | 7 + frontends/calculator/CEdev/lib/shared/abort.src | 13 + frontends/calculator/CEdev/lib/shared/abs.src | 17 + frontends/calculator/CEdev/lib/shared/atoi.src | 22 + frontends/calculator/CEdev/lib/shared/atol.src | 8 + .../calculator/CEdev/lib/shared/atomic_load_32.src | 61 + .../CEdev/lib/shared/atomic_load_decreasing_32.src | 89 + .../CEdev/lib/shared/atomic_load_increasing_32.src | 88 + frontends/calculator/CEdev/lib/shared/atos.src | 8 + frontends/calculator/CEdev/lib/shared/bdivs.src | 44 + frontends/calculator/CEdev/lib/shared/bdivu.src | 41 + frontends/calculator/CEdev/lib/shared/bldix.src | 25 + frontends/calculator/CEdev/lib/shared/bldiy.src | 17 + frontends/calculator/CEdev/lib/shared/bmuls.src | 25 + frontends/calculator/CEdev/lib/shared/bmulu.src | 24 + frontends/calculator/CEdev/lib/shared/brems.src | 40 + frontends/calculator/CEdev/lib/shared/bremu.src | 39 + frontends/calculator/CEdev/lib/shared/bsearch.src | 195 +++ frontends/calculator/CEdev/lib/shared/bshl.src | 18 + frontends/calculator/CEdev/lib/shared/bshrs.src | 29 + frontends/calculator/CEdev/lib/shared/bshru.src | 18 + frontends/calculator/CEdev/lib/shared/bstix.src | 19 + frontends/calculator/CEdev/lib/shared/bstiy.src | 18 + frontends/calculator/CEdev/lib/shared/calloc.src | 27 + frontends/calculator/CEdev/lib/shared/case.src | 27 + frontends/calculator/CEdev/lib/shared/case16.src | 17 + frontends/calculator/CEdev/lib/shared/case16d.src | 17 + frontends/calculator/CEdev/lib/shared/case24.src | 17 + frontends/calculator/CEdev/lib/shared/case24d.src | 17 + frontends/calculator/CEdev/lib/shared/case8.src | 17 + frontends/calculator/CEdev/lib/shared/case8d.src | 17 + frontends/calculator/CEdev/lib/shared/debugger.src | 12 + frontends/calculator/CEdev/lib/shared/delay.src | 92 + frontends/calculator/CEdev/lib/shared/div.src | 54 + .../calculator/CEdev/lib/shared/dzx7_standard.src | 106 ++ .../calculator/CEdev/lib/shared/dzx7_turbo.src | 117 ++ frontends/calculator/CEdev/lib/shared/finite.src | 19 + frontends/calculator/CEdev/lib/shared/fpadd.src | 25 + frontends/calculator/CEdev/lib/shared/fpcmp.src | 27 + frontends/calculator/CEdev/lib/shared/fpdata.src | 17 + frontends/calculator/CEdev/lib/shared/fpdiv.src | 28 + frontends/calculator/CEdev/lib/shared/fpftol.src | 20 + frontends/calculator/CEdev/lib/shared/fpltof.src | 20 + frontends/calculator/CEdev/lib/shared/fpmul.src | 26 + frontends/calculator/CEdev/lib/shared/fpneg.src | 32 + frontends/calculator/CEdev/lib/shared/fppack.src | 28 + frontends/calculator/CEdev/lib/shared/fpsub.src | 27 + frontends/calculator/CEdev/lib/shared/fpultof.src | 22 + frontends/calculator/CEdev/lib/shared/fpupop1.src | 48 + frontends/calculator/CEdev/lib/shared/fpupop2.src | 47 + frontends/calculator/CEdev/lib/shared/frameset.src | 12 + .../calculator/CEdev/lib/shared/frameset0.src | 9 + frontends/calculator/CEdev/lib/shared/frbmuls.src | 53 + frontends/calculator/CEdev/lib/shared/frbtof.src | 17 + frontends/calculator/CEdev/lib/shared/free.src | 180 ++ frontends/calculator/CEdev/lib/shared/frftob.src | 17 + frontends/calculator/CEdev/lib/shared/frftoi.src | 17 + frontends/calculator/CEdev/lib/shared/frftos.src | 17 + frontends/calculator/CEdev/lib/shared/frftoub.src | 17 + frontends/calculator/CEdev/lib/shared/frftoui.src | 17 + frontends/calculator/CEdev/lib/shared/frftous.src | 17 + frontends/calculator/CEdev/lib/shared/frimuls.src | 81 + frontends/calculator/CEdev/lib/shared/frimulu.src | 112 ++ frontends/calculator/CEdev/lib/shared/fritof.src | 17 + frontends/calculator/CEdev/lib/shared/frsmuls.src | 61 + frontends/calculator/CEdev/lib/shared/frsmulu.src | 51 + frontends/calculator/CEdev/lib/shared/frstof.src | 17 + frontends/calculator/CEdev/lib/shared/frubtof.src | 17 + frontends/calculator/CEdev/lib/shared/fruitof.src | 17 + frontends/calculator/CEdev/lib/shared/frustof.src | 17 + frontends/calculator/CEdev/lib/shared/gamma.src | 439 +++++ .../calculator/CEdev/lib/shared/getstringinput.src | 136 ++ frontends/calculator/CEdev/lib/shared/iand.src | 19 + frontends/calculator/CEdev/lib/shared/icmpzero.src | 20 + frontends/calculator/CEdev/lib/shared/idivs.src | 20 + frontends/calculator/CEdev/lib/shared/idivu.src | 21 + frontends/calculator/CEdev/lib/shared/ildix.src | 17 + frontends/calculator/CEdev/lib/shared/ildiy.src | 17 + frontends/calculator/CEdev/lib/shared/imuls.src | 19 + frontends/calculator/CEdev/lib/shared/imulu.src | 24 + frontends/calculator/CEdev/lib/shared/indcall.src | 14 + frontends/calculator/CEdev/lib/shared/ineg.src | 16 + frontends/calculator/CEdev/lib/shared/inot.src | 15 + .../calculator/CEdev/lib/shared/interrupts.src | 142 ++ frontends/calculator/CEdev/lib/shared/ior.src | 19 + frontends/calculator/CEdev/lib/shared/irems.src | 19 + frontends/calculator/CEdev/lib/shared/iremu.src | 21 + frontends/calculator/CEdev/lib/shared/isalnum.src | 28 + frontends/calculator/CEdev/lib/shared/isalpha.src | 27 + frontends/calculator/CEdev/lib/shared/isascii.src | 19 + frontends/calculator/CEdev/lib/shared/iscntrl.src | 27 + frontends/calculator/CEdev/lib/shared/isdigit.src | 27 + frontends/calculator/CEdev/lib/shared/isgraph.src | 28 + frontends/calculator/CEdev/lib/shared/ishl.src | 20 + frontends/calculator/CEdev/lib/shared/ishrs.src | 20 + frontends/calculator/CEdev/lib/shared/ishru.src | 20 + frontends/calculator/CEdev/lib/shared/isinf.src | 20 + frontends/calculator/CEdev/lib/shared/islower.src | 29 + frontends/calculator/CEdev/lib/shared/isnan.src | 20 + frontends/calculator/CEdev/lib/shared/isprint.src | 28 + frontends/calculator/CEdev/lib/shared/ispunct.src | 28 + frontends/calculator/CEdev/lib/shared/isspace.src | 28 + frontends/calculator/CEdev/lib/shared/istix.src | 18 + frontends/calculator/CEdev/lib/shared/istiy.src | 18 + frontends/calculator/CEdev/lib/shared/isupper.src | 28 + frontends/calculator/CEdev/lib/shared/isxdigit.src | 28 + frontends/calculator/CEdev/lib/shared/itol.src | 16 + frontends/calculator/CEdev/lib/shared/ixor.src | 19 + frontends/calculator/CEdev/lib/shared/labs.src | 24 + frontends/calculator/CEdev/lib/shared/ladd.src | 20 + frontends/calculator/CEdev/lib/shared/land.src | 19 + frontends/calculator/CEdev/lib/shared/lcmps.src | 19 + frontends/calculator/CEdev/lib/shared/lcmpu.src | 19 + frontends/calculator/CEdev/lib/shared/lcmpzero.src | 16 + frontends/calculator/CEdev/lib/shared/ldiv.src | 79 + frontends/calculator/CEdev/lib/shared/ldivs.src | 19 + frontends/calculator/CEdev/lib/shared/ldivu.src | 20 + frontends/calculator/CEdev/lib/shared/lldix.src | 17 + frontends/calculator/CEdev/lib/shared/lldiy.src | 17 + frontends/calculator/CEdev/lib/shared/lmuls.src | 19 + frontends/calculator/CEdev/lib/shared/lmulu.src | 22 + frontends/calculator/CEdev/lib/shared/lneg.src | 16 + frontends/calculator/CEdev/lib/shared/lnot.src | 16 + frontends/calculator/CEdev/lib/shared/log2.src | 27 + frontends/calculator/CEdev/lib/shared/longjmp.src | 4 + frontends/calculator/CEdev/lib/shared/lor.src | 19 + frontends/calculator/CEdev/lib/shared/lrems.src | 19 + frontends/calculator/CEdev/lib/shared/lremu.src | 19 + frontends/calculator/CEdev/lib/shared/lshl.src | 19 + frontends/calculator/CEdev/lib/shared/lshrs.src | 19 + frontends/calculator/CEdev/lib/shared/lshru.src | 19 + frontends/calculator/CEdev/lib/shared/lstix.src | 17 + frontends/calculator/CEdev/lib/shared/lstiy.src | 17 + frontends/calculator/CEdev/lib/shared/lsub.src | 19 + frontends/calculator/CEdev/lib/shared/lxor.src | 19 + frontends/calculator/CEdev/lib/shared/malloc.src | 225 +++ frontends/calculator/CEdev/lib/shared/maptab.src | 158 ++ frontends/calculator/CEdev/lib/shared/memchr.src | 6 + frontends/calculator/CEdev/lib/shared/memcmp.src | 6 + frontends/calculator/CEdev/lib/shared/memcpy.src | 6 + frontends/calculator/CEdev/lib/shared/memmove.src | 6 + frontends/calculator/CEdev/lib/shared/memset.src | 26 + frontends/calculator/CEdev/lib/shared/os.src | 14 + .../calculator/CEdev/lib/shared/os_textbuffer.src | 22 + .../calculator/CEdev/lib/shared/print_globals.src | 47 + .../calculator/CEdev/lib/shared/print_putch.src | 51 + .../CEdev/lib/shared/print_putstring.src | 246 +++ .../calculator/CEdev/lib/shared/print_sputch.src | 46 + frontends/calculator/CEdev/lib/shared/qsort.src | 378 ++++ frontends/calculator/CEdev/lib/shared/rand.src | 13 + frontends/calculator/CEdev/lib/shared/random.src | 110 ++ frontends/calculator/CEdev/lib/shared/realloc.src | 125 ++ .../CEdev/lib/shared/removeallbreakpoints.src | 12 + .../CEdev/lib/shared/removeallwatchpoints.src | 12 + .../CEdev/lib/shared/removebreakpoint.src | 16 + .../CEdev/lib/shared/removewatchpoint.src | 16 + frontends/calculator/CEdev/lib/shared/round.src | 44 + frontends/calculator/CEdev/lib/shared/sand.src | 19 + frontends/calculator/CEdev/lib/shared/sbrk.src | 49 + frontends/calculator/CEdev/lib/shared/scmpzero.src | 16 + frontends/calculator/CEdev/lib/shared/sdivs.src | 20 + frontends/calculator/CEdev/lib/shared/sdivu.src | 21 + frontends/calculator/CEdev/lib/shared/seqcase.src | 25 + frontends/calculator/CEdev/lib/shared/seqcased.src | 26 + .../calculator/CEdev/lib/shared/setbreakpoint.src | 16 + frontends/calculator/CEdev/lib/shared/setflag.src | 22 + frontends/calculator/CEdev/lib/shared/setjmp.src | 6 + .../CEdev/lib/shared/setreadwatchpoint.src | 18 + .../CEdev/lib/shared/setreadwritewatchpoint.src | 18 + .../calculator/CEdev/lib/shared/setwatchpoint.src | 18 + .../CEdev/lib/shared/setwritewatchpoint.src | 18 + frontends/calculator/CEdev/lib/shared/sldix.src | 17 + frontends/calculator/CEdev/lib/shared/sldiy.src | 18 + frontends/calculator/CEdev/lib/shared/smuls.src | 21 + frontends/calculator/CEdev/lib/shared/smulu.src | 21 + frontends/calculator/CEdev/lib/shared/sneg.src | 16 + frontends/calculator/CEdev/lib/shared/snot.src | 16 + frontends/calculator/CEdev/lib/shared/sor.src | 20 + frontends/calculator/CEdev/lib/shared/sprintf.src | 7 + frontends/calculator/CEdev/lib/shared/sqrtf.src | 37 + frontends/calculator/CEdev/lib/shared/srand.src | 12 + frontends/calculator/CEdev/lib/shared/srandom.src | 29 + frontends/calculator/CEdev/lib/shared/srems.src | 21 + frontends/calculator/CEdev/lib/shared/sremu.src | 21 + frontends/calculator/CEdev/lib/shared/sshl.src | 22 + frontends/calculator/CEdev/lib/shared/sshrs.src | 20 + frontends/calculator/CEdev/lib/shared/sshru.src | 20 + frontends/calculator/CEdev/lib/shared/sstix.src | 19 + frontends/calculator/CEdev/lib/shared/sstiy.src | 19 + frontends/calculator/CEdev/lib/shared/stoi.src | 16 + frontends/calculator/CEdev/lib/shared/stoiu.src | 16 + .../calculator/CEdev/lib/shared/strcasecmp.src | 6 + frontends/calculator/CEdev/lib/shared/strcat.src | 6 + frontends/calculator/CEdev/lib/shared/strchr.src | 6 + frontends/calculator/CEdev/lib/shared/strcmp.src | 6 + frontends/calculator/CEdev/lib/shared/strcpy.src | 6 + frontends/calculator/CEdev/lib/shared/strcspn.src | 6 + frontends/calculator/CEdev/lib/shared/strdup.src | 35 + frontends/calculator/CEdev/lib/shared/strlen.src | 6 + .../calculator/CEdev/lib/shared/strncasecmp.src | 6 + frontends/calculator/CEdev/lib/shared/strncat.src | 6 + frontends/calculator/CEdev/lib/shared/strncmp.src | 6 + frontends/calculator/CEdev/lib/shared/strncpy.src | 6 + frontends/calculator/CEdev/lib/shared/strndup.src | 46 + frontends/calculator/CEdev/lib/shared/strnlen.src | 27 + frontends/calculator/CEdev/lib/shared/strpbrk.src | 6 + frontends/calculator/CEdev/lib/shared/strrchr.src | 6 + frontends/calculator/CEdev/lib/shared/strspn.src | 5 + frontends/calculator/CEdev/lib/shared/strstr.src | 6 + frontends/calculator/CEdev/lib/shared/strtok.src | 5 + frontends/calculator/CEdev/lib/shared/strtol.src | 370 ++++ frontends/calculator/CEdev/lib/shared/strtoul.src | 403 +++++ frontends/calculator/CEdev/lib/shared/sxor.src | 18 + frontends/calculator/CEdev/lib/shared/tice.src | 241 +++ frontends/calculator/CEdev/lib/shared/tolower.src | 4 + frontends/calculator/CEdev/lib/shared/toupper.src | 4 + frontends/calculator/CEdev/lib/shared/udtoe.src | 411 +++++ frontends/calculator/CEdev/lib/shared/udtof.src | 982 +++++++++++ frontends/calculator/CEdev/lib/shared/udtog.src | 173 ++ frontends/calculator/CEdev/lib/shared/uitoa.src | 65 + frontends/calculator/CEdev/lib/shared/uldiv.src | 128 ++ frontends/calculator/CEdev/lib/shared/ultoa.src | 472 +++++ frontends/calculator/CEdev/lib/shared/uprint.src | 516 ++++++ frontends/calculator/CEdev/lib/shared/upscan.src | 802 +++++++++ frontends/calculator/CEdev/lib/shared/ureverse.src | 112 ++ frontends/calculator/CEdev/lib/shared/usb.src | 21 + frontends/calculator/CEdev/lib/shared/uscan.src | 1822 ++++++++++++++++++++ frontends/calculator/CEdev/lib/shared/usscan.src | 630 +++++++ frontends/calculator/CEdev/lib/shared/ustoa.src | 71 + frontends/calculator/CEdev/lib/shared/uuitoa.src | 64 + frontends/calculator/CEdev/lib/shared/uultoa.src | 326 ++++ frontends/calculator/CEdev/lib/shared/uustoa.src | 64 + frontends/calculator/CEdev/lib/shared/vsprintf.src | 64 + .../calculator/CEdev/lib/shared/zx7_Decompress.src | 117 ++ frontends/calculator/CEdev/lib/static/acos.src | 54 + frontends/calculator/CEdev/lib/static/asin.src | 178 ++ frontends/calculator/CEdev/lib/static/atan.src | 341 ++++ frontends/calculator/CEdev/lib/static/atan2.src | 179 ++ frontends/calculator/CEdev/lib/static/atof.src | 20 + frontends/calculator/CEdev/lib/static/ceil.src | 31 + frontends/calculator/CEdev/lib/static/cos.src | 33 + frontends/calculator/CEdev/lib/static/exp.src | 234 +++ frontends/calculator/CEdev/lib/static/fabs.src | 14 + frontends/calculator/CEdev/lib/static/floor.src | 114 ++ frontends/calculator/CEdev/lib/static/fmod.src | 135 ++ frontends/calculator/CEdev/lib/static/frexp.src | 141 ++ frontends/calculator/CEdev/lib/static/ldexp.src | 194 +++ frontends/calculator/CEdev/lib/static/log.src | 233 +++ frontends/calculator/CEdev/lib/static/log10.src | 48 + frontends/calculator/CEdev/lib/static/modf.src | 166 ++ frontends/calculator/CEdev/lib/static/pow.src | 187 ++ frontends/calculator/CEdev/lib/static/sin.src | 340 ++++ frontends/calculator/CEdev/lib/static/sinh.src | 377 ++++ frontends/calculator/CEdev/lib/static/sqrt.src | 83 + frontends/calculator/CEdev/lib/static/strtod.src | 534 ++++++ frontends/calculator/CEdev/lib/static/tan.src | 330 ++++ frontends/calculator/CEdev/lib/static/tanh.src | 129 ++ frontends/calculator/CEdev/lib/static/ufltinfo.src | 511 ++++++ frontends/calculator/CEdev/lib/static/ufltrnd.src | 210 +++ 304 files changed, 20949 insertions(+) create mode 100644 frontends/calculator/CEdev/lib/ccleanup.src create mode 100644 frontends/calculator/CEdev/lib/cstartup.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fclose.src create mode 100644 frontends/calculator/CEdev/lib/fileio/feof.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fgetc.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fgets.src create mode 100644 frontends/calculator/CEdev/lib/fileio/files.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fopen.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fputc.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fputs.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fread.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fseek.src create mode 100644 frontends/calculator/CEdev/lib/fileio/ftell.src create mode 100644 frontends/calculator/CEdev/lib/fileio/fwrite.src create mode 100644 frontends/calculator/CEdev/lib/fileio/remove.src create mode 100644 frontends/calculator/CEdev/lib/libheader.src create mode 100644 frontends/calculator/CEdev/lib/libload.lib create mode 100644 frontends/calculator/CEdev/lib/libload/fileioc.lib create mode 100644 frontends/calculator/CEdev/lib/libload/graphx.lib create mode 100644 frontends/calculator/CEdev/lib/libload/keypadc.lib create mode 100644 frontends/calculator/CEdev/lib/linked/acos.src create mode 100644 frontends/calculator/CEdev/lib/linked/asin.src create mode 100644 frontends/calculator/CEdev/lib/linked/atan.src create mode 100644 frontends/calculator/CEdev/lib/linked/atan2.src create mode 100644 frontends/calculator/CEdev/lib/linked/atof.src create mode 100644 frontends/calculator/CEdev/lib/linked/ceil.src create mode 100644 frontends/calculator/CEdev/lib/linked/cos.src create mode 100644 frontends/calculator/CEdev/lib/linked/cosh.src create mode 100644 frontends/calculator/CEdev/lib/linked/exp.src create mode 100644 frontends/calculator/CEdev/lib/linked/fabs.src create mode 100644 frontends/calculator/CEdev/lib/linked/floor.src create mode 100644 frontends/calculator/CEdev/lib/linked/fmod.src create mode 100644 frontends/calculator/CEdev/lib/linked/frexp.src create mode 100644 frontends/calculator/CEdev/lib/linked/ldexp.src create mode 100644 frontends/calculator/CEdev/lib/linked/log.src create mode 100644 frontends/calculator/CEdev/lib/linked/log10.src create mode 100644 frontends/calculator/CEdev/lib/linked/modf.src create mode 100644 frontends/calculator/CEdev/lib/linked/pow.src create mode 100644 frontends/calculator/CEdev/lib/linked/sin.src create mode 100644 frontends/calculator/CEdev/lib/linked/sinh.src create mode 100644 frontends/calculator/CEdev/lib/linked/sqrt.src create mode 100644 frontends/calculator/CEdev/lib/linked/strtod.src create mode 100644 frontends/calculator/CEdev/lib/linked/tan.src create mode 100644 frontends/calculator/CEdev/lib/linked/tanh.src create mode 100644 frontends/calculator/CEdev/lib/linked/ufltinfo.src create mode 100644 frontends/calculator/CEdev/lib/linked/ufltrnd.src create mode 100644 frontends/calculator/CEdev/lib/shared/abort.src create mode 100644 frontends/calculator/CEdev/lib/shared/abs.src create mode 100644 frontends/calculator/CEdev/lib/shared/atoi.src create mode 100644 frontends/calculator/CEdev/lib/shared/atol.src create mode 100644 frontends/calculator/CEdev/lib/shared/atomic_load_32.src create mode 100644 frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src create mode 100644 frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src create mode 100644 frontends/calculator/CEdev/lib/shared/atos.src create mode 100644 frontends/calculator/CEdev/lib/shared/bdivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/bdivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/bldix.src create mode 100644 frontends/calculator/CEdev/lib/shared/bldiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/bmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/bmulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/brems.src create mode 100644 frontends/calculator/CEdev/lib/shared/bremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/bsearch.src create mode 100644 frontends/calculator/CEdev/lib/shared/bshl.src create mode 100644 frontends/calculator/CEdev/lib/shared/bshrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/bshru.src create mode 100644 frontends/calculator/CEdev/lib/shared/bstix.src create mode 100644 frontends/calculator/CEdev/lib/shared/bstiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/calloc.src create mode 100644 frontends/calculator/CEdev/lib/shared/case.src create mode 100644 frontends/calculator/CEdev/lib/shared/case16.src create mode 100644 frontends/calculator/CEdev/lib/shared/case16d.src create mode 100644 frontends/calculator/CEdev/lib/shared/case24.src create mode 100644 frontends/calculator/CEdev/lib/shared/case24d.src create mode 100644 frontends/calculator/CEdev/lib/shared/case8.src create mode 100644 frontends/calculator/CEdev/lib/shared/case8d.src create mode 100644 frontends/calculator/CEdev/lib/shared/debugger.src create mode 100644 frontends/calculator/CEdev/lib/shared/delay.src create mode 100644 frontends/calculator/CEdev/lib/shared/div.src create mode 100644 frontends/calculator/CEdev/lib/shared/dzx7_standard.src create mode 100644 frontends/calculator/CEdev/lib/shared/dzx7_turbo.src create mode 100644 frontends/calculator/CEdev/lib/shared/finite.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpadd.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpcmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpdata.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpdiv.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpftol.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpltof.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpmul.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpneg.src create mode 100644 frontends/calculator/CEdev/lib/shared/fppack.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpsub.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpultof.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpupop1.src create mode 100644 frontends/calculator/CEdev/lib/shared/fpupop2.src create mode 100644 frontends/calculator/CEdev/lib/shared/frameset.src create mode 100644 frontends/calculator/CEdev/lib/shared/frameset0.src create mode 100644 frontends/calculator/CEdev/lib/shared/frbmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/frbtof.src create mode 100644 frontends/calculator/CEdev/lib/shared/free.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftob.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftoi.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftos.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftoub.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftoui.src create mode 100644 frontends/calculator/CEdev/lib/shared/frftous.src create mode 100644 frontends/calculator/CEdev/lib/shared/frimuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/frimulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/fritof.src create mode 100644 frontends/calculator/CEdev/lib/shared/frsmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/frsmulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/frstof.src create mode 100644 frontends/calculator/CEdev/lib/shared/frubtof.src create mode 100644 frontends/calculator/CEdev/lib/shared/fruitof.src create mode 100644 frontends/calculator/CEdev/lib/shared/frustof.src create mode 100644 frontends/calculator/CEdev/lib/shared/gamma.src create mode 100644 frontends/calculator/CEdev/lib/shared/getstringinput.src create mode 100644 frontends/calculator/CEdev/lib/shared/iand.src create mode 100644 frontends/calculator/CEdev/lib/shared/icmpzero.src create mode 100644 frontends/calculator/CEdev/lib/shared/idivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/idivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/ildix.src create mode 100644 frontends/calculator/CEdev/lib/shared/ildiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/imuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/imulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/indcall.src create mode 100644 frontends/calculator/CEdev/lib/shared/ineg.src create mode 100644 frontends/calculator/CEdev/lib/shared/inot.src create mode 100644 frontends/calculator/CEdev/lib/shared/interrupts.src create mode 100644 frontends/calculator/CEdev/lib/shared/ior.src create mode 100644 frontends/calculator/CEdev/lib/shared/irems.src create mode 100644 frontends/calculator/CEdev/lib/shared/iremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/isalnum.src create mode 100644 frontends/calculator/CEdev/lib/shared/isalpha.src create mode 100644 frontends/calculator/CEdev/lib/shared/isascii.src create mode 100644 frontends/calculator/CEdev/lib/shared/iscntrl.src create mode 100644 frontends/calculator/CEdev/lib/shared/isdigit.src create mode 100644 frontends/calculator/CEdev/lib/shared/isgraph.src create mode 100644 frontends/calculator/CEdev/lib/shared/ishl.src create mode 100644 frontends/calculator/CEdev/lib/shared/ishrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/ishru.src create mode 100644 frontends/calculator/CEdev/lib/shared/isinf.src create mode 100644 frontends/calculator/CEdev/lib/shared/islower.src create mode 100644 frontends/calculator/CEdev/lib/shared/isnan.src create mode 100644 frontends/calculator/CEdev/lib/shared/isprint.src create mode 100644 frontends/calculator/CEdev/lib/shared/ispunct.src create mode 100644 frontends/calculator/CEdev/lib/shared/isspace.src create mode 100644 frontends/calculator/CEdev/lib/shared/istix.src create mode 100644 frontends/calculator/CEdev/lib/shared/istiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/isupper.src create mode 100644 frontends/calculator/CEdev/lib/shared/isxdigit.src create mode 100644 frontends/calculator/CEdev/lib/shared/itol.src create mode 100644 frontends/calculator/CEdev/lib/shared/ixor.src create mode 100644 frontends/calculator/CEdev/lib/shared/labs.src create mode 100644 frontends/calculator/CEdev/lib/shared/ladd.src create mode 100644 frontends/calculator/CEdev/lib/shared/land.src create mode 100644 frontends/calculator/CEdev/lib/shared/lcmps.src create mode 100644 frontends/calculator/CEdev/lib/shared/lcmpu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lcmpzero.src create mode 100644 frontends/calculator/CEdev/lib/shared/ldiv.src create mode 100644 frontends/calculator/CEdev/lib/shared/ldivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/ldivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lldix.src create mode 100644 frontends/calculator/CEdev/lib/shared/lldiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/lmuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/lmulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lneg.src create mode 100644 frontends/calculator/CEdev/lib/shared/lnot.src create mode 100644 frontends/calculator/CEdev/lib/shared/log2.src create mode 100644 frontends/calculator/CEdev/lib/shared/longjmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/lor.src create mode 100644 frontends/calculator/CEdev/lib/shared/lrems.src create mode 100644 frontends/calculator/CEdev/lib/shared/lremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/lshl.src create mode 100644 frontends/calculator/CEdev/lib/shared/lshrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/lshru.src create mode 100644 frontends/calculator/CEdev/lib/shared/lstix.src create mode 100644 frontends/calculator/CEdev/lib/shared/lstiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/lsub.src create mode 100644 frontends/calculator/CEdev/lib/shared/lxor.src create mode 100644 frontends/calculator/CEdev/lib/shared/malloc.src create mode 100644 frontends/calculator/CEdev/lib/shared/maptab.src create mode 100644 frontends/calculator/CEdev/lib/shared/memchr.src create mode 100644 frontends/calculator/CEdev/lib/shared/memcmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/memcpy.src create mode 100644 frontends/calculator/CEdev/lib/shared/memmove.src create mode 100644 frontends/calculator/CEdev/lib/shared/memset.src create mode 100644 frontends/calculator/CEdev/lib/shared/os.src create mode 100644 frontends/calculator/CEdev/lib/shared/os_textbuffer.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_globals.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_putch.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_putstring.src create mode 100644 frontends/calculator/CEdev/lib/shared/print_sputch.src create mode 100644 frontends/calculator/CEdev/lib/shared/qsort.src create mode 100644 frontends/calculator/CEdev/lib/shared/rand.src create mode 100644 frontends/calculator/CEdev/lib/shared/random.src create mode 100644 frontends/calculator/CEdev/lib/shared/realloc.src create mode 100644 frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src create mode 100644 frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src create mode 100644 frontends/calculator/CEdev/lib/shared/removebreakpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/removewatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/round.src create mode 100644 frontends/calculator/CEdev/lib/shared/sand.src create mode 100644 frontends/calculator/CEdev/lib/shared/sbrk.src create mode 100644 frontends/calculator/CEdev/lib/shared/scmpzero.src create mode 100644 frontends/calculator/CEdev/lib/shared/sdivs.src create mode 100644 frontends/calculator/CEdev/lib/shared/sdivu.src create mode 100644 frontends/calculator/CEdev/lib/shared/seqcase.src create mode 100644 frontends/calculator/CEdev/lib/shared/seqcased.src create mode 100644 frontends/calculator/CEdev/lib/shared/setbreakpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setflag.src create mode 100644 frontends/calculator/CEdev/lib/shared/setjmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setwatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src create mode 100644 frontends/calculator/CEdev/lib/shared/sldix.src create mode 100644 frontends/calculator/CEdev/lib/shared/sldiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/smuls.src create mode 100644 frontends/calculator/CEdev/lib/shared/smulu.src create mode 100644 frontends/calculator/CEdev/lib/shared/sneg.src create mode 100644 frontends/calculator/CEdev/lib/shared/snot.src create mode 100644 frontends/calculator/CEdev/lib/shared/sor.src create mode 100644 frontends/calculator/CEdev/lib/shared/sprintf.src create mode 100644 frontends/calculator/CEdev/lib/shared/sqrtf.src create mode 100644 frontends/calculator/CEdev/lib/shared/srand.src create mode 100644 frontends/calculator/CEdev/lib/shared/srandom.src create mode 100644 frontends/calculator/CEdev/lib/shared/srems.src create mode 100644 frontends/calculator/CEdev/lib/shared/sremu.src create mode 100644 frontends/calculator/CEdev/lib/shared/sshl.src create mode 100644 frontends/calculator/CEdev/lib/shared/sshrs.src create mode 100644 frontends/calculator/CEdev/lib/shared/sshru.src create mode 100644 frontends/calculator/CEdev/lib/shared/sstix.src create mode 100644 frontends/calculator/CEdev/lib/shared/sstiy.src create mode 100644 frontends/calculator/CEdev/lib/shared/stoi.src create mode 100644 frontends/calculator/CEdev/lib/shared/stoiu.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcasecmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcat.src create mode 100644 frontends/calculator/CEdev/lib/shared/strchr.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcpy.src create mode 100644 frontends/calculator/CEdev/lib/shared/strcspn.src create mode 100644 frontends/calculator/CEdev/lib/shared/strdup.src create mode 100644 frontends/calculator/CEdev/lib/shared/strlen.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncasecmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncat.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncmp.src create mode 100644 frontends/calculator/CEdev/lib/shared/strncpy.src create mode 100644 frontends/calculator/CEdev/lib/shared/strndup.src create mode 100644 frontends/calculator/CEdev/lib/shared/strnlen.src create mode 100644 frontends/calculator/CEdev/lib/shared/strpbrk.src create mode 100644 frontends/calculator/CEdev/lib/shared/strrchr.src create mode 100644 frontends/calculator/CEdev/lib/shared/strspn.src create mode 100644 frontends/calculator/CEdev/lib/shared/strstr.src create mode 100644 frontends/calculator/CEdev/lib/shared/strtok.src create mode 100644 frontends/calculator/CEdev/lib/shared/strtol.src create mode 100644 frontends/calculator/CEdev/lib/shared/strtoul.src create mode 100644 frontends/calculator/CEdev/lib/shared/sxor.src create mode 100644 frontends/calculator/CEdev/lib/shared/tice.src create mode 100644 frontends/calculator/CEdev/lib/shared/tolower.src create mode 100644 frontends/calculator/CEdev/lib/shared/toupper.src create mode 100644 frontends/calculator/CEdev/lib/shared/udtoe.src create mode 100644 frontends/calculator/CEdev/lib/shared/udtof.src create mode 100644 frontends/calculator/CEdev/lib/shared/udtog.src create mode 100644 frontends/calculator/CEdev/lib/shared/uitoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uldiv.src create mode 100644 frontends/calculator/CEdev/lib/shared/ultoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uprint.src create mode 100644 frontends/calculator/CEdev/lib/shared/upscan.src create mode 100644 frontends/calculator/CEdev/lib/shared/ureverse.src create mode 100644 frontends/calculator/CEdev/lib/shared/usb.src create mode 100644 frontends/calculator/CEdev/lib/shared/uscan.src create mode 100644 frontends/calculator/CEdev/lib/shared/usscan.src create mode 100644 frontends/calculator/CEdev/lib/shared/ustoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uuitoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uultoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/uustoa.src create mode 100644 frontends/calculator/CEdev/lib/shared/vsprintf.src create mode 100644 frontends/calculator/CEdev/lib/shared/zx7_Decompress.src create mode 100644 frontends/calculator/CEdev/lib/static/acos.src create mode 100644 frontends/calculator/CEdev/lib/static/asin.src create mode 100644 frontends/calculator/CEdev/lib/static/atan.src create mode 100644 frontends/calculator/CEdev/lib/static/atan2.src create mode 100644 frontends/calculator/CEdev/lib/static/atof.src create mode 100644 frontends/calculator/CEdev/lib/static/ceil.src create mode 100644 frontends/calculator/CEdev/lib/static/cos.src create mode 100644 frontends/calculator/CEdev/lib/static/exp.src create mode 100644 frontends/calculator/CEdev/lib/static/fabs.src create mode 100644 frontends/calculator/CEdev/lib/static/floor.src create mode 100644 frontends/calculator/CEdev/lib/static/fmod.src create mode 100644 frontends/calculator/CEdev/lib/static/frexp.src create mode 100644 frontends/calculator/CEdev/lib/static/ldexp.src create mode 100644 frontends/calculator/CEdev/lib/static/log.src create mode 100644 frontends/calculator/CEdev/lib/static/log10.src create mode 100644 frontends/calculator/CEdev/lib/static/modf.src create mode 100644 frontends/calculator/CEdev/lib/static/pow.src create mode 100644 frontends/calculator/CEdev/lib/static/sin.src create mode 100644 frontends/calculator/CEdev/lib/static/sinh.src create mode 100644 frontends/calculator/CEdev/lib/static/sqrt.src create mode 100644 frontends/calculator/CEdev/lib/static/strtod.src create mode 100644 frontends/calculator/CEdev/lib/static/tan.src create mode 100644 frontends/calculator/CEdev/lib/static/tanh.src create mode 100644 frontends/calculator/CEdev/lib/static/ufltinfo.src create mode 100644 frontends/calculator/CEdev/lib/static/ufltrnd.src (limited to 'frontends/calculator/CEdev/lib') diff --git a/frontends/calculator/CEdev/lib/ccleanup.src b/frontends/calculator/CEdev/lib/ccleanup.src new file mode 100644 index 0000000..6479ea0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/ccleanup.src @@ -0,0 +1,14 @@ +;------------------------------------------------------------------------------- +; Standard C Cleanup module +;------------------------------------------------------------------------------- + .def __ccleanup + + segment cleanup + .assume adl=1 + +__ccleanup: + res 4,(iy+9) ; onInterrupt,(iy+onFlags) + set 0,(iy+3) ; graphDraw,(iy+graphFlags) + call 020808h ; _ClrLCDFull + call 020828h ; _HomeUp + call 021A3Ch ; _DrawStatusBar diff --git a/frontends/calculator/CEdev/lib/cstartup.src b/frontends/calculator/CEdev/lib/cstartup.src new file mode 100644 index 0000000..816a138 --- /dev/null +++ b/frontends/calculator/CEdev/lib/cstartup.src @@ -0,0 +1,75 @@ +;------------------------------------------------------------------------------- +; Standard CE startup module definitions and references +;------------------------------------------------------------------------------- + + .ref _main + .ref __low_bss + .ref __len_bss + .ref _os_DisableHomeTextBuffer + .ref _os_EnableHomeTextBuffer + + .def _errno + .def _init + .def _exit + .def __exit + .def __exitsp + .def __errsp + + .assume adl=1 + +_errno equ 0D008DCh + +;------------------------------------------------------------------------------- + segment header + db 0efh + db 07bh + db 0 ; Magic byte recognition for C programs +_init: + +;------------------------------------------------------------------------------- + segment startup + + call 0020848h ; _RunInicOff, assumes iy = flags + call 00004F4h ; _usb_DisableTimer + di ; disable interrupts + call _os_DisableHomeTextBuffer + ld hl,0E00305h + push hl ; save flash wait state control port + ld a,(hl) + push af ; save flash wait states + ld (hl),h ; set flash wait states to 3; 1 was definitely + ; too low for some calcs, 2 is untested + push iy ; save iy (flags) + ld (__exitsp+1),sp ; save sp for exiting + ld bc,__len_bss + ld hl,__low_bss + push bc + push hl + call 0000B0h ; __memclear, clear BSS + ; args will get removed from stack on exit + call _main +__exit: +__exitsp: +__errsp: + ld sp,0 + pop iy ; iy = flags + pop af ; a = original flash wait states + ex (sp),hl ; hl = flash wait state control port, + ; save exit code + ld (hl),a ; restore flash wait states + call 00004F0h ; _usb_ResetTimer + call _os_EnableHomeTextBuffer + +;------------------------------------------------------------------------------- + segment exit + + pop hl ; hl = exit code + ret + +_exit: + pop hl + pop hl + jr __exit + +;------------------------------------------------------------------------------- + segment code diff --git a/frontends/calculator/CEdev/lib/fileio/fclose.src b/frontends/calculator/CEdev/lib/fileio/fclose.src new file mode 100644 index 0000000..c54496f --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fclose.src @@ -0,0 +1,53 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FCLOSE.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fclose(FILE *stream) { +_fclose: + LD HL,-1 + CALL __frameset +; 5 ti_var_t slot = stream->slot; + LD IY,(IX+6) + LD A,(IY+0) + LD (IX+-1),A +; 6 __stdio_files[slot].slot = 0; + UEXT HL + LD L,A + LD BC,___stdio_files + ADD HL,BC + LD IY,HL + LD (IY+0),0 +; 7 return ti_Close(slot); + LD C,(IX+-1) + LD B,0 + PUSH BC + CALL _ti_Close + POP BC +; 8 } + LD SP,IX + POP IX + RET + + +;**************************** _fclose *************************** +;Name Addr/Register Size Type +;_ti_Close IMPORT ----- function +;___stdio_files IMPORT 5 variable +;slot IX-1 1 variable +;stream IX+6 3 parameter + + +; Stack Frame Size: 10 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___stdio_files:ROM + XREF _ti_Close:ROM + XREF __frameset:ROM + XDEF _fclose + END diff --git a/frontends/calculator/CEdev/lib/fileio/feof.src b/frontends/calculator/CEdev/lib/fileio/feof.src new file mode 100644 index 0000000..595b256 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/feof.src @@ -0,0 +1,88 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FEOF.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int feof(FILE *stream) { +_feof: + LD HL,-7 + CALL __frameset +; 5 char a; +; 6 int sz; +; 7 +; 8 sz = fread(&a, 1, 1, stream); + LD BC,(IX+6) + PUSH BC + LD BC,1 + PUSH BC + PUSH BC + PEA IX+-1 + CALL _fread + POP BC + POP BC + POP BC + POP BC +; 9 fseek(stream, -sz, SEEK_CUR); + LD BC,HL + CALL __itol + LD (IX+-7),HL + LD HL,BC + LD E,A + CALL __lneg + LD C,E + LD DE,1 + PUSH DE + LD B,0 + PUSH BC + PUSH HL + LD BC,(IX+6) + PUSH BC + CALL _fseek + POP BC + POP BC + POP BC + POP BC +; 10 return !sz; + LD HL,(IX+-7) + CALL __icmpzero + JR NZ,L_1 +; 11 } + LD BC,1 + LD (IX+-4),BC + JR L_2 +L_1: + LD BC,0 + LD (IX+-4),BC +L_2: + LD HL,(IX+-4) + LD SP,IX + POP IX + RET + + +;**************************** _feof *************************** +;Name Addr/Register Size Type +;_fseek IMPORT ----- function +;_fread IMPORT ----- function +;sz IX-7 3 variable +;temp3 IX-4 3 variable +;a IX-1 1 variable +;stream IX+6 3 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + XREF _fseek:ROM + XREF _fread:ROM + XREF __lneg:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _feof + END diff --git a/frontends/calculator/CEdev/lib/fileio/fgetc.src b/frontends/calculator/CEdev/lib/fileio/fgetc.src new file mode 100644 index 0000000..098b5ee --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fgetc.src @@ -0,0 +1,39 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FGETC.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fgetc(FILE *stream) { +_fgetc: + CALL __frameset0 +; 5 return ti_GetC(stream->slot); + LD IY,(IX+6) + LD C,(IY+0) + LD B,0 + PUSH BC + CALL _ti_GetC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fgetc *************************** +;Name Addr/Register Size Type +;_ti_GetC IMPORT ----- function +;stream IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_GetC:ROM + XREF __frameset0:ROM + XDEF _fgetc + END diff --git a/frontends/calculator/CEdev/lib/fileio/fgets.src b/frontends/calculator/CEdev/lib/fileio/fgets.src new file mode 100644 index 0000000..22e9fbf --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fgets.src @@ -0,0 +1,121 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FGETS.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 char *fgets(char *str, int num, FILE *stream) { +_fgets: + LD HL,-9 + CALL __frameset +; 5 int c; +; 6 char *p = str; + LD BC,(IX+6) + LD (IX+-3),BC +; 7 +; 8 if (num == 1) { + LD HL,(IX+9) + LD BC,1 + OR A,A + SBC HL,BC + JR NZ,L_8 +; 9 *p = 0; + LD HL,(IX+6) + LD (HL),0 +; 10 return str; + LD HL,(IX+6) + JR L_13 +; 11 } +; 12 +; 13 for (; num > 1; num--) { +L_6: +; 14 if ((c = fgetc(stream)) == EOF) { + LD BC,(IX+12) + PUSH BC + CALL _fgetc + POP BC + LD (IX+-6),HL + LD BC,16777215 + OR A,A + SBC HL,BC + JR Z,L_11 +; 15 break; +; 16 } +; 17 *p++ = c; + LD BC,(IX+-3) + LD (IX+-9),BC + LD A,(IX+-6) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 18 if (c == '\n') { + LD HL,(IX+-6) + OR A,A + LD BC,10 + SBC HL,BC + JR Z,L_11 + LD BC,(IX+9) + DEC BC + LD (IX+9),BC +; 19 break; +; 20 } +; 21 } +L_8: + LD BC,(IX+9) + LD HL,1 + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_6 +L_11: +; 22 +; 23 if (p == str) { + LD BC,(IX+6) + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR NZ,L_12 + OR A,A +; 24 return NULL; + SBC HL,HL + JR L_13 +; 25 } +L_12: +; 26 +; 27 *p = 0; + LD HL,(IX+-3) + LD (HL),0 +; 28 +; 29 return str; + LD HL,(IX+6) +; 30 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _fgets *************************** +;Name Addr/Register Size Type +;_fgetc IMPORT ----- function +;c IX-6 3 variable +;p IX-3 3 variable +;stream IX+12 3 parameter +;num IX+9 3 parameter +;str IX+6 3 parameter + + +; Stack Frame Size: 24 (bytes) +; Spill Code: 0 (instruction) + + + XREF _fgetc:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XDEF _fgets + END diff --git a/frontends/calculator/CEdev/lib/fileio/files.src b/frontends/calculator/CEdev/lib/fileio/files.src new file mode 100644 index 0000000..ccfec99 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/files.src @@ -0,0 +1,13 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FILES.C" + .assume ADL=1 + SEGMENT BSS +___stdio_files: + DS 5 + XDEF ___stdio_files +; 1 #include +; 2 +; 3 FILE __stdio_files[FOPEN_MAX]; + END diff --git a/frontends/calculator/CEdev/lib/fileio/fopen.src b/frontends/calculator/CEdev/lib/fileio/fopen.src new file mode 100644 index 0000000..edf6196 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fopen.src @@ -0,0 +1,71 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FOPEN.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 FILE *fopen(const char *filename, const char *mode) { +_fopen: + LD HL,-1 + CALL __frameset +; 5 ti_var_t f = ti_Open(filename, mode); + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _ti_Open + POP BC + POP BC + LD (IX+-1),A +; 6 if (!f) { + OR A,A + JR NZ,L_1 + OR A,A +; 7 return NULL; + SBC HL,HL + JR L_2 +; 8 } +L_1: +; 9 __stdio_files[(unsigned char)f].slot = f; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,___stdio_files + ADD HL,BC + LD IY,HL + LD A,(IX+-1) + LD (IY+0),A +; 10 +; 11 return &__stdio_files[f]; + LD A,(IX+-1) + UEXT HL + LD L,A + ADD HL,BC +; 12 } +L_2: + LD SP,IX + POP IX + RET + + +;**************************** _fopen *************************** +;Name Addr/Register Size Type +;___stdio_files IMPORT 5 variable +;_ti_Open IMPORT ----- function +;f IX-1 1 variable +;mode IX+9 3 parameter +;filename IX+6 3 parameter + + +; Stack Frame Size: 13 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___stdio_files:ROM + XREF _ti_Open:ROM + XREF __frameset:ROM + XDEF _fopen + END diff --git a/frontends/calculator/CEdev/lib/fileio/fputc.src b/frontends/calculator/CEdev/lib/fileio/fputc.src new file mode 100644 index 0000000..0f3a059 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fputc.src @@ -0,0 +1,43 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FPUTC.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fputc(int c, FILE *stream) { +_fputc: + CALL __frameset0 +; 5 return ti_PutC((char)c, stream->slot); + LD IY,(IX+9) + LD C,(IY+0) + LD B,0 + PUSH BC + LD C,(IX+6) + PUSH BC + CALL _ti_PutC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fputc *************************** +;Name Addr/Register Size Type +;_ti_PutC IMPORT ----- function +;stream IX+9 3 parameter +;c IX+6 3 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_PutC:ROM + XREF __frameset0:ROM + XDEF _fputc + END diff --git a/frontends/calculator/CEdev/lib/fileio/fputs.src b/frontends/calculator/CEdev/lib/fileio/fputs.src new file mode 100644 index 0000000..fb82f47 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fputs.src @@ -0,0 +1,101 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FPUTS.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fputs(const char *str, FILE *stream) { +_fputs: + LD HL,-5 + CALL __frameset +; 5 unsigned char slot = stream->slot; + LD IY,(IX+9) + LD A,(IY+0) + LD (IX+-1),A +; 6 unsigned int i = 0; + LD BC,0 + LD (IX+-4),BC +; 7 char c; +; 8 +; 9 while((c = str[i])) { + JR L_3 +L_4: +; 10 if(ti_PutC(c, slot) == EOF) { + LD C,(IX+-1) + LD B,0 + PUSH BC + LD C,(IX+-5) + PUSH BC + CALL _ti_PutC + POP BC + POP BC + LD BC,16777215 + OR A,A + SBC HL,BC + JR NZ,L_2 +; 11 return EOF; + LD HL,16777215 + JR L_8 +; 12 } +L_2: +; 13 i++; + LD BC,(IX+-4) + INC BC + LD (IX+-4),BC +; 14 } +L_3: + LD BC,(IX+-4) + LD HL,(IX+6) + ADD HL,BC + LD A,(HL) + LD (IX+-5),A + OR A,A + JR NZ,L_4 +; 15 if(ti_PutC('\n', slot) == EOF) { + LD C,(IX+-1) + LD B,0 + PUSH BC + LD BC,10 + PUSH BC + CALL _ti_PutC + POP BC + POP BC + LD BC,16777215 + OR A,A + SBC HL,BC + JR NZ,L_7 +; 16 return EOF; + LD HL,16777215 + JR L_8 +; 17 } +L_7: +; 18 return 1; + LD HL,1 +; 19 } +L_8: + LD SP,IX + POP IX + RET + + +;**************************** _fputs *************************** +;Name Addr/Register Size Type +;_ti_PutC IMPORT ----- function +;c IX-5 1 variable +;i IX-4 3 variable +;slot IX-1 1 variable +;stream IX+9 3 parameter +;str IX+6 3 parameter + + +; Stack Frame Size: 17 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_PutC:ROM + XREF __frameset:ROM + XDEF _fputs + END diff --git a/frontends/calculator/CEdev/lib/fileio/fread.src b/frontends/calculator/CEdev/lib/fileio/fread.src new file mode 100644 index 0000000..4e93f42 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fread.src @@ -0,0 +1,51 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FREAD.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 size_t fread(void *ptr, size_t size, size_t count, FILE *stream) { +_fread: + CALL __frameset0 +; 5 return ti_Read(ptr, size, count, stream->slot); + LD IY,(IX+15) + LD C,(IY+0) + LD B,0 + PUSH BC + LD BC,(IX+12) + PUSH BC + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _ti_Read + POP BC + POP BC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fread *************************** +;Name Addr/Register Size Type +;_ti_Read IMPORT ----- function +;stream IX+15 3 parameter +;count IX+12 3 parameter +;size IX+9 3 parameter +;ptr IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Read:ROM + XREF __frameset0:ROM + XDEF _fread + END diff --git a/frontends/calculator/CEdev/lib/fileio/fseek.src b/frontends/calculator/CEdev/lib/fileio/fseek.src new file mode 100644 index 0000000..b6d0b33 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fseek.src @@ -0,0 +1,47 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FSEEK.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int fseek(FILE *stream, long int offset, int origin) { +_fseek: + CALL __frameset0 +; 5 return ti_Seek((int)offset, origin, stream->slot); + LD IY,(IX+6) + LD C,(IY+0) + LD B,0 + PUSH BC + LD BC,(IX+15) + PUSH BC + LD BC,(IX+9) + PUSH BC + CALL _ti_Seek + POP BC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fseek *************************** +;Name Addr/Register Size Type +;_ti_Seek IMPORT ----- function +;origin IX+15 3 parameter +;offset IX+9 4 parameter +;stream IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Seek:ROM + XREF __frameset0:ROM + XDEF _fseek + END diff --git a/frontends/calculator/CEdev/lib/fileio/ftell.src b/frontends/calculator/CEdev/lib/fileio/ftell.src new file mode 100644 index 0000000..2f77607 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/ftell.src @@ -0,0 +1,43 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FTELL.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 long int ftell(FILE *stream) { +_ftell: + CALL __frameset0 +; 5 return (long int)ti_Tell(stream->slot); + LD IY,(IX+6) + LD C,(IY+0) + LD B,0 + PUSH BC + CALL _ti_Tell + POP BC + LD BC,HL + CALL __stoiu + LD E,0 +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _ftell *************************** +;Name Addr/Register Size Type +;_ti_Tell IMPORT ----- function +;stream IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Tell:ROM + XREF __stoiu:ROM + XREF __frameset0:ROM + XDEF _ftell + END diff --git a/frontends/calculator/CEdev/lib/fileio/fwrite.src b/frontends/calculator/CEdev/lib/fileio/fwrite.src new file mode 100644 index 0000000..7432016 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/fwrite.src @@ -0,0 +1,51 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FWRITE.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream) { +_fwrite: + CALL __frameset0 +; 5 return ti_Write(ptr, size, count, stream->slot); + LD IY,(IX+15) + LD C,(IY+0) + LD B,0 + PUSH BC + LD BC,(IX+12) + PUSH BC + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _ti_Write + POP BC + POP BC + POP BC + POP BC +; 6 } + LD SP,IX + POP IX + RET + + +;**************************** _fwrite *************************** +;Name Addr/Register Size Type +;_ti_Write IMPORT ----- function +;stream IX+15 3 parameter +;count IX+12 3 parameter +;size IX+9 3 parameter +;ptr IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Write:ROM + XREF __frameset0:ROM + XDEF _fwrite + END diff --git a/frontends/calculator/CEdev/lib/fileio/remove.src b/frontends/calculator/CEdev/lib/fileio/remove.src new file mode 100644 index 0000000..7fb3763 --- /dev/null +++ b/frontends/calculator/CEdev/lib/fileio/remove.src @@ -0,0 +1,50 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\REMOVE.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 +; 4 int remove(const char *filename) { +_remove: + LD HL,-3 + CALL __frameset +; 5 return !ti_Delete(filename); + LD BC,(IX+6) + PUSH BC + CALL _ti_Delete + POP BC + CALL __icmpzero + JR NZ,L_1 +; 6 } + LD BC,1 + LD (IX+-3),BC + JR L_2 +L_1: + LD BC,0 + LD (IX+-3),BC +L_2: + LD HL,(IX+-3) + LD SP,IX + POP IX + RET + + +;**************************** _remove *************************** +;Name Addr/Register Size Type +;_ti_Delete IMPORT ----- function +;temp3 IX-3 3 variable +;filename IX+6 3 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _ti_Delete:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _remove + END diff --git a/frontends/calculator/CEdev/lib/libheader.src b/frontends/calculator/CEdev/lib/libheader.src new file mode 100644 index 0000000..bfd9183 --- /dev/null +++ b/frontends/calculator/CEdev/lib/libheader.src @@ -0,0 +1,55 @@ +;------------------------------------------------------------------------------- +; Libload launcher for shared libraries +;------------------------------------------------------------------------------- + .def __findlibload + + segment launcher + .assume adl=1 + +__findlibload: + call 020628h ; _pushop1 to save running program name + jr __tryfind +__inram: + call 021448h ; _arc_unarc +__tryfind: + ld hl,__libloadname-1 + call 020320h ; _mov9toop1 + ld a,015h ; appvarobj + ld (0D005F8h),a ; op1 + call 02050Ch ; _chkfindsym + jr c,__notfound + call 021F98h ; _chkinram + jr z,__inram ; if in ram, archive LibLoad and search again + ld hl,9+1+__libloadnamelen+2 + add hl,de + push hl + call 0205C4h ; _popop1 to restore running program name + pop hl ; start of loader (required to be in hl) + ld de,__relocationstart ; start of relocation data + jp (hl) ; jump to the loader -- it should take care of everything else +__notfound: + call 0205C4h ; _popop1 to restore running program name + call 020814h ; _clrscrn + call 020828h ; _homeup + ld hl,__missingappvar + call 0207C0h ; _puts + call 0207F0h ; _newline + ld hl,__webaddress + call 0207C0h ; _puts + jp 020D8Ch ; _getkey + + segment libs +__relocationstart: ; relocation data will be placed here + ;... + ;... + ;... + + segment data +__missingappvar: + db "Need " +__libloadname: + db "LibLoad" +__libloadnamelen := $-__libloadname + db 0 +__webaddress: + db "http://tiny.cc/clibs",0 diff --git a/frontends/calculator/CEdev/lib/libload.lib b/frontends/calculator/CEdev/lib/libload.lib new file mode 100644 index 0000000..16549cd --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload.lib @@ -0,0 +1 @@ +library "LibLoad", 30 diff --git a/frontends/calculator/CEdev/lib/libload/fileioc.lib b/frontends/calculator/CEdev/lib/libload/fileioc.lib new file mode 100644 index 0000000..73b0a24 --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload/fileioc.lib @@ -0,0 +1,35 @@ +library "FILEIOC", 4 + export ti_CloseAll ; 2 + export ti_Open ; 4 + export ti_OpenVar ; 6 + export ti_Close ; 8 + export ti_Write ; 10 + export ti_Read ; 12 + export ti_GetC ; 14 + export ti_PutC ; 16 + export ti_Delete ; 18 + export ti_DeleteVar ; 20 + export ti_Seek ; 22 + export ti_Resize ; 24 + export ti_IsArchived ; 26 + export ti_SetArchiveStatus ; 28 + export ti_Tell ; 30 + export ti_Rewind ; 32 + export ti_GetSize ; 34 + export ti_GetTokenString ; 36 + export ti_GetDataPtr ; 38 + export ti_Detect ; 40 + export ti_DetectVar ; 42 + export ti_SetVar ; 44 + export ti_StoVar ; 46 + export ti_RclVar ; 48 + export ti_AllocString ; 50 + export ti_AllocList ; 52 + export ti_AllocMatrix ; 54 + export ti_AllocCplxList ; 56 + export ti_AllocEqu ; 58 + export ti_DetectAny ; 60 + export ti_GetVATPtr ; 62 + export ti_GetName ; 64 + export ti_Rename ; 66 + export ti_RenameVar ; 68 diff --git a/frontends/calculator/CEdev/lib/libload/graphx.lib b/frontends/calculator/CEdev/lib/libload/graphx.lib new file mode 100644 index 0000000..58aafe8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload/graphx.lib @@ -0,0 +1,95 @@ +library "GRAPHX", 10 + export gfx_Begin ; 2 + export gfx_End ; 4 + export gfx_SetColor ; 6 + export gfx_SetDefaultPalette ; 8 + export gfx_SetPalette ; 10 + export gfx_FillScreen ; 12 + export gfx_SetPixel ; 14 + export gfx_GetPixel ; 16 + export gfx_GetDraw ; 18 + export gfx_SetDraw ; 20 + export gfx_SwapDraw ; 22 + export gfx_Blit ; 24 + export gfx_BlitLines ; 26 + export gfx_BlitRectangle ; 28 + export gfx_PrintChar ; 30 + export gfx_PrintInt ; 32 + export gfx_PrintUInt ; 34 + export gfx_PrintString ; 36 + export gfx_PrintStringXY ; 38 + export gfx_SetTextXY ; 40 + export gfx_SetTextBGColor ; 42 + export gfx_SetTextFGColor ; 44 + export gfx_SetTextTransparentColor ; 46 + export gfx_SetFontData ; 48 + export gfx_SetFontSpacing ; 50 + export gfx_SetMonospaceFont ; 52 + export gfx_GetStringWidth ; 54 + export gfx_GetCharWidth ; 56 + export gfx_GetTextX ; 58 + export gfx_GetTextY ; 60 + export gfx_Line ; 62 + export gfx_HorizLine ; 64 + export gfx_VertLine ; 66 + export gfx_Circle ; 68 + export gfx_FillCircle ; 70 + export gfx_Rectangle ; 72 + export gfx_FillRectangle ; 74 + export gfx_Line_NoClip ; 76 + export gfx_HorizLine_NoClip ; 78 + export gfx_VertLine_NoClip ; 80 + export gfx_FillCircle_NoClip ; 82 + export gfx_Rectangle_NoClip ; 84 + export gfx_FillRectangle_NoClip ; 86 + export gfx_SetClipRegion ; 88 + export gfx_GetClipRegion ; 90 + export gfx_ShiftDown ; 92 + export gfx_ShiftUp ; 94 + export gfx_ShiftLeft ; 96 + export gfx_ShiftRight ; 98 + export gfx_Tilemap ; 100 + export gfx_Tilemap_NoClip ; 102 + export gfx_TransparentTilemap ; 104 + export gfx_TransparentTilemap_NoClip ; 106 + export gfx_TilePtr ; 108 + export gfx_TilePtrMapped ; 110 + export gfx_Reserved ; 112 + export gfx_AllocSprite ; 114 + export gfx_Sprite ; 116 + export gfx_TransparentSprite ; 118 + export gfx_Sprite_NoClip ; 120 + export gfx_TransparentSprite_NoClip ; 122 + export gfx_GetSprite ; 124 + export gfx_ScaledSprite_NoClip ; 126 + export gfx_ScaledTransparentSprite_NoClip ; 128 + export gfx_FlipSpriteY ; 130 + export gfx_FlipSpriteX ; 132 + export gfx_RotateSpriteC ; 134 + export gfx_RotateSpriteCC ; 136 + export gfx_RotateSpriteHalf ; 138 + export gfx_Polygon ; 140 + export gfx_Polygon_NoClip ; 142 + export gfx_FillTriangle ; 144 + export gfx_FillTriangle_NoClip ; 146 + export gfx_Deprecated ; 148 + export gfx_SetTextScale ; 150 + export gfx_SetTransparentColor ; 152 + export gfx_ZeroScreen ; 154 + export gfx_SetTextConfig ; 156 + export gfx_GetSpriteChar ; 158 + export gfx_Lighten ; 160 + export gfx_Darken ; 162 + export gfx_SetFontHeight ; 164 + export gfx_ScaleSprite ; 166 + export gfx_FloodFill ; 168 + export gfx_RLETSprite ; 170 + export gfx_RLETSprite_NoClip ; 172 + export gfx_ConvertFromRLETSprite ; 174 + export gfx_ConvertToRLETSprite ; 176 + export gfx_ConvertToNewRLETSprite ; 178 + export gfx_RotateScaleSprite ; 180 + export gfx_RotatedScaledTransparentSprite_NoClip ; 182 + export gfx_RotatedScaledSprite_NoClip ; 184 + export gfx_SetCharData ; 186 + export gfx_Wait ; 188 diff --git a/frontends/calculator/CEdev/lib/libload/keypadc.lib b/frontends/calculator/CEdev/lib/libload/keypadc.lib new file mode 100644 index 0000000..89bc3ba --- /dev/null +++ b/frontends/calculator/CEdev/lib/libload/keypadc.lib @@ -0,0 +1,5 @@ +library "KEYPADC", 2 + export kb_Scan ; 2 + export kb_ScanGroup ; 4 + export kb_AnyKey ; 6 + export kb_Reset ; 8 diff --git a/frontends/calculator/CEdev/lib/linked/acos.src b/frontends/calculator/CEdev/lib/linked/acos.src new file mode 100644 index 0000000..bc55b66 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/acos.src @@ -0,0 +1,6 @@ + .def _acos + .assume adl=1 + +; double acos(double arg); + +_acos equ 022100h diff --git a/frontends/calculator/CEdev/lib/linked/asin.src b/frontends/calculator/CEdev/lib/linked/asin.src new file mode 100644 index 0000000..a24be1d --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/asin.src @@ -0,0 +1,6 @@ + .def _asin + .assume adl=1 + +; double asin(double arg); + +_asin equ 022104h diff --git a/frontends/calculator/CEdev/lib/linked/atan.src b/frontends/calculator/CEdev/lib/linked/atan.src new file mode 100644 index 0000000..6d4d027 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/atan.src @@ -0,0 +1,6 @@ + .def _atan + .assume adl=1 + +; double atan(double arg); + +_atan equ 022108h diff --git a/frontends/calculator/CEdev/lib/linked/atan2.src b/frontends/calculator/CEdev/lib/linked/atan2.src new file mode 100644 index 0000000..468720e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/atan2.src @@ -0,0 +1,6 @@ + .def _atan2 + .assume adl=1 + +; double atan2(double arg1,double arg2); + +_atan2 equ 02210Ch diff --git a/frontends/calculator/CEdev/lib/linked/atof.src b/frontends/calculator/CEdev/lib/linked/atof.src new file mode 100644 index 0000000..fb54801 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/atof.src @@ -0,0 +1,6 @@ + .def _atof + .assume adl=1 + +; double atof(char *str); + +_atof equ 022110h diff --git a/frontends/calculator/CEdev/lib/linked/ceil.src b/frontends/calculator/CEdev/lib/linked/ceil.src new file mode 100644 index 0000000..eace8a2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ceil.src @@ -0,0 +1,6 @@ + .def _ceil + .assume adl=1 + +; double ceil(double d); + +_ceil equ 022114h diff --git a/frontends/calculator/CEdev/lib/linked/cos.src b/frontends/calculator/CEdev/lib/linked/cos.src new file mode 100644 index 0000000..84978ed --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/cos.src @@ -0,0 +1,6 @@ + .def _cos + .assume adl=1 + +; double cos(double arg); + +_cos equ 02211Ch diff --git a/frontends/calculator/CEdev/lib/linked/cosh.src b/frontends/calculator/CEdev/lib/linked/cosh.src new file mode 100644 index 0000000..27bae21 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/cosh.src @@ -0,0 +1,6 @@ + .def _cosh + .assume adl=1 + +; double cosh(double arg); + +_cosh equ 022134h diff --git a/frontends/calculator/CEdev/lib/linked/exp.src b/frontends/calculator/CEdev/lib/linked/exp.src new file mode 100644 index 0000000..320de05 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/exp.src @@ -0,0 +1,6 @@ + .def _exp + .assume adl=1 + +; double exp(double arg); + +_exp equ 022124h diff --git a/frontends/calculator/CEdev/lib/linked/fabs.src b/frontends/calculator/CEdev/lib/linked/fabs.src new file mode 100644 index 0000000..0742ca8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/fabs.src @@ -0,0 +1,6 @@ + .def _fabs + .assume adl=1 + +; double fabs(double j); + +_fabs equ 0220F0h diff --git a/frontends/calculator/CEdev/lib/linked/floor.src b/frontends/calculator/CEdev/lib/linked/floor.src new file mode 100644 index 0000000..55aec80 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/floor.src @@ -0,0 +1,6 @@ + .def _floor + .assume adl=1 + +; double floor(double d); + +_floor equ 0220F4h diff --git a/frontends/calculator/CEdev/lib/linked/fmod.src b/frontends/calculator/CEdev/lib/linked/fmod.src new file mode 100644 index 0000000..ed4d764 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/fmod.src @@ -0,0 +1,6 @@ + .def _fmod + .assume adl=1 + +; double fmod(double x, double y); + +_fmod equ 0220FCh diff --git a/frontends/calculator/CEdev/lib/linked/frexp.src b/frontends/calculator/CEdev/lib/linked/frexp.src new file mode 100644 index 0000000..686089e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/frexp.src @@ -0,0 +1,6 @@ + .def _frexp + .assume adl=1 + +; double frexp( double value, int *pExponent ); + +_frexp equ 0220D8h diff --git a/frontends/calculator/CEdev/lib/linked/ldexp.src b/frontends/calculator/CEdev/lib/linked/ldexp.src new file mode 100644 index 0000000..009b9c1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ldexp.src @@ -0,0 +1,6 @@ + .def _ldexp + .assume adl=1 + +; double ldexp( double value, int power ) + +_ldexp equ 0220DCh diff --git a/frontends/calculator/CEdev/lib/linked/log.src b/frontends/calculator/CEdev/lib/linked/log.src new file mode 100644 index 0000000..70e698e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/log.src @@ -0,0 +1,6 @@ + .def _log + .assume adl=1 + +; double log( double arg ); + +_log equ 0220E4h diff --git a/frontends/calculator/CEdev/lib/linked/log10.src b/frontends/calculator/CEdev/lib/linked/log10.src new file mode 100644 index 0000000..32e0c1f --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/log10.src @@ -0,0 +1,6 @@ + .def _log10 + .assume adl=1 + +; double log10( double arg ); + +_log10 equ 0220E8h diff --git a/frontends/calculator/CEdev/lib/linked/modf.src b/frontends/calculator/CEdev/lib/linked/modf.src new file mode 100644 index 0000000..425a3b3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/modf.src @@ -0,0 +1,6 @@ + .def _modf + .assume adl=1 + +; double modf( double value, double *pIntegral ); + +_modf equ 0220ECh diff --git a/frontends/calculator/CEdev/lib/linked/pow.src b/frontends/calculator/CEdev/lib/linked/pow.src new file mode 100644 index 0000000..640eaad --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/pow.src @@ -0,0 +1,6 @@ + .def _pow + .assume adl=1 + +; double pow( double arg1, double arg2 ); + +_pow equ 0220F8h diff --git a/frontends/calculator/CEdev/lib/linked/sin.src b/frontends/calculator/CEdev/lib/linked/sin.src new file mode 100644 index 0000000..179d6be --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/sin.src @@ -0,0 +1,6 @@ + .def _sin + .assume adl=1 + +; double sin(double arg); + +_sin equ 022118h diff --git a/frontends/calculator/CEdev/lib/linked/sinh.src b/frontends/calculator/CEdev/lib/linked/sinh.src new file mode 100644 index 0000000..f82b60c --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/sinh.src @@ -0,0 +1,6 @@ + .def _sinh + .assume adl=1 + +; double sinh(double arg); + +_sinh equ 022130h diff --git a/frontends/calculator/CEdev/lib/linked/sqrt.src b/frontends/calculator/CEdev/lib/linked/sqrt.src new file mode 100644 index 0000000..f261f50 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/sqrt.src @@ -0,0 +1,6 @@ + .def _sqrt + .assume adl=1 + +; double sqrt( double value ); + +_sqrt equ 02213Ch diff --git a/frontends/calculator/CEdev/lib/linked/strtod.src b/frontends/calculator/CEdev/lib/linked/strtod.src new file mode 100644 index 0000000..0d4a6a1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/strtod.src @@ -0,0 +1,6 @@ + .def _strtod + .assume adl=1 + +; double strtod(char * str,char ** endptr); + +_strtod equ 0220E0h diff --git a/frontends/calculator/CEdev/lib/linked/tan.src b/frontends/calculator/CEdev/lib/linked/tan.src new file mode 100644 index 0000000..4cc5c30 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/tan.src @@ -0,0 +1,6 @@ + .def _tan + .assume adl=1 + +; double tan(double arg); + +_tan equ 022120h diff --git a/frontends/calculator/CEdev/lib/linked/tanh.src b/frontends/calculator/CEdev/lib/linked/tanh.src new file mode 100644 index 0000000..977ee2e --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/tanh.src @@ -0,0 +1,6 @@ + .def _tanh + .assume adl=1 + +; double tanh(double arg); + +_tanh equ 022138h diff --git a/frontends/calculator/CEdev/lib/linked/ufltinfo.src b/frontends/calculator/CEdev/lib/linked/ufltinfo.src new file mode 100644 index 0000000..bff9cea --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ufltinfo.src @@ -0,0 +1,7 @@ + .def __u_flt_info + .assume adl=1 + +; _u_flt_info(float val,struct flt_info * info); + +__u_flt_info equ 022128h + diff --git a/frontends/calculator/CEdev/lib/linked/ufltrnd.src b/frontends/calculator/CEdev/lib/linked/ufltrnd.src new file mode 100644 index 0000000..824adc2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/linked/ufltrnd.src @@ -0,0 +1,7 @@ + .def __u_flt_rnd + .assume adl=1 + +; void _u_flt_rnd(struct flt_info *info, char digits); + +__u_flt_rnd equ 02212Ch + diff --git a/frontends/calculator/CEdev/lib/shared/abort.src b/frontends/calculator/CEdev/lib/shared/abort.src new file mode 100644 index 0000000..b2d9648 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/abort.src @@ -0,0 +1,13 @@ +; --- +; triggers open debugger +; --- + + .def _abort + .ref __exit + .assume adl=1 + +_abort: + scf + sbc hl,hl + ld (hl),1 + jp __exit diff --git a/frontends/calculator/CEdev/lib/shared/abs.src b/frontends/calculator/CEdev/lib/shared/abs.src new file mode 100644 index 0000000..5dc8aa1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/abs.src @@ -0,0 +1,17 @@ + .def _abs + .assume adl=1 + +;int abs(int); + +_abs: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + sbc hl,de + ret p + ex de,hl + ret + diff --git a/frontends/calculator/CEdev/lib/shared/atoi.src b/frontends/calculator/CEdev/lib/shared/atoi.src new file mode 100644 index 0000000..2619388 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atoi.src @@ -0,0 +1,22 @@ + .ref _strtol + .def _atoi + .assume adl=1 + +; int atoi(char *cp); + +_atoi: + pop bc + pop de + push de + push bc + ld bc,10 + push bc + ld c,b + push bc + push de + call _strtol + pop de + pop bc + pop bc + ret + diff --git a/frontends/calculator/CEdev/lib/shared/atol.src b/frontends/calculator/CEdev/lib/shared/atol.src new file mode 100644 index 0000000..7bf22d7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atol.src @@ -0,0 +1,8 @@ + .ref _atoi + .def _atol + .assume adl=1 + +; long atol(char *cp); + +_atol equ _atoi + diff --git a/frontends/calculator/CEdev/lib/shared/atomic_load_32.src b/frontends/calculator/CEdev/lib/shared/atomic_load_32.src new file mode 100644 index 0000000..a49df22 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atomic_load_32.src @@ -0,0 +1,61 @@ +; --- +; uint32_t atomic_load_32(volatile uint32_t *p) +; --- + + .def _atomic_load_32 + .assume adl=1 + +_atomic_load_32: + pop hl + ex (sp),iy + push hl + ld c,0 +retry: +; Wait for a different (increasing) amount of time before each retry to prevent +; getting caught in an endless loop of the value changing between reads with a +; fixed period equal to the amount of time it takes for each retry + inc c + ld b,c +wait: + djnz wait +; Read the value twice. + lea hl,iy+3 + ; Time between first and last byte read: + ld de,(iy) ; 2R + ld a,(hl) ; + 1F+1R + cp a,(hl) ; + 1F+1R + ld hl,(iy) ; + 3F+3R + ; = 5F+7R + ; = 48cc (assuming F = R = 3) + ; = 1us (assuming 48MHz clock speed) + ; Don't need to worry about DMA, just + ; retry until not interrupted by DMA +; Retry if the values read differ. +; +; If the values differ, then the underlying value changed between reading the +; first byte of the first 32-bit read and the last byte of the second 32-bit +; read: +; * If a change occurs between the two 32-bit reads, then both values read +; remain valid. +; * If a change occurs in the middle of one of the 32-bit reads: +; * If the bytes already read change but the bytes yet to read do not +; change, then the value read is the valid value before the change. +; * If the bytes already read do not change but the yet still to read +; change, then the value read is the valid value after the change. +; * If the bytes already read and the bytes yet to read change, then the +; value read is an invalid mix of the values before and after the change. +; +; Without reading the value again, there is not enough information to determine +; if the third case occurred. If it did occur, then one of the values is +; invalid. But there is also not enough information to determine which is +; invalid, and therefore which is valid. So reading the value must be retried. +; +; (Furthermore, if a change occurs in the middle of both 32-bit reads and the +; bytes already read change in both, then both values read become invalid.) + jr nz,retry + sbc hl,de + jr nz,retry +; Values don't differ, good to go. + add hl,de + ld e,a ; euhl = value read + ret diff --git a/frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src b/frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src new file mode 100644 index 0000000..639eac1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atomic_load_decreasing_32.src @@ -0,0 +1,89 @@ +; --- +; uint32_t atomic_load_decreasing_32(volatile uint32_t *p) +; --- + + .def _atomic_load_decreasing_32 + .assume adl=1 + +_atomic_load_decreasing_32: + pop hl + ex (sp),iy + push hl +; Temporarily disable interrupts. + ld a,i + di +; Read the value twice. +; first value read = cude, second value read = auhl + ; Time between first and last byte read: + ld de,(iy) ; 2R + ld c,(iy+3) ; + 3F+1R + ld hl,(iy) ; + 3F+3R + ld a,(iy+3) ; + 3F+1R + ; = 9F+7R + ; = 56cc (assuming F = R = 3) + ; ~ 1.17us (assuming 48MHz clock speed) + ; + approximate worst-case LCD + USB DMA + ; ~ 5us +; Re-enable interrupts if they were previously enabled. + jp po,no_ei + ei +no_ei: +; Compare and return the greater of the two values read. +; +; If the values differ, then the underlying value changed between reading the +; first byte of the first 32-bit read and the last byte of the second 32-bit +; read: +; * If a change occurs between the two 32-bit reads, then both values read +; remain valid. +; * If a change occurs in the middle of one of the 32-bit reads: +; * If the bytes already read change but the bytes yet to read do not +; change, then the value read is the valid value before the change. +; * If the bytes already read do not change but the yet still to read +; change, then the value read is the valid value after the change. +; * If the bytes already read and the bytes yet to read change, then the +; value read is an invalid mix of the values before and after the change. +; +; If the final case did not occur, then both values read are valid. +; +; If the final case occurred for only the second value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; decreased value after the change. Regardless of the lower bytes, the valid, +; first value read will be greater than the invalid, second value read. +; +; If the final case occurred for only the first value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; decreased value after the change, while the remaining one to three lower bytes +; will reflect the value before the change. If it is assumed that the value +; decreased by less than 256, then the upper bytes must have decreased through +; borrow and the lower bytes of the valid, second value read will be greater +; than the lower bytes of the invalid, first value read. And because the full +; second value read will reflect the the decreased value after the change, and +; therefore the two values read will only differ in the lower bytes, it follows +; that the full, valid, second valid read will be greater than the full, +; invalid, first value read. (Note that this assertion can be extended to +; include 256 because only one byte would change, making this whole case +; unreachable.) +; +; If the third case occurred for both values read, then both are invalid. There +; is no reasonable way to detect this, so it is assumed that this did not occur. +; +; Combining all of these cases and assumptions, the greater of the two values +; read will always be valid. + or a,a + sbc hl,de + sbc a,c ; auhl = second value read + ; - first value read + jr c,swap +; second value read >= first value read +; ==> second value read is valid + add hl,de + adc a,c + ld e,a ; euhl = second value read + ret + +swap: +; second value read < first value read +; ==> first value read is valid + ex de,hl + ld e,c ; euhl = first value read + ret diff --git a/frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src b/frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src new file mode 100644 index 0000000..d8c871f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atomic_load_increasing_32.src @@ -0,0 +1,88 @@ +; --- +; uint32_t atomic_load_increasing_32(volatile uint32_t *p) +; --- + + .def _atomic_load_increasing_32 + .assume adl=1 + +_atomic_load_increasing_32: + pop hl + ex (sp),iy + push hl +; Temporarily disable interrupts. + ld a,i + di +; Read the value twice. +; first value read = cude, second value read = auhl + ; Time between first and last byte read: + ld de,(iy) ; 2R + ld c,(iy+3) ; + 3F+1R + ld hl,(iy) ; + 3F+3R + ld a,(iy+3) ; + 3F+1R + ; = 9F+7R + ; = 56cc (assuming F = R = 3) + ; ~ 1.17us (assuming 48MHz clock speed) + ; + approximate worst-case LCD + USB DMA + ; ~ 5us +; Re-enable interrupts if they were previously enabled. + jp po,no_ei + ei +no_ei: +; Compare and return the lesser of the two values read. +; +; If the values differ, then the underlying value changed between reading the +; first byte of the first 32-bit read and the last byte of the second 32-bit +; read: +; * If a change occurs between the two 32-bit reads, then both values read +; remain valid. +; * If a change occurs in the middle of one of the 32-bit reads: +; * If the bytes already read change but the bytes yet to read do not +; change, then the value read is the valid value before the change. +; * If the bytes already read do not change but the yet still to read +; change, then the value read is the valid value after the change. +; * If the bytes already read and the bytes yet to read change, then the +; value read is an invalid mix of the values before and after the change. +; +; If the final case did not occur, then both values read are valid. +; +; If the final case occurred for only the second value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; increased value after the change. Regardless of the lower bytes, the valid, +; first value read will be less than the invalid, second value read. +; +; If the final case occurred for only the first value read, then due to reading +; bytes in little-endian order, one to three upper bytes will reflect the +; increased value after the change, while the remaining one to three lower bytes +; will reflect the value before the change. If it is assumed that the value +; increased by less than 256, then the upper bytes must have increased through +; carry and the lower bytes of the valid, second value read will be less than +; the lower bytes of the invalid, first value read. And because the full second +; value read will reflect the the increased value after the change, and +; therefore the two values read will only differ in the lower bytes, it follows +; that the full, valid, second valid read will be less than the full, invalid, +; first value read. (Note that this assertion can be extended to include 256 +; because only one byte would change, making this whole case unreachable.) +; +; If the third case occurred for both values read, then both are invalid. There +; is no reasonable way to detect this, so it is assumed that this did not occur. +; +; Combining all of these cases and assumptions, the lesser of the two values +; read will always be valid. + or a,a + sbc hl,de + sbc a,c ; auhl = second value read + ; - first value read + jr c,no_swap +; second value read >= first value read +; ==> first value read is valid + ex de,hl + ld e,c ; euhl = first value read + ret + +no_swap: +; second value read < first value read +; ==> second value read is valid + add hl,de + adc a,c + ld e,a ; euhl = second value read + ret diff --git a/frontends/calculator/CEdev/lib/shared/atos.src b/frontends/calculator/CEdev/lib/shared/atos.src new file mode 100644 index 0000000..cb3403b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/atos.src @@ -0,0 +1,8 @@ + .ref _atoi + .def _atos + .assume adl=1 + +; short int atos(char *cp); + +_atos equ _atoi + diff --git a/frontends/calculator/CEdev/lib/shared/bdivs.src b/frontends/calculator/CEdev/lib/shared/bdivs.src new file mode 100644 index 0000000..1bd30b8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bdivs.src @@ -0,0 +1,44 @@ +; (c) Copyright 2001-2008 Zilog Inc. +;------------------------------------------------------------------------- +; Signed Byte Division. +; Input: +; Operand1: +; B : 8 bit dividend (numerator) +; +; Operand2: +; C : 8 bit divisor (denominator) +; +; Output: +; Result: A : 8 bit quotient +; Registers Used: +; d, e +;------------------------------------------------------------------------- + .ref __bdivu + .def __bdivs + .assume adl=1 + +__bdivs: + push bc + xor a,a + sub a,b + jp m,_L0 + ld b,a +_L0: + xor a,a + sub a,c + jp m,_L1 + ld c,a +_L1: + call __bdivu + pop bc + push hl + ld l,a + ld a,b + xor a,c + ld a,l + jp p,_L2 + neg +_L2: + pop hl + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bdivu.src b/frontends/calculator/CEdev/lib/shared/bdivu.src new file mode 100644 index 0000000..cd2b7d3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bdivu.src @@ -0,0 +1,41 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Byte Division. +; Input: +; Operand1: +; B : 8 bit dividend (numerator x) +; +; Operand2: +; C : 8 bit divisor (denominator y) +; +; Output: +; Result: A : 8 bit quotient +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bdivu + .assume adl=1 + +__bdivu: + push bc + push hl + ld h,b + xor a,a + ld b,8 ;i = 8 (bit counter) +loop: + sla h + rla + jr c,over + cp a,c + jr c,under +over: + sub a,c + inc h +under: + djnz loop + + ld a,h + pop hl + pop bc + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bldix.src b/frontends/calculator/CEdev/lib/shared/bldix.src new file mode 100644 index 0000000..6d3dbf7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bldix.src @@ -0,0 +1,25 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte load a,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: A : 8 bit +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bldix + .assume adl=1 + +__bldix: + push ix + push af ; Preserve flags + add ix,bc + pop af ; Restore flags + ld a,(ix) + pop ix + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bldiy.src b/frontends/calculator/CEdev/lib/shared/bldiy.src new file mode 100644 index 0000000..acda08a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bldiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte load a,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: A : 8 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __bldiy + .assume adl=1 + +__bldiy equ 0000FCh diff --git a/frontends/calculator/CEdev/lib/shared/bmuls.src b/frontends/calculator/CEdev/lib/shared/bmuls.src new file mode 100644 index 0000000..45d7111 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bmuls.src @@ -0,0 +1,25 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Byte Multiply +; Input: +; Operand1: +; A : 8 bit +; +; Operand2: +; B : 8 bit +; +; Output: +; Result: A : 8 bit product +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bmuls + .assume adl=1 + +__bmuls: + push bc + ld c,a + mlt bc + ld a,c + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/bmulu.src b/frontends/calculator/CEdev/lib/shared/bmulu.src new file mode 100644 index 0000000..20c27b5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bmulu.src @@ -0,0 +1,24 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Byte Multiply +; Input: +; Operand1: +; B : 8 bit +; +; Operand2: +; C : 8 bit +; +; Output: +; Result: A : 8 bit product +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bmulu + .assume adl=1 + +__bmulu: + push bc + mlt bc + ld a,c + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/brems.src b/frontends/calculator/CEdev/lib/shared/brems.src new file mode 100644 index 0000000..3687ced --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/brems.src @@ -0,0 +1,40 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Byte Modulus +; Input: +; Operand1: +; A : 8 bit dividend (numerator) +; +; Operand2: +; C : 8 bit divisor (denominator) +; +; Output: +; Result: A : 8 bit modulus +; Registers Used: +; +;------------------------------------------------------------------------- + .ref __bremu + .def __brems + .assume adl=1 + +__brems: + push bc + ld b,a + bit 7,c + jr z,skip1 + ld a,c + neg + ld c,a +skip1: + ld a,b + bit 7,a + jr z,skip2 + neg +skip2: + call __bremu + bit 7,b + jr z,skip3 + neg +skip3: + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/bremu.src b/frontends/calculator/CEdev/lib/shared/bremu.src new file mode 100644 index 0000000..4c60bc8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bremu.src @@ -0,0 +1,39 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Byte Modulus +; Input: +; Operand1: +; A : 8 bit dividend (numerator) +; +; Operand2: +; C : 8 bit divisor (denominator) +; +; Output: +; Result: A : 8 bit modulus +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bremu + .assume adl=1 + +__bremu: + push bc + push hl + ld h,a + xor a,a + ld b,8 +loop: + sla h + rla + jr c,over + cp a,c + jr c,under +over: + sub a,c + inc h +under: + djnz loop + pop hl + pop bc + ret + diff --git a/frontends/calculator/CEdev/lib/shared/bsearch.src b/frontends/calculator/CEdev/lib/shared/bsearch.src new file mode 100644 index 0000000..6ec3acc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bsearch.src @@ -0,0 +1,195 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\BSEARCH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 /************************************************* +; 13 * +; 14 * bsearch - binary search +; 15 * +; 16 * Inputs: +; 17 * key - key to search for +; 18 * base - base of array to be sorted +; 19 * num - number of elements +; 20 * width - size of each element +; 21 * comp - pointer to function for comparison +; 22 * +; 23 * Returns: +; 24 * nothing +; 25 * +; 26 *************************************************/ +; 27 void *bsearch(char *key, +; 28 char *base, +; 29 size_t num, +; 30 size_t width, +; 31 int (*comp)(void *,void *)) +; 32 { +_bsearch: + LD HL,-18 + CALL __frameset +; 33 unsigned int mid; +; 34 unsigned int low; +; 35 unsigned int high; +; 36 int d; +; 37 unsigned int pmid; +; 38 char *addr; +; 39 +; 40 /* make high the nearest power of two for */ +; 41 /* efficiency and to ensure we always */ +; 42 /* terminate properly. */ +; 43 /* Note that high is always higher */ +; 44 /* than it should be so that we will */ +; 45 /* not fail to find the last entry in the */ +; 46 /* table. */ +; 47 +; 48 high = 0x0001; + LD BC,1 + LD (IX+-6),BC +; 49 while (high <= num) + JR L_0 +L_1: +; 50 high <<= 1; + LD HL,(IX+-6) + ADD HL,HL + LD (IX+-6),HL +L_0: + LD BC,(IX+-6) + LD HL,(IX+12) + OR A,A + SBC HL,BC + JR NC,L_1 +; 51 low = 0; + LD BC,0 + LD (IX+-9),BC +; 52 mid = 0; + LD (IX+-3),BC +; 53 +; 54 /* begin the search */ +; 55 +; 56 for(;;) { +L_11: +; 57 pmid = mid; + LD BC,(IX+-3) + LD (IX+-18),BC +; 58 mid = ((high - low) >> 1) + low; + LD BC,(IX+-9) + LD HL,(IX+-6) + OR A,A + SBC HL,BC + LD A,1 + CALL __ishru_b + LD BC,(IX+-9) + ADD HL,BC + LD (IX+-3),HL +; 59 +; 60 if (pmid == mid) /* terminate because we're */ + LD BC,HL + LD HL,(IX+-18) + OR A,A + SBC HL,BC + JR NZ,L_5 + OR A,A +; 61 return(NULL); /* oscilating. */ + SBC HL,HL + JR L_13 +L_5: +; 62 +; 63 if (mid >= num) { /* we're above the array. */ + LD BC,(IX+12) + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR C,L_6 +; 64 high = mid; /* pretend element is larger*/ + LD BC,(IX+-3) + LD (IX+-6),BC +; 65 continue; /* than the key. */ + JR L_11 +; 66 } +L_6: +; 67 +; 68 d = (*comp)(key,addr = base + mid * width); + LD HL,(IX+-3) + LD BC,(IX+15) + CALL __imulu + LD BC,(IX+9) + ADD HL,BC + LD (IX+-15),HL + LD IY,(IX+18) + LD BC,HL + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __indcall + POP BC + POP BC + LD (IX+-12),HL +; 69 if (d == 0) /* we found it */ + CALL __icmpzero + JR NZ,L_10 +; 70 return(addr); + LD HL,(IX+-15) + JR L_13 +L_10: +; 71 if (d < 0) /* key is less than mid, */ + LD HL,(IX+-12) + CALL __icmpzero + CALL __setflag + JP P,L_9 +; 72 high = mid; /* set high to mid. */ + LD BC,(IX+-3) + LD (IX+-6),BC +; 73 else /* key is greater than mid, */ + JR L_11 +L_9: +; 74 low = mid; /* set low to mid. */ + LD BC,(IX+-3) + LD (IX+-9),BC +; 75 } + JR L_11 +; 76 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _bsearch *************************** +;Name Addr/Register Size Type +;pmid IX-18 3 variable +;addr IX-15 3 variable +;d IX-12 3 variable +;low IX-9 3 variable +;high IX-6 3 variable +;mid IX-3 3 variable +;comp IX+18 3 parameter +;width IX+15 3 parameter +;num IX+12 3 parameter +;base IX+9 3 parameter +;key IX+6 3 parameter + + +; Stack Frame Size: 39 (bytes) +; Spill Code: 0 (instruction) + + + XREF __indcall:ROM + XREF __imulu:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __ishru_b:ROM + XDEF _bsearch + END diff --git a/frontends/calculator/CEdev/lib/shared/bshl.src b/frontends/calculator/CEdev/lib/shared/bshl.src new file mode 100644 index 0000000..9c6c14b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bshl.src @@ -0,0 +1,18 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Byte Shift Left +; Input: +; Operand1: +; A : 8 bit number to shift +; Operand2: +; B : 8 bit shift count +; +; Output: +; Result: A : 8 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __bshl + .assume adl=1 + +__bshl equ 000100h diff --git a/frontends/calculator/CEdev/lib/shared/bshrs.src b/frontends/calculator/CEdev/lib/shared/bshrs.src new file mode 100644 index 0000000..4c53262 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bshrs.src @@ -0,0 +1,29 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Byte Shift Right Signed +; Input: +; Operand1: +; A : 8 bit number to shift +; Operand2: +; B : 8 bit shift count +; +; Output: +; Result: A : 8 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __bshrs + .assume adl=1 + +__bshrs: + push bc + inc b + jr test + +loop: + sra a +test: + djnz loop + + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/bshru.src b/frontends/calculator/CEdev/lib/shared/bshru.src new file mode 100644 index 0000000..ec73588 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bshru.src @@ -0,0 +1,18 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Byte Shift Right Unsigned +; Input: +; Operand1: +; A : 8 bit number to shift +; Operand2: +; B : 8 bit shift count +; +; Output: +; Result: A : 8 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __bshru + .assume adl=1 + +__bshru equ 000104h diff --git a/frontends/calculator/CEdev/lib/shared/bstix.src b/frontends/calculator/CEdev/lib/shared/bstix.src new file mode 100644 index 0000000..3719b30 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bstix.src @@ -0,0 +1,19 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte store (ix+nnnnnn),A +; Input: +; Operand1: +; BC : 24-bit offset from ix +; A : 8-bit integer to store +; +; Output: +; none +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __bstix + .assume adl=1 + +__bstix equ 00010Ch + diff --git a/frontends/calculator/CEdev/lib/shared/bstiy.src b/frontends/calculator/CEdev/lib/shared/bstiy.src new file mode 100644 index 0000000..b95ce91 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/bstiy.src @@ -0,0 +1,18 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; byte store (iy+nnnnnn),A +; Input: +; Operand1: +; BC : 24-bit offset from iy +; A : 8-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __bstiy + .assume adl=1 + +__bstiy equ 000108h diff --git a/frontends/calculator/CEdev/lib/shared/calloc.src b/frontends/calculator/CEdev/lib/shared/calloc.src new file mode 100644 index 0000000..069e4bf --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/calloc.src @@ -0,0 +1,27 @@ + .ref __imulu + .ref _malloc + .ref _memset + .def _calloc + .assume adl=1 + +_calloc: + pop de + pop bc + pop hl + push hl + push bc + push de + call __imulu + push hl + call _malloc + add hl,de + xor a,a + sbc hl,de + ld e,a + push de + push hl + call nz,_memset + pop hl + pop de + pop bc + ret diff --git a/frontends/calculator/CEdev/lib/shared/case.src b/frontends/calculator/CEdev/lib/shared/case.src new file mode 100644 index 0000000..26919eb --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case.src @@ -0,0 +1,27 @@ +; (c) Copyright 2001-2008 Zilog Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand1: +; bc : 24 bit address of CASE TABLE +; +; Operand2: +; de : 24 bit number of entries in table +; +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +; +; Table Format: +; [24-bit value][JP label (4-bytes)] 7 bytes total +; +;------------------------------------------------------------------------- + .def __case + .assume adl=1 + +__case equ 000110h diff --git a/frontends/calculator/CEdev/lib/shared/case16.src b/frontends/calculator/CEdev/lib/shared/case16.src new file mode 100644 index 0000000..33cb5cc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case16.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case16 + .assume adl=1 + +__case16 equ 000114h diff --git a/frontends/calculator/CEdev/lib/shared/case16d.src b/frontends/calculator/CEdev/lib/shared/case16d.src new file mode 100644 index 0000000..f2a929d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case16d.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case16D + .assume adl=1 + +__case16D equ 000118h diff --git a/frontends/calculator/CEdev/lib/shared/case24.src b/frontends/calculator/CEdev/lib/shared/case24.src new file mode 100644 index 0000000..43539e5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case24.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case24 + .assume adl=1 + +__case24 equ 00011Ch diff --git a/frontends/calculator/CEdev/lib/shared/case24d.src b/frontends/calculator/CEdev/lib/shared/case24d.src new file mode 100644 index 0000000..bdec1ac --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case24d.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case24D + .assume adl=1 + +__case24D equ 000120h diff --git a/frontends/calculator/CEdev/lib/shared/case8.src b/frontends/calculator/CEdev/lib/shared/case8.src new file mode 100644 index 0000000..8d4f00f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case8.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case8 + .assume adl=1 + +__case8 equ 000124h diff --git a/frontends/calculator/CEdev/lib/shared/case8d.src b/frontends/calculator/CEdev/lib/shared/case8d.src new file mode 100644 index 0000000..f4be7a6 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/case8d.src @@ -0,0 +1,17 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +;------------------------------------------------------------------------- + .def __case8D + .assume adl=1 + +__case8D equ 000128h diff --git a/frontends/calculator/CEdev/lib/shared/debugger.src b/frontends/calculator/CEdev/lib/shared/debugger.src new file mode 100644 index 0000000..684b3a2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/debugger.src @@ -0,0 +1,12 @@ +; --- +; opens the debugger +; --- + + .def _dbg_Debugger + .assume adl=1 + +_dbg_Debugger: + scf + sbc hl,hl + ld (hl),2 + ret diff --git a/frontends/calculator/CEdev/lib/shared/delay.src b/frontends/calculator/CEdev/lib/shared/delay.src new file mode 100644 index 0000000..62978b8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/delay.src @@ -0,0 +1,92 @@ + +; --- +; void delay(uint16_t millis) +; --- + + .def _delay + .assume adl=1 + +mpTmrRange equ 0F20000h + +tmr2Counter equ 10h +tmr2Load equ 14h +tmr2Match1 equ 18h +tmr2Match2 equ 1Ch + +tmrCtrl equ 30h + +bTmr2Enable equ 3 +bTmr2Crystal equ 4 +bTmr2Overflow equ 5 +bTmr2CountUp equ 10 + +_delay: +; Read argument. + pop de + ex (sp),hl ; 0hl = millis + push de +; Abort ASAP if millis == 0. + ld a,h + or a,l + ret z +; Convert millis to CPU cycles by multiplying by 48000. +; Subtract 2 to offset overhead and the unknown counter low byte. + ld b,h + ld c,l ; 0bc = millis + dec.s bc ; bc = millis-1; need to set bcu = 0 + srl b + rr c ; bc = (millis-1)>>1 + ; = millis*(48000&0FFh)>>8, + ; off by -1 or -0.5 + ld e,l + ld d,187 ; 48000/256 == 187.5 + ld l,d + mlt de ; de = (millis&0FFh)*(48000>>8) + mlt hl ; hl = (millis>>8)*(48000>>8) + dec hl + push hl + dec sp + pop hl + inc sp + ld l,-2 ; hl = (millis&0FF00h)*(48000>>8)-2 + add hl,de ; hl = millis*(48000>>8)-2 + add hl,bc ; hl ~ (millis*48000>>8)-3 +; Set up timer 2 control bits: disabled, CPU clock, no interrupt, count down. + ex de,hl ; de ~ (millis*48000>>8)-3 + ld hl,mpTmrRange+tmrCtrl + res bTmr2Enable,(hl) + res bTmr2Crystal,(hl) + res bTmr2Overflow,(hl) + inc hl + res bTmr2CountUp-8,(hl) +; Set up timer 2 counter, match, and reload values. + ld l,tmr2Counter+1 + ld (hl),de ; counter = millis*48000-768+0xxh + ld l,tmr2Match1+3 + ld (hl),0FFh ; match1 = 0FFxxxxxxh + ld l,tmr2Match2+3 + ld (hl),0FFh ; match2 = 0FFxxxxxxh + ld l,tmr2Load+3 + ld (hl),0FEh ; reload = 0FExxxxxxh +; Enable timer 2. + ld l,tmrCtrl + set bTmr2Enable,(hl) +; Wait until timer 2 expires (underflows). +; Will catch the underflow if not interrupted for a continuous period of +; ((254-188)<<24)/48000000 ~ 23.1s. + ld l,tmr2Counter+3 + ld a,188 ; = 1+((0FFFFh*24000 shl 1)-12 shr 24) +; 380 cc up to this point +_delay_wait: + cp a,(hl) + jr nc,_delay_wait +; 12-29 cc to exit waitloop +; Done. + ret +; ~421 cc up to this point +; caller overhead: +; ld bc,millis +; push bc +; call _delay +; pop bc +; ~485 cc total diff --git a/frontends/calculator/CEdev/lib/shared/div.src b/frontends/calculator/CEdev/lib/shared/div.src new file mode 100644 index 0000000..0ae3c0d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/div.src @@ -0,0 +1,54 @@ +; Copyright 1992-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Div function +; +; div_t div(int numer,int denom); +; +;------------------------------------------------------------------------- + .def _div + .ref __idivs + .ref __irems + .assume adl=1 + +_div: + push af + push bc + push hl + push de + + ld hl,21 + add hl,sp + ld bc,(hl) ; bc=val of denominator + dec hl + dec hl + dec hl + ld hl,(hl) ; hl=val of numerator + push hl + call __idivs + ex de,hl ; de= quotient + pop hl ; hl=val of numerator + call __irems + ld bc,hl + + ld hl,15 + add hl,sp + ld hl,(hl) + inc hl + inc hl + inc hl + ld (hl),bc ; remainder + dec hl + dec hl + dec hl + ld (hl),de ;quotient + + pop de + pop bc + pop bc + pop af + + ret + + + + diff --git a/frontends/calculator/CEdev/lib/shared/dzx7_standard.src b/frontends/calculator/CEdev/lib/shared/dzx7_standard.src new file mode 100644 index 0000000..a3591a2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/dzx7_standard.src @@ -0,0 +1,106 @@ +; --- +; void dzx7_turbo(void *src, void *dst) +; --- +; Dec 2012 by Einar Saukas & Urusergi +; "Standard" version (70 bytes) +; --- + + .def _dzx7_Standard + .assume adl=1 + +; enter : hl = void *src +; de = void *dst +; +; exit : hl = & following uncompressed block +; +; uses : af, bc, de, hl + +_dzx7_Standard: + pop bc + pop hl + pop de + push de + push hl + push bc + + ld a, 128 + +dzx7s_copy_byte_loop: + + ldi ; copy literal byte + +dzx7s_main_loop: + + call dzx7s_next_bit + jr nc, dzx7s_copy_byte_loop ; next bit indicates either literal or sequence + +; determine number of bits used for length (Elias gamma coding) + + push de + ld de, 0 + ld bc, 0 + +dzx7s_len_size_loop: + + inc d + call dzx7s_next_bit + jr nc, dzx7s_len_size_loop + +; determine length + +dzx7s_len_value_loop: + + call nc, dzx7s_next_bit + rl c + rl b + jr c, dzx7s_exit ; check end marker + dec d + jr nz, dzx7s_len_value_loop + inc bc ; adjust length + +; determine offset + + ld e, (hl) ; load offset flag (1 bit) + offset value (7 bits) + inc hl + + sla e + inc e + + jr nc, dzx7s_offset_end ; if offset flag is set, load 4 extra bits + ld d, 16 ; bit marker to load 4 bits + +dzx7s_rld_next_bit: + + call dzx7s_next_bit + rl d ; insert next bit into D + jr nc, dzx7s_rld_next_bit ; repeat 4 times, until bit marker is out + inc d ; add 128 to DE + srl d ; retrieve fourth bit from D + +dzx7s_offset_end: + + rr e ; insert fourth bit into E + +; copy previous sequence + + ex (sp), hl ; store source, restore destination + push hl ; store destination + sbc hl, de ; HL = destination - offset - 1 + pop de ; DE = destination + ldir + +dzx7s_exit: + + pop hl ; restore source address (compressed data) + jr nc, dzx7s_main_loop + +dzx7s_next_bit: + + add a, a ; check next bit + ret nz ; no more bits left? + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret + + end diff --git a/frontends/calculator/CEdev/lib/shared/dzx7_turbo.src b/frontends/calculator/CEdev/lib/shared/dzx7_turbo.src new file mode 100644 index 0000000..15a6236 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/dzx7_turbo.src @@ -0,0 +1,117 @@ +; --- +; void dzx7_turbo(void *src, void *dst) +; --- +; Dec 2012 by Einar Saukas & Urusergi +; "Turbo" version (89 bytes, 25% faster) +; --- + + .def _dzx7_Turbo + .assume adl=1 + +; enter : hl = void *src +; de = void *dst +; +; exit : hl = & following uncompressed block +; +; uses : af, bc, de, hl + +_dzx7_Turbo: + pop bc + pop hl + pop de + push de + push hl + push bc + + ld a, 128 + +dzx7t_copy_byte_loop: + + ldi ; copy literal byte + +dzx7t_main_loop: + + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + jr nc, dzx7t_copy_byte_loop ; next bit indicates either literal or sequence + +; determine number of bits used for length (Elias gamma coding) + + push de + ld de, 0 + ld bc, 1 + +dzx7t_len_size_loop: + + inc d + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + jr nc, dzx7t_len_size_loop + jp dzx7t_len_value_start + +; determine length + +dzx7t_len_value_loop: + + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl c + rl b + jr c, dzx7t_exit ; check end marker + +dzx7t_len_value_start: + + dec d + jr nz, dzx7t_len_value_loop + inc bc ; adjust length + +; determine offset + + ld e, (hl) ; load offset flag (1 bit) + offset value (7 bits) + inc hl + + sla e + inc e + + jr nc, dzx7t_offset_end ; if offset flag is set, load 4 extra bits + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl d ; insert first bit into D + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl d ; insert second bit into D + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + rl d ; insert third bit into D + add a, a ; check next bit + call z, dzx7t_load_bits ; no more bits left? + ccf + jr c, dzx7t_offset_end + inc d ; equivalent to adding 128 to DE + +dzx7t_offset_end: + + rr e ; insert inverted fourth bit into E + +; copy previous sequence + + ex (sp), hl ; store source, restore destination + push hl ; store destination + sbc hl, de ; HL = destination - offset - 1 + pop de ; DE = destination + ldir + +dzx7t_exit: + + pop hl ; restore source address (compressed data) + jp nc, dzx7t_main_loop + +dzx7t_load_bits: + + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret + + + end diff --git a/frontends/calculator/CEdev/lib/shared/finite.src b/frontends/calculator/CEdev/lib/shared/finite.src new file mode 100644 index 0000000..35c8c5c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/finite.src @@ -0,0 +1,19 @@ + .def _finite + .assume adl=1 + +; int finite(double n); + +_finite: + pop bc + pop hl + pop de + push de + push hl + push bc + add hl,hl + ld a,e + rla + add a,1 + sbc hl,hl + inc hl + ret diff --git a/frontends/calculator/CEdev/lib/shared/fpadd.src b/frontends/calculator/CEdev/lib/shared/fpadd.src new file mode 100644 index 0000000..238ee39 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpadd.src @@ -0,0 +1,25 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision add +; +; INPUTS: AuBC OP1. +; EuHL OP2. +; +; OUTPUTS: AuBC Sum. +; +; Returns the result of adding the absolute values of the single-precision +; floating-point values OP1 and OP2. If Sign of result is 1, the sum is +; negated before being returned. +; +;-------------------------------------------------------------- + .def __fadd + .assume adl=1 + +__fadd equ 000270h diff --git a/frontends/calculator/CEdev/lib/shared/fpcmp.src b/frontends/calculator/CEdev/lib/shared/fpcmp.src new file mode 100644 index 0000000..acfbce0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpcmp.src @@ -0,0 +1,27 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision compare. +; +; INPUTS: +; +; Operand1: +; EuHL : 32 bit IEEE format +; +; Operand2: +; AuBC : 32 bit IEEE format +; +; +; OUTPUTS: FLAGS based on Op1 - Op2 +; +;-------------------------------------------------------------- + .def __fcmp + .assume adl=1 + +__fcmp equ 000274h diff --git a/frontends/calculator/CEdev/lib/shared/fpdata.src b/frontends/calculator/CEdev/lib/shared/fpdata.src new file mode 100644 index 0000000..e34a653 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpdata.src @@ -0,0 +1,17 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FPDATA.C" + .assume ADL=1 + SEGMENT DATA +__huge_val: + DF 3.40282347E+38 + XDEF __huge_val +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 +; 7 double _huge_val = LDBL_MAX; + END diff --git a/frontends/calculator/CEdev/lib/shared/fpdiv.src b/frontends/calculator/CEdev/lib/shared/fpdiv.src new file mode 100644 index 0000000..ab80d15 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpdiv.src @@ -0,0 +1,28 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision division +; +; INPUTS: +; Operand1: +; AuBC : 32 bit IEEE format +; +; Operand2: +; EuHL : 32 bit IEEE format divisor +; +; OUTPUTS: +; Result: AuBC : 32 bit IEEE Quotient. +; Registers Used: +; flags +; +;-------------------------------------------------------------- + .def __fdiv + .assume adl=1 + +__fdiv equ 000278h diff --git a/frontends/calculator/CEdev/lib/shared/fpftol.src b/frontends/calculator/CEdev/lib/shared/fpftol.src new file mode 100644 index 0000000..bc4e01e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpftol.src @@ -0,0 +1,20 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision to long. +; +; INPUTS: abc: 32-bit IEEE Single precision. +; +; OUTPUTS: abc: 32-bit signed long. +; +;-------------------------------------------------------------- + .def __ftol + .assume adl=1 + +__ftol equ 00027Ch diff --git a/frontends/calculator/CEdev/lib/shared/fpltof.src b/frontends/calculator/CEdev/lib/shared/fpltof.src new file mode 100644 index 0000000..ba2e70f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpltof.src @@ -0,0 +1,20 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Signed long to IEEE Single precision. +; +; INPUTS: AuBC 32-bit signed long. +; +; OUTPUTS: AuBC 32-bit IEEE Single precision. +; +;-------------------------------------------------------------- + .def __ltof + .assume adl=1 + +__ltof equ 000284h diff --git a/frontends/calculator/CEdev/lib/shared/fpmul.src b/frontends/calculator/CEdev/lib/shared/fpmul.src new file mode 100644 index 0000000..7b59483 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpmul.src @@ -0,0 +1,26 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;------------------------------------------------------------------------- +; IEEE Single precision multiply +; Input: +; Operand1: +; AuBC : 32 bit +; +; Operand2: +; EuHL : 32 bit +; +; Output: +; Result: AuBC : 32 bit +; Registers Used: +; flags +; +;------------------------------------------------------------------------- + .def __fmul + .assume adl=1 + +__fmul equ 000288h diff --git a/frontends/calculator/CEdev/lib/shared/fpneg.src b/frontends/calculator/CEdev/lib/shared/fpneg.src new file mode 100644 index 0000000..9de1421 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpneg.src @@ -0,0 +1,32 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Negate. +; +; INPUTS: +; AuBC: 32-bit IEEE Single Precision. +; +; OUTPUTS: +; AuBC: 32-bit IEEE Single Precision. +; +;-------------------------------------------------------------- + .def __fneg + .assume adl=1 + +__fneg: + or a,a + jr nz,__noexit + push hl + sbc hl,hl + sbc hl,bc + pop hl + ret z +__noexit: + xor a,80h + ret diff --git a/frontends/calculator/CEdev/lib/shared/fppack.src b/frontends/calculator/CEdev/lib/shared/fppack.src new file mode 100644 index 0000000..fe14285 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fppack.src @@ -0,0 +1,28 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Pack IEEE operand of dyadic operations. +; +; INPUTS: +; AuBC: 2s-comp mantissa+fraction (9+23 bit) +; E: Exponent. +; D: Sign. +; +; OUTPUTS: AuBC: 32 bit IEEE float. +; +; A AAAAAAB BBBBBBBBBBBBBBCCCCCCCCC +; S EEEEEEE FFFFFFFFFFFFFFFFFFFFFFF +; 0 1 8 9 31 +; MODIFIES: +; flags +;-------------------------------------------------------------- + .def __fppack + .assume adl=1 + +__fppack equ 00026Ch diff --git a/frontends/calculator/CEdev/lib/shared/fpsub.src b/frontends/calculator/CEdev/lib/shared/fpsub.src new file mode 100644 index 0000000..daaf034 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpsub.src @@ -0,0 +1,27 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; IEEE Single precision sub +; Input: +; Operand1: +; abc : 32 bit IEEE single precision +; +; Operand2: +; ehl : 32 bit IEEE single precision +; +; Output: +; Result: abc : 32 bit IEEE single precision (abc - ehl) +; Registers Used: + +;------------------------------------------------------------------------- + .def __fsub + .ref __fadd + .assume adl=1 + +__fsub equ 000290h diff --git a/frontends/calculator/CEdev/lib/shared/fpultof.src b/frontends/calculator/CEdev/lib/shared/fpultof.src new file mode 100644 index 0000000..45fe5f4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpultof.src @@ -0,0 +1,22 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Unsigned long to IEEE Single precision. +; +; INPUTS: +; abc: 32-bit unsigned long +; +; OUTPUTS: +; abc: IEEE Single precision. +; +;-------------------------------------------------------------- + .def __ultof + .assume adl=1 + +__ultof equ 000280h diff --git a/frontends/calculator/CEdev/lib/shared/fpupop1.src b/frontends/calculator/CEdev/lib/shared/fpupop1.src new file mode 100644 index 0000000..4a7064f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpupop1.src @@ -0,0 +1,48 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Unpack IEEE op1 of dyadic operations. +; +; INPUTS: AuBC: 32bits +; +; A AAAAAAAB BBBBBBBBBBBBBBBCCCCCCCC +; S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF +; 0 1 8 9 31 +; +; OUTPUTS: uBC: Mantissa +; A: Exponent +; D: Sign Bit +; ZERO FLAG Set if op was zero. +; +; MODIFIES: +; flags +;-------------------------------------------------------------- + .def __fpupop1 + .assume adl=1 + +__fpupop1: + push ix + ld ix,0 + add ix,sp + push bc + rlc (ix-1) ;move high-bit to low-bit + scf + rr (ix-1) ;carry = exponent low-bit, high-bit = 1 + pop bc ;restore modified mantissa + rl a ;compute exponent, carry = sign + ld d,0 + jr nz,nzero ;skip if exponent non-zero + + ld bc,0 ;clear mantissa + or a,a ;clear carry +nzero: + rl d ;set 1 if negative operand + or a,a ;set Z/NZ + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/fpupop2.src b/frontends/calculator/CEdev/lib/shared/fpupop2.src new file mode 100644 index 0000000..8461f59 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fpupop2.src @@ -0,0 +1,47 @@ +;-------------------------------------------------------------- +; +; Code Generation Helper +; For the Zilog eZ80 C Compiler +; Copyright 1992-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +;-------------------------------------------------------------- +; +; Unpack IEEE op2 of dyadic operations. +; +; INPUTS: EuHL: 32 bits +; +; E EEEEEEEH HHHHHHHHHHHHHHHLLLLLLLL +; S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF +; 0 1 8 9 31 +; +; OUTPUTS: uHL: Mantissa +; E: Exponent +; D: Sign Bit +; ZERO FLAG Set if op was zero. +; +; MODIFIES: +; flags +;-------------------------------------------------------------- + .def __fpupop2 + .assume adl=1 + +__fpupop2: + push bc + ld bc,0800000h + add hl,bc + jr nc,ncarry + add hl,bc + scf +ncarry: + ld d,c + pop bc + rl e + jr nz,nzero + or a,a + sbc hl,hl +nzero: + rl d + inc e + dec e + ret diff --git a/frontends/calculator/CEdev/lib/shared/frameset.src b/frontends/calculator/CEdev/lib/shared/frameset.src new file mode 100644 index 0000000..669a9d2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frameset.src @@ -0,0 +1,12 @@ + .assume adl=1 + .def __frameset + +__frameset: + pop de + push ix + ld ix,0 + add ix,sp + add hl,sp + ld sp,hl + ex de,hl + jp (hl) \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/frameset0.src b/frontends/calculator/CEdev/lib/shared/frameset0.src new file mode 100644 index 0000000..061a597 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frameset0.src @@ -0,0 +1,9 @@ + .assume adl=1 + .def __frameset0 + +__frameset0: + pop hl + push ix + ld ix,0 + add ix,sp + jp (hl) \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/frbmuls.src b/frontends/calculator/CEdev/lib/shared/frbmuls.src new file mode 100644 index 0000000..c415d42 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frbmuls.src @@ -0,0 +1,53 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract short Multiplication signed. +; +; Input: +; Operand1: +; H : 8 bits +; +; Operand2: +; L : 8 bits +; +; Output: +; Result: A : 8 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frbmuls + .assume adl=1 + +__frbmuls: + push hl + ;; + ;; Check sign info + ;; + xor a,a + rl h + jr nc,_L0 + sub a,h + ld h,a +_L0: + xor a,a + rl l + jr nc,_L1 + sub a,l + ld l,a +_L1: + mlt hl + ld a,h + pop hl + or a,a + rra + adc a,0h + push af + ld a,h + xor a,l + jp p,_L2 + pop af + neg + ret +_L2: + pop af + ret + diff --git a/frontends/calculator/CEdev/lib/shared/frbtof.src b/frontends/calculator/CEdev/lib/shared/frbtof.src new file mode 100644 index 0000000..1967abb --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frbtof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned char to float conversion. +; +; Input: +; Operand1: +; A : 8 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frbtof + .assume adl=1 + +__frbtof equ 00029Ch diff --git a/frontends/calculator/CEdev/lib/shared/free.src b/frontends/calculator/CEdev/lib/shared/free.src new file mode 100644 index 0000000..4cf195e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/free.src @@ -0,0 +1,180 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FREE.C" + .assume ADL=1 + SEGMENT CODE +; 1 /***************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /***************************************************************/ +; 8 #include +; 9 +; 10 /************************************************* +; 11 * +; 12 * free - free up allocated memory +; 13 * +; 14 * Inputs: +; 15 * ap - pointer to allocated memory +; 16 * +; 17 * Returns: +; 18 * nothing +; 19 * +; 20 *************************************************/ +; 21 extern HEADER _alloc_base; +; 22 +; 23 void free(void *ap) { +_free: + LD HL,-21 + CALL __frameset +; 24 HEADER *p; +; 25 HEADER *q; +; 26 +; 27 if (!ap) { + LD HL,(IX+6) + CALL __icmpzero + JR Z,L_12 +; 28 return; +; 29 } +; 30 +; 31 q = (HEADER*)ap - 1; + LD IY,(IX+6) + LEA IY,IY+-6 + LD (IX+-3),IY +; 32 +; 33 for (p = &_alloc_base; p->s.ptr && p->s.ptr < q; p = p->s.ptr); + LD BC,__alloc_base + LD (IX+-15),BC + JR L_5 +L_3: + LD IY,(IX+-12) + LD BC,(IY+0) + LD (IX+-15),BC +L_5: + LD IY,(IX+-15) + LEA BC,IY+0 + LD (IX+-12),BC + LD (IX+-18),BC + LD IY,(IX+-12) + LD HL,(IY+0) + CALL __icmpzero + JR Z,L_8 + LD BC,(IX+-12) + LD (IX+-18),BC + LD BC,(IX+-3) + LD IY,(IX+-12) + LD HL,(IY+0) + OR A,A + SBC HL,BC + JR C,L_3 +L_8: +; 34 +; 35 /* join upper */ +; 36 if ((char*)p->s.ptr == ((char*)q) + q->s.size) { + LD BC,(IX+-18) + LD (IX+-9),BC + LD IY,(IX+-3) + LD BC,(IY+3) + LD HL,(IX+-3) + ADD HL,BC + LD IY,(IX+-9) + LD BC,(IY+0) + OR A,A + SBC HL,BC + JR NZ,L_7 +; 37 q->s.size += p->s.ptr->s.size; + LD IY,(IX+-9) + LD DE,(IY+0) + LD IY,(IX+-3) + LD BC,(IY+3) + LD IY,DE + LD HL,(IY+3) + ADD HL,BC + LD IY,(IX+-3) + LD (IY+3),HL +; 38 q->s.ptr = p->s.ptr->s.ptr; + LD BC,(IX+-9) + LD (IX+-21),BC + LD IY,(IX+-9) + LD IY,(IY+0) + LD BC,(IY+0) + LD IY,(IX+-3) + LD (IY+0),BC +; 39 } else { + JR L_11 +L_7: +; 40 q->s.ptr = p->s.ptr; + LD BC,(IX+-9) + LD (IX+-21),BC + LD IY,(IX+-9) + LD BC,(IY+0) + LD IY,(IX+-3) + LD (IY+0),BC +; 41 } +L_11: +; 42 +; 43 /* join lower */ +; 44 if (((char*)p) + p->s.size == (char*)q) { + LD BC,(IX+-21) + LD (IX+-6),BC + LD IY,(IX+-6) + LD BC,(IY+3) + LD HL,(IX+-15) + ADD HL,BC + OR A,A + LD BC,(IX+-3) + SBC HL,BC + JR NZ,L_10 +; 45 p->s.size += q->s.size; + LD IY,(IX+-6) + LD BC,(IY+3) + LD IY,(IX+-3) + LD HL,(IY+3) + ADD HL,BC + LD IY,(IX+-6) + LD (IY+3),HL +; 46 p->s.ptr = q->s.ptr; + LD IY,(IX+-3) + LD BC,(IY+0) + LD IY,(IX+-6) + LD (IY+0),BC +; 47 } else { + JR L_12 +L_10: +; 48 p->s.ptr = q; + LD BC,(IX+-3) + LD IY,(IX+-6) + LD (IY+0),BC +; 49 } +; 50 } +L_12: + LD SP,IX + POP IX + RET + + +;**************************** _free *************************** +;Name Addr/Register Size Type +;__alloc_base IMPORT 6 variable +;G_9 IX-21 3 variable +;G_2 IX-18 3 variable +;p IX-15 3 variable +;G_1 IX-12 3 variable +;G_5 IX-9 3 variable +;G_10 IX-6 3 variable +;q IX-3 3 variable +;ap IX+6 3 parameter + + +; Stack Frame Size: 30 (bytes) +; Spill Code: 0 (instruction) + + + XREF __alloc_base:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _free + END diff --git a/frontends/calculator/CEdev/lib/shared/frftob.src b/frontends/calculator/CEdev/lib/shared/frftob.src new file mode 100644 index 0000000..39065d8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftob.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract char conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: A : 8 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftob + .assume adl=1 + +__frftob equ 0002A0h diff --git a/frontends/calculator/CEdev/lib/shared/frftoi.src b/frontends/calculator/CEdev/lib/shared/frftoi.src new file mode 100644 index 0000000..048c298 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftoi.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract integer conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftoi + .assume adl=1 + +__frftoi equ 0002A8h diff --git a/frontends/calculator/CEdev/lib/shared/frftos.src b/frontends/calculator/CEdev/lib/shared/frftos.src new file mode 100644 index 0000000..b2f71b1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftos.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract short conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftos + .assume adl=1 + +__frftos equ 0002B0h diff --git a/frontends/calculator/CEdev/lib/shared/frftoub.src b/frontends/calculator/CEdev/lib/shared/frftoub.src new file mode 100644 index 0000000..e07b750 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftoub.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract unsigned char conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: A : 8 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftoub + .assume adl=1 + +__frftoub equ 0002A4h diff --git a/frontends/calculator/CEdev/lib/shared/frftoui.src b/frontends/calculator/CEdev/lib/shared/frftoui.src new file mode 100644 index 0000000..07ef9c0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftoui.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract unsigned integer conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 24 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftoui + .assume adl=1 + +__frftoui equ 0002ACh diff --git a/frontends/calculator/CEdev/lib/shared/frftous.src b/frontends/calculator/CEdev/lib/shared/frftous.src new file mode 100644 index 0000000..0fbb6b2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frftous.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; float to fract unsigned short conversion. +; +; Input: +; Operand1: +; eHL : 32 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frftous + .assume adl=1 + +__frftous equ 0002B4h diff --git a/frontends/calculator/CEdev/lib/shared/frimuls.src b/frontends/calculator/CEdev/lib/shared/frimuls.src new file mode 100644 index 0000000..955d658 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frimuls.src @@ -0,0 +1,81 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract interger Multiplication Unsigned. +; +; Input: +; Operand1: +; uHL : 24 bits +; +; Operand2: +; uBC : 24 bits +; +; Output: +; Result: uHL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .assume adl=1 + .def __frimuls + .ref __frimulu + +__frimuls: + push af + push de + push bc + push hl + ;; + ;; Check sign info + ;; + add hl,hl + jr nc,_L0 + ex de,hl + or a,a + sbc hl,hl + sbc hl,de +_L0: + ex de,hl + or a,a + sbc hl,hl + add hl,bc + add hl,hl + jr nc,_L1 + or a,a + sbc hl,hl + sbc hl,bc + add hl,hl +_L1: + ld bc,hl + ex de,hl + call __frimulu + push hl + ex de,hl + ld hl,2 + add hl,sp + rr (hl) + rr d + rr e + pop hl + ld h,d + ld l,e + ;; + ;; Check signs + ;; + ex de,hl + ld hl,2 + add hl,sp + ld a,(hl) + inc hl + ld sp,hl + inc hl + inc hl + xor a,(hl) + jp p,_L2 + sbc hl,hl + sbc hl,de + ex de,hl +_L2: + ex de,hl + pop bc + pop de + pop af + ret diff --git a/frontends/calculator/CEdev/lib/shared/frimulu.src b/frontends/calculator/CEdev/lib/shared/frimulu.src new file mode 100644 index 0000000..d008a49 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frimulu.src @@ -0,0 +1,112 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract interger Multiplication Unsigned. +; +; Input: +; Operand1: +; uHL : 24 bits +; +; Operand2: +; uBC : 24 bits +; +; Output: +; Result: uHL : 24 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .assume adl=1 + .def __frimulu + +__frimulu: + push af + push de + push iy + push bc + push hl + ld d,l + ld e,c + mlt de + ld a,d + ld d,h + ld e,b + ld b,h + ld h,e + mlt hl + mlt bc + mlt de + add a,c + ld c,a + ld a,b + adc a,0h + ld b,a + add.s hl,bc + jr nc,_L0 + inc d +_L0: + ld iy,0h + add iy,sp + ld b,(iy+2) + ld c,(iy+5) + mlt bc + ld a,h + add a,e + ld e,a + jr nc,_L1 + inc d + jr nz,_L1 + inc bc +_L1: + ld h,(iy+2) + ld l,(iy+3) + mlt hl + + ld a,l ;approximation + add a,80h + ld l,a + ld a,h + adc a,0h + ld h,a + + add.s hl,de + jr nc,_L2 + inc bc +_L2: + ld d,(iy+0) + ld e,(iy+5) + mlt de + add.s hl,de + jr nc,_L3 + inc bc +_L3: + ld a,h + ld d,(iy+2) + ld e,(iy+4) + ld h,(iy+1) + ld l,(iy+5) + mlt de + mlt hl + add.s hl,de + jr nc,_L4 + inc b +_L4: + add a,l + ld l,a + ld a,h + adc a,c + ld h,a + jr nc,_L5 + inc b +_L5: + ex de,hl + push bc + dec sp + pop hl + inc sp + ld h,d + ld l,e + pop bc + pop bc + pop iy + pop de + pop af + ret diff --git a/frontends/calculator/CEdev/lib/shared/fritof.src b/frontends/calculator/CEdev/lib/shared/fritof.src new file mode 100644 index 0000000..d35fb32 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fritof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract integer to float conversion. +; +; Input: +; Operand1: +; HL : 24 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __fritof + .assume adl=1 + +__fritof equ 0002B8h diff --git a/frontends/calculator/CEdev/lib/shared/frsmuls.src b/frontends/calculator/CEdev/lib/shared/frsmuls.src new file mode 100644 index 0000000..b337a01 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frsmuls.src @@ -0,0 +1,61 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract short Multiplication signed. +; +; Input: +; Operand1: +; HL : 16 bits +; +; Operand2: +; BC : 16 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .assume adl=1 + .def __frsmuls + .ref __frsmulu + +__frsmuls: + push af + push de + push bc + push hl + ;; + ;; Check sign info + ;; + add.s hl,hl + jr nc,_L0 + ex de,hl + or a,a + sbc hl,hl + sbc hl,de +_L0: + rl c + rl b + jr nc,_L1 + ex de,hl + or a,a + sbc hl,hl + sbc hl,bc + ld b,h + ld c,l + ex de,hl +_L1: + call __frsmulu + srl h + rr l + pop af + pop bc + xor a,b + jp p,_L2 + ex de,hl + sbc hl,hl + sbc hl,de +_L2: + pop de + pop af + ret + diff --git a/frontends/calculator/CEdev/lib/shared/frsmulu.src b/frontends/calculator/CEdev/lib/shared/frsmulu.src new file mode 100644 index 0000000..ca9e7f6 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frsmulu.src @@ -0,0 +1,51 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract interger Multiplication Unsigned. +; +; Input: +; Operand1: +; HL : 16 bits +; +; Operand2: +; BC : 16 bits +; +; Output: +; Result: HL : 16 bits +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frsmulu + .assume adl=1 + +__frsmulu: + push af + push de + push bc + ld d,l + ld e,c + mlt de + ld a,d + ld d,h + ld e,b + ld b,h + ld h,e + mlt hl + mlt bc + mlt de + add a,c + jr nc,_L0 + inc de +_L0: + ld c,a + xor a,a + add hl,bc + adc a,d + ld d,a + ld l,h + ld h,0h + ex de,hl + add hl,de + pop bc + pop de + pop af + ret diff --git a/frontends/calculator/CEdev/lib/shared/frstof.src b/frontends/calculator/CEdev/lib/shared/frstof.src new file mode 100644 index 0000000..a5e8003 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frstof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract short to float conversion. +; +; Input: +; Operand1: +; HL : 24 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frstof + .assume adl=1 + +__frstof equ 0002C0h diff --git a/frontends/calculator/CEdev/lib/shared/frubtof.src b/frontends/calculator/CEdev/lib/shared/frubtof.src new file mode 100644 index 0000000..7a2a234 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frubtof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2004-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned char to float conversion. +; +; Input: +; Operand1: +; A : 8 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frubtof + .assume adl=1 + +__frubtof equ 0002C4h diff --git a/frontends/calculator/CEdev/lib/shared/fruitof.src b/frontends/calculator/CEdev/lib/shared/fruitof.src new file mode 100644 index 0000000..a173276 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/fruitof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned integer to float conversion. +; +; Input: +; Operand1: +; HL : 24 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __fruitof + .assume adl=1 + +__fruitof equ 0002BCh diff --git a/frontends/calculator/CEdev/lib/shared/frustof.src b/frontends/calculator/CEdev/lib/shared/frustof.src new file mode 100644 index 0000000..4cf0ba8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/frustof.src @@ -0,0 +1,17 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; fract unsigned short to float conversion. +; +; Input: +; Operand1: +; HL : 16 bits +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __frustof + .assume adl=1 + +__frustof equ 0002C8h diff --git a/frontends/calculator/CEdev/lib/shared/gamma.src b/frontends/calculator/CEdev/lib/shared/gamma.src new file mode 100644 index 0000000..a86cc0f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/gamma.src @@ -0,0 +1,439 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\GAMMA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* +; 2 * gamma.c - public domain implementation of function tgamma(3m) +; 3 * reference - Haruhiko Okumura: C-gengo niyoru saishin algorithm jiten +; 4 * (New Algorithm handbook in C language) (Gijyutsu hyouronsha, Tokyo, 1991) [in Japanese] +; 5 * http://oku.edu.mie-u.ac.jp/~okumura/algo/ +; 6 */ +; 7 +; 8 #include +; 9 #include +; 10 +; 11 #define N 8 +; 12 +; 13 #define B0 1 /* Bernoulli numbers */ +; 14 #define B1 (-1.0 / 2.0) +; 15 #define B2 ( 1.0 / 6.0) +; 16 #define B4 (-1.0 / 30.0) +; 17 #define B6 ( 1.0 / 42.0) +; 18 #define B8 (-1.0 / 30.0) +; 19 #define B10 ( 5.0 / 66.0) +; 20 #define B12 (-691.0 / 2730.0) +; 21 #define B14 ( 7.0 / 6.0) +; 22 #define B16 (-3617.0 / 510.0) +; 23 +; 24 static double loggamma(double x) { /* the natural logarithm of the Gamma function. */ +_loggamma: + LD HL,-22 + CALL __frameset +; 25 double v, w; +; 26 +; 27 v = 1; + LD BC,8388608 + LD (IX+-8),BC + LD A,63 + LD (IX+-5),A +; 28 while (x < N) { v *= x; x++; } + JR L_1 +L_2: + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A + LD BC,(IX+6) + LD A,(IX+9) + LD HL,8388608 + LD E,63 + CALL __fadd + LD (IX+6),BC + LD (IX+9),A +L_1: + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + LD A,65 + CALL __fcmp + JP M,L_2 +; 29 w = 1 / (x * x); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD E,A + LD HL,BC + LD BC,8388608 + LD A,63 + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 30 return ((((((((B16 / (16 * 15)) * w + (B14 / (14 * 13))) * w +; 31 + (B12 / (12 * 11))) * w + (B10 / (10 * 9))) * w +; 32 + (B8 / ( 8 * 7))) * w + (B6 / ( 6 * 5))) * w +; 33 + (B4 / ( 4 * 3))) * w + (B2 / ( 2 * 1))) / x +; 34 + 0.5 * M_LOG_2M_PI - log(v) - x + (x - 0.5) * log(x); + LD HL,15864886 + LD E,188 + CALL __fmul + LD HL,13765920 + LD E,59 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,16471432 + LD E,186 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,6072562 + LD E,58 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,1837505 + LD E,186 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,5246209 + LD E,58 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,3541857 + LD E,187 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,11184811 + LD E,61 + CALL __fadd + LD HL,(IX+6) + LD E,(IX+9) + CALL __fdiv + LD HL,7028622 + LD E,63 + CALL __fadd + LD (IX+-12),BC + LD C,(IX+-5) + LD B,0 + PUSH BC + LD BC,(IX+-8) + PUSH BC + LD (IX+-9),A + CALL _log + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+6) + LD E,(IX+9) + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fsub + LD (IX+-19),A + LD (IX+-18),BC + LD BC,(IX+6) + LD A,(IX+9) + OR A,A + SBC HL,HL + LD E,63 + CALL __fsub + LD (IX+-15),BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + LD B,A + LD (IX+-22),BC + CALL _log + LD BC,(IX+-22) + POP IY + POP IY + LD A,B + LD BC,(IX+-15) + CALL __fmul + LD E,A + LD A,(IX+-19) + LD HL,BC + LD BC,(IX+-18) + CALL __fadd + LD E,A + LD HL,BC +; 35 } + LD SP,IX + POP IX + RET + + +;**************************** _loggamma *************************** +;Name Addr/Register Size Type +;_log IMPORT ----- function +;v IX-8 4 variable +;w IX-4 4 variable +;x IX+6 4 parameter + + +; Stack Frame Size: 34 (bytes) +; Spill Code: 0 (instruction) + + +; 36 +; 37 double tgamma(double x) { /* Gamma function */ +_tgamma: + LD HL,-26 + CALL __frameset +; 38 if (x == 0.0) { /* Pole Error */ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_17 +; 39 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 40 return 1/x < 0 ? -HUGE_VAL : HUGE_VAL; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,8388608 + LD A,63 + CALL __fdiv + LD E,A + LD HL,BC + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_7 + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD (IX+-14),BC + LD (IX+-11),A + JR L_8 +L_7: + LD BC,(__huge_val) + LD A,(__huge_val+3) + LD (IX+-14),BC + LD (IX+-11),A +L_8: + LD HL,(IX+-14) + LD E,(IX+-11) + JR L_19 +; 41 } +L_17: +; 42 if (x < 0) { + LD HL,(IX+6) + LD E,(IX+9) + XOR A,A + CALL __fcmp + JP P,L_18 +; 43 int sign; +; 44 static double zero = 0.0; +; 45 double i, f; +; 46 f = modf(-x, &i); + PEA IX+-18 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-10),HL + LD (IX+-7),E +; 47 if (f == 0.0) { /* Domain Error */ + LD HL,(IX+-10) + LD E,(IX+-7) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_15 +; 48 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 49 return zero/zero; + LD HL,(_0zero) + LD A,(_0zero+3) + LD E,A + LD A,(_0zero+3) + LD BC,(_0zero) + CALL __fdiv + LD E,A + LD HL,BC + JR L_19 +; 50 } +L_15: +; 51 sign = (fmod(i, 2.0) != 0.0) ? 1 : -1; + LD C,64 + LD B,0 + PUSH BC + LD BC,0 + PUSH BC + LD C,(IX+-15) + LD B,0 + PUSH BC + LD BC,(IX+-18) + PUSH BC + CALL _fmod + POP BC + POP BC + POP BC + POP BC + LD BC,0 + XOR A,A + CALL __fcmp + JR Z,L_13 + LD BC,1 + LD (IX+-3),BC + JR L_14 +L_13: + LD BC,16777215 + LD (IX+-3),BC +L_14: + LD BC,(IX+-3) + LD (IX+-6),BC +; 52 return sign * M_PI / (sin(M_PI * f) * exp(loggamma(1 - x))); + CALL __itol + CALL __ltof + LD HL,4788187 + LD E,64 + CALL __fmul + LD (IX+-22),A + LD (IX+-21),BC + LD BC,(IX+-10) + LD A,(IX+-7) + LD HL,4788187 + LD E,64 + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _sin + POP BC + POP BC + LD (IX+-26),E + LD (IX+-25),HL + LD HL,(IX+6) + LD E,(IX+9) + LD BC,8388608 + LD A,63 + CALL __fsub + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _loggamma + POP BC + POP BC + LD C,E + LD B,0 + PUSH BC + PUSH HL + CALL _exp + POP BC + POP BC + LD A,(IX+-26) + LD BC,(IX+-25) + CALL __fmul + LD E,A + LD A,(IX+-22) + LD HL,BC + LD BC,(IX+-21) + CALL __fdiv + LD E,A + LD HL,BC + JR L_19 +; 53 } +L_18: +; 54 return exp(loggamma(x)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _loggamma + POP BC + POP BC + LD C,E + LD B,0 + PUSH BC + PUSH HL + CALL _exp + POP BC + POP BC +; 55 } +L_19: + LD SP,IX + POP IX + RET + + +;**************************** _tgamma *************************** +;Name Addr/Register Size Type +;_exp IMPORT ----- function +;_sin IMPORT ----- function +;_fmod IMPORT ----- function +;_0zero STATIC 4 variable +;_modf IMPORT ----- function +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;i IX-18 4 variable +;temp5 IX-14 4 variable +;f IX-10 4 variable +;sign IX-6 3 variable +;temp11 IX-3 3 variable +;x IX+6 4 parameter + + +; Stack Frame Size: 38 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT DATA +_0zero: + DF 0.0 + XREF _errno:ROM + XREF _modf:ROM + XREF _fmod:ROM + XREF _log:ROM + XREF _exp:ROM + XREF _sin:ROM + XREF __huge_val:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XDEF _tgamma + END diff --git a/frontends/calculator/CEdev/lib/shared/getstringinput.src b/frontends/calculator/CEdev/lib/shared/getstringinput.src new file mode 100644 index 0000000..b3282c3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/getstringinput.src @@ -0,0 +1,136 @@ +; --- +; void os_GetStringInput(char *string, char *buf, size_t size) +; --- + + .def _os_GetStringInput + .assume adl=1 + +kUp := 3 +kLeft := 2 +kDown := 4 +kEnter := 5 +kClear := 9 +kRight := 1 +curLock := 4 +flags := $D00080 +curRow := $D00595 +curUnder := $D00599 +_PutS := $207C0 +_PutC := $207B8 +_PutPS := $207C8 +_GetKey := $20D8C +_CursorOn := $208B0 +_CursorOff := $208A8 +_PullDownChk := $208BC +_ConvKeyToTok := $20E40 +_GetTokString := $20874 +_PutTokString := $20D74 + +_os_GetStringInput: + push ix + ld ix,0 + add ix,sp + ld hl,(ix+6) ; hl -> input string prompt + add hl,de + xor a,a + sbc hl,de + jr z,__nodisp + ld iy,flags + call _PutS +__nodisp: + ld hl,(curRow) + ld (__savecur),hl + ld a,(ix+12) + dec a + ld (ix+12),a + ld (ix+6),a +__start: + ld de,(ix+9) +__loop: + ld a,' ' + ld (curUnder),a + push de + push ix + call _CursorOn +__getkey: + call _GetKey + call _CursorOff + call _PullDownChk + call _CursorOn + jr c,__getkey + cp a,kLeft + jr z,__loop + cp a,kDown + jr z,__loop + cp a,kRight + jr z,__loop + cp a,kUp + jr z,__loop + cp a,kClear + jr z,__clearpop + cp a,kEnter + jr z,__done + call _ConvKeyToTok + call _GetTokString + pop ix + pop de + ld b,(hl) + inc hl + ld a,(ix+12) + sub a,b + jr nc,__notfull + ld b,(ix+12) + xor a,a +__notfull: + ld (ix+12),a +__draw: + ld a,(hl) + ld (de),a + inc hl + inc de + call _PutC + djnz __draw + ld a,(ix+12) + or a,a + jr nz,__loop +__full: + ld a,' ' + ld (curUnder),a + call _GetKey + cp a,kClear + jr z,__clear + cp a,kEnter + jr z,__exit + jr __full +__clearpop: + pop ix + pop de +__clear: +__savecur := $+1 + ld hl,0 + ld (curRow),hl + ld a,(ix+6) + ld b,(ix+12) + ld (ix+12),a + sub a,b + ld b,a + inc b +__clearloop: + ld a,' ' + call _PutC + djnz __clearloop + ld hl,(__savecur) + ld (curRow),hl + jr __start +__done: + pop ix + pop de +__exit: + ld a,' ' + ld (curUnder),a + xor a,a + ld (de),a + call _CursorOff + di + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/iand.src b/frontends/calculator/CEdev/lib/shared/iand.src new file mode 100644 index 0000000..79d731c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/iand.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer AND. +; Input: +; Operand1: +; hl : 24 bit +; +; Operand2: +; bc : 24 bit +; +; Output: +; Result: hl : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __iand + .assume adl=1 + +__iand equ 000134h diff --git a/frontends/calculator/CEdev/lib/shared/icmpzero.src b/frontends/calculator/CEdev/lib/shared/icmpzero.src new file mode 100644 index 0000000..fced974 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/icmpzero.src @@ -0,0 +1,20 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set flag for comparison of 24-bit scalar with constant value zero +; Input: +; Operand1: HL register +; +; Output: +; Result: f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __icmpzero + .assume adl=1 + +__icmpzero: + add hl,de + or a,a + sbc hl,de + ret diff --git a/frontends/calculator/CEdev/lib/shared/idivs.src b/frontends/calculator/CEdev/lib/shared/idivs.src new file mode 100644 index 0000000..1c7bba1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/idivs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Integer Division +; Input: +; Operand1: +; hl : 24 bits (dividend x) +; +; Operand2: +; bc : 24 bits (divisor y) +; +; Output: +; Result: hl : 24 bits +; +; Registers Used: +; a, de +;------------------------------------------------------------------------- + .def __idivs + .assume adl=1 + +__idivs equ 00013Ch diff --git a/frontends/calculator/CEdev/lib/shared/idivu.src b/frontends/calculator/CEdev/lib/shared/idivu.src new file mode 100644 index 0000000..6fdcacc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/idivu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Integer Division. +; Input: +; Operand1: +; uHL : 24 bit dividend +; +; Operand2: +; uBC : 24 bit divisor +; +; Output: +; Result: uHL: 24 bit quotient +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __idivu,__idvrmu + .assume adl=1 + +__idivu equ 000140h +__idvrmu equ 000144h diff --git a/frontends/calculator/CEdev/lib/shared/ildix.src b/frontends/calculator/CEdev/lib/shared/ildix.src new file mode 100644 index 0000000..8702ff5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ildix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer load hl,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: hl : 24 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __ildix + .assume adl=1 + +__ildix equ 000148h diff --git a/frontends/calculator/CEdev/lib/shared/ildiy.src b/frontends/calculator/CEdev/lib/shared/ildiy.src new file mode 100644 index 0000000..3883f15 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ildiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer load hl,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: hl : 24 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __ildiy + .assume adl=1 + +__ildiy equ 00014Ch diff --git a/frontends/calculator/CEdev/lib/shared/imuls.src b/frontends/calculator/CEdev/lib/shared/imuls.src new file mode 100644 index 0000000..6d70bc3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/imuls.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Multiplication Signed. +; Input: +; Operand1: +; BC : 24 bits +; +; Operand2: +; HL : 24 bits +; +; Output: +; Result: hl : 24 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __imuls + .assume adl=1 + +__imuls equ 000154h diff --git a/frontends/calculator/CEdev/lib/shared/imulu.src b/frontends/calculator/CEdev/lib/shared/imulu.src new file mode 100644 index 0000000..fd9c068 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/imulu.src @@ -0,0 +1,24 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Multiplication Unsigned. +; Note: When multipying two n-bit values, the low-order n-bits +; of the product are the same, whether or not the values +; are considered signed or unsigned. +; Input: +; Operand1: +; uHL : 24 bits +; +; Operand2: +; uBC : 24 bits +; +; Output: +; Result: uHL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __imulu,__imul_b + .assume adl=1 + +__imul_b equ 000150h +__imulu equ 000158h + diff --git a/frontends/calculator/CEdev/lib/shared/indcall.src b/frontends/calculator/CEdev/lib/shared/indcall.src new file mode 100644 index 0000000..5f5a122 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/indcall.src @@ -0,0 +1,14 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Indirect Call +; Input: +; Operand1: +; iy : 24 bit +; +; Output: +; Registers Used: +;------------------------------------------------------------------------- + .def __indcall + .assume adl=1 + +__indcall equ 00015Ch diff --git a/frontends/calculator/CEdev/lib/shared/ineg.src b/frontends/calculator/CEdev/lib/shared/ineg.src new file mode 100644 index 0000000..4bb0b46 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ineg.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer/short NEG. +; Input: +; Operand1: +; hl : 24/16 bit +; +; Output: +; Result: hl : 24/16 bit ( 0 - hl) +; Registers Used: +; a,de +;------------------------------------------------------------------------- + .def __ineg + .assume adl=1 + +__ineg equ 000160h diff --git a/frontends/calculator/CEdev/lib/shared/inot.src b/frontends/calculator/CEdev/lib/shared/inot.src new file mode 100644 index 0000000..8fcf888 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/inot.src @@ -0,0 +1,15 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer/Short NOT. +; Input: +; Operand1: +; hl : 24/16 bit +; +; Output: +; Result: hl : 24/16 bit +; Registers Used: +;------------------------------------------------------------------------- + .def __inot + .assume adl=1 + +__inot equ 000164h diff --git a/frontends/calculator/CEdev/lib/shared/interrupts.src b/frontends/calculator/CEdev/lib/shared/interrupts.src new file mode 100644 index 0000000..64d30d5 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/interrupts.src @@ -0,0 +1,142 @@ + .def _int_Initialize + .def _int_Handler + .def _int_SetVector + .def _int_Reset + .assume adl=1 + +;------------------------------------------------------------------------------- +; Interrupts equates +mpIntStatus equ 0F00000h +mpIntMask equ 0F00004h +mpIntAck equ 0F00008h +mpIntLachEnable equ 0F0000Ch +mpIntXor equ 0F00010h +mpIntStatusMasked equ 0F00014h + +intOnKey equ 1 +intTimer1 equ 2 +intTimer2 equ 4 +intTimer3 equ 8 +intOsTimer equ 10h +intKbd equ 400h +intLcd equ 800h +intRtc equ 1000h + +;------------------------------------------------------------------------------- +_int_Initialize: + di + ld de,lconf + ld hl,mpIntMask + ld bc,16 + ldir + ld hl,cconf + ld de,mpIntMask + ld bc,16 + ldir + ld hl,0D18879h + ld de,0C90611h + ld (hl),de + dec hl + ld (hl),0EDh + push hl + inc d + call 0D18878h + ld hl, 0E10010h | ((_int_Handler >> 8) & 000FF00h) + ld de, 0C3h | ((_int_Handler << 8) & 0FFFF00h) + ld (hl),h + inc hl + ld (hl),de + ld hl,0E30800h + ld bc,0401h + ld a,0E1h + call 00210E0h ; _Memset + ld hl,0E308h + ld i,hl + im 2 + ld d,3 + ret + +_int_Handler: + ex af,af' + exx + ld hl,(mpIntStatusMasked) + add hl,hl + inc hl + add hl,hl + xor a,a +isr_loop: + inc a + add hl,hl + jr nc,isr_loop +identified: + dec a + add a,a + add a,a + ld (isr_dispatch_smc+1),a + exx + ex af, af' +isr_dispatch_smc: + jr $+2 +iv_list: + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt + jp unhandledInt +unhandledInt: + ei + ret + +;------------------------------------------------------------------------------- +_int_SetVector: + ld iy,0 + add iy,sp + ld a,21 + ld l,(iy+3) + sub a,l + ld l,a + ld h,4 + mlt hl + ld de,iv_list+1 + add hl,de + ld de,(iy+6) + ld (hl),de + ret + +;------------------------------------------------------------------------------- +_int_Reset: + di + ld hl, lconf + ld de, mpIntMask + ld bc, 16 + ldir + im 1 + ret + segment bss +lconf: ds 16 + segment data +cconf: ; Mask + db 000h,000h,000h,000h + ; ACK + db 0FFh,0FFh,0FFh,0FFh + ; Latch + db 000h,000h,000h,000h + ; Invert + db 000h,000h,000h,000h diff --git a/frontends/calculator/CEdev/lib/shared/ior.src b/frontends/calculator/CEdev/lib/shared/ior.src new file mode 100644 index 0000000..0edcd5a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ior.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer OR. +; Input: +; Operand1: +; HL : 24 bit +; +; Operand2: +; BC : 24 bit +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __ior + .assume adl=1 + +__ior equ 000168h diff --git a/frontends/calculator/CEdev/lib/shared/irems.src b/frontends/calculator/CEdev/lib/shared/irems.src new file mode 100644 index 0000000..ef4c8d7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/irems.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Modulus Signed. +; Input: +; Operand1: +; HL : 24 bits (dividend) +; +; Operand2: +; BC : 24 bits (divisor) +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __irems + .assume adl=1 + +__irems equ 00016Ch diff --git a/frontends/calculator/CEdev/lib/shared/iremu.src b/frontends/calculator/CEdev/lib/shared/iremu.src new file mode 100644 index 0000000..dac22a0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/iremu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Integer Modulus +; Input: +; Operand1: +; uHL : 24 bits (dividend x) +; +; Operand2: +; uBC : 24 bits (divisor y) +; +; Output: +; Result: uHL : 24 bits (remainder) +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __iremu + .assume adl=1 + +__iremu equ 000170h + diff --git a/frontends/calculator/CEdev/lib/shared/isalnum.src b/frontends/calculator/CEdev/lib/shared/isalnum.src new file mode 100644 index 0000000..12c28a1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isalnum.src @@ -0,0 +1,28 @@ + .def _isalnum + .ref ___maptab + .assume adl=1 + +; original source +; int isalnum(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC|DIG)); +; } + +_isalnum: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,13 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isalpha.src b/frontends/calculator/CEdev/lib/shared/isalpha.src new file mode 100644 index 0000000..94627ba --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isalpha.src @@ -0,0 +1,27 @@ + .def _isalpha + .ref ___maptab + .assume adl=1 + +; original source +; int isalnum(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC)); + +_isalpha: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,12 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isascii.src b/frontends/calculator/CEdev/lib/shared/isascii.src new file mode 100644 index 0000000..0c88ffb --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isascii.src @@ -0,0 +1,19 @@ + .def _isascii + .assume adl=1 + +; original source +; int isascii(int c) { +; return c >= 0 && c < 128; +; } + +_isascii: + pop de + pop hl + push hl + push de + + ld de,-128 + add hl,de + sbc hl,hl + inc hl + ret diff --git a/frontends/calculator/CEdev/lib/shared/iscntrl.src b/frontends/calculator/CEdev/lib/shared/iscntrl.src new file mode 100644 index 0000000..a8e7864 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/iscntrl.src @@ -0,0 +1,27 @@ + .def _iscntrl + .ref ___maptab + .assume adl=1 + +;int iscntrl(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(CTL)); +;} + +_iscntrl: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,128 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isdigit.src b/frontends/calculator/CEdev/lib/shared/isdigit.src new file mode 100644 index 0000000..bbd555a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isdigit.src @@ -0,0 +1,27 @@ + .def _isdigit + .ref ___maptab + .assume adl=1 + +;int isdigit(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(DIG)); +;} + +_isdigit: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,1 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isgraph.src b/frontends/calculator/CEdev/lib/shared/isgraph.src new file mode 100644 index 0000000..59bc61e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isgraph.src @@ -0,0 +1,28 @@ + .def _isgraph + .ref ___maptab + .assume adl=1 + +; original source +; int isgraph(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC|DIG|PUN)); +; } + +_isgraph: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,15 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/ishl.src b/frontends/calculator/CEdev/lib/shared/ishl.src new file mode 100644 index 0000000..b9a7347 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ishl.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Shift Left +; Input: +; Operand1: +; BC : 24 bit number of bits to shift +; Asuume B=0 C=shift count +; Operand2: +; HL : 24 bit value to be shifted by C +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ishl, __ishl_b + .assume adl=1 + +__ishl_b equ 000178h +__ishl equ 000174h diff --git a/frontends/calculator/CEdev/lib/shared/ishrs.src b/frontends/calculator/CEdev/lib/shared/ishrs.src new file mode 100644 index 0000000..79125e7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ishrs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Shift Right Signed +; Input: +; Operand1: +; BC : 24 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 24 bit value to be shifted by C +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ishrs, __ishrs_b + .assume adl=1 + +__ishrs_b equ 000180h +__ishrs equ 00017Ch diff --git a/frontends/calculator/CEdev/lib/shared/ishru.src b/frontends/calculator/CEdev/lib/shared/ishru.src new file mode 100644 index 0000000..ed190d4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ishru.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer Shift Right Unsigned +; Input: +; Operand1: +; BC : 24 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 24 bit value to be shifted by C +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ishru, __ishru_b + .assume adl=1 + +__ishru_b equ 000188h +__ishru equ 000184h \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/isinf.src b/frontends/calculator/CEdev/lib/shared/isinf.src new file mode 100644 index 0000000..1c0c46b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isinf.src @@ -0,0 +1,20 @@ + .ref __frameset0 + .def _isinf + .assume adl=1 + +; int isinf(double n); + +_isinf: + call __frameset0 + ld hl,(ix+6) + adc hl,hl + jr nz,l_1 + ld hl,(ix+8) + add hl,hl + inc h +l_1: ld hl,0 + jr nz,l_2 + inc hl +l_2: ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/islower.src b/frontends/calculator/CEdev/lib/shared/islower.src new file mode 100644 index 0000000..3f72f9c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/islower.src @@ -0,0 +1,29 @@ + .def _islower + .ref ___maptab + .assume adl=1 + +; original source +; int islower(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(LC)); +; } + +_islower: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + ld a,e + and a,128 + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,4 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isnan.src b/frontends/calculator/CEdev/lib/shared/isnan.src new file mode 100644 index 0000000..129bf69 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isnan.src @@ -0,0 +1,20 @@ + .ref __frameset0 + .def _isnan + .assume adl=1 + +; int isnan(double n); + +_isnan: + call __frameset0 + ld hl,(ix+6) + adc hl,hl + jr z,l_1 + ld hl,(ix+8) + add hl,hl +l_1: inc h + ld hl,0 + jr nz,l_2 + inc hl +l_2: ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/isprint.src b/frontends/calculator/CEdev/lib/shared/isprint.src new file mode 100644 index 0000000..79b7bbf --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isprint.src @@ -0,0 +1,28 @@ + .def _isprint + .ref ___maptab + .assume adl=1 + +; original source +; int isprint(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC|LC|DIG|PUN|SP)); +; } + +_isprint: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,47 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/ispunct.src b/frontends/calculator/CEdev/lib/shared/ispunct.src new file mode 100644 index 0000000..52a2e79 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ispunct.src @@ -0,0 +1,28 @@ + .def _ispunct + .ref ___maptab + .assume adl=1 + +; original source +; int ispunct(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(PUN)); +; } + +_ispunct: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,2 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isspace.src b/frontends/calculator/CEdev/lib/shared/isspace.src new file mode 100644 index 0000000..4e670f2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isspace.src @@ -0,0 +1,28 @@ + .def _isspace + .ref ___maptab + .assume adl=1 + +; original source +; int isspace(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(WS)); +; } + +_isspace: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,64 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/istix.src b/frontends/calculator/CEdev/lib/shared/istix.src new file mode 100644 index 0000000..8570366 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/istix.src @@ -0,0 +1,18 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer store (ix+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from ix +; HL : 24-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __istix + .assume adl=1 + +__istix equ 00018Ch diff --git a/frontends/calculator/CEdev/lib/shared/istiy.src b/frontends/calculator/CEdev/lib/shared/istiy.src new file mode 100644 index 0000000..7ca71ea --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/istiy.src @@ -0,0 +1,18 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer store (iy+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from iy +; HL : 24-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __istiy + .assume adl=1 + +__istiy equ 000190h diff --git a/frontends/calculator/CEdev/lib/shared/isupper.src b/frontends/calculator/CEdev/lib/shared/isupper.src new file mode 100644 index 0000000..300474e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isupper.src @@ -0,0 +1,28 @@ + .def _isupper + .ref ___maptab + .assume adl=1 + +; original source +; int isupper(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(UC)); +; } + +_isupper: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,8 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/isxdigit.src b/frontends/calculator/CEdev/lib/shared/isxdigit.src new file mode 100644 index 0000000..9db54a4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/isxdigit.src @@ -0,0 +1,28 @@ + .def _isxdigit + .ref ___maptab + .assume adl=1 + +; original source +; int isxdigit(int c) { +; if( (unsigned char)c & (unsigned char)0x80 ) +; return (0); +; return(__maptab[c] & (unsigned char)(DIG|HEX)); +; } + +_isxdigit: + pop hl + pop de + push de + push hl + or a,a + sbc hl,hl + bit 7,e + ret nz + ex de,hl + ld de,___maptab + add hl,de + ld a,(hl) + and a,17 + sbc hl,hl + ld l,a + ret diff --git a/frontends/calculator/CEdev/lib/shared/itol.src b/frontends/calculator/CEdev/lib/shared/itol.src new file mode 100644 index 0000000..8efd34d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/itol.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Integer to Long conversion +; Input: +; Operand1: +; BC : 24 bit +; +; Output: +; Result: A:BC : 32 bit +; Registers Used: +; +;------------------------------------------------------------------------- + .def __itol + .assume adl=1 + +__itol equ 000194h diff --git a/frontends/calculator/CEdev/lib/shared/ixor.src b/frontends/calculator/CEdev/lib/shared/ixor.src new file mode 100644 index 0000000..75299dd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ixor.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer XOR. +; Input: +; Operand1: +; hl : 24 bit +; +; Operand2: +; bc : 24 bit +; +; Output: +; Result: hl : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __ixor + .assume adl=1 + +__ixor equ 000198h diff --git a/frontends/calculator/CEdev/lib/shared/labs.src b/frontends/calculator/CEdev/lib/shared/labs.src new file mode 100644 index 0000000..38cd6dc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/labs.src @@ -0,0 +1,24 @@ + .ref __frameset0 + .ref __lcmpzero + .ref __setflag + .ref __lneg + .def _labs + .assume adl=1 + +; long labs(long j); + +_labs: + call __frameset0 + ld hl,(ix+6) + ld e,(ix+9) + push hl + push de + call __lcmpzero + call __setflag + pop de + pop hl + jp p,l_1 + call __lneg +l_1: ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/ladd.src b/frontends/calculator/CEdev/lib/shared/ladd.src new file mode 100644 index 0000000..c678a1e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ladd.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long ADD. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: + +;------------------------------------------------------------------------- + .def __ladd, __ladd_b + .assume adl=1 + +__ladd_b equ 0001A0h +__ladd equ 00019Ch diff --git a/frontends/calculator/CEdev/lib/shared/land.src b/frontends/calculator/CEdev/lib/shared/land.src new file mode 100644 index 0000000..6db554a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/land.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long AND. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: + +;------------------------------------------------------------------------- + .def __land + .assume adl=1 + +__land equ 0001A4h diff --git a/frontends/calculator/CEdev/lib/shared/lcmps.src b/frontends/calculator/CEdev/lib/shared/lcmps.src new file mode 100644 index 0000000..495cadd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lcmps.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Comparison +; Input: +; Operand1: +; EHL : 32 bits +; +; Operand2: +; ABC : 32 bits +; +; Output: +; Result: F : S,V flags from EHL - ABC +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lcmps + .assume adl=1 + +__lcmps equ 0001A8h diff --git a/frontends/calculator/CEdev/lib/shared/lcmpu.src b/frontends/calculator/CEdev/lib/shared/lcmpu.src new file mode 100644 index 0000000..5d7db79 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lcmpu.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Unsigned Comparison +; Input: +; Operand1: +; EHL : 32 bits +; +; Operand2: +; ABC : 32 bits +; +; Output: +; Result: F : S,V flags from EHL - ABC +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lcmpu + .assume adl=1 + +__lcmpu equ 0001ACh diff --git a/frontends/calculator/CEdev/lib/shared/lcmpzero.src b/frontends/calculator/CEdev/lib/shared/lcmpzero.src new file mode 100644 index 0000000..518c58a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lcmpzero.src @@ -0,0 +1,16 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set flag for comparison of 32-bit scalar with constant value zero +; Input: +; Operand1: E:HL register +; +; Output: +; Result: f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lcmpzero + .assume adl=1 + +__lcmpzero equ 0001B0h diff --git a/frontends/calculator/CEdev/lib/shared/ldiv.src b/frontends/calculator/CEdev/lib/shared/ldiv.src new file mode 100644 index 0000000..8da316b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ldiv.src @@ -0,0 +1,79 @@ +; Copyright (C) 1999-2008 Zilog, Inc, All Rights Reserved +;------------------------------------------------------------------------- +; ldiv function +; +; ldiv_t ldiv(long numer, long denom); +; +;------------------------------------------------------------------------- + .def _ldiv + .ref __ldivs + .ref __lrems + .assume adl=1 + +_ldiv: + + push bc + push af + push de + push hl + + ld hl,27 + add hl,sp + ld a,(hl) + dec hl + dec hl + dec hl + ld bc,(hl) ; aBC : denominator + dec hl + dec hl + dec hl + ld e,(hl) + dec hl + dec hl + dec hl + ld hl,(hl) ; eHL: Numerator + call __ldivs + push de + push hl ; eHL : quotient + + ld hl,27 + add hl,sp + ld e,(hl) + dec hl + dec hl + dec hl + ld hl,(hl) + call __lrems + ld a,e + ex de,hl ;aDE :remainder + + ld hl,21 + add hl,sp + ld hl,(hl) + push hl + + ld bc, 7 + add hl, bc + ld (hl),a + dec hl + dec hl + dec hl + ld (hl),de ; aDE : remainder + + pop hl + pop bc + ld (hl),bc ; bc : 3 LSB of quotient + pop bc + push hl + inc hl + inc hl + inc hl + ld (hl),c ; c : MSB of quotient + pop hl + + pop de + pop de + pop af + pop bc + + ret diff --git a/frontends/calculator/CEdev/lib/shared/ldivs.src b/frontends/calculator/CEdev/lib/shared/ldivs.src new file mode 100644 index 0000000..950209e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ldivs.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Division Signed +; Input: +; Operand1: +; eHL : 32 bits +; +; Operand2: +; aBC : 32 bits +; Output: +; Result: eHL : 24 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __ldivs + .assume adl=1 + +__ldivs equ 0001B4h diff --git a/frontends/calculator/CEdev/lib/shared/ldivu.src b/frontends/calculator/CEdev/lib/shared/ldivu.src new file mode 100644 index 0000000..c570423 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ldivu.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Division Unsigned +; Input: +; Operand1: +; EuHL : 32 bits +; +; Operand2: +; AuBC : 32 bits +; Output: +; Result: EuHL : 32 bits +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __ldivu, __ldvrmu + .assume adl=1 + +__ldivu equ 0001B8h +__ldvrmu equ 0001BCh diff --git a/frontends/calculator/CEdev/lib/shared/lldix.src b/frontends/calculator/CEdev/lib/shared/lldix.src new file mode 100644 index 0000000..379c4e7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lldix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long load e:hl,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: E:HL : 32 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lldix + .assume adl=1 + +__lldix equ 0001C0h diff --git a/frontends/calculator/CEdev/lib/shared/lldiy.src b/frontends/calculator/CEdev/lib/shared/lldiy.src new file mode 100644 index 0000000..8e308fd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lldiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long load e:hl,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: E:HL : 32 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lldiy + .assume adl=1 + +__lldiy equ 0001C4h diff --git a/frontends/calculator/CEdev/lib/shared/lmuls.src b/frontends/calculator/CEdev/lib/shared/lmuls.src new file mode 100644 index 0000000..8f75c0b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lmuls.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Multiplication Signed. +; Input: +; Operand1: +; ABC : 32 bits +; +; Operand2: +; EHL : 32 bits +; +; Output: +; Result: ABC : 32 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __lmuls + .assume adl=1 + +__lmuls equ 0001C8h diff --git a/frontends/calculator/CEdev/lib/shared/lmulu.src b/frontends/calculator/CEdev/lib/shared/lmulu.src new file mode 100644 index 0000000..f84fe24 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lmulu.src @@ -0,0 +1,22 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Multiplication Signed/Unsigned. +; Note: When multipying two n-bit values, the low-order n-bits +; of the product are the same, whether or not the values +; are considered signed or unsigned. +; Input: +; Operand1: +; EuHL : 32 bits +; +; Operand2: +; AuBC : 32 bits +; +; Output: +; Result: EuHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __lmulu + .assume adl=1 + +__lmulu equ 0001CCh diff --git a/frontends/calculator/CEdev/lib/shared/lneg.src b/frontends/calculator/CEdev/lib/shared/lneg.src new file mode 100644 index 0000000..3e8b407 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lneg.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long NEG. +; Input: +; Operand1: +; EuHL : 32 bit +; +; Output: +; Result: EuHL : 32 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lneg + .assume adl=1 + +__lneg equ 0001D0h diff --git a/frontends/calculator/CEdev/lib/shared/lnot.src b/frontends/calculator/CEdev/lib/shared/lnot.src new file mode 100644 index 0000000..774b304 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lnot.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long NOT. +; Input: +; Operand1: +; eHL : 32 bit +; +; Output: +; Result: eHL : 32 bit +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __lnot + .assume adl=1 + +__lnot equ 0001D4h diff --git a/frontends/calculator/CEdev/lib/shared/log2.src b/frontends/calculator/CEdev/lib/shared/log2.src new file mode 100644 index 0000000..5630503 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/log2.src @@ -0,0 +1,27 @@ + .def _log2 + .ref _log + .ref __fdiv + .ref __frameset0 + .assume adl=1 + +_log2: + call __frameset0 + ld c,(ix+9) + ld b,0 + push bc + ld bc,(ix+6) + push bc + call _log + push hl + pop bc + ld a,e + ld hl,3240472 + ld e,63 + call __fdiv + ld e,a + push bc + pop hl + ld sp,ix + pop ix + ret + diff --git a/frontends/calculator/CEdev/lib/shared/longjmp.src b/frontends/calculator/CEdev/lib/shared/longjmp.src new file mode 100644 index 0000000..0399ff0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/longjmp.src @@ -0,0 +1,4 @@ + .def _longjmp + .assume adl=1 + +_longjmp equ 000098h \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/lor.src b/frontends/calculator/CEdev/lib/shared/lor.src new file mode 100644 index 0000000..b9a3c95 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lor.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long OR. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lor + .assume adl=1 + +__lor equ 0001D8h diff --git a/frontends/calculator/CEdev/lib/shared/lrems.src b/frontends/calculator/CEdev/lib/shared/lrems.src new file mode 100644 index 0000000..958404b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lrems.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Modulus Signed. +; Input: +; Operand1: +; EHL : 32 bits (dividend) +; +; Operand2: +; ABC : 32 bits (divisor) +; +; Output: +; Result: EHL : 32 bit +; Registers Used: +; de,af +;------------------------------------------------------------------------- + .def __lrems + .assume adl=1 + +__lrems equ 0001DCh diff --git a/frontends/calculator/CEdev/lib/shared/lremu.src b/frontends/calculator/CEdev/lib/shared/lremu.src new file mode 100644 index 0000000..6ed28b1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lremu.src @@ -0,0 +1,19 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Modulus Unsigned. +; Input: +; Operand1: +; EuHL : 32 bits (dividend x) +; +; Operand2: +; AuBC : 32 bits (divisor y) +; +; Output: +; Result: EuHL : 32 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __lremu + .assume adl=1 + +__lremu equ 0001E0h diff --git a/frontends/calculator/CEdev/lib/shared/lshl.src b/frontends/calculator/CEdev/lib/shared/lshl.src new file mode 100644 index 0000000..3038a0d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lshl.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Shift Left +; Input: +; Operand1: +; AuBC : 32 bit value to be shifted +; +; Operand2: +; L : number of bits to shift +; +; Output: +; Result: AuBC : 32 bit result +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lshl + .assume adl=1 + +__lshl equ 0001E4h diff --git a/frontends/calculator/CEdev/lib/shared/lshrs.src b/frontends/calculator/CEdev/lib/shared/lshrs.src new file mode 100644 index 0000000..a8a35d1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lshrs.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Shift Right Signed +; Input: +; Operand1: +; AuBC : 32 bit value to be shifted by L +; +; Operand2: +; L : number of bits to shift +; +; Output: +; Result: AuBC : 32 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lshrs + .assume adl=1 + +__lshrs equ 0001E8h diff --git a/frontends/calculator/CEdev/lib/shared/lshru.src b/frontends/calculator/CEdev/lib/shared/lshru.src new file mode 100644 index 0000000..5334d7f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lshru.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Shift Right Unsigned +; Input: +; Operand1: +; AuBC : 32 bit value to be shifted by L +; +; Operand2: +; L : number of bits to shift +; +; Output: +; Result: AuBC : 32 bit +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lshru + .assume adl=1 + +__lshru equ 0001ECh diff --git a/frontends/calculator/CEdev/lib/shared/lstix.src b/frontends/calculator/CEdev/lib/shared/lstix.src new file mode 100644 index 0000000..22c014e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lstix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long store (ix+nnnnnn),H:HL +; Input: +; Operand1: +; BC : 24-bit offset from ix +; E:HL : 32-bit value +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lstix + .assume adl=1 + +__lstix equ 0001F0h diff --git a/frontends/calculator/CEdev/lib/shared/lstiy.src b/frontends/calculator/CEdev/lib/shared/lstiy.src new file mode 100644 index 0000000..e141502 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lstiy.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; long store (iy+nnnnnn),E:HL +; Input: +; Operand1: +; BC : 24-bit offset from iy +; E:HL : 32-bit value +; +; Output: +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lstiy + .assume adl=1 + +__lstiy equ 0001F4h diff --git a/frontends/calculator/CEdev/lib/shared/lsub.src b/frontends/calculator/CEdev/lib/shared/lsub.src new file mode 100644 index 0000000..ef51463 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lsub.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long Subtract Op1 - Op2 +; Input: +; Operand1: +; EHL : 32 bits +; +; Operand2: +; ABC : 32 bits +; +; Output: +; Result: EHL : 32 bits +; Registers Used: +; flags +;------------------------------------------------------------------------- + .def __lsub + .assume adl=1 + +__lsub equ 0001F8h diff --git a/frontends/calculator/CEdev/lib/shared/lxor.src b/frontends/calculator/CEdev/lib/shared/lxor.src new file mode 100644 index 0000000..c14d3cc --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/lxor.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Long XOR. +; Input: +; Operand1: +; ehl : 32 bit +; +; Operand2: +; abc : 32 bit +; +; Output: +; Result: ehl : 32 bit +; Registers Used: +; +;------------------------------------------------------------------------- + .def __lxor + .assume adl=1 + +__lxor equ 0001FCh diff --git a/frontends/calculator/CEdev/lib/shared/malloc.src b/frontends/calculator/CEdev/lib/shared/malloc.src new file mode 100644 index 0000000..2e6d2d9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/malloc.src @@ -0,0 +1,225 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\MALLOC.C" + .assume ADL=1 + SEGMENT BSS +__alloc_base: + DS 6 +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2011 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /* This implements a straight forward version of malloc, allocating */ +; 9 /* memory between the first unused address in RAM (__heapbot) and */ +; 10 /* the current stack pointer; the stack pointer being initialized to */ +; 11 /* the top of RAM (__heaptop). */ +; 12 /* The Zilog real time kernel, RZK, implements an entirely */ +; 13 /* different version of malloc. */ +; 14 /* */ +; 15 /* ZDS arranges that this malloc does not get linked into RZK */ +; 16 /* applications by placing the C runtime library, crt.lib or */ +; 17 /* crtD.lib, after the RZK libraries in the linker command file. */ +; 18 /* */ +; 19 /************************************************************************/ +; 20 #include +; 21 #include +; 22 +; 23 HEADER _alloc_base; /* empty list to get started */ + SEGMENT CODE +; 24 extern void *_s_sbrk(size_t); +; 25 +; 26 /************************************************* +; 27 * +; 28 * morecore - get more memory for heap +; 29 * +; 30 * Inputs: +; 31 * nu - number of units +; 32 * +; 33 * Returns: +; 34 * the address of the new memory +; 35 * +; 36 *************************************************/ +; 37 +; 38 static void* morecore(size_t nbytes) +; 39 { +_morecore: + LD HL,-3 + CALL __frameset +; 40 register void *cp; +; 41 if(cp = _s_sbrk(nbytes)) + LD BC,(IX+6) + PUSH BC + CALL __s_sbrk + POP BC + LD (IX+-3),HL + CALL __icmpzero + JR Z,L_1 +; 42 { +; 43 ((HEADER*)cp)->s.size=nbytes; + LD BC,(IX+6) + LD IY,(IX+-3) + LD (IY+3),BC +; 44 cp = ((HEADER*)cp) + 1; + LEA IY,IY+6 + LD (IX+-3),IY +; 45 } +L_1: +; 46 return(cp); + LD HL,(IX+-3) +; 47 } + LD SP,IX + POP IX + RET + + +;**************************** _morecore *************************** +;Name Addr/Register Size Type +;__s_sbrk IMPORT ----- function +;cp IX-3 3 variable +;nbytes IX+6 3 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + +; 48 +; 49 /************************************************* +; 50 * +; 51 * malloc - allocate heap storage +; 52 * +; 53 * Inputs: +; 54 * nbytes - number of bytes to allocate +; 55 * +; 56 * Returns: +; 57 * the address of the memory or NULL +; 58 * +; 59 *************************************************/ +; 60 +; 61 void *malloc(size_t nbytes) +; 62 { +_malloc: + LD HL,-9 + CALL __frameset +; 63 HEADER *p,*q; +; 64 size_t size = nbytes + sizeof(HEADER); + LD IY,(IX+6) + LEA IY,IY+6 + LD (IX+-6),IY +; 65 +; 66 if (size < nbytes) + LD BC,(IX+6) + LD HL,(IX+-6) + OR A,A + SBC HL,BC + JR NC,L_11 + OR A,A +; 67 return NULL; // Happens on malloc(-1) or like stupidity + SBC HL,HL + JR L_13 +L_11: +; 68 +; 69 for(p=&_alloc_base; q=p->s.ptr; p=q) + LD BC,__alloc_base + LD (IX+-9),BC + JR L_10 +L_8: +; 70 { +; 71 if (q->s.size >= size) + LD BC,(IX+-6) + LD IY,(IX+-3) + LD HL,(IY+3) + OR A,A + SBC HL,BC + JR C,L_9 +; 72 { +; 73 /* big enough */ +; 74 if (q->s.size <= size+sizeof(HEADER)) + LD IY,(IX+-6) + LEA HL,IY+6 + LD IY,(IX+-3) + LD BC,(IY+3) + OR A,A + SBC HL,BC + JR C,L_5 +; 75 { +; 76 /* exactly enough */ +; 77 p->s.ptr = q->s.ptr; + LD IY,(IX+-3) + LD BC,(IY+0) + LD IY,(IX+-9) + LD (IY+0),BC +; 78 } +; 79 else + JR L_6 +L_5: +; 80 { +; 81 q->s.size -= size; + LD IY,(IX+-3) + LD HL,(IY+3) + LD BC,(IX+-6) + OR A,A + SBC HL,BC + LD (IY+3),HL +; 82 q = (HEADER*)(((char*)q) + q->s.size); + LD BC,(IY+3) + LD HL,(IX+-3) + ADD HL,BC + LD (IX+-3),HL +; 83 q->s.size = size; + LD BC,(IX+-6) + LD IY,(IX+-3) + LD (IY+3),BC +; 84 } +L_6: +; 85 return((void*)(q+1)); + LD IY,(IX+-3) + LEA HL,IY+6 + JR L_13 +; 86 } +; 87 } +L_9: + LD BC,(IX+-3) + LD (IX+-9),BC +L_10: + LD IY,(IX+-9) + LD BC,(IY+0) + LD (IX+-3),BC + LD HL,BC + CALL __icmpzero + JR NZ,L_8 +; 88 return(morecore(size)); + LD BC,(IX+-6) + PUSH BC + CALL _morecore + POP BC +; 89 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _malloc *************************** +;Name Addr/Register Size Type +;__alloc_base STATIC 6 variable +;p IX-9 3 variable +;size IX-6 3 variable +;q IX-3 3 variable +;nbytes IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF __s_sbrk:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _malloc + XDEF __alloc_base + END diff --git a/frontends/calculator/CEdev/lib/shared/maptab.src b/frontends/calculator/CEdev/lib/shared/maptab.src new file mode 100644 index 0000000..8ec2d12 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/maptab.src @@ -0,0 +1,158 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\MAPTAB.C" + .assume ADL=1 + SEGMENT DATA +___maptab: + DB 128 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 96 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 24 + DB 24 + DB 24 + DB 24 + DB 24 + DB 24 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 8 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + DB 20 + DB 20 + DB 20 + DB 20 + DB 20 + DB 20 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 4 + DB 2 + DB 2 + DB 2 + DB 2 + DB 2 + XDEF ___maptab +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 /* Mapping table for isxxx functions */ +; 11 +; 12 #define CTL 0x80 /* control character */ +; 13 #define WS 0x40 /* whitespace character */ +; 14 #define SP 0x20 /* space character */ +; 15 #define HEX 0x10 /* hex digit (A-Z,a-z) */ +; 16 #define UC 0x08 /* uppercase letter */ +; 17 #define LC 0x04 /* lowercase letter */ +; 18 #define PUN 0x02 /* punctuation */ +; 19 #define DIG 0x01 /* decimal digit (0-9) */ +; 20 +; 21 __rom unsigned char __maptab[128] = { + END diff --git a/frontends/calculator/CEdev/lib/shared/memchr.src b/frontends/calculator/CEdev/lib/shared/memchr.src new file mode 100644 index 0000000..1dec0c8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memchr.src @@ -0,0 +1,6 @@ + .def _memchr + .assume adl=1 + +; void *memchr(const void *buf, int c, size_t count); + +_memchr equ 00009Ch diff --git a/frontends/calculator/CEdev/lib/shared/memcmp.src b/frontends/calculator/CEdev/lib/shared/memcmp.src new file mode 100644 index 0000000..4658030 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memcmp.src @@ -0,0 +1,6 @@ + .def _memcmp + .assume adl=1 + +; int memcmp(const void *buf1, const void *buf2, size_t count); + +_memcmp equ 0000A0h diff --git a/frontends/calculator/CEdev/lib/shared/memcpy.src b/frontends/calculator/CEdev/lib/shared/memcpy.src new file mode 100644 index 0000000..9ecc289 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memcpy.src @@ -0,0 +1,6 @@ + .def _memcpy + .assume adl=1 + +; void *memcpy( void *dest, const void *src, size_t count ); + +_memcpy equ 0000A4h diff --git a/frontends/calculator/CEdev/lib/shared/memmove.src b/frontends/calculator/CEdev/lib/shared/memmove.src new file mode 100644 index 0000000..4a219cd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memmove.src @@ -0,0 +1,6 @@ + .def _memmove + .assume adl=1 + +; void *memmove(void *dest, const void *src, size_t count); + +_memmove equ 0000A8h diff --git a/frontends/calculator/CEdev/lib/shared/memset.src b/frontends/calculator/CEdev/lib/shared/memset.src new file mode 100644 index 0000000..2ff1317 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/memset.src @@ -0,0 +1,26 @@ + .def _memset + .assume adl=1 + +; void *memset(void *dest, int c, size_t count); + +_memset: + pop iy + pop hl + pop de + pop bc + push bc + push de + push hl + push iy + cpi + add hl,bc + ret c + dec hl + ld (hl),e + ret po + push hl + pop de + dec de + lddr + ret + diff --git a/frontends/calculator/CEdev/lib/shared/os.src b/frontends/calculator/CEdev/lib/shared/os.src new file mode 100644 index 0000000..23e0852 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/os.src @@ -0,0 +1,14 @@ +; --- +; call an os or bootcode routine +; --- + + .def __OS + .assume adl=1 + +__OS: + pop de + pop hl + push hl + push de + ld iy,13631616 + jp (hl) diff --git a/frontends/calculator/CEdev/lib/shared/os_textbuffer.src b/frontends/calculator/CEdev/lib/shared/os_textbuffer.src new file mode 100644 index 0000000..0f3c106 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/os_textbuffer.src @@ -0,0 +1,22 @@ +; --- +; enables / disables homescreen text buffering which can destroy bss / heap +; --- + + .def _os_DisableHomeTextBuffer + .def _os_EnableHomeTextBuffer + .assume adl=1 + +_os_DisableHomeTextBuffer: + ld iy,$d00080 + res 1,(iy + $0d) ; no text buffer + res 3,(iy + $4a) ; use first shadow buffer + set 5,(iy + $4c) ; only display + ret + +_os_EnableHomeTextBuffer: + ld iy,$d00080 + set 1,(iy + $0d) ; use text buffer + res 3,(iy + $4a) ; use first shadow buffer + res 5,(iy + $4c) ; use shadow buffer + ret + diff --git a/frontends/calculator/CEdev/lib/shared/print_globals.src b/frontends/calculator/CEdev/lib/shared/print_globals.src new file mode 100644 index 0000000..fa4f532 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/print_globals.src @@ -0,0 +1,47 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\PRINT_GLOBALS.C" + .assume ADL=1 + SEGMENT BSS +___print_buff: + DS 14 +___print_fmt: + DS 19 +___print_len: + DS 1 +___print_leading_char: + DS 1 +___print_out: + DS 3 + SEGMENT DATA +___print_xputch: + DW24 ___print_sputch + XREF ___print_sputch:ROM + XDEF ___print_xputch + XDEF ___print_out + XDEF ___print_leading_char + XDEF ___print_len + XDEF ___print_fmt + XDEF ___print_buff +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 +; 7 void __print_sputch(char ch); +; 8 +; 9 /* Global data used by the printf support functions. */ +; 10 /* The compiler may manipulate this data directly to bypass the runtime */ +; 11 /* parsing of (s)printf formats. */ +; 12 char __print_buff[14]; +; 13 struct fmt_type __print_fmt; +; 14 unsigned char __print_len; +; 15 char __print_leading_char; // Initial +, -, or space for number +; 16 char *__print_out; +; 17 +; 18 // This points to __print_sputch except when printf is active. +; 19 // This is so that the more commonly used function does not need to set it. +; 20 void (*__print_xputch)(char) = __print_sputch; + END diff --git a/frontends/calculator/CEdev/lib/shared/print_putch.src b/frontends/calculator/CEdev/lib/shared/print_putch.src new file mode 100644 index 0000000..d4ea5c2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/print_putch.src @@ -0,0 +1,51 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\PRINT_PUTCH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 #include +; 7 #include +; 8 +; 9 extern void (*__print_xputch)(char); +; 10 +; 11 /* Send a character to the printf/sprintf destination */ +; 12 /* The compiler may generate direct calls to this to bypass the runtime */ +; 13 /* parsing of printf formats. */ +; 14 +; 15 void __print_putch(char ch) { +___print_putch: + CALL __frameset0 +; 16 (*__print_xputch)(ch); + LD C,(IX+6) + LD B,0 + PUSH BC + LD IY,(___print_xputch) + CALL __indcall + POP BC +; 17 } + LD SP,IX + POP IX + RET + + +;**************************** ___print_putch *************************** +;Name Addr/Register Size Type +;___print_xputch IMPORT 3 variable +;ch IX+6 1 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_xputch:ROM + XREF __indcall:ROM + XREF __frameset0:ROM + XDEF ___print_putch + END diff --git a/frontends/calculator/CEdev/lib/shared/print_putstring.src b/frontends/calculator/CEdev/lib/shared/print_putstring.src new file mode 100644 index 0000000..011e001 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/print_putstring.src @@ -0,0 +1,246 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\PRINT_PUTSTRING.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 #include +; 7 #include +; 8 +; 9 /* Send a string to the printf/sprintf destination */ +; 10 /* The compiler may generate direct calls to this to bypass the runtime */ +; 11 /* parsing of printf formats. */ +; 12 +; 13 void __print_putch(char ch); +; 14 +; 15 void __print_sendstring(char *sp) +; 16 { +___print_sendstring: + LD HL,-16 + CALL __frameset +; 17 unsigned char i = 0; + LD (IX+-1),0 +; 18 unsigned short j, jmax; +; 19 char* s = sp; + LD BC,(IX+6) + LD (IX+-8),BC +; 20 char padRight = 0; + LD (IX+-5),0 +; 21 if (__print_fmt.field_width != 0) + LD A,(___print_fmt+5) + OR A,A + JR Z,L_16 +; 22 { +; 23 padRight = ((__print_fmt.flags & FMT_FLAG_MINUS) || __print_fmt.field_width < 0); + LD A,(___print_fmt+1) + AND A,1 + JR NZ,L_1 + LD A,(___print_fmt+5) + OR A,A + JP P,L_2 +L_1: + LD BC,1 + LD (IX+-13),BC + JR L_3 +L_2: + LD BC,0 + LD (IX+-13),BC +L_3: + LD A,(IX+-13) + LD (IX+-5),A +; 24 if (!padRight) + OR A,A + JR NZ,L_16 +; 25 { +; 26 char pad = strlen(s); + LD BC,(IX+6) + PUSH BC + CALL _strlen + POP BC + LD (IX+-2),L +; 27 if (__print_fmt.flags & FMT_FLAG_PRECISION && pad > __print_fmt.precision) + LD A,(___print_fmt+1) + AND A,16 + JR Z,L_7 + LD A,(___print_fmt+6) + CP A,(IX+-2) + JP P,L_7 +; 28 pad = __print_fmt.precision; + LD A,(___print_fmt+6) + LD (IX+-2),A +L_7: +; 29 +; 30 pad = __print_fmt.field_width-pad; + LD A,(___print_fmt+5) + SUB A,(IX+-2) + LD (IX+-2),A +; 31 while(pad > 0) + JR L_10 +L_11: +; 32 { +; 33 __print_putch(' '); + LD BC,32 + PUSH BC + CALL ___print_putch + POP BC +; 34 i++; + INC (IX+-1) +; 35 pad--; + DEC (IX+-2) +; 36 } +L_10: + XOR A,A + CP A,(IX+-2) + CALL __setflag + JP M,L_11 +; 37 } +; 38 } +L_16: +; 39 /* If precision not specified, make it 127 */ +; 40 if (!(__print_fmt.flags & FMT_FLAG_PRECISION)) + LD A,(___print_fmt+1) + AND A,16 + JR NZ,L_15 +; 41 jmax = 0xffff; + LD (IX+-10),255 + LD (IX+-9),255 +; 42 else + JR L_23 +L_15: +; 43 jmax = (unsigned)__print_fmt.precision; + LD A,(___print_fmt+6) + LD B,A + SEXT HL + LD (IX+-10),B + LD (IX+-9),H +L_23: +; 44 +; 45 for (j=0;j +; 6 +; 7 /* Send a character to the sprintf destination */ +; 8 +; 9 extern char *__print_out; +; 10 +; 11 void __print_sputch(char ch) { +___print_sputch: + CALL __frameset0 +; 12 *__print_out++ = ch; + LD HL,(___print_out) + LD A,(IX+6) + LD (HL),A + LD BC,(___print_out) + INC BC + LD (___print_out),BC +; 13 } + LD SP,IX + POP IX + RET + + +;**************************** ___print_sputch *************************** +;Name Addr/Register Size Type +;___print_out IMPORT 3 variable +;ch IX+6 1 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_out:ROM + XREF __frameset0:ROM + XDEF ___print_sputch + END diff --git a/frontends/calculator/CEdev/lib/shared/qsort.src b/frontends/calculator/CEdev/lib/shared/qsort.src new file mode 100644 index 0000000..675dff9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/qsort.src @@ -0,0 +1,378 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\QSORT.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 /************************************************* +; 13 * +; 14 * qsort - Quick sort +; 15 * +; 16 * Inputs: +; 17 * base - base of array to be sorted +; 18 * nel - number of elements +; 19 * size - size of each element +; 20 * compar - pointer to function for comparison +; 21 * +; 22 * Returns: +; 23 * nothing +; 24 * +; 25 *************************************************/ +; 26 static void swapmem(char *a,char *b,size_t size) +; 27 { +_swapmem: + LD HL,-4 + CALL __frameset +; 28 register char t; +; 29 register size_t i; +; 30 +; 31 for (i=0;il = i; + LD BC,(IX+-3) + LD IY,(IX+-9) + LD (IY+0),BC +; 82 sp->r = r; + LD BC,(IX+-12) + LD (IY+3),BC +; 83 ++sp; + LEA IY,IY+6 + LD (IX+-9),IY +; 84 } +L_19: +; 85 r = j; /* continue sorting left partition */ + LD BC,(IX+-6) + LD (IX+-12),BC +; 86 } +; 87 else { + JR L_26 +L_23: +; 88 if (base < j) { /* stack request for left partition */ + LD BC,(IX+-6) + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NC,L_21 +; 89 sp->l = base; + LD BC,(IX+6) + LD IY,(IX+-9) + LD (IY+0),BC +; 90 sp->r = j; + LD BC,(IX+-6) + LD (IY+3),BC +; 91 ++sp; + LEA IY,IY+6 + LD (IX+-9),IY +; 92 } +L_21: +; 93 base = i; /* continue sorting right partition */ + LD BC,(IX+-3) + LD (IX+6),BC +; 94 } +; 95 } while (base < r); +L_26: + LD BC,(IX+-12) + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR C,L_25 +; 96 +; 97 if (sp <= stack) + LD BC,(IX+-9) + LEA HL,IX+-111 + OR A,A + SBC HL,BC + JR NC,L_32 +; 98 break; +; 99 --sp; + LD IY,(IX+-9) + LEA BC,IY+-6 + LD (IX+-9),BC +; 100 base = sp->l; + LD IY,(IX+-9) + LD BC,(IY+0) + LD (IX+6),BC +; 101 r = sp->r; + LD BC,(IY+3) + LD (IX+-12),BC +; 102 } + JR L_25 +; 103 } +L_32: + LD SP,IX + POP IX + RET + + +;**************************** _qsort *************************** +;Name Addr/Register Size Type +;stack IX-111 96 variable +;x IX-15 3 variable +;r IX-12 3 variable +;sp IX-9 3 variable +;j IX-6 3 variable +;i IX-3 3 variable +;compar IX+15 3 parameter +;size IX+12 3 parameter +;nel IX+9 3 parameter +;base IX+6 3 parameter + + +; Stack Frame Size: 129 (bytes) +; Spill Code: 0 (instruction) + + + XREF __indcall:ROM + XREF __idivu:ROM + XREF __imulu:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __ishru_b:ROM + XDEF _qsort + END diff --git a/frontends/calculator/CEdev/lib/shared/rand.src b/frontends/calculator/CEdev/lib/shared/rand.src new file mode 100644 index 0000000..ea569cf --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/rand.src @@ -0,0 +1,13 @@ + .ref _random + .def _rand + .assume adl=1 + +; int rand(void); + +_rand: + call _random + ld de,8388608 + sbc hl,de + ret p + add hl,de + ret diff --git a/frontends/calculator/CEdev/lib/shared/random.src b/frontends/calculator/CEdev/lib/shared/random.src new file mode 100644 index 0000000..ede9051 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/random.src @@ -0,0 +1,110 @@ +; --- +; uint32_t random(void) +; --- + + .def _random + .def __state + .assume adl=1 + +; https://github.com/MersenneTwister-Lab/XSadd/blob/master/xsadd.h#L75 +; using shift parameters (19, 21, 8) instead of (15, 18, 11) + +; uint32_t xsadd(uint32_t state[static 4]) +; { +; uint32_t s0, s1, s2, t0, t1, t2, t3, z, result; +; t0 = state[0]; +; state[0] = state[1]; state[1] = state[2]; state[2] = state[3]; +; s0 = t0 << 19; +; t1 = t0 ^ s0; +; s1 = t1 >> 21; +; t2 = t1 ^ s1; +; z = state[3]; +; s2 = z << 8; +; t3 = t2 ^ s2; +; state[3] = t3; +; result = t3 + state[2]; +; return result; +; } + + segment data +__state: + dl 0d0e0f10h,090a0b0ch,05060708h,01020304h + + segment code +_random: +; Read state[0] and perform state shifting. + ld iy,__state ; iy = &state[0] + ld hl,(iy+0*4+0) ; hl = hl(state[0]) + push hl + ld hl,(iy+0*4+2) ; hl = eu(state[0]) + push hl + lea hl,iy+1*4 ; hl = &state[1] + lea de,iy+0*4 ; de = &state[0] + ld bc,3*4 + ldir ; state[0] = state[1] + ; state[1] = state[2] + ; state[2] = state[3] + pop bc + pop de ; bcde = state[0] == t0 +; +; s0 = t0 << 19 ==> s0h == 0 ==> t1h = t0h +; s0l == 0 ==> t1l = t0l +; +; s1 = t1 >> 21 ==> s1e == 0 ==> t2e = t1e +; s1u == 0 ==> t2u = t1u +; +; s2 = z << 8 ==> s2e == zu ==> t3e == t2e ^ s2e == t1e ^ s2e == t0e ^ s0e ^ s2e +; s2u == zh ==> t3u == t2u ^ s2u == t1u ^ s2u == t0u ^ s0u ^ s2u +; s2h == zl ==> t3h == t2h ^ s2h == t1h ^ s1h ^ s2h == t0h ^ s1h ^ s2h +; s2l == 0 ==> t3l == t2l == t1l ^ s1l == t0l ^ s1l +; +; Calculate s0. + ld h,d + ld l,e ; hl = t0hl == t0 << 16 + add hl,hl + add hl,hl + add hl,hl ; hl = t0 << 19 = s0eu + ; h = s0e + ; l = s0u +; Calculate t1e and t3e. + ld a,b ; a = t0e + xor a,h ; a = t0e ^ s0e == t1e + ld h,a ; h = t1e + xor a,(iy+3*4+2) ; a = t1e ^ zu == t2e ^ s2e == t3e + ld (iy+3*4+3),a ; e(state[3]) = t3e + ld b,a ; b = t3e +; Calculate t1u and t3u. + ld a,c ; a = t0u + xor a,l ; a = t0u ^ s0u == t1u + ld l,a ; l = t1u + ; hl = t1eu == t1 >> 16 + xor a,(iy+3*4+1) ; a = t1u ^ zh == t2u ^ s2u == t3u + ld (iy+3*4+2),a ; u(state[3]) = t3u +; Calculate s1. + xor a,a ; a = 0 + add.s hl,hl + adc a,a + add.s hl,hl + adc a,a + add.s hl,hl + adc a,a ; ahl = (t1 >> 16) << 3 + ; ah = ((t1 >> 16) << 3) >> 8 == t1 >> 21 == s1hl + ; a = s1h + ; h = s1l +; Calculate t3h. + xor a,d ; a = s1h ^ t0h === s1h ^ t1h == t2h + xor a,(iy+3*4+0) ; a = t2h ^ zl == t2h ^ s2h == t3h + ld (iy+3*4+1),a ; h(state[3]) = t3h +; Calculate t3l. + ld a,e ; a = t0l == t1l + xor a,h ; a = t1l ^ s1l == t2l == t3l + ld (iy+3*4+0),a ; l(state[3]) = t3l +; Calculate result. + ld hl,(iy+3*4) + ld a,b ; auhl = t3 + ld de,(iy+2*4) + ld c,(iy+2*4+3) ; cude = state[2] + add hl,de + adc a,c ; auhl = t3 + state[2] = result + ld e,a ; euhl = result + ret diff --git a/frontends/calculator/CEdev/lib/shared/realloc.src b/frontends/calculator/CEdev/lib/shared/realloc.src new file mode 100644 index 0000000..a3d26fd --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/realloc.src @@ -0,0 +1,125 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\REALLOC.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 #include +; 12 #include +; 13 +; 14 /************************************************* +; 15 * +; 16 * realloc - change the size of an allocated block +; 17 * +; 18 * Inputs: +; 19 * ptr - pointer to allocated memory +; 20 * size - new size of memory +; 21 * +; 22 * Returns: +; 23 * pointer to block - may have changed +; 24 * +; 25 *************************************************/ +; 26 void *realloc(void *ptr,size_t size) { +_realloc: + LD HL,-6 + CALL __frameset +; 27 HEADER *h; +; 28 void *p; +; 29 +; 30 if (ptr) { + LD HL,(IX+6) + CALL __icmpzero + JR Z,L_5 +; 31 h = (HEADER *)((char *)ptr - sizeof(HEADER)); + LD IY,(IX+6) + LEA BC,IY+-6 + LD (IX+-6),BC +; 32 if (h->s.size >= (size+sizeof(HEADER))) { + LD IY,(IX+9) + LEA BC,IY+6 + LD IY,(IX+-6) + LD HL,(IY+3) + OR A,A + SBC HL,BC + JR C,L_2 +; 33 return(ptr); + LD HL,(IX+6) + JR L_6 +; 34 } +L_2: +; 35 +; 36 if (p = malloc(size)) { + LD BC,(IX+9) + PUSH BC + CALL _malloc + POP BC + LD (IX+-3),HL + CALL __icmpzero + JR Z,L_3 +; 37 memcpy(p,ptr,size); + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _memcpy + POP BC + POP BC + POP BC +; 38 free(ptr); + LD BC,(IX+6) + PUSH BC + CALL _free + POP BC +; 39 } +L_3: +; 40 return(p); + LD HL,(IX+-3) + JR L_6 +; 41 } +L_5: +; 42 return(malloc(size)); + LD BC,(IX+9) + PUSH BC + CALL _malloc + POP BC +; 43 } +L_6: + LD SP,IX + POP IX + RET + + +;**************************** _realloc *************************** +;Name Addr/Register Size Type +;_free IMPORT ----- function +;_memcpy IMPORT ----- function +;_malloc IMPORT ----- function +;h IX-6 3 variable +;p IX-3 3 variable +;size IX+9 3 parameter +;ptr IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _free:ROM + XREF _malloc:ROM + XREF _memcpy:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _realloc + END diff --git a/frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src b/frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src new file mode 100644 index 0000000..ddae792 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removeallbreakpoints.src @@ -0,0 +1,12 @@ +; --- +; remove all breakpoints +; --- + + .def _dbg_RemoveAllBreakpoints + .assume adl=1 + +_dbg_RemoveAllBreakpoints: + scf + sbc hl,hl + ld (hl),9 + ret diff --git a/frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src b/frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src new file mode 100644 index 0000000..7171ba4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removeallwatchpoints.src @@ -0,0 +1,12 @@ +; --- +; remove all watchpoints +; --- + + .def _dbg_RemoveAllWatchpoints + .assume adl=1 + +_dbg_RemoveAllWatchpoints: + scf + sbc hl,hl + ld (hl),10 + ret diff --git a/frontends/calculator/CEdev/lib/shared/removebreakpoint.src b/frontends/calculator/CEdev/lib/shared/removebreakpoint.src new file mode 100644 index 0000000..d2c4b9b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removebreakpoint.src @@ -0,0 +1,16 @@ +; --- +; remove breakpoint +; --- + + .def _dbg_RemoveBreakpoint + .assume adl=1 + +_dbg_RemoveBreakpoint: + pop hl + pop de + push de + push hl + scf + sbc hl,hl + ld (hl),4 + ret diff --git a/frontends/calculator/CEdev/lib/shared/removewatchpoint.src b/frontends/calculator/CEdev/lib/shared/removewatchpoint.src new file mode 100644 index 0000000..a096d15 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/removewatchpoint.src @@ -0,0 +1,16 @@ +; --- +; remove watchpoint +; --- + + .def _dbg_RemoveWatchpoint + .assume adl=1 + +_dbg_RemoveWatchpoint: + pop hl + pop de + push de + push hl + scf + sbc hl,hl + ld (hl),8 + ret diff --git a/frontends/calculator/CEdev/lib/shared/round.src b/frontends/calculator/CEdev/lib/shared/round.src new file mode 100644 index 0000000..e78e237 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/round.src @@ -0,0 +1,44 @@ + .def _round + .ref __frameset0 + .ref __fcmp + .ref __fadd + .ref __fsub + .ref _floor + .ref _ceil + .assume adl=1 + +_round: + call __frameset0 + ld hl,(ix+6) + ld e,(ix+9) + ld bc,0 + xor a,a + call __fcmp + push af + or a,a + sbc hl,hl + ld e,63 + ld bc,(ix+6) + pop af + ld a,(ix+9) + jp m,IsLessZero + call __fadd + or a,a + sbc hl,hl + ld l,a + push bc + push hl + call _floor + jr Finish +IsLessZero: + call __fsub + or a,a + sbc hl,hl + ld l,a + push bc + push hl + call _ceil +Finish: + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/sand.src b/frontends/calculator/CEdev/lib/shared/sand.src new file mode 100644 index 0000000..a39e220 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sand.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short AND. +; Input: +; Operand1: +; hl : 16 bit +; +; Operand2: +; bc : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __sand + .assume adl=1 + +__sand equ 000200h diff --git a/frontends/calculator/CEdev/lib/shared/sbrk.src b/frontends/calculator/CEdev/lib/shared/sbrk.src new file mode 100644 index 0000000..ab1cf1b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sbrk.src @@ -0,0 +1,49 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Heap allocation routine s_sbrk +; Input: +; argument : 24 bit - number of bytes requested +; +; Output: +; Result: HL: 24 bit address of memory allocated +; HL = 0 if no memory available + +; Registers Used: +; +;------------------------------------------------------------------------- + .assume adl=1 + .ref __heapbot + .ref __heaptop + .def __s_sbrk + + SEGMENT DATA +__sbrkbase: + .trio __heapbot + + SEGMENT CODE +__s_sbrk: + ld hl,3 + add hl,sp + ld hl,(hl) ;nbytes + ld de,(__sbrkbase) + add hl,de + jr c,_fail + + ; fail if hl >= sp. + ; hl is now, or will be, the next un-allocated address = minimal value + ; for sp that will not corrupt allocated data or that writing to + ; allocated data may corrupt the stack. + ; Actually, if hl is anywhere close to sp we're probably in trouble :( + + push hl + sbc hl,sp + pop hl + jr nc,_fail +_ok: + ex hl,de + ld (__sbrkbase),de + ret +_fail: + or a,a + sbc hl,hl + ret diff --git a/frontends/calculator/CEdev/lib/shared/scmpzero.src b/frontends/calculator/CEdev/lib/shared/scmpzero.src new file mode 100644 index 0000000..5c62a13 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/scmpzero.src @@ -0,0 +1,16 @@ +; (c) Copyright 2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set flag for comparison of 16-bit scalar with constant value zero +; Input: +; Operand1: HL register +; +; Output: +; Result: f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __scmpzero + .assume adl=1 + +__scmpzero equ 000204h diff --git a/frontends/calculator/CEdev/lib/shared/sdivs.src b/frontends/calculator/CEdev/lib/shared/sdivs.src new file mode 100644 index 0000000..75cda77 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sdivs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Division Signed +; Input: +; Operand1: +; hl : 16 bits x +; +; Operand2: +; bc : 16 bits y +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sdivs + .assume adl=1 + +__sdivs equ 000208h diff --git a/frontends/calculator/CEdev/lib/shared/sdivu.src b/frontends/calculator/CEdev/lib/shared/sdivu.src new file mode 100644 index 0000000..2002728 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sdivu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Division Unsigned +; Input: +; Operand1: +; hl : 16 bits +; +; Operand2: +; bc : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sdivu + .assume adl=1 + +__sdivu equ 00020Ch + diff --git a/frontends/calculator/CEdev/lib/shared/seqcase.src b/frontends/calculator/CEdev/lib/shared/seqcase.src new file mode 100644 index 0000000..5c4a084 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/seqcase.src @@ -0,0 +1,25 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Returns to case label +; Data at Return Address: +; DW numCases 0 +; DW24 startValue 2 +; DW24 Lab1 5 +; DW24 Lab2 8 +; ... +; DW24 defaultLab 5+3*numCases +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __seqcase + .assume adl=1 + +__seqcase equ 000210h \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/seqcased.src b/frontends/calculator/CEdev/lib/shared/seqcased.src new file mode 100644 index 0000000..d6dcea1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/seqcased.src @@ -0,0 +1,26 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; CASE branch resolution. +; +; Input: +; Operand3: +; hl : 24 bit value to match in table +; +; Output: +; Result: hl : 24 bit address of case jp to take +; Registers Used: +; +; Data at Return Address: +; JP (HL) 0 +; DW numCases 1 +; DW24 startValue 3 +; DW24 Lab1 6 +; DW24 Lab2 9 +; ... +; DW24 defaultLab 6+3*numCases +; +;------------------------------------------------------------------------- + .def __seqcaseD + .assume adl=1 + +__seqcaseD equ 000214h diff --git a/frontends/calculator/CEdev/lib/shared/setbreakpoint.src b/frontends/calculator/CEdev/lib/shared/setbreakpoint.src new file mode 100644 index 0000000..5a1e929 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setbreakpoint.src @@ -0,0 +1,16 @@ +; --- +; set breakpoint +; --- + + .def _dbg_SetBreakpoint + .assume adl=1 + +_dbg_SetBreakpoint: + pop hl + pop de + push de + push hl + scf + sbc hl,hl + ld (hl),3 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setflag.src b/frontends/calculator/CEdev/lib/shared/setflag.src new file mode 100644 index 0000000..b710b95 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setflag.src @@ -0,0 +1,22 @@ +; (c) Copyright 2007-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Set Sign flag for signed comparison +; s <-- s xor v +; Input: +; Operand1: f register +; +; Output: +; Result: updated f register +; +; Registers Used: +; None +;------------------------------------------------------------------------- +; if ( V == 0) +; S = S xor 0 -> S = S +; if ( V != 0) +; S = S xor V +;------------------------------------------------------------------------- + .def __setflag + .assume adl=1 + +__setflag equ 000218h diff --git a/frontends/calculator/CEdev/lib/shared/setjmp.src b/frontends/calculator/CEdev/lib/shared/setjmp.src new file mode 100644 index 0000000..9bc7c37 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setjmp.src @@ -0,0 +1,6 @@ + .def _setjmp + .assume adl=1 + +; int setjmp(jmp_buf env); + +_setjmp equ 0000B8h diff --git a/frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src b/frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src new file mode 100644 index 0000000..7ada983 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setreadwatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set read watchpoint +; --- + + .def _dbg_SetReadWatchpoint + .assume adl=1 + +_dbg_SetReadWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),5 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src b/frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src new file mode 100644 index 0000000..f303929 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setreadwritewatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set write watchpoint +; --- + + .def _dbg_SetReadWriteWatchpoint + .assume adl=1 + +_dbg_SetReadWriteWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),7 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setwatchpoint.src b/frontends/calculator/CEdev/lib/shared/setwatchpoint.src new file mode 100644 index 0000000..bf148d4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setwatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set watchpoint +; --- + + .def _dbg_SetWatchpoint + .assume adl=1 + +_dbg_SetWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),11 + ret diff --git a/frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src b/frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src new file mode 100644 index 0000000..62bb06f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/setwritewatchpoint.src @@ -0,0 +1,18 @@ +; --- +; set write watchpoint +; --- + + .def _dbg_SetWriteWatchpoint + .assume adl=1 + +_dbg_SetWriteWatchpoint: + pop hl + pop de + pop bc + push bc + push de + push hl + scf + sbc hl,hl + ld (hl),6 + ret diff --git a/frontends/calculator/CEdev/lib/shared/sldix.src b/frontends/calculator/CEdev/lib/shared/sldix.src new file mode 100644 index 0000000..45c8006 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sldix.src @@ -0,0 +1,17 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; short load hl,(ix+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from ix +; +; Output: +; Result: hl : 16 bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sldix + .assume adl=1 + +__sldix equ 00021Ch diff --git a/frontends/calculator/CEdev/lib/shared/sldiy.src b/frontends/calculator/CEdev/lib/shared/sldiy.src new file mode 100644 index 0000000..2a820ce --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sldiy.src @@ -0,0 +1,18 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; short load hl,(iy+nnnnnn) +; Input: +; Operand1: +; BC : 24-bit offset from iy +; +; Output: +; Result: hl : 16-bit +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sldiy + .assume adl=1 + +__sldiy equ 000220h + diff --git a/frontends/calculator/CEdev/lib/shared/smuls.src b/frontends/calculator/CEdev/lib/shared/smuls.src new file mode 100644 index 0000000..4ac0260 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/smuls.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Multiply Signed +; Input: +; Operand1: +; bc : 16 bits +; +; Operand2: +; hl : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __smuls + .assume adl=1 + +__smuls equ 000224h + diff --git a/frontends/calculator/CEdev/lib/shared/smulu.src b/frontends/calculator/CEdev/lib/shared/smulu.src new file mode 100644 index 0000000..4433a62 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/smulu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Multiply Unsigned +; Input: +; Operand1: +; BC : 16 bits +; +; Operand2: +; HL : 16 bits +; +; Output: +; Result: HL : 16 bits +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __smulu + .assume adl=1 + +__smulu equ 000228h + diff --git a/frontends/calculator/CEdev/lib/shared/sneg.src b/frontends/calculator/CEdev/lib/shared/sneg.src new file mode 100644 index 0000000..4a3fb47 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sneg.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short NEG. +; Input: +; Operand1: +; hl : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; None +;------------------------------------------------------------------------- + .def __sneg + .assume adl=1 + +__sneg equ 00022Ch \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/snot.src b/frontends/calculator/CEdev/lib/shared/snot.src new file mode 100644 index 0000000..307da76 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/snot.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short NOT. +; Input: +; Operand1: +; hl : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __snot + .assume adl=1 + +__snot equ 000230h diff --git a/frontends/calculator/CEdev/lib/shared/sor.src b/frontends/calculator/CEdev/lib/shared/sor.src new file mode 100644 index 0000000..119a003 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sor.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short OR. +; Input: +; Operand1: +; hl : 16 bit +; +; Operand2: +; bc : 16 bit +; +; Output: +; Result: hl : 16 bit +; hl OR bc +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __sor + .assume adl=1 + +__sor equ 000234h diff --git a/frontends/calculator/CEdev/lib/shared/sprintf.src b/frontends/calculator/CEdev/lib/shared/sprintf.src new file mode 100644 index 0000000..7c09553 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sprintf.src @@ -0,0 +1,7 @@ + .def _sprintf + .assume adl=1 + +; int sprintf (char * str, const char * format, ...); + +_sprintf equ 0000BCh + diff --git a/frontends/calculator/CEdev/lib/shared/sqrtf.src b/frontends/calculator/CEdev/lib/shared/sqrtf.src new file mode 100644 index 0000000..563d151 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sqrtf.src @@ -0,0 +1,37 @@ +;-------------------------------------------------------------- +; +; IEEE Single precision square root +; Copyright 2003-2008 Zilog, Inc. +; +;-------------------------------------------------------------- +; +; INPUTS: +; Operand1: +; (stack) : 32 bit IEEE format +; +; OUTPUTS: +; Result: +; EuHL : 32 bit IEEE format result +; +; ALGORITHM: +; This algorithm is very similar to that used for binary +; division; readers should be familiar with that +; algorithm of repetitive compare/subtract, and shift. +; This algorithm uses the same concepts, except that the +; number compared/subtracted is 2*x+1, where 'x' is the +; developing result. Briefly, if 'y' is the input parameter, +; and 'x' is the result developed (and subtracted out) so +; far, then 'y - x^2' is the residual value. If the residual +; is greater than '2*x + 1', then we subtract that out, +; and add one to x; this means that the new residual is +; 'y - (x+1)^2'. Repetitively applied with shifting, 'x^2' +; approaches the value of 'y'. +; +; Registers Used: +; AF,BC,D +; +;-------------------------------------------------------------- + .def _sqrtf + .assume adl=1 + +_sqrtf equ 000298h diff --git a/frontends/calculator/CEdev/lib/shared/srand.src b/frontends/calculator/CEdev/lib/shared/srand.src new file mode 100644 index 0000000..bbcf8f2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/srand.src @@ -0,0 +1,12 @@ + .ref __setstate + .def _srand + .assume adl=1 + +; void srand(unsigned int seed); + +_srand: + pop bc + ex (sp),hl + push bc + xor a,a + jp __setstate diff --git a/frontends/calculator/CEdev/lib/shared/srandom.src b/frontends/calculator/CEdev/lib/shared/srandom.src new file mode 100644 index 0000000..0aa5189 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/srandom.src @@ -0,0 +1,29 @@ +; --- +; void srandom(uint32_t seed) +; --- + + .ref __state + .def _srandom + .def __setstate + .assume adl=1 + +_MemClear equ 00210E0h + +_srandom: + pop bc + pop de + ex (sp),hl ; lude = seed + push de + push bc + ex de,hl + ld a,e ; auhl = seed +__setstate: + ld (__state),hl + ld hl,__state+3 + ld (hl),a + ld b,12 +__setstateloop: + inc hl + ld (hl),b + djnz __setstateloop + ret diff --git a/frontends/calculator/CEdev/lib/shared/srems.src b/frontends/calculator/CEdev/lib/shared/srems.src new file mode 100644 index 0000000..54b2907 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/srems.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Modulus Signed +; Input: +; Operand1: +; hl : 16 bits +; +; Operand2: +; bc : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; +;------------------------------------------------------------------------- + .ref __irems + .def __srems + .assume adl=1 + +__srems equ 000238h diff --git a/frontends/calculator/CEdev/lib/shared/sremu.src b/frontends/calculator/CEdev/lib/shared/sremu.src new file mode 100644 index 0000000..6ecd4aa --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sremu.src @@ -0,0 +1,21 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Modulus Unsigned +; Input: +; Operand1: +; hl : 16 bits +; +; Operand2: +; bc : 16 bits +; +; Output: +; Result: hl : 16 bits +; +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __sremu + .ref __iremu + .assume adl=1 + +__sremu equ 00023Ch diff --git a/frontends/calculator/CEdev/lib/shared/sshl.src b/frontends/calculator/CEdev/lib/shared/sshl.src new file mode 100644 index 0000000..cf5034d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sshl.src @@ -0,0 +1,22 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Shift Left +; Input: +; Operand1: +; BC : 16 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 16 bit value to be shifted by C +; +; Output: +; Result: HL : 16 bit +; Registers Used: +; none +; Comments: +; Created 12/2001: G.Loegel +;------------------------------------------------------------------------- + .def __sshl, __sshl_b + .assume adl=1 + +__sshl_b equ 000244h +__sshl equ 000240h diff --git a/frontends/calculator/CEdev/lib/shared/sshrs.src b/frontends/calculator/CEdev/lib/shared/sshrs.src new file mode 100644 index 0000000..a997ae1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sshrs.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Shift Right Signed +; Input: +; Operand1: +; BC : 16 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 16 bit value to be shifted by C +; +; Output: +; Result: HL : 16 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __sshrs, __sshrs_b + .assume adl=1 + +__sshrs_b equ 00024Ch +__sshrs equ 000248h diff --git a/frontends/calculator/CEdev/lib/shared/sshru.src b/frontends/calculator/CEdev/lib/shared/sshru.src new file mode 100644 index 0000000..796f776 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sshru.src @@ -0,0 +1,20 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Short Shift Right Unsigned +; Input: +; Operand1: +; BC : 16 bit number of bits to shift +; Assume B=0 C=shift count +; Operand2: +; HL : 16 bit value to be shifted by C +; +; Output: +; Result: HL : 16 bit +; Registers Used: +; none +;------------------------------------------------------------------------- + .def __sshru, __sshru_b + .assume adl=1 + +__sshru_b equ 000254h +__sshru equ 000250h diff --git a/frontends/calculator/CEdev/lib/shared/sstix.src b/frontends/calculator/CEdev/lib/shared/sstix.src new file mode 100644 index 0000000..6f0a11b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sstix.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Integer store (ix+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from ix +; HL : 16-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sstix + .assume adl=1 + +__sstix equ 000258h + diff --git a/frontends/calculator/CEdev/lib/shared/sstiy.src b/frontends/calculator/CEdev/lib/shared/sstiy.src new file mode 100644 index 0000000..504133c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sstiy.src @@ -0,0 +1,19 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; short store (iy+nnnnnn),HL +; Input: +; Operand1: +; BC : 24-bit offset from iy +; HL : 16-bit integer to store +; +; Output: +; +; +; Registers Used: +; +;------------------------------------------------------------------------- + .def __sstiy + .assume adl=1 + +__sstiy equ 00025Ch + diff --git a/frontends/calculator/CEdev/lib/shared/stoi.src b/frontends/calculator/CEdev/lib/shared/stoi.src new file mode 100644 index 0000000..9ad6430 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/stoi.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Signed Short to Integer Conversion +; Input: +; Operand1: +; BC : 16 bit number to convert +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __stoi + .assume adl=1 + +__stoi equ 000260h diff --git a/frontends/calculator/CEdev/lib/shared/stoiu.src b/frontends/calculator/CEdev/lib/shared/stoiu.src new file mode 100644 index 0000000..db0d59e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/stoiu.src @@ -0,0 +1,16 @@ +; (c) Copyright 2001-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Short to Integer Conversion +; Input: +; Operand1: +; BC : 16 bit number to convert +; +; Output: +; Result: HL : 24 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __stoiu + .assume adl=1 + +__stoiu equ 000264h diff --git a/frontends/calculator/CEdev/lib/shared/strcasecmp.src b/frontends/calculator/CEdev/lib/shared/strcasecmp.src new file mode 100644 index 0000000..2808f5b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcasecmp.src @@ -0,0 +1,6 @@ + .def _strcasecmp + .assume adl=1 + +; int strcasecmp(const char *f1, const char *f2); + +_strcasecmp equ 021E3Ch \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/strcat.src b/frontends/calculator/CEdev/lib/shared/strcat.src new file mode 100644 index 0000000..297e5da --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcat.src @@ -0,0 +1,6 @@ + .def _strcat + .assume adl=1 + +; char *strcat(char *s1, char *s2); + +_strcat equ 0000C0h diff --git a/frontends/calculator/CEdev/lib/shared/strchr.src b/frontends/calculator/CEdev/lib/shared/strchr.src new file mode 100644 index 0000000..103602b --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strchr.src @@ -0,0 +1,6 @@ + .def _strchr + .assume adl=1 + +; char *strchr(char *s, int c); + +_strchr equ 0000C4h diff --git a/frontends/calculator/CEdev/lib/shared/strcmp.src b/frontends/calculator/CEdev/lib/shared/strcmp.src new file mode 100644 index 0000000..9eb4f6e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcmp.src @@ -0,0 +1,6 @@ + .def _strcmp + .assume adl=1 + +; int strcmp(register char *s1, register char *s2) + +_strcmp equ 0000C8h diff --git a/frontends/calculator/CEdev/lib/shared/strcpy.src b/frontends/calculator/CEdev/lib/shared/strcpy.src new file mode 100644 index 0000000..38c0eb0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcpy.src @@ -0,0 +1,6 @@ + .def _strcpy + .assume adl=1 + +; char *strcpy(void *d, void *s); + +_strcpy equ 0000CCh diff --git a/frontends/calculator/CEdev/lib/shared/strcspn.src b/frontends/calculator/CEdev/lib/shared/strcspn.src new file mode 100644 index 0000000..1d83171 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strcspn.src @@ -0,0 +1,6 @@ + .def _strcspn + .assume adl=1 + +; size_t strcspn(char *s1, char *s2); + +_strcspn equ 0000D0h diff --git a/frontends/calculator/CEdev/lib/shared/strdup.src b/frontends/calculator/CEdev/lib/shared/strdup.src new file mode 100644 index 0000000..2debaa3 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strdup.src @@ -0,0 +1,35 @@ + .ref __frameset + .ref _malloc + .ref _strlen + .ref _strcpy + .def _strdup + .assume adl=1 + +_strdup: + ld hl,-3 + call __frameset + ld bc,(ix+6) + push bc + call _strlen + pop bc + inc hl + push hl + call _malloc + pop bc + ld (ix+-3),hl + add hl,de + or a,a + sbc hl,de + jr z,MallocFail + ld bc,(ix+6) + push bc + ld bc,(ix+-3) + push bc + call _strcpy + pop bc + pop bc +MallocFail: + ld hl,(ix+-3) + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/strlen.src b/frontends/calculator/CEdev/lib/shared/strlen.src new file mode 100644 index 0000000..5ef9fad --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strlen.src @@ -0,0 +1,6 @@ + .def _strlen + .assume adl=1 + +; size_t strlen(char *s); + +_strlen equ 0000D4h diff --git a/frontends/calculator/CEdev/lib/shared/strncasecmp.src b/frontends/calculator/CEdev/lib/shared/strncasecmp.src new file mode 100644 index 0000000..fdc603e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncasecmp.src @@ -0,0 +1,6 @@ + .def _strncasecmp + .assume adl=1 + +; int strncasecmp ( const char *str1 , const char *str2 , int len ); + +_strncasecmp equ 021E3Ch diff --git a/frontends/calculator/CEdev/lib/shared/strncat.src b/frontends/calculator/CEdev/lib/shared/strncat.src new file mode 100644 index 0000000..5f6a532 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncat.src @@ -0,0 +1,6 @@ + .def _strncat + .assume adl=1 + +; char *strncat(char *s1, char *s2, size_t n) + +_strncat equ 0000D8h diff --git a/frontends/calculator/CEdev/lib/shared/strncmp.src b/frontends/calculator/CEdev/lib/shared/strncmp.src new file mode 100644 index 0000000..08f2750 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncmp.src @@ -0,0 +1,6 @@ + .def _strncmp + .assume adl=1 + +; int strncmp(char *s1, char *s2, size_t n) + +_strncmp equ 0000DCh diff --git a/frontends/calculator/CEdev/lib/shared/strncpy.src b/frontends/calculator/CEdev/lib/shared/strncpy.src new file mode 100644 index 0000000..b46a72e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strncpy.src @@ -0,0 +1,6 @@ + .def _strncpy + .assume adl=1 + +; char *strncpy(char *dst, char *src, size_t n) + +_strncpy equ 0000E0h diff --git a/frontends/calculator/CEdev/lib/shared/strndup.src b/frontends/calculator/CEdev/lib/shared/strndup.src new file mode 100644 index 0000000..26c656c --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strndup.src @@ -0,0 +1,46 @@ + .def _strndup + .ref __frameset + .ref _strlen + .ref _malloc + .ref _memcpy + .assume adl=1 + +_strndup: + ld hl,-6 + call __frameset + ld bc,(ix+6) + push bc + call _strlen + ld (ix+-3),hl + ex de,hl + ld hl,(ix+9) + or a,a + sbc hl,de + jr nc,Greater + ld hl,(ix+9) + ld (ix+-3),hl +Greater: + ld bc,(ix+-3) + inc bc + push bc + call _malloc + ld (ix+-6),hl + add hl,bc + or a,a + sbc hl,bc + jr z,MallocFail + ld bc,(ix+-3) + ld hl,(ix+-6) + add hl,bc + ld (hl),0 + or a,a + sbc hl,bc + push bc + ld bc,(ix+6) + push bc + push hl + call _memcpy +MallocFail: + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/strnlen.src b/frontends/calculator/CEdev/lib/shared/strnlen.src new file mode 100644 index 0000000..823ea49 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strnlen.src @@ -0,0 +1,27 @@ + .def _strnlen + .ref __frameset0 + .assume adl=1 + +_strnlen: + call __frameset0 + ld de,(ix+6) + ld bc,(ix+9) + or a,a + sbc hl,hl + jr StartFor +ForLoop: + inc hl + inc de +StartFor: + push hl + or a,a + sbc hl,bc + pop hl + jr nc,ReachedMax + ld a,(de) + or a,a + jr nz,ForLoop +ReachedMax: + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/shared/strpbrk.src b/frontends/calculator/CEdev/lib/shared/strpbrk.src new file mode 100644 index 0000000..f9ff01f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strpbrk.src @@ -0,0 +1,6 @@ + .def _strpbrk + .assume adl=1 + +; char *strpbrk(char *s1, char *s2) + +_strpbrk equ 0000E4h diff --git a/frontends/calculator/CEdev/lib/shared/strrchr.src b/frontends/calculator/CEdev/lib/shared/strrchr.src new file mode 100644 index 0000000..80fab4a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strrchr.src @@ -0,0 +1,6 @@ + .def _strrchr + .assume adl=1 + +; char *strrchr(char *s, int c) + +_strrchr equ 0000E8h diff --git a/frontends/calculator/CEdev/lib/shared/strspn.src b/frontends/calculator/CEdev/lib/shared/strspn.src new file mode 100644 index 0000000..bb5ad3e --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strspn.src @@ -0,0 +1,5 @@ + .def _strspn + .assume adl=1 + +; size_t strspn(char *s1,char *s2) +_strspn equ 0000ECh diff --git a/frontends/calculator/CEdev/lib/shared/strstr.src b/frontends/calculator/CEdev/lib/shared/strstr.src new file mode 100644 index 0000000..585c5c0 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strstr.src @@ -0,0 +1,6 @@ + .def _strstr + .assume adl=1 + +; char *strstr(char *s1, char *s2); + +_strstr equ 0000F0h diff --git a/frontends/calculator/CEdev/lib/shared/strtok.src b/frontends/calculator/CEdev/lib/shared/strtok.src new file mode 100644 index 0000000..14f3ef6 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strtok.src @@ -0,0 +1,5 @@ + .def _strtok + .assume adl=1 + +_strtok equ 0000F4h + \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/shared/strtol.src b/frontends/calculator/CEdev/lib/shared/strtol.src new file mode 100644 index 0000000..fff8564 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strtol.src @@ -0,0 +1,370 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\STRTOL.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 #include +; 12 #include +; 13 #include +; 14 #include +; 15 +; 16 /************************************************* +; 17 * +; 18 * strtol - string to long conversion +; 19 * +; 20 * Inputs: +; 21 * cp - pointer to the character string +; 22 * endptr - place to put ptr to first invalid character +; 23 * base - radix +; 24 * +; 25 * Returns: +; 26 * the value of the number +; 27 * +; 28 *************************************************/ +; 29 long strtol(char *cp,char **endptr,int base) +; 30 { +_strtol: + LD HL,-30 + CALL __frameset +; 31 register long sum,psum; +; 32 register char sign; +; 33 register int radix = base; + LD BC,(IX+12) + LD (IX+-8),BC +; 34 char digit; +; 35 +; 36 while (isspace(*cp)) + JR L_0 +L_1: +; 37 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_0: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_1 +; 38 +; 39 sign = 0; + LD (IX+-9),0 +; 40 if ( *cp == (char)'-' ) { + LD HL,(IX+6) + LD A,(HL) + CP A,45 + JR NZ,L_5 +; 41 sign = 1; + LD (IX+-9),1 +; 42 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 43 } +; 44 else if ( *cp == (char)'+' ) + JR L_11 +L_5: + LD HL,(IX+6) + LD A,(HL) + CP A,43 + JR NZ,L_11 +; 45 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_11: +; 46 +; 47 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR NZ,L_16 +; 48 radix = 10; + LD BC,10 + LD (IX+-8),BC +; 49 if (*cp == (char)'0') + LD HL,(IX+6) + LD A,(HL) + CP A,48 + JR NZ,L_16 +; 50 if (cp[1] == (char)'x' || cp[1] == (char)'X') + LD BC,(IX+6) + INC BC + LD (IX+-12),BC + LD HL,BC + LD A,(HL) + CP A,120 + JR Z,L_7 + LD HL,(IX+-12) + LD A,(HL) + CP A,88 + JR NZ,L_8 +L_7: +; 51 radix = 16; + LD BC,16 + LD (IX+-8),BC +; 52 else + JR L_16 +L_8: +; 53 radix = 8; + LD BC,8 + LD (IX+-8),BC +; 54 } +L_16: +; 55 +; 56 if (base == 16 && *cp == (char)'0' && (cp[1] == (char)'x' || cp[1] == (char)'X')) + LD BC,16 + LD HL,(IX+12) + OR A,A + SBC HL,BC + JR NZ,L_17 + LD HL,(IX+6) + LD A,(HL) + CP A,48 + JR NZ,L_17 + LD BC,(IX+6) + INC BC + LD (IX+-15),BC + LD HL,BC + LD A,(HL) + CP A,120 + JR Z,L_15 + LD HL,(IX+-15) + LD A,(HL) + CP A,88 + JR NZ,L_17 +L_15: +; 57 cp += 2; + LD IY,(IX+6) + LEA IY,IY+2 + LD (IX+6),IY +L_17: +; 58 +; 59 sum = 0; + LD BC,0 + LD (IX+-5),BC + XOR A,A + LD (IX+-2),A +; 60 for (;;) { +L_30: +; 61 digit = toupper(*(cp++)); + LD BC,(IX+6) + LD (IX+-30),BC + LD BC,(IX+6) + INC BC + LD (IX+6),BC + LD HL,(IX+-30) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _toupper + POP BC + LD (IX+-1),L +; 62 if (digit >= (char)'A') + LD A,(IX+-1) + CP A,65 + CALL __setflag + JP M,L_20 +; 63 digit = (digit - (char)'A') + (char)10; + LD A,(IX+-1) + ADD A,-55 + LD (IX+-1),A +; 64 else + JR L_23 +L_20: +; 65 digit -= (char)'0'; + LD A,(IX+-1) + ADD A,-48 + LD (IX+-1),A +L_23: +; 66 if (digit < (char)0 || digit >= (char)radix) + LD A,(IX+-1) + OR A,A + JP M,L_40 + LD B,(IX+-8) + LD A,(IX+-1) + CP A,B + CALL __setflag + JP P,L_40 +; 67 break; +; 68 psum = sum; + LD BC,(IX+-5) + LD A,(IX+-2) + LD (IX+-27),BC + LD (IX+-24),A +; 69 sum *= radix; + LD BC,(IX+-8) + CALL __itol + LD HL,(IX+-5) + LD E,(IX+-2) + CALL __lmuls + LD (IX+-5),HL + LD (IX+-2),E +; 70 sum += digit; + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + LD BC,HL + LD A,H + LD HL,(IX+-5) + LD E,(IX+-2) + CALL __ladd + LD (IX+-5),HL + LD (IX+-2),E +; 71 if (sum < psum) { /* overflow */ + LD HL,(IX+-5) + LD E,(IX+-2) + LD BC,(IX+-27) + LD A,(IX+-24) + CALL __lcmps + CALL __setflag + JP P,L_30 +; 72 sum = sign ? LONG_MIN : LONG_MAX; + LD A,(IX+-9) + OR A,A + JR Z,L_27 + LD BC,0 + LD (IX+-19),BC + LD A,128 + LD (IX+-16),A + JR L_28 +L_27: + LD BC,16777215 + LD (IX+-19),BC + LD A,127 + LD (IX+-16),A +L_28: + LD BC,(IX+-19) + LD A,(IX+-16) + LD (IX+-5),BC + LD (IX+-2),A +; 73 errno=ERANGE; + LD BC,5 + LD (_errno),BC +; 74 break; +; 75 } +; 76 } +L_40: +; 77 +; 78 if (endptr) { + LD HL,(IX+9) + CALL __icmpzero + JR Z,L_45 +; 79 --cp; + LD IY,(IX+6) + LEA IY,IY+-1 + LD (IX+6),IY +; 80 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_35 + JR L_38 +; 81 while (*cp == (char)'h' || *cp == (char)'u' || +L_36: +; 82 *cp == (char)'l' || *cp == (char)'L') +; 83 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_35: + LD HL,(IX+6) + LD A,(HL) + CP A,104 + JR Z,L_36 + LD HL,(IX+6) + LD A,(HL) + CP A,117 + JR Z,L_36 + LD HL,(IX+6) + LD A,(HL) + CP A,108 + JR Z,L_36 + LD HL,(IX+6) + LD A,(HL) + CP A,76 + JR Z,L_36 +; 84 } +L_38: +; 85 *endptr = cp; + LD HL,(IX+9) + LD BC,(IX+6) + LD (HL),BC +; 86 } +L_45: +; 87 return(sign ? -sum : sum); + LD A,(IX+-9) + OR A,A + JR Z,L_43 + LD HL,(IX+-5) + LD E,(IX+-2) + CALL __lneg + LD (IX+-23),HL + LD (IX+-20),E + JR L_44 +L_43: + LD BC,(IX+-5) + LD A,(IX+-2) + LD (IX+-23),BC + LD (IX+-20),A +L_44: + LD HL,(IX+-23) + LD E,(IX+-20) +; 88 } + LD SP,IX + POP IX + RET + + +;**************************** _strtol *************************** +;Name Addr/Register Size Type +;_errno IMPORT 3 variable +;_toupper IMPORT ----- function +;_isspace IMPORT ----- function +;psum IX-27 4 variable +;temp41 IX-23 4 variable +;temp25 IX-19 4 variable +;G_1 IX-15 3 variable +;G_0 IX-12 3 variable +;sign IX-9 1 variable +;radix IX-8 3 variable +;sum IX-5 4 variable +;digit IX-1 1 variable +;base IX+12 3 parameter +;endptr IX+9 3 parameter +;cp IX+6 3 parameter + + +; Stack Frame Size: 45 (bytes) +; Spill Code: 0 (instruction) + + + XREF _errno:ROM + XREF _toupper:ROM + XREF _isspace:ROM + XREF __lcmps:ROM + XREF __ladd:ROM + XREF __lmuls:ROM + XREF __lneg:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XDEF _strtol + END diff --git a/frontends/calculator/CEdev/lib/shared/strtoul.src b/frontends/calculator/CEdev/lib/shared/strtoul.src new file mode 100644 index 0000000..557d691 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/strtoul.src @@ -0,0 +1,403 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\STRTOUL.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 2006-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 #include +; 10 #include +; 11 #include +; 12 +; 13 /************************************************* +; 14 * +; 15 * strtoul - string to unsigned long conversion +; 16 * +; 17 * Inputs: +; 18 * cp - pointer to the character string +; 19 * endptr - place to put ptr to first invalid character +; 20 * base - radix +; 21 * +; 22 * Returns: +; 23 * the value of the number +; 24 * +; 25 *************************************************/ +; 26 unsigned long strtoul(char * cp,char ** endptr,int base) +; 27 { +_strtoul: + LD HL,-23 + CALL __frameset +; 28 register unsigned long sum,psum; +; 29 register unsigned char sign; +; 30 register unsigned char radix = base; + LD A,(IX+12) + LD (IX+-2),A +; 31 register unsigned char digit; +; 32 +; 33 while (isspace(*cp)) + JR L_0 +L_1: +; 34 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_0: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_1 +; 35 +; 36 sign = 0; + LD (IX+-7),0 +; 37 +; 38 if ( *cp == '+' ) { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,43 + SBC HL,BC + JR NZ,L_5 +; 39 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 40 } +; 41 else if ( *cp == '-' ) { + JR L_12 +L_5: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,45 + SBC HL,BC + JR NZ,L_12 +; 42 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 43 sign = 1; + LD (IX+-7),1 +; 44 } +L_12: +; 45 +; 46 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR NZ,L_17 +; 47 if (*cp == '0') + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR NZ,L_10 +; 48 if (cp[1] == 'x' || cp[1] == 'X') + LD BC,(IX+6) + INC BC + LD (IX+-10),BC + LD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,120 + SBC HL,BC + JR Z,L_7 + LD HL,(IX+-10) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,88 + SBC HL,BC + JR NZ,L_8 +L_7: +; 49 radix = 16; + LD (IX+-2),16 +; 50 else + JR L_17 +L_8: +; 51 radix = 8; + LD (IX+-2),8 +; 52 else + JR L_17 +L_10: +; 53 radix = 10; + LD (IX+-2),10 +; 54 } +L_17: +; 55 +; 56 /* If the base is declared as 16, the "0x" prefix may be ignored. */ +; 57 if (base == 16 && *cp == '0' && (cp[1] == 'x' || cp[1] == 'X')) + LD BC,16 + LD HL,(IX+12) + OR A,A + SBC HL,BC + JR NZ,L_18 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR NZ,L_18 + LD BC,(IX+6) + INC BC + LD (IX+-13),BC + LD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,120 + SBC HL,BC + JR Z,L_16 + LD HL,(IX+-13) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,88 + SBC HL,BC + JR NZ,L_18 +L_16: +; 58 cp += 2; + LD IY,(IX+6) + LEA IY,IY+2 + LD (IX+6),IY +L_18: +; 59 +; 60 sum = 0; + LD BC,0 + LD (IX+-6),BC + XOR A,A + LD (IX+-3),A +; 61 for (;;) { +L_26: +; 62 digit = toupper(*(cp++)); + LD BC,(IX+6) + LD (IX+-20),BC + LD BC,(IX+6) + INC BC + LD (IX+6),BC + LD HL,(IX+-20) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _toupper + POP BC + LD (IX+-1),L +; 63 if (digit >= 'A') + LD A,(IX+-1) + CP A,65 + JR C,L_21 +; 64 digit = digit - ('A' - 10); + LD A,(IX+-1) + SUB A,55 + LD (IX+-1),A +; 65 else + JR L_23 +L_21: +; 66 digit -= '0'; + LD A,(IX+-1) + SUB A,48 + LD (IX+-1),A +L_23: +; 67 if (digit >= radix) + LD A,(IX+-1) + CP A,(IX+-2) + JR NC,L_29 +; 68 break; +; 69 psum = sum; + LD BC,(IX+-6) + LD D,(IX+-3) + LD (IX+-17),BC + LD (IX+-14),D +; 70 sum = sum * radix + digit; + UEXT HL + LD L,(IX+-2) + LD BC,HL + LD A,H + LD HL,(IX+-6) + LD E,(IX+-3) + CALL __lmulu + LD (IX+-23),HL + UEXT HL + LD L,(IX+-1) + LD BC,HL + LD A,H + LD HL,(IX+-23) + CALL __ladd + LD (IX+-6),HL + LD (IX+-3),E +; 71 if (sum < psum) { /* overflow */ + LD HL,(IX+-6) + LD E,(IX+-3) + LD BC,(IX+-17) + LD A,(IX+-14) + CALL __lcmpu + JR NC,L_26 +; 72 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 73 sum = ULONG_MAX; + LD BC,16777215 + LD (IX+-6),BC + LD A,255 + LD (IX+-3),A +; 74 } +; 75 } + JR L_26 +L_29: +; 76 +; 77 if (sign) { + LD A,(IX+-7) + OR A,A + JR Z,L_38 +; 78 // errno = ERANGE; +; 79 // sum = 0; +; 80 sum = -sum; + LD HL,(IX+-6) + LD E,(IX+-3) + CALL __lneg + LD (IX+-6),HL + LD (IX+-3),E +; 81 } +L_38: +; 82 +; 83 if (endptr) { + LD HL,(IX+9) + CALL __icmpzero + JR Z,L_39 +; 84 --cp; + LD IY,(IX+6) + LEA IY,IY+-1 + LD (IX+6),IY +; 85 if (base == 0) { + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_33 + JR L_36 +; 86 while (*cp == 'h' || *cp == 'u' || +L_34: +; 87 *cp == 'l' || *cp == 'L') +; 88 ++cp; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_33: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,104 + SBC HL,BC + JR Z,L_34 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,117 + SBC HL,BC + JR Z,L_34 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,108 + SBC HL,BC + JR Z,L_34 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,76 + SBC HL,BC + JR Z,L_34 +; 89 } +L_36: +; 90 *endptr = (char*)cp; + LD HL,(IX+9) + LD BC,(IX+6) + LD (HL),BC +; 91 } +L_39: +; 92 return(sum); + LD HL,(IX+-6) + LD E,(IX+-3) +; 93 } + LD SP,IX + POP IX + RET + + +;**************************** _strtoul *************************** +;Name Addr/Register Size Type +;_errno IMPORT 3 variable +;_toupper IMPORT ----- function +;_isspace IMPORT ----- function +;psum IX-17 4 variable +;G_1 IX-13 3 variable +;G_0 IX-10 3 variable +;sign IX-7 1 variable +;sum IX-6 4 variable +;radix IX-2 1 variable +;digit IX-1 1 variable +;base IX+12 3 parameter +;endptr IX+9 3 parameter +;cp IX+6 3 parameter + + +; Stack Frame Size: 38 (bytes) +; Spill Code: 0 (instruction) + + + XREF _errno:ROM + XREF _toupper:ROM + XREF _isspace:ROM + XREF __lcmpu:ROM + XREF __ladd:ROM + XREF __lmulu:ROM + XREF __lneg:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _strtoul + END diff --git a/frontends/calculator/CEdev/lib/shared/sxor.src b/frontends/calculator/CEdev/lib/shared/sxor.src new file mode 100644 index 0000000..2771ff2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/sxor.src @@ -0,0 +1,18 @@ +;------------------------------------------------------------------------- +; Short XOR. +; Input: +; Operand1: +; bc : 16 bit +; +; Operand2: +; hl : 16 bit +; +; Output: +; Result: hl : 16 bit +; Registers Used: +; a +;------------------------------------------------------------------------- + .def __sxor + .assume adl=1 + +__sxor equ 000268h diff --git a/frontends/calculator/CEdev/lib/shared/tice.src b/frontends/calculator/CEdev/lib/shared/tice.src new file mode 100644 index 0000000..5467be1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/tice.src @@ -0,0 +1,241 @@ +; --- +; external definitions +; --- + .def _boot_GetBootMajorVer + .def _boot_GetHardwareVer + .def _boot_GetBootMinorVer + .def _boot_DebugPrintf + .def _boot_ClearVRAM + .def _boot_TurnOff + .def _boot_NewLine + .def _boot_Set6MHzMode + .def _boot_Set48MHzMode + .def _boot_Set6MHzModeI + .def _boot_Set48MHzModeI + .def _boot_GetBatteryStatus + .def _boot_WaitShort + .def _boot_CheckOnPressed + .def _boot_SetDate + .def _boot_GetDate + .def _boot_GetTime + .def _boot_SetTime + .def _boot_IsAfterNoon + + .def _os_NewLine + .def _os_PushErrorHandler + .def _os_PopErrorHandler + .def _os_ThrowError + .def _os_RealCopy + .def _os_RealAsinRad + .def _os_RealAcosRad + .def _os_RealAtanRad + .def _os_RealAdd + .def _os_CplxSquare + .def _os_RealCompare + .def _os_RealCosRad + .def _os_RealRadToDeg + .def _os_RealDiv + .def _os_RealExp + .def _os_RealFloor + .def _os_RealToStr + .def _os_RealFrac + .def _os_RealGcd + .def _os_RealRoundInt + .def _os_RealLcm + .def _os_RealLog + .def _os_RealMax + .def _os_RealMin + .def _os_RealMul + .def _os_RealNcr + .def _os_RealNeg + .def _os_RealNpr + .def _os_RealPow + .def _os_RealDegToRad + .def _os_RealRandInt + .def _os_RealInv + .def _os_RealMod + .def _os_RealRound + .def _os_RealSinRad + .def _os_RealSqrt + .def _os_RealSub + .def _os_RealTanRad + .def _os_StrToReal + .def _os_RealInt + .def _os_SetFlagBits + .def _os_ResetFlagBits + .def _os_TestFlagBits + .def _os_SetFlagByte + .def _os_GetFlagByte + .def _os_GetCursorPos + .def _os_PutStrFull + .def _os_PutStrLine + .def _os_SetCursorPos + .def _os_AppInit + .def _os_GetKey + .def _os_GetCSC + .def _os_DisableCursor + .def _os_EnableCursor + .def _os_FontDrawText + .def _os_FontGetHeight + .def _os_FontGetWidth + .def _os_InitDrawing + .def _os_SetDrawBGColor + .def _os_SetDrawFGColor + .def _os_FontSelect + .def _os_RclAns + .def _os_SetTimer1 + .def _os_DisableTimer1 + .def _os_GetSystemStats + .def _os_GetDrawBGColor + .def _os_GetDrawFGColor + .def _os_FontGetID + .def _os_RealToInt24 + .def _os_Int24ToReal + .def _os_ForceCmdNoChar + .def _os_GetSymTablePtr + .def _os_NextSymEntry + .def _os_ChkFindSym + .def _os_MemChk + .def _os_SetTimer2 + .def _os_DisableTimer2 + .def _os_FloatToReal + .def _os_RealToFloat + .def _os_FontDrawTransText + .def _os_CreateAppVar + + .def _asm_MoveDown + .def _asm_MoveUp + .def _asm_ClrLCDFull + .def _asm_ClrLCD + .def _asm_ClrTxtShd + .def _asm_HomeUp + .def _asm_RunIndicOn + .def _asm_RunIndicOff + .def _asm_DelRes + .def _asm_DisableAPD + .def _asm_EnableAPD + .def _asm_DrawStatusBar + .def _asm_ArcChk + .assume adl=1 + +; --- +; locations +; --- +_boot_GetBootMajorVer equ 000080h +_boot_GetHardwareVer equ 000084h +_boot_GetBootMinorVer equ 00008Ch +_boot_DebugPrintf equ 0000B4h +_boot_ClearVRAM equ 000374h +_boot_TurnOff equ 000388h +_boot_NewLine equ 000390h +_boot_Set6MHzMode equ 00039Ch +_boot_Set48MHzMode equ 0003A0h +_boot_Set6MHzModeI equ 0003A4h +_boot_Set48MHzModeI equ 0003A8h +_boot_GetBatteryStatus equ 0003B0h +_boot_WaitShort equ 0003B4h +_boot_CheckOnPressed equ 00057Ch +_boot_SetDate equ 000598h +_boot_GetDate equ 0005A8h +_boot_GetTime equ 0005B0h +_boot_SetTime equ 0005B4h +_boot_IsAfterNoon equ 0005C8h + +_os_NewLine equ 0207F0h +_os_PushErrorHandler equ 021C78h +_os_PopErrorHandler equ 021C7Ch +_os_ThrowError equ 021C80h +_os_RealCopy equ 021C84h +_os_RealAsinRad equ 021C88h +_os_RealAcosRad equ 021C8Ch +_os_RealAtanRad equ 021C90h +_os_RealAdd equ 021C94h +_os_CplxSquare equ 021C98h +_os_RealCompare equ 021C9Ch +_os_RealCosRad equ 021CA0h +_os_RealRadToDeg equ 021CA4h +_os_RealDiv equ 021CA8h +_os_RealExp equ 021CACh +_os_RealFloor equ 021CB0h +_os_RealToStr equ 021CB4h +_os_RealFrac equ 021CB8h +_os_RealGcd equ 021CBCh +_os_RealRoundInt equ 021CC0h +_os_RealLcm equ 021CC4h +_os_RealLog equ 021CC8h +_os_RealMax equ 021CCCh +_os_RealMin equ 021CD0h +_os_RealMul equ 021CD4h +_os_RealNcr equ 021CD8h +_os_RealNeg equ 021CDCh +_os_RealNpr equ 021CE0h +_os_RealPow equ 021CE4h +_os_RealDegToRad equ 021CE8h +_os_RealRandInt equ 021CECh +_os_RealInv equ 021CF0h +_os_RealMod equ 021CF4h +_os_RealRound equ 021CF8h +_os_RealSinRad equ 021CFCh +_os_RealSqrt equ 021D00h +_os_RealSub equ 021D04h +_os_RealTanRad equ 021D08h +_os_StrToReal equ 021D0Ch +_os_RealInt equ 021D10h +_os_SetFlagBits equ 021D14h +_os_ResetFlagBits equ 021D18h +_os_TestFlagBits equ 021D1Ch +_os_SetFlagByte equ 021D20h +_os_GetFlagByte equ 021D24h +_os_GetCursorPos equ 021D28h +_os_PutStrFull equ 021D2Ch +_os_PutStrLine equ 021D30h +_os_SetCursorPos equ 021D34h +_os_AppInit equ 021D40h +_os_GetKey equ 021D38h +_os_GetCSC equ 021D3Ch +_os_DisableCursor equ 021DE4h +_os_EnableCursor equ 021DE8h +_os_FontDrawText equ 021E00h +_os_FontGetHeight equ 021E14h +_os_FontGetWidth equ 021E18h +_os_InitDrawing equ 021E1Ch +_os_SetDrawBGColor equ 021E20h +_os_SetDrawFGColor equ 021E24h +_os_FontSelect equ 021E28h +_os_RclAns equ 021E70h +_os_SetTimer1 equ 021EC8h +_os_DisableTimer1 equ 021ECCh +_os_GetSystemStats equ 021ED4h +_os_GetDrawBGColor equ 021EE4h +_os_GetDrawFGColor equ 021EE8h +_os_FontGetID equ 021EECh +_os_RealToInt24 equ 021EF4h +_os_Int24ToReal equ 021EF8h +_os_ForceCmdNoChar equ 021FA8h +_os_GetSymTablePtr equ 021FB0h +_os_NextSymEntry equ 021FB4h +_os_ChkFindSym equ 021FB8h +_os_MemChk equ 021FF0h +_os_SetTimer2 equ 022080h +_os_DisableTimer2 equ 022084h +_os_FloatToReal equ 022170h +_os_RealToFloat equ 022174h +_os_FontDrawTransText equ 022178h +_os_CreateAppVar equ 022184h + +; --- +; directly callable asm functions +; --- +_asm_MoveDown equ 0207F4h +_asm_MoveUp equ 020800h +_asm_ClrLCDFull equ 020808h +_asm_ClrLCD equ 02080Ch +_asm_ClrTxtShd equ 020818h +_asm_HomeUp equ 020828h +_asm_RunIndicOn equ 020844h +_asm_RunIndicOff equ 020848h +_asm_DelRes equ 020E5Ch +_asm_DisableAPD equ 021134h +_asm_EnableAPD equ 021138h +_asm_DrawStatusBar equ 021A3Ch +_asm_ArcChk equ 022040h diff --git a/frontends/calculator/CEdev/lib/shared/tolower.src b/frontends/calculator/CEdev/lib/shared/tolower.src new file mode 100644 index 0000000..db6c58d --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/tolower.src @@ -0,0 +1,4 @@ + .assume adl=1 + .def _tolower + +_tolower equ 021E34h diff --git a/frontends/calculator/CEdev/lib/shared/toupper.src b/frontends/calculator/CEdev/lib/shared/toupper.src new file mode 100644 index 0000000..eb5dcea --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/toupper.src @@ -0,0 +1,4 @@ + .assume adl=1 + .def _toupper + +_toupper equ 021E38h diff --git a/frontends/calculator/CEdev/lib/shared/udtoe.src b/frontends/calculator/CEdev/lib/shared/udtoe.src new file mode 100644 index 0000000..c19cf68 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/udtoe.src @@ -0,0 +1,411 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UDTOE.C" + .assume ADL=1 + SEGMENT BSS +__info: + DS 12 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 //#include +; 10 #include +; 11 +; 12 +; 13 struct flt_info _info; + SEGMENT CODE +; 14 typedef long reg_t; +; 15 typedef unsigned long ureg_t; +; 16 +; 17 /************************************************* +; 18 * +; 19 * _u_dtoe - convert a double float to ASCII in e format +; 20 * +; 21 * Inputs: +; 22 * n - value to be converted +; 23 * s - target char array +; 24 * __print_fmt - format structure with conversion info +; 25 * +; 26 * Locals: +; 27 * ndig - The number of significant digits in the output. This is +; 28 * assumed to be less than 128! +; 29 * +; 30 * Returns: +; 31 * next address past the end of the string +; 32 * +; 33 *************************************************/ +; 34 char * _u_dtoe(double n) +; 35 { +__u_dtoe: + LD HL,-36 + CALL __frameset +; 36 register ureg_t i; +; 37 register ureg_t ndig; +; 38 register reg_t exp; +; 39 char * s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 40 +; 41 /* One digit to the left of the decimal point, and precision after. */ +; 42 ndig = __print_fmt.precision + 1; + LD A,(___print_fmt+6) + LD B,A + SEXT HL + LD L,B + LD E,H + LD A,1 + CALL __ladd_b + LD (IX+-15),HL + LD (IX+-12),E +; 43 _u_flt_info(n,&_info); + LD BC,__info + PUSH BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_flt_info + POP BC + POP BC + POP BC +; 44 if (ndig > FLT_DIG) + LD BC,(IX+-15) + LD A,(IX+-12) + LD HL,6 + LD E,0 + CALL __lcmpu + JR NC,L_1 +; 45 _u_flt_rnd(&_info,FLT_DIG); + LD BC,6 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +; 46 else + JR L_10 +L_1: +; 47 _u_flt_rnd(&_info,ndig); + LD C,(IX+-15) + LD B,0 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +L_10: +; 48 +; 49 if (_info.flags == FLT_INFO_SIGN) + LD A,(__info) + CP A,1 + JR NZ,L_9 +; 50 *(s++) = '-'; + LD HL,(IX+-3) + LD (HL),45 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 51 else if (__print_fmt.flags & FMT_FLAG_PLUS) + JR L_12 +L_9: + LD A,(___print_fmt+1) + AND A,2 + JR Z,L_7 +; 52 *(s++) = '+'; + LD HL,(IX+-3) + LD (HL),43 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 53 else if (__print_fmt.flags & FMT_FLAG_POUND) + JR L_12 +L_7: + LD A,(___print_fmt+1) + AND A,8 + JR Z,L_12 +; 54 *(s++) = ' '; + LD HL,(IX+-3) + LD (HL),32 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_12: +; 55 +; 56 *(s++) = _info.digits[0] + '0'; + LD BC,(IX+-3) + LD (IX+-30),BC + LD BC,__info+2 + LD (IX+-18),BC + LD HL,BC + LD A,(HL) + ADD A,48 + LD HL,(IX+-30) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 57 if (__print_fmt.precision != 0) + LD A,(___print_fmt+6) + OR A,A + JR Z,L_20 +; 58 *(s++) = '.'; + LD HL,(IX+-3) + LD (HL),46 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_20: +; 59 for (i=1; i < ndig; i++) + LD BC,1 + LD (IX+-11),BC + XOR A,A + LD (IX+-8),A + JR L_19 +L_17: +; 60 *(s++) = _info.digits[(unsigned char) i] + '0'; + LD BC,(IX+-3) + LD (IX+-33),BC + LD A,(IX+-11) + UEXT HL + LD L,A + LD BC,(IX+-18) + ADD HL,BC + LD A,(HL) + ADD A,48 + LD HL,(IX+-33) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC + LD HL,(IX+-11) + LD E,(IX+-8) + LD A,1 + CALL __ladd_b + LD (IX+-11),HL + LD (IX+-8),E +L_19: + LD HL,(IX+-11) + LD E,(IX+-8) + LD BC,(IX+-15) + LD A,(IX+-12) + CALL __lcmpu + JR C,L_17 +; 61 +; 62 if (!(__print_fmt.flags & FMT_FLAG_POUND) && + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_30 +; 63 (__print_fmt.type == 'g' || __print_fmt.type == 'G')) { + LD A,(___print_fmt+4) + CP A,103 + JR Z,L_23 + LD A,(___print_fmt+4) + CP A,71 + JR Z,L_23 + JR L_30 +; 64 while (s[-1] == '0') /* strip off trailing zero's */ +L_24: +; 65 --s; + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_23: + LD BC,16777215 + LD HL,(IX+-3) + ADD HL,BC + LD (IX+-21),HL + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR Z,L_24 +; 66 if (s[-1] == '.') + LD HL,(IX+-21) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_37 +; 67 --s; /* strip off . */ + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +; 68 } +; 69 else if (ndig == 1 && !(__print_fmt.flags & FMT_FLAG_POUND)) + JR L_37 +L_30: + LD HL,(IX+-15) + LD E,(IX+-12) + LD BC,1 + XOR A,A + CALL __lcmpu + JR NZ,L_37 + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_37 +; 70 --s; /* remove decimal point */ + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_37: +; 71 *(s++) = isupper(__print_fmt.type) ? 'E' : 'e'; + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isupper + POP BC + CALL __icmpzero + JR Z,L_35 + LD BC,69 + LD (IX+-24),BC + JR L_36 +L_35: + LD BC,101 + LD (IX+-24),BC +L_36: + LD BC,(IX+-3) + LD (IX+-27),BC + LD A,(IX+-24) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 72 +; 73 exp = _info.exp; + LD A,(__info+1) + LD B,A + SEXT HL + LD L,B + LD (IX+-7),HL + LD (IX+-4),H +; 74 if (exp < 0) { + LD HL,(IX+-7) + LD E,(IX+-4) + CALL __lcmpzero + JP P,L_41 +; 75 *(s++) = '-'; + LD HL,(IX+-3) + LD (HL),45 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 76 exp = -exp; + LD HL,(IX+-7) + LD E,(IX+-4) + CALL __lneg + LD (IX+-7),HL + LD (IX+-4),E +; 77 } +; 78 else + JR L_43 +L_41: +; 79 *(s++) = '+'; + LD HL,(IX+-3) + LD (HL),43 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_43: +; 80 +; 81 /* For 4-byte floats, the exponent is between -37 and +38, or simply 0 +; 82 to 38 after folding. */ +; 83 /* e format always prints two digits in the exponent. */ +; 84 *(s++) = exp / 10 + '0'; + LD BC,(IX+-3) + LD (IX+-36),BC + LD HL,(IX+-7) + LD E,(IX+-4) + LD BC,10 + XOR A,A + CALL __ldivs + LD A,48 + CALL __ladd_b + LD BC,HL + LD HL,(IX+-36) + LD (HL),C + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 85 *(s++) = exp % 10 + '0'; + LD HL,(IX+-7) + LD E,(IX+-4) + LD BC,10 + XOR A,A + CALL __lrems + LD A,48 + CALL __ladd_b + LD BC,HL + LD HL,(IX+-3) + LD (HL),C + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 86 +; 87 *s = '\0'; + LD HL,BC + LD (HL),0 +; 88 return(s); + LD HL,(IX+-3) +; 89 } + LD SP,IX + POP IX + RET + + +;**************************** __u_dtoe *************************** +;Name Addr/Register Size Type +;_isupper IMPORT ----- function +;__u_flt_rnd IMPORT ----- function +;__info STATIC 12 variable +;__u_flt_info IMPORT ----- function +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;temp32 IX-27 3 variable +;temp33 IX-24 3 variable +;G_1 IX-21 3 variable +;G_0 IX-18 3 variable +;ndig IX-15 4 variable +;i IX-11 4 variable +;exp IX-7 4 variable +;s IX-3 3 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 48 (bytes) +; Spill Code: 0 (instruction) + + + XREF _isupper:ROM + XREF __u_flt_rnd:ROM + XREF __u_flt_info:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __lcmpu:ROM + XREF __ldivs:ROM + XREF __lneg:ROM + XREF __lrems:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XREF __lcmpzero:ROM + XREF __ladd_b:ROM + XDEF __u_dtoe + XDEF __info + END diff --git a/frontends/calculator/CEdev/lib/shared/udtof.src b/frontends/calculator/CEdev/lib/shared/udtof.src new file mode 100644 index 0000000..81a40a8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/udtof.src @@ -0,0 +1,982 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UDTOF.C" + .assume ADL=1 + SEGMENT BSS +__info: + DS 12 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 #include +; 10 #include +; 11 +; 12 #ifndef _MULTI_THREAD +; 13 struct flt_info _info; + SEGMENT CODE +; 14 +; 15 static char * write_f_digits(char * s, signed char exp, signed char ndig); +; 16 static char * write_e_digits(char * s, signed char ndig); +; 17 static char * write_exponent(char * s, char e, signed char exp); +; 18 +; 19 #else +; 20 static char * write_f_digits(char * s, struct fmt_type* pfmt,struct flt_info* pinfo,signed char exp, signed char ndig); +; 21 static char * write_e_digits(char * s, struct flt_info* pinfo,signed char ndig); +; 22 static char * write_exponent(char * s, char e, signed char exp); +; 23 #define __print_fmt (*fmt) +; 24 #endif +; 25 +; 26 typedef long reg_t; +; 27 typedef unsigned long ureg_t; +; 28 +; 29 +; 30 /************************************************* +; 31 * +; 32 * _u_dtof - convert a double float to ASCII in f format +; 33 * +; 34 * Inputs: +; 35 * n - value to be converted +; 36 * s - target char array +; 37 * fmt - format structure with conversion info +; 38 * +; 39 * Locals: +; 40 * ndig - The number of significant digits to print. +; 41 * Assumed to lie in the range [0,127]. +; 42 * For e format, this is 1 + precision. +; 43 * For f format, this is 1 + precision + exp. +; 44 * +; 45 * Returns: +; 46 * next address past the end of the string +; 47 * +; 48 *************************************************/ +; 49 #ifndef _MULTI_THREAD +; 50 void _u_dtof(double n) +; 51 #else +; 52 char _mt_dtof(double n,char* __print_buff,struct fmt_type* fmt) +; 53 #endif +; 54 { +__u_dtof: + LD HL,-21 + CALL __frameset +; 55 register reg_t ndig; +; 56 register reg_t rdig; +; 57 register reg_t e; +; 58 char * s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 59 #ifdef _MULTI_THREAD +; 60 struct flt_info _info; +; 61 char __print_leading_char = '\0'; +; 62 #endif +; 63 +; 64 if (__print_fmt.precision < 0) + LD A,(___print_fmt+6) + OR A,A + JP P,L_2 +; 65 __print_fmt.precision = DEFAULT_PRECISION; + LD A,6 + LD (___print_fmt+6),A +L_2: +; 66 +; 67 if (__print_fmt.field_width < 0) + LD A,(___print_fmt+5) + OR A,A + JP P,L_3 +; 68 { +; 69 __print_fmt.flags |= FMT_FLAG_MINUS; + LD A,(___print_fmt+1) + SET 0,A + LD (___print_fmt+1),A +; 70 __print_fmt.field_width = -__print_fmt.field_width; + LD A,(___print_fmt+5) + NEG + LD (___print_fmt+5),A +; 71 } +L_3: +; 72 rdig = ndig = __print_fmt.precision + 1; + LD A,(___print_fmt+6) + LD B,A + SEXT HL + LD L,B + LD BC,HL + CALL __itol + LD E,A + LD A,1 + LD HL,BC + CALL __ladd_b + LD (IX+-11),HL + LD (IX+-8),E + LD A,(IX+-8) + LD (IX+-21),HL + LD (IX+-18),A +; 73 _u_flt_info(n,&_info); + LD BC,__info + PUSH BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_flt_info + POP BC + POP BC + POP BC +; 74 if ((__print_fmt.type == 'f') && (_info.exp > 0)) + LD A,(___print_fmt+4) + CP A,102 + JR NZ,L_8 + XOR A,A + LD HL,__info+1 + CP A,(HL) + CALL __setflag + JP P,L_8 +; 75 rdig += _info.exp; // May be <0. + LD A,(__info+1) + LD B,A + SEXT HL + LD L,B + LD E,H + LD A,(IX+-8) + LD BC,(IX+-11) + CALL __ladd + LD (IX+-21),HL + LD (IX+-18),E +L_8: +; 76 +; 77 if (rdig > FLT_DIG) + LD HL,6 + LD E,0 + LD BC,(IX+-21) + LD A,(IX+-18) + CALL __lcmps + CALL __setflag + JP P,L_7 +; 78 _u_flt_rnd(&_info, FLT_DIG+1); // Round to the last significant digit. + LD BC,7 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +; 79 else + JR L_11 +L_7: +; 80 _u_flt_rnd(&_info, rdig); // Round into the last digit printed. + LD C,(IX+-21) + LD B,0 + PUSH BC + LD BC,__info + PUSH BC + CALL __u_flt_rnd + POP BC + POP BC +L_11: +; 81 +; 82 if (__print_fmt.type == 'f' && (_info.exp > 0)) + LD A,(___print_fmt+4) + CP A,102 + JR NZ,L_18 + XOR A,A + LD HL,__info+1 + CP A,(HL) + CALL __setflag + JP P,L_18 +; 83 { +; 84 ndig += _info.exp; + LD A,(__info+1) + LD B,A + SEXT HL + LD L,B + LD E,H + LD A,(IX+-8) + LD BC,(IX+-11) + CALL __ladd + LD (IX+-11),HL + LD (IX+-8),E +; 85 } +L_18: +; 86 +; 87 if (_info.flags & FLT_INFO_SIGN) + LD A,(__info) + AND A,1 + JR Z,L_17 +; 88 e = '-'; + LD BC,45 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +; 89 else if (__print_fmt.flags & FMT_FLAG_PLUS) + JR L_23 +L_17: + LD A,(___print_fmt+1) + AND A,2 + JR Z,L_15 +; 90 e = '+'; + LD BC,43 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +; 91 else if (__print_fmt.flags & FMT_FLAG_SPACE) + JR L_23 +L_15: + LD A,(___print_fmt+1) + AND A,4 + JR Z,L_13 +; 92 e = ' '; + LD BC,32 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +; 93 else + JR L_23 +L_13: +; 94 e = '\0'; + LD BC,0 + LD (IX+-7),BC + XOR A,A + LD (IX+-4),A +L_23: +; 95 if (__print_fmt.flags & FMT_FLAG_PAD_ZERO) + LD A,(___print_fmt+1) + AND A,64 + JR Z,L_22 +; 96 __print_leading_char = e; + LD A,(IX+-7) + LD (___print_leading_char),A +; 97 else if (e) + JR L_29 +L_22: + LD HL,(IX+-7) + LD E,(IX+-4) + CALL __lcmpzero + JR Z,L_29 +; 98 *(s++) = e; + LD A,(IX+-7) + LD HL,(IX+-3) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_29: +; 99 +; 100 if (_info.flags & FLT_INFO_INF) + LD A,(__info) + AND A,2 + JR Z,L_34 +; 101 { +; 102 /* This is infinity (+ or -). */ +; 103 if (__print_fmt.flags & FMT_FLAG_UPPERCASE) + LD A,(___print_fmt+1) + AND A,32 + JR Z,L_25 +; 104 strcpy(s,"INF"); + LD BC,L__14 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 105 else + JR L_26 +L_25: +; 106 strcpy(s,"inf"); + LD BC,L__15 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 107 goto out; + JR L_26 +; 108 } +L_34: +; 109 +; 110 if (_info.flags & FLT_INFO_NAN) + LD A,(__info) + AND A,4 + JR Z,L_36 +; 111 { +; 112 /* This is not a number (+ or -). */ +; 113 if (__print_fmt.flags & FMT_FLAG_UPPERCASE) + LD A,(___print_fmt+1) + AND A,32 + JR Z,L_31 +; 114 strcpy(s,"NAN"); + LD BC,L__18 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 115 else + JR L_26 +L_31: +; 116 strcpy(s,"nan"); + LD BC,L__19 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _strcpy + POP BC + POP BC +; 117 goto out; + JR L_26 +; 118 } +L_36: +; 119 +; 120 if (__print_fmt.type == 'e') + LD A,(___print_fmt+4) + CP A,101 + JR NZ,L_38 +; 121 #ifndef _MULTI_THREAD +; 122 s = write_e_digits(s, ndig); + LD C,(IX+-11) + LD B,0 + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _write_e_digits + POP BC + POP BC + LD (IX+-3),HL +L_38: +; 123 #else +; 124 s = write_e_digits(s,&_info,ndig); +; 125 #endif +; 126 if (__print_fmt.type == 'f') + LD A,(___print_fmt+4) + CP A,102 + JR NZ,L_44 +; 127 #ifndef _MULTI_THREAD +; 128 s = write_f_digits(s, _info.exp, ndig); + LD C,(IX+-11) + LD A,(__info+1) + LD B,0 + PUSH BC + LD C,A + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _write_f_digits + POP BC + POP BC + POP BC + LD (IX+-3),HL +L_44: +; 129 #else +; 130 s = write_f_digits(s,fmt,&_info,_info.exp,ndig); +; 131 #endif +; 132 +; 133 /* If g format and not #, strip of trailing zeros. */ +; 134 if (__print_fmt.flags & FMT_FLAG_STRIP) + LD A,(___print_fmt+1) + AND A,128 + JR Z,L_48 +; 135 { +; 136 __print_fmt.pad_post_fract = 0; + XOR A,A + LD (___print_fmt+15),A +; 137 while (s[-1] == '0') /* strip off trailing zero's */ + JR L_39 +L_40: +; 138 --s; + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_39: + LD BC,16777215 + LD HL,(IX+-3) + ADD HL,BC + LD (IX+-17),HL + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + JR Z,L_40 +; 139 if (s[-1] == '.') + LD HL,(IX+-17) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_48 +; 140 __print_fmt.pad_pre_fract = 0; + XOR A,A + LD (___print_fmt+14),A +; 141 } +L_48: +; 142 /* Strip off the trailing decimal point, unless prevented by #. */ +; 143 if (s[-1] == '.' && + LD BC,16777215 + LD HL,(IX+-3) + ADD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_54 +; 144 ((__print_fmt.pad_pre_fract+__print_fmt.pad_post_fract) == 0) && + LD A,(___print_fmt+14) + UEXT HL + LD L,A + LD BC,HL + LD A,(___print_fmt+15) + UEXT HL + LD L,A + ADD HL,BC + CALL __icmpzero + JR NZ,L_54 +; 145 !(__print_fmt.flags & FMT_FLAG_POUND)) + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_54 +; 146 --s; + LD IY,(IX+-3) + LEA IY,IY+-1 + LD (IX+-3),IY +L_54: +; 147 +; 148 if (__print_fmt.type == 'e') + LD A,(___print_fmt+4) + CP A,101 + JR NZ,L_55 +; 149 { +; 150 e = __print_fmt.flags & FMT_FLAG_UPPERCASE ? 'E' : 'e'; + LD A,(___print_fmt+1) + AND A,32 + JR Z,L_51 + LD BC,69 + LD (IX+-14),BC + JR L_52 +L_51: + LD BC,101 + LD (IX+-14),BC +L_52: + LD BC,(IX+-14) + CALL __itol + LD (IX+-7),BC + LD (IX+-4),A +; 151 s = write_exponent(s, e, _info.exp); + LD A,(__info+1) + LD C,A + LD B,0 + PUSH BC + LD C,(IX+-7) + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL _write_exponent + POP BC + POP BC + POP BC + LD (IX+-3),HL +; 152 } +L_55: +; 153 +; 154 *s = '\0'; + LD HL,(IX+-3) + LD (HL),0 +L_26: +; 155 out:; +; 156 #ifdef _MULTI_THREAD +; 157 return __print_leading_char; +; 158 #endif +; 159 } + LD SP,IX + POP IX + RET + + +;**************************** __u_dtof *************************** +;Name Addr/Register Size Type +;_write_exponent STATIC ----- function +;_write_f_digits STATIC ----- function +;_write_e_digits STATIC ----- function +;_strcpy IMPORT ----- function +;___print_leading_char IMPORT 1 variable +;__u_flt_rnd IMPORT ----- function +;__info STATIC 12 variable +;__u_flt_info IMPORT ----- function +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;rdig IX-21 4 variable +;G_0 IX-17 3 variable +;temp49 IX-14 3 variable +;ndig IX-11 4 variable +;e IX-7 4 variable +;s IX-3 3 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 33 (bytes) +; Spill Code: 0 (instruction) + + + SEGMENT STRSECT +L__14: + DB "INF" + DB 0 +L__15: + DB "inf" + DB 0 +L__18: + DB "NAN" + DB 0 +L__19: + DB "nan" + DB 0 + SEGMENT CODE +; 160 +; 161 #ifdef _MULTI_THREAD +; 162 #define _info (*pinfo) +; 163 #endif +; 164 +; 165 /* +; 166 * exp+1- counts the number of digits to the left of the decimal point +; 167 * ndig - counts the number of significant digits to print. +; 168 */ +; 169 #ifndef _MULTI_THREAD +; 170 static char * write_f_digits(char * s, signed char exp, signed char ndig) +; 171 #else +; 172 static char * write_f_digits(char * s, struct fmt_type* fmt,struct flt_info* pinfo,signed char exp, signed char ndig) +; 173 #endif +; 174 { +_write_f_digits: + LD HL,-13 + CALL __frameset +; 175 ureg_t i = 0; + LD BC,0 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A +; 176 +; 177 /* Emit a leading zero, if needed. */ +; 178 if (exp < 0) { + LD A,(IX+9) + OR A,A + JP P,L_62 +; 179 *(s++) = '0'; + LD HL,(IX+6) + LD (HL),48 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 180 --ndig; + DEC (IX+12) +; 181 } +; 182 +; 183 while (exp >= 0 && i < MAXDIGITS) + JR L_62 +L_63: +; 184 { +; 185 *(s++) = _info.digits[i++] + '0'; + LD HL,(IX+-4) + LD BC,(IX+6) + LD (IX+-7),BC + LD IY,(IX+-7) + LD BC,__info+2 + ADD HL,BC + LD A,(HL) + ADD A,48 + LD (IY),A + LD HL,(IX+-4) + LD E,(IX+-1) + LD A,1 + CALL __ladd_b + LD (IX+-4),HL + LD (IX+-1),E + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 186 --ndig; --exp; + DEC (IX+12) + DEC (IX+9) +; 187 } +L_62: + LD A,(IX+9) + OR A,A + JP M,L_65 + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_63 +L_65: +; 188 __print_fmt.pad_at = s; + LD BC,(IX+6) + LD (___print_fmt+16),BC +; 189 if (exp >= 0) { + LD A,(IX+9) + OR A,A + JP M,L_68 +; 190 __print_fmt.pad_whole = exp+1; + LD A,(IX+9) + INC A + LD (___print_fmt+13),A +; 191 ndig -= (exp+1); + LD B,(IX+9) + LD A,(IX+12) + INC B + SUB A,B + LD (IX+12),A +; 192 exp = -1; + LD (IX+9),255 +; 193 } +L_68: +; 194 +; 195 *(s++) = '.'; + LD BC,(IX+6) + LD (IX+-10),BC + LD HL,BC + LD (HL),46 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 196 +; 197 +; 198 if (exp < -1) { + LD A,(IX+9) + CP A,-1 + CALL __setflag + JP P,L_75 +; 199 if (ndig > (-exp-1)) { + LD A,(IX+9) + SEXT HL + LD L,(IX+9) + CALL __ineg + LD BC,HL + DEC BC + LD A,(IX+12) + SEXT HL + LD L,(IX+12) + LD DE,HL + LD HL,BC + OR A,A + SBC HL,DE + CALL __setflag + JP P,L_70 +; 200 __print_fmt.pad_pre_fract = -(exp+1); + LD A,(IX+9) + INC A + NEG + LD (___print_fmt+14),A +; 201 ndig -= -(exp+1); + LD A,(IX+9) + INC A + NEG + LD B,A + LD A,(IX+12) + SUB A,B + LD (IX+12),A +; 202 exp = -1; +; 203 } +; 204 else { + JR L_75 +L_70: +; 205 __print_fmt.pad_pre_fract = ndig; + LD A,(IX+12) + LD (___print_fmt+14),A +; 206 ndig = 0; + LD (IX+12),0 +; 207 } +; 208 } +; 209 while (ndig > 0 && i < MAXDIGITS) + JR L_75 +L_76: +; 210 { +; 211 *(s++) = _info.digits[i++] + '0'; + LD HL,(IX+-4) + LD BC,(IX+6) + LD (IX+-13),BC + LD IY,(IX+-13) + LD BC,__info+2 + ADD HL,BC + LD A,(HL) + ADD A,48 + LD (IY),A + LD HL,(IX+-4) + LD E,(IX+-1) + LD A,1 + CALL __ladd_b + LD (IX+-4),HL + LD (IX+-1),E + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 212 --ndig; + DEC (IX+12) +; 213 } +L_75: + XOR A,A + CP A,(IX+12) + CALL __setflag + JP P,L_79 + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_76 +L_79: +; 214 if (ndig > 0) { + XOR A,A + CP A,(IX+12) + CALL __setflag + JP P,L_80 +; 215 __print_fmt.pad_post_fract =ndig; + LD A,(IX+12) + LD (___print_fmt+15),A +; 216 ndig = 0; +; 217 } +L_80: +; 218 +; 219 return s; + LD HL,(IX+6) +; 220 } + LD SP,IX + POP IX + RET + + +;**************************** _write_f_digits *************************** +;Name Addr/Register Size Type +;___print_fmt IMPORT 19 variable +;__info STATIC 12 variable +;i IX-4 4 variable +;ndig IX+12 1 parameter +;exp IX+9 1 parameter +;s IX+6 3 parameter + + +; Stack Frame Size: 28 (bytes) +; Spill Code: 0 (instruction) + + +; 221 +; 222 #ifndef _MULTI_THREAD +; 223 static char * write_e_digits(char * s, signed char ndig) +; 224 #else +; 225 static char * write_e_digits(char * s,struct flt_info* pinfo, signed char ndig) +; 226 #endif +; 227 { +_write_e_digits: + LD HL,-7 + CALL __frameset +; 228 ureg_t i = 0; +; 229 +; 230 /* Emit the single digit to the left of the decimal point. */ +; 231 *(s++) = _info.digits[i++] + '0'; + LD A,(__info+2) + ADD A,48 + LD HL,(IX+6) + LD (HL),A + LD BC,1 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 232 --ndig; + DEC (IX+9) +; 233 +; 234 /* Emit the decimal point. */ +; 235 *(s++) = '.'; + LD HL,BC + LD (HL),46 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 236 +; 237 /* Emit the digits. */ +; 238 while (ndig-- > 0 && i < MAXDIGITS) + JR L_89 +L_90: +; 239 *(s++) = _info.digits[i++] + '0'; + LD HL,(IX+-4) + LD BC,(IX+6) + LD DE,__info+2 + ADD HL,DE + LD (IX+-7),BC + LD A,(HL) + ADD A,48 + LD HL,BC + LD (HL),A + LD HL,(IX+-4) + LD E,(IX+-1) + LD A,1 + CALL __ladd_b + LD (IX+-4),HL + LD (IX+-1),E + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_89: + LD B,(IX+9) + DEC (IX+9) + XOR A,A + CP A,B + CALL __setflag + JP P,L_91 + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_90 +L_91: +; 240 +; 241 return s; + LD HL,(IX+6) +; 242 } + LD SP,IX + POP IX + RET + + +;**************************** _write_e_digits *************************** +;Name Addr/Register Size Type +;__info STATIC 12 variable +;i IX-4 4 variable +;ndig IX+9 1 parameter +;s IX+6 3 parameter + + +; Stack Frame Size: 19 (bytes) +; Spill Code: 0 (instruction) + + +; 243 +; 244 static char * write_exponent(char * s, char e, signed char exp) +; 245 { +_write_exponent: + LD HL,-3 + CALL __frameset +; 246 /* Emit the exponent specifier. */ +; 247 *(s++) = e; + LD HL,(IX+6) + LD A,(IX+9) + LD (HL),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 248 +; 249 /* Emit the exponent sign. */ +; 250 if (exp < 0) { + LD A,(IX+12) + OR A,A + JP P,L_97 +; 251 *(s++) = '-'; + LD HL,(IX+6) + LD (HL),45 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 252 exp = -exp; + LD A,(IX+12) + NEG + LD (IX+12),A +; 253 } +; 254 else + JR L_99 +L_97: +; 255 *(s++) = '+'; + LD HL,(IX+6) + LD (HL),43 + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_99: +; 256 +; 257 /* Emit the two-digit exponent. */ +; 258 /* For 4-byte floats, the exponent is between -37 and +38, or simply 0 +; 259 to 38 after folding. */ +; 260 *(s++) = exp / 10 + '0'; + LD BC,(IX+6) + LD (IX+-3),BC + LD A,(IX+12) + SEXT HL + LD L,(IX+12) + LD BC,10 + CALL __idivs + LD IY,HL + LEA HL,IY+48 + LD IY,(IX+-3) + LD (IY),L + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 261 *(s++) = exp % 10 + '0'; + LD A,(IX+12) + SEXT HL + LD L,(IX+12) + LD BC,10 + CALL __irems + LD IY,HL + LEA HL,IY+48 + LD IY,(IX+6) + LD (IY),L + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 262 +; 263 return s; + LD HL,BC +; 264 } + LD SP,IX + POP IX + RET + + +;**************************** _write_exponent *************************** +;Name Addr/Register Size Type +;exp IX+12 1 parameter +;e IX+9 1 parameter +;s IX+6 3 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _strcpy:ROM + XREF __u_flt_rnd:ROM + XREF __u_flt_info:ROM + XREF ___print_leading_char:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __lcmps:ROM + XREF __lcmpu:ROM + XREF __ladd:ROM + XREF __idivs:ROM + XREF __ineg:ROM + XREF __irems:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __lcmpzero:ROM + XREF __ladd_b:ROM + XDEF __u_dtof + XDEF __info + END diff --git a/frontends/calculator/CEdev/lib/shared/udtog.src b/frontends/calculator/CEdev/lib/shared/udtog.src new file mode 100644 index 0000000..cd584be --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/udtog.src @@ -0,0 +1,173 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UDTOG.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_dtog - convert a double float to ASCII in g format +; 12 * +; 13 * Inputs: +; 14 * n - value to be converted +; 15 * s - target char array +; 16 * fmt - format structure with conversion info +; 17 * +; 18 * Returns: +; 19 * next address past the end of the string +; 20 * +; 21 *************************************************/ +; 22 #ifndef _MULTI_THREAD +; 23 void _u_dtog(double n) +; 24 #else +; 25 char _mt_dtog(double n,char* __print_buff,struct fmt_type* fmt) +; 26 #define __print_fmt (*fmt) +; 27 #define _u_dtof(n) _mt_dtof(n,__print_buff,fmt) +; 28 #endif +; 29 { +__u_dtog: + LD HL,-12 + CALL __frameset +; 30 struct flt_info _info; +; 31 +; 32 _u_flt_info(n, &_info); + PEA IX+-12 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_flt_info + POP BC + POP BC + POP BC +; 33 +; 34 if (__print_fmt.precision < 0) + LD A,(___print_fmt+6) + OR A,A + JP P,L_2 +; 35 __print_fmt.precision = 0; + XOR A,A + LD (___print_fmt+6),A +L_2: +; 36 +; 37 if (__print_fmt.field_width < 0) + LD A,(___print_fmt+5) + OR A,A + JP P,L_4 +; 38 { +; 39 __print_fmt.flags |= FMT_FLAG_MINUS; + LD A,(___print_fmt+1) + SET 0,A + LD (___print_fmt+1),A +; 40 __print_fmt.field_width = -__print_fmt.field_width; + LD A,(___print_fmt+5) + NEG + LD (___print_fmt+5),A +; 41 } +L_4: +; 42 +; 43 if (!(__print_fmt.flags & FMT_FLAG_POUND)) + LD A,(___print_fmt+1) + AND A,8 + JR NZ,L_6 +; 44 __print_fmt.flags |= FMT_FLAG_STRIP; + LD A,(___print_fmt+1) + SET 7,A + LD (___print_fmt+1),A +L_6: +; 45 +; 46 // ISO Spec: The precision is the maximal number of significant digits +; 47 // if the precision is zero it is taken as one. +; 48 if (!__print_fmt.precision) + LD A,(___print_fmt+6) + OR A,A + JR NZ,L_10 +; 49 __print_fmt.precision=1; + LD A,1 + LD (___print_fmt+6),A +L_10: +; 50 +; 51 if ( _info.exp < MINEXP +; 52 || _info.exp >= __print_fmt.precision) + LD A,(IX+-11) + CP A,-4 + JP M,L_8 + LD A,(IX+-11) + LD HL,___print_fmt+6 + CP A,(HL) + CALL __setflag + JP M,L_9 +L_8: +; 53 { +; 54 --__print_fmt.precision; + LD A,(___print_fmt+6) + DEC A + LD (___print_fmt+6),A +; 55 __print_fmt.type = 'e'; + LD A,101 + LD (___print_fmt+4),A +; 56 } +; 57 else + JR L_11 +L_9: +; 58 { +; 59 __print_fmt.precision -= (1 + _info.exp); + LD B,(IX+-11) + INC B + LD A,(___print_fmt+6) + SUB A,B + LD (___print_fmt+6),A +; 60 __print_fmt.type = 'f'; + LD A,102 + LD (___print_fmt+4),A +; 61 } +L_11: +; 62 +; 63 #ifndef _MULTI_THREAD +; 64 _u_dtof(n); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_dtof + POP BC + POP BC +; 65 #else +; 66 return(_u_dtof(n)); +; 67 #endif +; 68 } + LD SP,IX + POP IX + RET + + +;**************************** __u_dtog *************************** +;Name Addr/Register Size Type +;__u_dtof IMPORT ----- function +;___print_fmt IMPORT 19 variable +;__u_flt_info IMPORT ----- function +;_info IX-12 12 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 24 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_flt_info:ROM + XREF __u_dtof:ROM + XREF ___print_fmt:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XDEF __u_dtog + END diff --git a/frontends/calculator/CEdev/lib/shared/uitoa.src b/frontends/calculator/CEdev/lib/shared/uitoa.src new file mode 100644 index 0000000..4399172 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uitoa.src @@ -0,0 +1,65 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UITOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_itoa - convert an integer to a number of base rad +; 12 * +; 13 * Inputs: +; 14 * int - int to be converted +; 15 * str - target char array +; 16 * rad - radix +; 17 * fmt - format structure with conversion info +; 18 * +; 19 * Returns: +; 20 * next address past the end of the string +; 21 * +; 22 *************************************************/ +; 23 #ifndef _MULTI_THREAD +; 24 void _u_itoa(int n) +; 25 { +__u_itoa: + CALL __frameset0 +; 26 _u_ltoa((long)n); + LD BC,(IX+6) + CALL __itol + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ltoa + POP BC + POP BC +; 27 } + LD SP,IX + POP IX + RET + + +;**************************** __u_itoa *************************** +;Name Addr/Register Size Type +;__u_ltoa IMPORT ----- function +;n IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ltoa:ROM + XREF __itol:ROM + XREF __frameset0:ROM + XDEF __u_itoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uldiv.src b/frontends/calculator/CEdev/lib/shared/uldiv.src new file mode 100644 index 0000000..6acdeac --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uldiv.src @@ -0,0 +1,128 @@ +; (c) Copyright 1999-2008 Zilog, Inc. +;------------------------------------------------------------------------- +; Unsigned Long Division. +; Input: +; Operand1: +; (ix+9) : high word,high byte +; (ix+8) : high word,low byte +; (ix+7) : low word,high byte +; (ix+6) : low word,low byte +; +; Operand2: +; (ix+15) : high word,high byte +; (ix+14) : high word,low byte +; (ix+13) : low word,high byte +; (ix+12) : low word,low byte +; +; Output: +; Result: b : high byte +; de : low byte +; Registers Used: +; a,b,c,d,e,h,l,iy +;------------------------------------------------------------------------- + .assume adl=1 + .def .uldiv + +.uldiv: + push ix + ld ix,0 + add ix,sp + + ld de,0 ;res = 0; + ld b,0 + + ld hl,0 ;num = 0 + ld c,0 + + ld iy,32 ;i = 32; + +loop: + ;res = res << 1 + ex de,hl + add hl,hl + ld a,b + adc a,b + ld b,a + ex de,hl + + ;num = num << 1 + add hl,hl + ld a,c + adc a,c + ld c,a + + ;x = x << 1 + ld a,(ix+6) + add a,(ix+6) + ld (ix+6),a + ld a,(ix+7) + adc a,(ix+7) + ld (ix+7),a + ld a,(ix+8) + adc a,(ix+8) + ld (ix+8),a + ld a,(ix+9) + adc a,(ix+9) + ld (ix+9),a + + + push de + + ;num = num + carry + + ld de,0 + adc hl,de + ld a,c + adc a,d + ld c,a + + + ;num = num - y + ld de,(ix+12) + or a,a + sbc hl,de + ld a,c + ld d,(ix+15) + sbc a,d + ld c,a + + pop de + jr c, out ;if (num < y) goto out + + inc de ;res = res | 1 + + jr done ;goto done + +out: + push de + ;num = num + y + ld de,(ix+12) + add hl,de + ld a,c + ld d,(ix+15) + adc a,d + ld c,a + + pop de + +done: + ;i--, if (i != 0) go to loop + dec iyl + jr nz,loop + + + pop ix + ret + + .def .uldivbdechl +.uldivbdechl: + push bc + push hl + ld c,b + push bc + push de + call .uldiv + ld iy,12 + add iy,sp + ld sp,iy + ret diff --git a/frontends/calculator/CEdev/lib/shared/ultoa.src b/frontends/calculator/CEdev/lib/shared/ultoa.src new file mode 100644 index 0000000..d57f344 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ultoa.src @@ -0,0 +1,472 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ULTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 #ifndef _PTR_ +; 10 #define _PTR_ * +; 11 #endif +; 12 +; 13 +; 14 /************************************************* +; 15 * +; 16 * _u_ltoa - convert a long to a number of base rad +; 17 * +; 18 * Inputs: +; 19 * lng - long to be converted +; 20 * str - target char array +; 21 * rad - radix +; 22 * fmt - format structure with conversion info +; 23 * +; 24 * Returns: +; 25 * next address past the end of the string +; 26 * +; 27 *************************************************/ +; 28 +; 29 void __print_sendstring(char *sp); +; 30 +; 31 #ifndef _MULTI_THREAD +; 32 void _u_ltoa(long val) +; 33 #else +; 34 char _mt_ltoa(long val,char* __print_buff,struct fmt_type* print_fmt) +; 35 #define __print_fmt (*print_fmt) +; 36 #endif +; 37 { +__u_ltoa: + LD HL,-37 + CALL __frameset +; 38 unsigned char a; +; 39 unsigned char t; +; 40 unsigned char sign; +; 41 char _PTR_ s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 42 unsigned char nonzero; +; 43 unsigned long uval; +; 44 char rad; +; 45 #ifdef _MULTI_THREAD +; 46 char __print_leading_char = '\0'; +; 47 #endif +; 48 +; 49 sign = val < 0; + LD HL,(IX+6) + LD E,(IX+9) + CALL __lcmpzero + CALL __setflag + JP P,L__1 + LD A,1 + JR L__2 +L__1: + XOR A,A +L__2: + LD (IX+-11),A +; 50 uval = sign ? -val : val; + OR A,A + JR Z,L_2 + LD HL,(IX+6) + LD E,(IX+9) + CALL __lneg + LD (IX+-16),HL + LD (IX+-13),E + JR L_3 +L_2: + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-16),BC + LD (IX+-13),A +L_3: + LD BC,(IX+-16) + LD A,(IX+-13) + LD (IX+-10),BC + LD (IX+-7),A + OR A,A +; 51 nonzero = (uval > 0); + SBC HL,HL + LD E,0 + CALL __lcmpu + JR NC,L__5 + LD A,1 + JR L__6 +L__5: + XOR A,A +L__6: + LD (IX+-12),A +; 52 +; 53 if (__print_fmt.precision < 0) + LD A,(___print_fmt+6) + OR A,A + JP P,L_6 +; 54 __print_fmt.precision = 1; + LD A,1 + LD (___print_fmt+6),A +L_6: +; 55 +; 56 if (__print_fmt.field_width < 0) + LD A,(___print_fmt+5) + OR A,A + JP P,L_7 +; 57 { +; 58 __print_fmt.flags |= FMT_FLAG_MINUS; + LD A,(___print_fmt+1) + SET 0,A + LD (___print_fmt+1),A +; 59 __print_fmt.field_width = -__print_fmt.field_width; + LD A,(___print_fmt+5) + NEG + LD (___print_fmt+5),A +; 60 } +L_7: +; 61 +; 62 a = 'A'; + LD (IX+-4),65 +; 63 switch (__print_fmt.type) + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__9: + DW 7 + DB 88 + DW24 L_16 + + DB 100 + DW24 L_9 + + DB 105 + DW24 L_10 + + DB 111 + DW24 L_12 + + DB 112 + DW24 L_14 + + DB 117 + DW24 L_11 + + DB 120 + DW24 L_13 + + DW24 L_8 + +; 64 { +; 65 default: +L_8: +; 66 case 'd': +L_9: +; 67 case 'i': +L_10: +; 68 case 'u': +L_11: +; 69 rad = 10; + LD (IX+-5),10 +; 70 break; + JR L_22 +; 71 case 'o': +L_12: +; 72 rad = 0; + LD (IX+-5),0 +; 73 break; + JR L_22 +; 74 case 'x': +L_13: +; 75 case 'p': +L_14: +; 76 if ( !(__print_fmt.flags&FMT_FLAG_UPPERCASE)) + LD A,(___print_fmt+1) + AND A,32 + JR NZ,L_16 +; 77 a = 'a'; + LD (IX+-4),97 +; 78 // Fall into next case +; 79 case 'X': +L_16: +; 80 rad = 16; + LD (IX+-5),16 +; 81 break; +; 82 } +; 83 do +L_22: +; 84 { /* generate digits in reverse order */ +; 85 t = uval % rad; + LD A,(IX+-5) + SEXT HL + LD L,(IX+-5) + LD BC,HL + LD A,H + LD HL,(IX+-10) + LD E,(IX+-7) + CALL __lremu + LD BC,HL + LD (IX+-6),C +; 86 if (t > 9) + LD A,9 + CP A,(IX+-6) + JR NC,L_21 +; 87 *(s++) = (t - 10) + a; + LD BC,(IX+-3) + LD (IX+-19),BC + LD A,(IX+-6) + ADD A,-10 + ADD A,(IX+-4) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 88 else + JR L_23 +L_21: +; 89 *(s++) = t + '0'; + LD BC,(IX+-3) + LD (IX+-22),BC + LD A,(IX+-6) + ADD A,48 + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 90 } while (uval /= rad); +L_23: + LD A,(IX+-5) + SEXT HL + LD L,(IX+-5) + LD BC,HL + LD A,H + LD HL,(IX+-10) + LD E,(IX+-7) + CALL __ldivu + LD (IX+-10),HL + LD (IX+-7),E + LD HL,(IX+-10) + LD E,(IX+-7) + CALL __lcmpzero + JR NZ,L_22 +; 91 +; 92 while (s - __print_buff < (unsigned char) __print_fmt.precision) { + JR L_26 +L_27: +; 93 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-25),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 94 } +L_26: + LD A,(___print_fmt+6) + UEXT HL + LD L,A + LD DE,HL + LD HL,(IX+-3) + OR A,A + LD BC,___print_buff + SBC HL,BC + OR A,A + SBC HL,DE + JP M,L_27 +; 95 if (__print_fmt.flags & FMT_FLAG_POUND) { + LD A,(___print_fmt+1) + AND A,8 + JR Z,L_48 +; 96 if (nonzero) { + LD A,(IX+-12) + OR A,A + JR Z,L_48 +; 97 if (rad == 16) { + LD A,(IX+-5) + CP A,16 + JR NZ,L_38 +; 98 *(s++) = 'X'; + LD BC,(IX+-3) + LD (IX+-28),BC + LD HL,BC + LD (HL),88 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 99 *(s++) = '0'; + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 100 } +; 101 else if (rad == 116) { + JR L_48 +L_38: + LD A,(IX+-5) + CP A,116 + JR NZ,L_36 +; 102 *(s++) = 'x'; + LD BC,(IX+-3) + LD (IX+-31),BC + LD HL,BC + LD (HL),120 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 103 *(s++) = '0'; + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 104 } +; 105 else if (rad == 8) { + JR L_48 +L_36: + LD A,(IX+-5) + CP A,8 + JR NZ,L_48 +; 106 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-34),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 107 } +; 108 } +; 109 } +L_48: +; 110 +; 111 if (sign) + LD A,(IX+-11) + OR A,A + JR Z,L_47 +; 112 a = '-'; + LD (IX+-4),45 +; 113 else if (__print_fmt.flags & FMT_FLAG_PLUS) + JR L_50 +L_47: + LD A,(___print_fmt+1) + AND A,2 + JR Z,L_45 +; 114 a = '+'; + LD (IX+-4),43 +; 115 else if (__print_fmt.flags & FMT_FLAG_SPACE) + JR L_50 +L_45: + LD A,(___print_fmt+1) + AND A,4 + JR Z,L_43 +; 116 a = ' '; + LD (IX+-4),32 +; 117 else + JR L_50 +L_43: +; 118 a = '\0'; + LD (IX+-4),0 +L_50: +; 119 +; 120 // ISO Spec: If a precision is specified the zero flag is ignored +; 121 if (__print_fmt.precision ) + LD A,(___print_fmt+6) + OR A,A + JR Z,L_55 +; 122 __print_fmt.flags &= ~FMT_FLAG_PAD_ZERO; + LD A,(___print_fmt+1) + RES 6,A + LD (___print_fmt+1),A +L_55: +; 123 +; 124 if ( __print_fmt.flags & FMT_FLAG_PAD_ZERO) + LD A,(___print_fmt+1) + AND A,64 + JR Z,L_54 +; 125 __print_leading_char = a; + LD A,(IX+-4) + LD (___print_leading_char),A +; 126 else if (a) + JR L_56 +L_54: + LD A,(IX+-4) + OR A,A + JR Z,L_56 +; 127 *(s++) = a; + LD BC,(IX+-3) + LD (IX+-37),BC + LD HL,BC + LD A,(IX+-4) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +L_56: +; 128 +; 129 *s = '\0'; + LD HL,(IX+-3) +; 130 +; 131 _u_reverse(__print_buff); + LD BC,___print_buff + PUSH BC + LD (HL),0 + CALL __u_reverse + POP BC +; 132 #ifndef _MULTI_THREAD +; 133 __print_sendstring(__print_buff); + LD BC,___print_buff + PUSH BC + CALL ___print_sendstring + POP BC +; 134 #else +; 135 return __print_leading_char; +; 136 #endif +; 137 } + LD SP,IX + POP IX + RET + + +;**************************** __u_ltoa *************************** +;Name Addr/Register Size Type +;___print_sendstring IMPORT ----- function +;__u_reverse IMPORT ----- function +;___print_leading_char IMPORT 1 variable +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;temp0 IX-16 4 variable +;nonzero IX-12 1 variable +;sign IX-11 1 variable +;uval IX-10 4 variable +;t IX-6 1 variable +;rad IX-5 1 variable +;a IX-4 1 variable +;s IX-3 3 variable +;val IX+6 4 parameter + + +; Stack Frame Size: 49 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_sendstring:ROM + XREF __u_reverse:ROM + XREF ___print_leading_char:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __lcmpu:ROM + XREF __ldivu:ROM + XREF __lneg:ROM + XREF __lremu:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __lcmpzero:ROM + XREF __case8:ROM + XDEF __u_ltoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uprint.src b/frontends/calculator/CEdev/lib/shared/uprint.src new file mode 100644 index 0000000..2cb1281 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uprint.src @@ -0,0 +1,516 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UPRINT.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 #include +; 3 #include +; 4 #include +; 5 #include +; 6 +; 7 extern struct fmt_type __print_fmt; +; 8 extern unsigned char __print_len; +; 9 extern char __print_leading_char; // Initial +, -, or space for number +; 10 extern char *__print_out; +; 11 +; 12 extern void (*__print_xputch)(char); +; 13 +; 14 void __print_sendstring(char *sp); +; 15 void __print_putch(char ch); +; 16 +; 17 int _u_print(char *dest, char *fmt, va_list argp) { +__u_print: + LD HL,-14 + CALL __frameset +; 18 char *sp; +; 19 double d; +; 20 +; 21 __print_len = 0; + XOR A,A + LD (___print_len),A +; 22 __print_out = dest; + LD BC,(IX+6) + LD (___print_out),BC +; 23 while (*fmt) { + JR L_45 +; 24 while (*fmt && *fmt != (char)'%') { +L_3: +; 25 __print_putch(*fmt++); + LD BC,(IX+9) + LD (IX+-11),BC + LD BC,(IX+9) + INC BC + LD (IX+9),BC + LD HL,(IX+-11) + LD C,(HL) + LD B,0 + PUSH BC + CALL ___print_putch + POP BC +; 26 ++__print_len; + LD A,(___print_len) + INC A + LD (___print_len),A +; 27 } +L_2: + LD HL,(IX+9) + LD A,(HL) + OR A,A + JR NZ,L__1 + LD A,1 + JR L__2 +L__1: + XOR A,A +L__2: + LD (IX+-4),A + OR A,A + JR NZ,L_44 + LD HL,(IX+9) + LD A,(HL) + CP A,37 + JR NZ,L_3 +L_44: +; 28 if (*fmt) { /* we found a % in format string */ + LD A,(IX+-4) + OR A,A + JR NZ,L_45 +; 29 fmt = _u_pscan(sp = fmt, &__print_fmt,&argp); + LD BC,(IX+9) + LD (IX+-3),BC + PEA IX+12 + LD BC,___print_fmt + PUSH BC + LD BC,(IX+-3) + PUSH BC + CALL __u_pscan + POP BC + POP BC + POP BC + LD (IX+9),HL +; 30 if (__print_fmt.status == (unsigned char)FMT_ERR) { + LD A,(___print_fmt) + CP A,1 + JR Z,L_7 + JR L_42 +; 31 +; 32 /* error in format string, just dump out from p to fmt */ +; 33 +; 34 for (;sp < fmt;++__print_len,++sp) { +L_5: +; 35 __print_putch(*sp++); + LD BC,(IX+-3) + LD (IX+-14),BC + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC + LD HL,(IX+-14) + LD C,(HL) + LD B,0 + PUSH BC + CALL ___print_putch + POP BC + LD A,(___print_len) + INC A + LD (___print_len),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 36 } +L_7: + LD BC,(IX+9) + LD HL,(IX+-3) + OR A,A + SBC HL,BC + JR C,L_5 +; 37 return -1; + LD HL,16777215 + JR L_50 +; 38 } else if (__print_fmt.status == (unsigned char)FMT_PASS_THRU) { +L_42: + LD A,(___print_fmt) + CP A,2 + JR NZ,L_40 +; 39 __print_putch(__print_fmt.chr); + LD A,(___print_fmt+3) + LD C,A + LD B,0 + PUSH BC + CALL ___print_putch + POP BC +; 40 ++__print_len; + LD A,(___print_len) + INC A + LD (___print_len),A +; 41 } else { + JR L_45 +L_40: +; 42 switch (__print_fmt.type) { + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__9: + DW 15 + DB 69 + DW24 L_25 + + DB 71 + DW24 L_27 + + DB 88 + DW24 L_16 + + DB 99 + DW24 L_31 + + DB 100 + DW24 L_9 + + DB 101 + DW24 L_24 + + DB 102 + DW24 L_23 + + DB 103 + DW24 L_26 + + DB 105 + DW24 L_10 + + DB 110 + DW24 L_34 + + DB 111 + DW24 L_18 + + DB 112 + DW24 L_33 + + DB 115 + DW24 L_32 + + DB 117 + DW24 L_17 + + DB 120 + DW24 L_15 + + DW24 L_45 + +; 43 case 'd': +L_9: +; 44 case 'i': +L_10: +; 45 if (__print_fmt.size == (char)'l' || __print_fmt.size == (char)'L') { + LD A,(___print_fmt+2) + CP A,108 + JR Z,L_12 + LD A,(___print_fmt+2) + CP A,76 + JR NZ,L_13 +L_12: +; 46 _u_ltoa(va_arg(argp, long)); + LD IY,(IX+12) + LEA BC,IY+6 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-6) + LD A,(IY+-3) + LD H,0 + LD L,A + PUSH HL + PUSH BC + CALL __u_ltoa + POP BC + POP BC +; 47 } else { + JR L_45 +L_13: +; 48 _u_ltoa((long)va_arg(argp, int)); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-3) + CALL __itol + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ltoa + POP BC + POP BC +; 49 } +; 50 break; + JR L_45 +; 51 case 'x': +L_15: +; 52 case 'X': +L_16: +; 53 case 'u': +L_17: +; 54 case 'o': +L_18: +; 55 if (__print_fmt.size == (char)'l' || __print_fmt.size == (char)'L') { + LD A,(___print_fmt+2) + CP A,108 + JR Z,L_20 + LD A,(___print_fmt+2) + CP A,76 + JR NZ,L_21 +L_20: +; 56 _u_ultoa(va_arg(argp,long)); + LD IY,(IX+12) + LEA BC,IY+6 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-6) + LD A,(IY+-3) + LD H,0 + LD L,A + PUSH HL + PUSH BC + CALL __u_ultoa + POP BC + POP BC +; 57 } else { + JR L_45 +L_21: +; 58 _u_ultoa((unsigned long)va_arg(argp,unsigned int)); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-3) + LD DE,BC + XOR A,A + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ultoa + POP BC + POP BC +; 59 } +; 60 break; + JR L_45 +; 61 case 'f': +L_23: +; 62 case 'e': +L_24: +; 63 case 'E': +L_25: +; 64 case 'g': +L_26: +; 65 case 'G': +L_27: +; 66 d = va_arg(argp,double); + LD IY,(IX+12) + LEA BC,IY+6 + LD (IX+12),BC + LD IY,(IX+12) + LEA HL,IY+-6 + LD BC,(HL) + INC HL + INC HL + INC HL + LD A,(HL) + LD (IX+-8),BC + LD (IX+-5),A +; 67 if (__print_fmt.type == (char)'g') { + LD A,(___print_fmt+4) + CP A,103 + JR NZ,L_29 +; 68 _u_dtog(d); + LD C,(IX+-5) + LD B,0 + PUSH BC + LD BC,(IX+-8) + PUSH BC + CALL __u_dtog + POP BC + POP BC +; 69 } else { + JR L_45 +L_29: +; 70 _u_dtof(d); + LD C,(IX+-5) + LD B,0 + PUSH BC + LD BC,(IX+-8) + PUSH BC + CALL __u_dtof + POP BC + POP BC +; 71 } +; 72 break; + JR L_45 +; 73 case 'c': +L_31: +; 74 __print_buff[0] = va_arg(argp,int); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) +; 75 __print_buff[1] = '\0'; +; 76 __print_sendstring(__print_buff); + LD BC,___print_buff + PUSH BC + LEA HL,IY+-3 + LD A,(HL) + LD (___print_buff),A + LD HL,___print_buff + INC HL + LD (HL),0 + CALL ___print_sendstring + POP BC +; 77 break; + JR L_45 +; 78 case 's': +L_32: +; 79 sp = va_arg(argp, char*); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-3),BC +; 80 __print_sendstring(sp); + PUSH BC + CALL ___print_sendstring + POP BC +; 81 break; + JR L_45 +; 82 case 'p': +L_33: +; 83 _u_ultoa((long)va_arg(argp,void*)); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LD BC,(IY+-3) + LD DE,BC + XOR A,A + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ultoa + POP BC + POP BC +; 84 break; + JR L_45 +; 85 case 'n': +L_34: +; 86 sp = va_arg(argp, char*); + LD IY,(IX+12) + LEA BC,IY+3 + LD (IX+12),BC + LD IY,(IX+12) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-3),BC +; 87 if (__print_fmt.size == (char)'l' || __print_fmt.size == (char)'L') { + LD A,(___print_fmt+2) + CP A,108 + JR Z,L_36 + LD A,(___print_fmt+2) + CP A,76 + JR NZ,L_37 +L_36: +; 88 *((long*)sp) = __print_len; + UEXT HL + LD A,(___print_len) + LD L,A + LD IY,(IX+-3) + LD (IY),HL + LD (IY+3),H +; 89 } else { + JR L_45 +L_37: +; 90 *((int*)sp) = __print_len; + LD A,(___print_len) + UEXT HL + LD L,A + LD IY,(IX+-3) + LD (IY),HL +; 91 } +; 92 break; +; 93 } +; 94 } +; 95 } +; 96 } +L_45: + LD HL,(IX+9) + LD A,(HL) + OR A,A + JR NZ,L_2 +; 97 +; 98 if (__print_out) { + LD HL,(___print_out) + CALL __icmpzero + JR Z,L_49 +; 99 *__print_out = '\0'; + LD HL,(___print_out) + LD (HL),0 +; 100 } +L_49: +; 101 return __print_len; + LD A,(___print_len) + UEXT HL + LD L,A +; 102 } +L_50: + LD SP,IX + POP IX + RET + + +;**************************** __u_print *************************** +;Name Addr/Register Size Type +;___print_sendstring IMPORT ----- function +;___print_buff IMPORT unknown variable +;__u_dtof IMPORT ----- function +;__u_dtog IMPORT ----- function +;__u_ultoa IMPORT ----- function +;__u_ltoa IMPORT ----- function +;___print_fmt IMPORT 19 variable +;__u_pscan IMPORT ----- function +;___print_putch IMPORT ----- function +;___print_out IMPORT 3 variable +;___print_len IMPORT 1 variable +;d IX-8 4 variable +;G_0 IX-4 1 variable +;sp IX-3 3 variable +;argp IX+12 3 parameter +;fmt IX+9 3 parameter +;dest IX+6 3 parameter + + +; Stack Frame Size: 29 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_putch:ROM + XREF ___print_sendstring:ROM + XREF ___print_out:ROM + XREF __u_pscan:ROM + XREF __u_dtog:ROM + XREF __u_dtof:ROM + XREF __u_ultoa:ROM + XREF __u_ltoa:ROM + XREF ___print_len:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XREF __case8:ROM + XDEF __u_print + END diff --git a/frontends/calculator/CEdev/lib/shared/upscan.src b/frontends/calculator/CEdev/lib/shared/upscan.src new file mode 100644 index 0000000..829431f --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/upscan.src @@ -0,0 +1,802 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UPSCAN.C" + .assume ADL=1 + SEGMENT TEXT +_pscan_fsa: + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 1 + DB 254 + DB 254 + DB 2 + DB 3 + DB 6 + DB 4 + DB 7 + DB 8 + DB 3 + DB 254 + DB 2 + DB 3 + DB 6 + DB 4 + DB 7 + DB 254 + DB 3 + DB 254 + DB 254 + DB 3 + DB 6 + DB 4 + DB 7 + DB 254 + DB 3 + DB 254 + DB 254 + DB 5 + DB 254 + DB 254 + DB 7 + DB 254 + DB 5 + DB 254 + DB 254 + DB 5 + DB 6 + DB 254 + DB 7 + DB 254 + DB 5 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 7 + DB 254 + DB 254 + DB 254 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 #include +; 10 +; 11 #define rom // ez8 keyword +; 12 +; 13 /* NOTE: */ +; 14 /* This code is duplicated in the optimizer to implement the GENPRINTF */ +; 15 /* feature. If you change this, merge the changes in to the optimizer */ +; 16 /* file genprintf.c too.! */ +; 17 +; 18 /* classes */ +; 19 +; 20 #define FLAGS 0 +; 21 #define DIGIT 1 +; 22 #define SIZE 2 +; 23 #define DOT 3 +; 24 #define TYPES 4 +; 25 #define PERCENT 5 +; 26 #define AST 6 +; 27 #define OTHER 7 +; 28 +; 29 /* actions */ +; 30 +; 31 #define ACC -1 +; 32 #define ERR -2 +; 33 +; 34 #define CR 13 +; 35 #define LF 10 +; 36 +; 37 #define TRUE 1 +; 38 #define FALSE 0 +; 39 +; 40 /* +; 41 P +; 42 E +; 43 F D T R O +; 44 L I S Y C T +; 45 A G I D P E A H +; 46 G I Z O E N S E +; 47 S T E T S T T R */ +; 48 static rom const char pscan_fsa[9][8] = { + SEGMENT CODE +; 49 /* 0 */ {ERR,ERR,ERR,ERR,ERR, 1,ERR,ERR}, +; 50 /* 1 */ { 2, 3, 6, 4, 7, 8, 3,ERR}, +; 51 /* 2 */ { 2, 3, 6, 4, 7,ERR, 3,ERR}, +; 52 /* 3 */ {ERR, 3, 6, 4, 7,ERR, 3,ERR}, +; 53 /* 4 */ {ERR, 5,ERR,ERR, 7,ERR, 5,ERR}, +; 54 /* 5 */ {ERR, 5, 6,ERR, 7,ERR, 5,ERR}, +; 55 /* 6 */ {ERR,ERR,ERR,ERR, 7,ERR,ERR,ERR}, +; 56 /* 7 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 57 /* 8 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 58 }; +; 59 +; 60 /************************************************* +; 61 * +; 62 * _u_pscan - scan a printf format string +; 63 * +; 64 * Adopted from funtion of same name in target rtl +; 65 * pfmt - pointer to format string to parse, advanced to a '%' +; 66 * - on return is advanced to first char past format spec +; 67 * +; 68 * node- pointer to the FCALL node, used for args +; 69 * +; 70 * p_argnum - pointer to the index in node->sons[] of the next arg. +; 71 * (These count downward!) +; 72 +; 73 * +; 74 *************************************************/ +; 75 char _PTR_ _u_pscan (char _PTR_ fmt,struct fmt_type _PTR_ str,va_list _PTR_ argp) +; 76 { +__u_pscan: + LD HL,-11 + CALL __frameset +; 77 int pstate; +; 78 int state = 0; + LD BC,0 + LD (IX+-7),BC +; 79 int class; +; 80 char ch; +; 81 unsigned char precision_given = FALSE; + LD (IX+-8),0 +; 82 +; 83 str->flags = 0; + LD IY,(IX+9) + LD (IY+1),0 +; 84 str->field_width = 0; + LD (IY+5),0 +; 85 str->precision = 0; + LD (IY+6),0 +; 86 str->size = 0; + LD (IY+2),0 +; 87 str->type = '\0'; + LD (IY+4),0 +; 88 +; 89 for(;;) { +L_77: +; 90 ch = *(fmt++); + LD HL,(IX+6) + LD A,(HL) + LD (IX+-1),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 91 switch (ch) { + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + CALL __case8 +L__0: + DW 35 + DB 32 + DW24 L_3 + + DB 35 + DW24 L_4 + + DB 37 + DW24 L_35 + + DB 42 + DW24 L_16 + + DB 43 + DW24 L_2 + + DB 45 + DW24 L_1 + + DB 46 + DW24 L_15 + + DB 48 + DW24 L_5 + + DB 49 + DW24 L_6 + + DB 50 + DW24 L_7 + + DB 51 + DW24 L_8 + + DB 52 + DW24 L_9 + + DB 53 + DW24 L_10 + + DB 54 + DW24 L_11 + + DB 55 + DW24 L_12 + + DB 56 + DW24 L_13 + + DB 57 + DW24 L_14 + + DB 69 + DW24 L_28 + + DB 71 + DW24 L_30 + + DB 76 + DW24 L_19 + + DB 88 + DW24 L_25 + + DB 99 + DW24 L_31 + + DB 100 + DW24 L_20 + + DB 101 + DW24 L_27 + + DB 102 + DW24 L_26 + + DB 103 + DW24 L_29 + + DB 104 + DW24 L_17 + + DB 105 + DW24 L_21 + + DB 108 + DW24 L_18 + + DB 110 + DW24 L_34 + + DB 111 + DW24 L_22 + + DB 112 + DW24 L_33 + + DB 115 + DW24 L_32 + + DB 117 + DW24 L_23 + + DB 120 + DW24 L_24 + + DW24 L_36 + +; 92 case '-': +L_1: +; 93 case '+': +L_2: +; 94 case ' ': +L_3: +; 95 case '#': +L_4: +; 96 class = FLAGS; + LD BC,0 + LD (IX+-4),BC +; 97 break; + JR L_37 +; 98 case '0': +L_5: +; 99 case '1': +L_6: +; 100 case '2': +L_7: +; 101 case '3': +L_8: +; 102 case '4': +L_9: +; 103 case '5': +L_10: +; 104 case '6': +L_11: +; 105 case '7': +L_12: +; 106 case '8': +L_13: +; 107 case '9': +L_14: +; 108 class = DIGIT; + LD BC,1 + LD (IX+-4),BC +; 109 break; + JR L_37 +; 110 case '.': +L_15: +; 111 class = DOT; + LD BC,3 + LD (IX+-4),BC +; 112 break; + JR L_37 +; 113 case '*': +L_16: +; 114 class = AST; + LD BC,6 + LD (IX+-4),BC +; 115 break; + JR L_37 +; 116 case 'h': +L_17: +; 117 case 'l': +L_18: +; 118 case 'L': +L_19: +; 119 class = SIZE; + LD BC,2 + LD (IX+-4),BC +; 120 break; + JR L_37 +; 121 case 'd': +L_20: +; 122 case 'i': +L_21: +; 123 case 'o': +L_22: +; 124 case 'u': +L_23: +; 125 case 'x': +L_24: +; 126 case 'X': +L_25: +; 127 case 'f': +L_26: +; 128 case 'e': +L_27: +; 129 case 'E': +L_28: +; 130 case 'g': +L_29: +; 131 case 'G': +L_30: +; 132 case 'c': +L_31: +; 133 case 's': +L_32: +; 134 case 'p': +L_33: +; 135 case 'n': +L_34: +; 136 class = TYPES; + LD BC,4 + LD (IX+-4),BC +; 137 break; + JR L_37 +; 138 case '%': +L_35: +; 139 class = PERCENT; + LD BC,5 + LD (IX+-4),BC +; 140 break; + JR L_37 +; 141 +; 142 default: +L_36: +; 143 class = OTHER; + LD BC,7 + LD (IX+-4),BC +; 144 break; +; 145 } +L_37: +; 146 +; 147 pstate = state; + LD BC,(IX+-7) + LD (IX+-11),BC +; 148 state = pscan_fsa[state][class]; + LD HL,(IX+-7) + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD BC,_pscan_fsa + ADD HL,BC + LD BC,(IX+-4) + ADD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD (IX+-7),HL +; 149 +; 150 switch (state) { + CALL __case24 +L__1: + DW 9 + DW 2 + DB 0 + DW24 L_40 + + DW 3 + DB 0 + DW24 L_46 + + DW 4 + DB 0 + DW24 L_53 + + DW 5 + DB 0 + DW24 L_54 + + DW 6 + DB 0 + DW24 L_58 + + DW 7 + DB 0 + DW24 L_59 + + DW 8 + DB 0 + DW24 L_76 + + DW 65534 + DB 255 + DW24 L_39 + + DW 65535 + DB 255 + DW24 L_38 + + DW24 L_77 + +; 151 case ACC: +L_38: +; 152 str->status = FMT_OK; + LD IY,(IX+9) + LD (IY+0),0 +; 153 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_79 +; 154 case ERR: +L_39: +; 155 str->status = FMT_ERR; + LD IY,(IX+9) + LD (IY+0),1 +; 156 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_79 +; 157 +; 158 case 2: +L_40: +; 159 switch (ch) { + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + CALL __case8 +L__2: + DW 4 + DB 32 + DW24 L_43 + + DB 35 + DW24 L_44 + + DB 43 + DW24 L_42 + + DB 45 + DW24 L_41 + + DW24 L_77 + +; 160 +; 161 case '-': +L_41: +; 162 str->flags |= FMT_FLAG_MINUS; + LD IY,(IX+9) + LD A,(IY+1) + SET 0,A + LD (IY+1),A +; 163 break; + JR L_77 +; 164 case '+': +L_42: +; 165 str->flags |= FMT_FLAG_PLUS; + LD IY,(IX+9) + LD A,(IY+1) + SET 1,A + LD (IY+1),A +; 166 break; + JR L_77 +; 167 case ' ': +L_43: +; 168 str->flags |= FMT_FLAG_SPACE; + LD IY,(IX+9) + LD A,(IY+1) + SET 2,A + LD (IY+1),A +; 169 break; + JR L_77 +; 170 case '#': +L_44: +; 171 str->flags |= FMT_FLAG_POUND; + LD IY,(IX+9) + LD A,(IY+1) + SET 3,A + LD (IY+1),A +; 172 break; + JR L_77 +; 173 } +; 174 break; +; 175 +; 176 case 3: +L_46: +; 177 if (ch == '*') + LD A,(IX+-1) + CP A,42 + JR NZ,L_51 +; 178 str->field_width = va_arg(*argp,int); + LD HL,(IX+12) + LD IY,(HL) + LEA BC,IY+3 + LD HL,(IX+12) + LD (HL),BC + LD HL,(IX+12) + LD IY,(HL) + LD A,(IY+-3) + LD IY,(IX+9) + LD (IY+5),A +; 179 else { + JR L_77 +L_51: +; 180 if (pstate != state && + LD BC,(IX+-7) + LD HL,(IX+-11) + OR A,A + SBC HL,BC + JR Z,L_49 +; 181 ch == '0') + LD A,(IX+-1) + CP A,48 + JR NZ,L_49 +; 182 str->flags |= FMT_FLAG_PAD_ZERO; + LD IY,(IX+9) + LD A,(IY+1) + SET 6,A + LD (IY+1),A +L_49: +; 183 str->field_width = str->field_width * 10 + (ch - '0'); + LD IY,(IX+9) + LD B,(IY+5) + LD C,10 + MLT BC + LD A,(IX+-1) + ADD A,-48 + LD B,A + LD A,C + ADD A,B + LD (IY+5),A +; 184 } +; 185 break; + JR L_77 +; 186 case 4: +L_53: +; 187 precision_given = TRUE; + LD (IX+-8),1 +; 188 break; + JR L_77 +; 189 case 5: +L_54: +; 190 if (ch == '*') + LD A,(IX+-1) + CP A,42 + JR NZ,L_56 +; 191 str->precision = va_arg(*argp,int); + LD HL,(IX+12) + LD IY,(HL) + LEA BC,IY+3 + LD HL,(IX+12) + LD (HL),BC + LD HL,(IX+12) + LD IY,(HL) + LD A,(IY+-3) + LD IY,(IX+9) + LD (IY+6),A +; 192 else + JR L_77 +L_56: +; 193 str->precision = str->precision * 10 + (ch - '0'); + LD IY,(IX+9) + LD B,(IY+6) + LD C,10 + MLT BC + LD A,(IX+-1) + ADD A,-48 + LD B,A + LD A,C + ADD A,B + LD (IY+6),A +; 194 break; + JR L_77 +; 195 case 6: +L_58: +; 196 str->size = ch; + LD A,(IX+-1) + LD IY,(IX+9) + LD (IY+2),A +; 197 break; + JR L_77 +; 198 case 7: +L_59: +; 199 str->type = tolower(ch); + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _tolower + POP BC + LD IY,(IX+9) + LD (IY+4),L +; 200 if (isupper(ch)) + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isupper + POP BC + CALL __icmpzero + JR Z,L_62 +; 201 str->flags |= FMT_FLAG_UPPERCASE; + LD IY,(IX+9) + LD A,(IY+1) + SET 5,A + LD (IY+1),A +L_62: +; 202 if (str->field_width < 0) + LD IY,(IX+9) + LD A,(IY+5) + OR A,A + JP P,L_71 +; 203 { +; 204 str->flags |= FMT_FLAG_MINUS; + LD IY,(IX+9) + LD A,(IY+1) + SET 0,A + LD (IY+1),A +; 205 str->field_width = -str->field_width; + LD A,(IY+5) + NEG + LD (IY+5),A +; 206 } +L_71: +; 207 if (!precision_given || str->precision < 0) + LD A,(IX+-8) + OR A,A + JR Z,L_70 + LD IY,(IX+9) + LD A,(IY+6) + OR A,A + JP P,L_74 +L_70: +; 208 { +; 209 if (ch == 'e' || + LD A,(IX+-1) + CP A,101 + JR Z,L_68 +; 210 ch == 'E' || + LD A,(IX+-1) + CP A,69 + JR Z,L_68 +; 211 ch == 'g' || + LD A,(IX+-1) + CP A,103 + JR Z,L_68 +; 212 ch == 'G' || + LD A,(IX+-1) + CP A,71 + JR Z,L_68 +; 213 ch == 'f') + LD A,(IX+-1) + CP A,102 + JR NZ,L_69 +L_68: +; 214 str->precision = DEFAULT_PRECISION; + LD IY,(IX+9) + LD (IY+6),6 +; 215 else + JR L_74 +L_69: +; 216 str->precision = 0; + LD IY,(IX+9) + LD (IY+6),0 +; 217 } +L_74: +; 218 if (ch == 's' && precision_given) + LD A,(IX+-1) + CP A,115 + JR NZ,L_77 + LD A,(IX+-8) + OR A,A + JR Z,L_77 +; 219 str->flags |= FMT_FLAG_PRECISION; + LD IY,(IX+9) + LD A,(IY+1) + SET 4,A + LD (IY+1),A +; 220 break; + JR L_77 +; 221 case 8: +L_76: +; 222 str->status = FMT_PASS_THRU; + LD IY,(IX+9) + LD (IY+0),2 +; 223 str->chr = ch; + LD A,(IX+-1) + LD (IY+3),A +; 224 return(fmt); + LD HL,(IX+6) +; 225 } +; 226 } +; 227 } +L_79: + LD SP,IX + POP IX + RET + + +;**************************** __u_pscan *************************** +;Name Addr/Register Size Type +;_isupper IMPORT ----- function +;_tolower IMPORT ----- function +;_pscan_fsa STATIC 72 variable +;pstate IX-11 3 variable +;precision_given IX-8 1 variable +;state IX-7 3 variable +;class IX-4 3 variable +;ch IX-1 1 variable +;argp IX+12 3 parameter +;str IX+9 3 parameter +;fmt IX+6 3 parameter + + +; Stack Frame Size: 26 (bytes) +; Spill Code: 0 (instruction) + + + XREF _tolower:ROM + XREF _isupper:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XREF __case24:ROM + XREF __case8:ROM + XDEF __u_pscan + END diff --git a/frontends/calculator/CEdev/lib/shared/ureverse.src b/frontends/calculator/CEdev/lib/shared/ureverse.src new file mode 100644 index 0000000..058a429 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ureverse.src @@ -0,0 +1,112 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UREVERSE.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 /************************************************* +; 13 * +; 14 * _u_reverse - reverse a string leaving the end +; 15 * of string indicator at the end +; 16 * of the string +; 17 * +; 18 * Inputs: +; 19 * str - string to be reversed +; 20 * +; 21 * Returns: +; 22 * str - string reversed +; 23 * +; 24 *************************************************/ +; 25 void _u_reverse(char *s) +; 26 { +__u_reverse: + LD HL,-16 + CALL __frameset +; 27 register char *ss = s; + LD BC,(IX+6) + LD (IX+-3),BC +; 28 register size_t len = strlen(s); + LD BC,(IX+6) + PUSH BC + CALL _strlen + POP BC + LD (IX+-6),HL +; 29 register char *pp = s + len - 1; + LD BC,(IX+6) + ADD HL,BC + DEC HL + LD (IX+-9),HL +; 30 register char c; +; 31 +; 32 while (len > 1) { + JR L_2 +L_3: +; 33 c = *pp; + LD HL,(IX+-9) + LD A,(HL) + LD (IX+-10),A +; 34 *pp-- = *ss; + LD BC,(IX+-9) + LD (IX+-13),BC + LD HL,(IX+-3) + LD A,(HL) + LD HL,(IX+-13) + LD (HL),A + LD IY,(IX+-9) + LEA BC,IY+-1 + LD (IX+-9),BC +; 35 *ss++ = c; + LD BC,(IX+-3) + LD (IX+-16),BC + LD HL,BC + LD A,(IX+-10) + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 36 len -= 2; + LD IY,(IX+-6) + LEA IY,IY+-2 + LD (IX+-6),IY +; 37 } +L_2: + LD BC,(IX+-6) + LD HL,1 + OR A,A + SBC HL,BC + JR C,L_3 +; 38 } + LD SP,IX + POP IX + RET + + +;**************************** __u_reverse *************************** +;Name Addr/Register Size Type +;_strlen IMPORT ----- function +;c IX-10 1 variable +;pp IX-9 3 variable +;len IX-6 3 variable +;ss IX-3 3 variable +;s IX+6 3 parameter + + +; Stack Frame Size: 25 (bytes) +; Spill Code: 0 (instruction) + + + XREF _strlen:ROM + XREF __frameset:ROM + XDEF __u_reverse + END diff --git a/frontends/calculator/CEdev/lib/shared/usb.src b/frontends/calculator/CEdev/lib/shared/usb.src new file mode 100644 index 0000000..91cc310 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/usb.src @@ -0,0 +1,21 @@ +; --- +; External Definitions +; --- + .def _usb_BusPowered + .def _usb_SelfPowered + .def _usb_ResetChip + .def _usb_DisableTimers + .def _usb_EnableTimers + .def _usb_ResetTimers + .assume adl=1 + +; --- +; Location Equates +; --- +_usb_BusPowered equ 0003E4h +_usb_SelfPowered equ 0003E8h +_usb_ResetChip equ 0003F4h +_usb_DisableTimers equ 0004F4h +_usb_EnableTimers equ 0004F8h +_usb_ResetTimers equ 0004F0h +; --- diff --git a/frontends/calculator/CEdev/lib/shared/uscan.src b/frontends/calculator/CEdev/lib/shared/uscan.src new file mode 100644 index 0000000..793c980 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uscan.src @@ -0,0 +1,1822 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\USCAN.C" + .assume ADL=1 + SEGMENT BSS +_bptr: + DS 3 +_argp: + DS 3 +_len: + DS 3 +_fields: + DS 1 +_fmt_str: + DS 19 +_prev_ch: + DS 3 +_isunget: + DS 1 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 /************************************************************************* +; 7 * We now assume that the maximum number of fields processed in a format +; 8 * string is 255. Then, we can fit the field count into a char, for a +; 9 * slight saving in space and time. +; 10 *************************************************************************/ +; 11 +; 12 #include +; 13 #include +; 14 #include +; 15 #include +; 16 #include +; 17 #include +; 18 #include +; 19 #include +; 20 +; 21 /* Sizes allowed for various data */ +; 22 #define FLT_CHARS 127 +; 23 #define PTR_CHARS 127 +; 24 #define INT_CHARS 127 +; 25 +; 26 static char *bptr; +; 27 static va_list argp; +; 28 static int len; +; 29 static unsigned char fields; +; 30 static struct fmt_type fmt_str; +; 31 static int prev_ch; +; 32 static char isunget; + SEGMENT CODE +; 33 +; 34 int getchar(void); +; 35 +; 36 /****************************************/ +; 37 /* get a character +; 38 /****************************************/ +; 39 static int get(void) +; 40 { +_get: + LD HL,-3 + CALL __frameset +; 41 ++len; + LD BC,(_len) + INC BC + LD (_len),BC +; 42 if (bptr) + LD HL,(_bptr) + CALL __icmpzero + JR Z,L_3 +; 43 return(*(bptr++)); + LD BC,(_bptr) + LD (IX+-3),BC + LD BC,(_bptr) + INC BC + LD (_bptr),BC + LD HL,(IX+-3) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + JR L_5 +; 44 else if (isunget==1) { +L_3: + LD A,(_isunget) + CP A,1 + JR NZ,L_4 +; 45 isunget = 0; + XOR A,A + LD (_isunget),A +; 46 return prev_ch; + LD HL,(_prev_ch) + JR L_5 +; 47 } +L_4: +; 48 return(prev_ch = getchar()); + CALL _getchar + LD (_prev_ch),HL +; 49 } +L_5: + LD SP,IX + POP IX + RET + + +;**************************** _get *************************** +;Name Addr/Register Size Type +;_getchar IMPORT ----- function +;_prev_ch STATIC 3 variable +;_isunget STATIC 1 variable +;_bptr STATIC 3 variable +;_len STATIC 3 variable + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + +; 50 +; 51 /****************************************/ +; 52 /* unget a character +; 53 /****************************************/ +; 54 static void unget(void) { +_unget: +; 55 --len; + LD BC,(_len) + DEC BC + LD (_len),BC +; 56 isunget = 1; + LD A,1 + LD (_isunget),A +; 57 if (bptr) + LD HL,(_bptr) + CALL __icmpzero + JR Z,L_7 +; 58 --bptr; + LD IY,(_bptr) + LEA BC,IY+-1 + LD (_bptr),BC +; 59 } +L_7: + RET + + +;**************************** _unget *************************** +;Name Addr/Register Size Type +;_bptr STATIC 3 variable +;_isunget STATIC 1 variable +;_len STATIC 3 variable + + +; Stack Frame Size: 6 (bytes) +; Spill Code: 0 (instruction) + + +; 60 +; 61 /****************************************/ +; 62 /* Handle pointer conversions +; 63 /****************************************/ +; 64 static unsigned char pointer(void) +; 65 { +_pointer: + LD HL,-138 + CALL __frameset +; 66 unsigned char i; +; 67 char ch; +; 68 char buffer[PTR_CHARS]; +; 69 char *bp = buffer; + LD HL,IX + LD BC,-135 + ADD HL,BC + LD (IX+-5),HL +; 70 unsigned int addr; +; 71 +; 72 if (fmt_str.field_width == 0 || fmt_str.field_width > sizeof(buffer)-1) + LD A,(_fmt_str+5) + OR A,A + JR Z,L_9 + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,126 + OR A,A + SBC HL,BC + JR NC,L_11 +L_9: +; 73 fmt_str.field_width = sizeof(buffer)-1; + LD A,126 + LD (_fmt_str+5),A +L_11: +; 74 if ((ch = get()) == EOF) + CALL _get + LD (IX+-2),L + LD A,(IX+-2) + CP A,-1 + JR NZ,L_20 +; 75 return FALSE; + XOR A,A + JR L_28 +L_20: +; 76 for (i=0;isxdigit(ch);) { + LD (IX+-1),0 + JR L_19 +L_17: +; 77 *(bp++) = ch; + LD BC,(IX+-5) + LEA IY,IX+-128 + LD (IY+-10),BC + LD HL,(IY+-10) + LD A,(IX+-2) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +; 78 i++; + INC (IX+-1) +; 79 if (i >= fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-1) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_22 +; 80 break; +; 81 if ((ch = get()) == EOF) + CALL _get + LD (IX+-2),L + LD A,(IX+-2) + CP A,-1 + JR NZ,L_19 +; 82 return FALSE; + XOR A,A + JR L_28 +; 83 } +L_19: + LD A,(IX+-2) + SEXT HL + LD L,(IX+-2) + PUSH HL + CALL _isxdigit + POP BC + CALL __icmpzero + JR NZ,L_17 +L_22: +; 84 if (bp == buffer) + LD HL,IX + LD BC,-135 + ADD HL,BC + OR A,A + LD BC,(IX+-5) + SBC HL,BC + JR NZ,L_24 +; 85 return FALSE; + XOR A,A + JR L_28 +L_24: +; 86 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-1) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_25 +; 87 unget(); + CALL _unget +L_25: +; 88 *bp = '\0'; + LD IY,(IX+-5) +; 89 addr = strtoul(buffer,(void *)NULL,16); + LD BC,16 + PUSH BC + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-135 + ADD HL,BC + LD BC,HL + PUSH BC + LD (IY),0 + CALL _strtoul + POP BC + POP BC + POP BC + LD (IX+-8),HL +; 90 +; 91 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_27 +; 92 { +; 93 *(va_arg(argp, int**)) = (int*)addr; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-8) + LD (HL),BC +; 94 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 95 } +L_27: +; 96 +; 97 return TRUE; + LD A,1 +; 98 } +L_28: + LD SP,IX + POP IX + RET + + +;**************************** _pointer *************************** +;Name Addr/Register Size Type +;_fields STATIC 1 variable +;_argp STATIC 3 variable +;_strtoul IMPORT ----- function +;_isxdigit IMPORT ----- function +;_fmt_str STATIC 19 variable +;buffer IX-135 127 variable +;addr IX-8 3 variable +;bp IX-5 3 variable +;ch IX-2 1 variable +;i IX-1 1 variable + + +; Stack Frame Size: 144 (bytes) +; Spill Code: 0 (instruction) + + +; 99 +; 100 /****************************************/ +; 101 /* Handle string conversions +; 102 /****************************************/ +; 103 static unsigned char string(void) +; 104 { +_string: + LD HL,-8 + CALL __frameset +; 105 unsigned char i; +; 106 char ch; +; 107 char *p = NULL; + LD BC,0 + LD (IX+-5),BC +; 108 +; 109 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_31 +; 110 p = va_arg(argp, char*); + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-5),BC +L_31: +; 111 if (fmt_str.field_width == 0) + LD A,(_fmt_str+5) + OR A,A + JR NZ,L_33 +; 112 fmt_str.field_width = 127; + LD A,127 + LD (_fmt_str+5),A +; 113 do { +L_33: +; 114 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_34 +; 115 return FALSE; + XOR A,A + JR L_55 +; 116 } while (isspace(ch)); +L_34: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_33 +; 117 unget(); + CALL _unget +; 118 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_49 +; 119 return FALSE; + XOR A,A + JR L_55 +L_49: +; 120 for (i=0; !isspace(ch) && ch;) { + LD (IX+-2),0 + JR L_48 +L_46: +; 121 if (p) + LD HL,(IX+-5) + CALL __icmpzero + JR Z,L_42 +; 122 *(p++) = ch; + LD BC,(IX+-5) + LD (IX+-8),BC + LD HL,BC + LD A,(IX+-1) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +L_42: +; 123 i++; + INC (IX+-2) +; 124 if (i >= fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_51 +; 125 break; +; 126 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_48 +; 127 return FALSE; + XOR A,A + JR L_55 +; 128 } +L_48: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_51 + LD A,(IX+-1) + OR A,A + JR NZ,L_46 +L_51: +; 129 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_53 +; 130 unget(); + CALL _unget +L_53: +; 131 if (p) + LD HL,(IX+-5) + CALL __icmpzero + JR Z,L_54 +; 132 { +; 133 *p = '\0'; + LD HL,(IX+-5) + LD (HL),0 +; 134 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 135 } +L_54: +; 136 return TRUE; + LD A,1 +; 137 } +L_55: + LD SP,IX + POP IX + RET + + +;**************************** _string *************************** +;Name Addr/Register Size Type +;_fields STATIC 1 variable +;_isspace IMPORT ----- function +;_argp STATIC 3 variable +;_fmt_str STATIC 19 variable +;p IX-5 3 variable +;i IX-2 1 variable +;ch IX-1 1 variable + + +; Stack Frame Size: 14 (bytes) +; Spill Code: 0 (instruction) + + +; 138 +; 139 /****************************************/ +; 140 /* Handle character conversions +; 141 /****************************************/ +; 142 static unsigned char character(void) +; 143 { +_character: + LD HL,-8 + CALL __frameset +; 144 unsigned char i; +; 145 char ch; +; 146 char *p=NULL; + LD BC,0 + LD (IX+-4),BC +; 147 +; 148 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_58 +; 149 p = va_arg(argp,char*); + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-4),BC +L_58: +; 150 if (fmt_str.field_width == 0) + LD A,(_fmt_str+5) + OR A,A + JR NZ,L_67 +; 151 fmt_str.field_width = 1; + LD A,1 + LD (_fmt_str+5),A +L_67: +; 152 for (i=0;i sizeof(buffer)-1) + LD A,(_fmt_str+5) + OR A,A + JR Z,L_71 + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,126 + OR A,A + SBC HL,BC + JR NC,L_73 +L_71: +; 178 fmt_str.field_width = sizeof(buffer)-1; + LD A,126 + LD (_fmt_str+5),A +; 179 do { +L_73: +; 180 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_74 +; 181 return FALSE; + XOR A,A + JR L_102 +; 182 } while (isspace(ch)); +L_74: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_73 +; 183 +; 184 for (i=0; i < fmt_str.field_width; ++i) + LD (IX+-2),0 + JR L_93 +L_91: +; 185 { +; 186 if (takeEe && (ch == 'e' || ch == 'E')) + LD A,(IX+-8) + OR A,A + JR Z,L_87 + LD A,(IX+-1) + CP A,101 + JR Z,L_86 + LD A,(IX+-1) + CP A,69 + JR NZ,L_87 +L_86: +; 187 { +; 188 takeEe = FALSE; + LD (IX+-8),0 +; 189 takeSign=TRUE; + LD (IX+-7),1 +; 190 takeDot=FALSE; + LD (IX+-6),0 +; 191 } else + JR L_89 +L_87: +; 192 if (takeDot && ch=='.') + LD A,(IX+-6) + OR A,A + JR Z,L_85 + LD A,(IX+-1) + CP A,46 + JR NZ,L_85 +; 193 { +; 194 takeDot=FALSE; + LD (IX+-6),0 +; 195 } else + JR L_89 +L_85: +; 196 if ( (takeSign && (ch == '-' || ch == '+')) + LD A,(IX+-7) + OR A,A + JR Z,L_81 + LD A,(IX+-1) + CP A,45 + JR Z,L_82 + LD A,(IX+-1) + CP A,43 + JR Z,L_82 +; 197 || isdigit(ch) ) +L_81: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isdigit + POP BC + CALL __icmpzero + JR Z,L_96 +L_82: +; 198 { +; 199 takeSign = FALSE; + LD (IX+-7),0 +; 200 } else +; 201 { +; 202 break; +; 203 } +L_89: +; 204 *(bp++) = ch; + LD BC,(IX+-5) + LEA IY,IX+-128 + LD (IY+-14),BC + LD HL,(IY+-14) + LD A,(IX+-1) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +; 205 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_92 +; 206 return FALSE; + XOR A,A + JR L_102 +; 207 } +L_92: + INC (IX+-2) +L_93: + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP M,L_91 +L_96: +; 208 if (bp == buffer) + LD HL,IX + LD BC,-139 + ADD HL,BC + OR A,A + LD BC,(IX+-5) + SBC HL,BC + JR NZ,L_98 +; 209 return(fields); + LD A,(_fields) + JR L_102 +L_98: +; 210 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_99 +; 211 unget(); + CALL _unget +L_99: +; 212 *bp = '\0'; + LD IY,(IX+-5) +; 213 dval = strtod(buffer,NULL); + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-139 + ADD HL,BC + LD BC,HL + PUSH BC + LD (IY),0 + CALL _strtod + POP BC + POP BC + LD (IX+-12),HL + LD (IX+-9),E +; 214 +; 215 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) { + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_101 +; 216 *(va_arg(argp, float*)) = dval; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-12) + LD A,(IX+-9) + LD (HL),BC + INC HL + INC HL + INC HL + LD (HL),A +; 217 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 218 } +L_101: +; 219 +; 220 return TRUE; + LD A,1 +; 221 } +L_102: + LD SP,IX + POP IX + RET + + +;**************************** _fpoint *************************** +;Name Addr/Register Size Type +;_argp STATIC 3 variable +;_strtod IMPORT ----- function +;_fields STATIC 1 variable +;_isdigit IMPORT ----- function +;_isspace IMPORT ----- function +;_fmt_str STATIC 19 variable +;buffer IX-139 127 variable +;dval IX-12 4 variable +;takeEe IX-8 1 variable +;takeSign IX-7 1 variable +;takeDot IX-6 1 variable +;bp IX-5 3 variable +;i IX-2 1 variable +;ch IX-1 1 variable + + +; Stack Frame Size: 148 (bytes) +; Spill Code: 0 (instruction) + + +; 222 +; 223 /****************************************/ +; 224 /* Handle scalar conversions +; 225 /****************************************/ +; 226 #ifndef _MULTI_THREAD +; 227 static unsigned char scalar(int radix) +; 228 #else +; 229 static unsigned char scalar(va_list argp,int len,unsigned char fields,struct fmt_type fmt_str,int prev_ch,char isunget,int radix) +; 230 #endif +; 231 { +_scalar: + LD HL,-139 + CALL __frameset +; 232 unsigned char i; +; 233 char ch; +; 234 char buffer[INT_CHARS]; +; 235 char *bp = buffer; + LD HL,IX + LD BC,-136 + ADD HL,BC + LD (IX+-5),HL +; 236 long val; +; 237 +; 238 if (fmt_str.field_width == 0 || fmt_str.field_width > sizeof(buffer)-1) + LD A,(_fmt_str+5) + OR A,A + JR Z,L_104 + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,126 + OR A,A + SBC HL,BC + JR NC,L_106 +L_104: +; 239 fmt_str.field_width = sizeof(buffer)-1; + LD A,126 + LD (_fmt_str+5),A +; 240 do { +L_106: +; 241 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_107 +; 242 return FALSE; + XOR A,A + JR L_146 +; 243 } while (isspace(ch)); +L_107: + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_106 +; 244 unget(); + CALL _unget +; 245 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_127 +; 246 return FALSE; + XOR A,A + JR L_146 +L_127: +; 247 for (i=0;radix == 10 && isdigit(ch) || + LD (IX+-2),0 + JR L_126 +; 248 radix == 16 && isxdigit(ch) || +; 249 radix == 8 && ch >= '0' && ch <= '7' || +; 250 ch == '-' || +; 251 ch == '+';) { +L_124: +; 252 *(bp++) = ch; + LD BC,(IX+-5) + LEA IY,IX+-128 + LD (IY+-11),BC + LD HL,(IY+-11) + LD A,(IX+-1) + LD (HL),A + LD BC,(IX+-5) + INC BC + LD (IX+-5),BC +; 253 i++; + INC (IX+-2) +; 254 if (i >= fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + JP P,L_129 +; 255 break; +; 256 if ((ch = get()) == EOF) + CALL _get + LD (IX+-1),L + LD A,(IX+-1) + CP A,-1 + JR NZ,L_126 +; 257 return FALSE; + XOR A,A + JR L_146 +; 258 } +L_126: + LD BC,10 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_113 + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isdigit + POP BC + CALL __icmpzero + JR NZ,L_124 +L_113: + LD BC,16 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_116 + LD A,(IX+-1) + SEXT HL + LD L,(IX+-1) + PUSH HL + CALL _isxdigit + POP BC + CALL __icmpzero + JR NZ,L_124 +L_116: + LD BC,8 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_117 + LD A,(IX+-1) + CP A,48 + CALL __setflag + JP M,L_117 + LD A,55 + CP A,(IX+-1) + CALL __setflag + JP P,L_124 +L_117: + LD A,(IX+-1) + CP A,45 + JR Z,L_124 + LD A,(IX+-1) + CP A,43 + JR Z,L_124 +L_129: +; 259 if (bp == buffer) + LD HL,IX + LD BC,-136 + ADD HL,BC + OR A,A + LD BC,(IX+-5) + SBC HL,BC + JR NZ,L_131 +; 260 return(fields); + LD A,(_fields) + JR L_146 +L_131: +; 261 if (i < fmt_str.field_width) + LD A,(_fmt_str+5) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD A,(IX+-2) + UEXT HL + LD L,A + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_132 +; 262 unget(); + CALL _unget +L_132: +; 263 *bp = '\0'; + LD HL,(IX+-5) + LD (HL),0 +; 264 if ((fmt_str.type == 'u') || (radix == 8) || (radix == 16)) + LD A,(_fmt_str+4) + CP A,117 + JR Z,L_135 + LD BC,8 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR Z,L_135 + LD BC,16 + LD HL,(IX+6) + OR A,A + SBC HL,BC + JR NZ,L_136 +L_135: +; 265 val = strtoul(buffer,(void*)NULL,radix); + LD BC,(IX+6) + PUSH BC + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-136 + ADD HL,BC + LD BC,HL + PUSH BC + CALL _strtoul + POP BC + POP BC + POP BC + LD (IX+-9),HL + LD (IX+-6),E +; 266 else + JR L_144 +L_136: +; 267 val = strtol(buffer,(void*)NULL,radix); + LD BC,(IX+6) + PUSH BC + LD BC,0 + PUSH BC + LD HL,IX + LD BC,-136 + ADD HL,BC + LD BC,HL + PUSH BC + CALL _strtol + POP BC + POP BC + POP BC + LD (IX+-9),HL + LD (IX+-6),E +L_144: +; 268 +; 269 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) { + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_145 +; 270 if (fmt_str.size == 'h') + LD A,(_fmt_str+2) + CP A,104 + JR NZ,L_141 +; 271 *(va_arg(argp,short*)) = val; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-9) + LD (HL),C + INC HL + LD (HL),B +; 272 else if (fmt_str.size == 'l' || fmt_str.size == 'L') + JR L_142 +L_141: + LD A,(_fmt_str+2) + CP A,108 + JR Z,L_138 + LD A,(_fmt_str+2) + CP A,76 + JR NZ,L_139 +L_138: +; 273 *(va_arg(argp,long*)) = val; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-9) + LD A,(IX+-6) + LD (HL),BC + INC HL + INC HL + INC HL + LD (HL),A +; 274 else + JR L_142 +L_139: +; 275 *(va_arg(argp,int*)) = val; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(IX+-9) + LD (HL),BC +L_142: +; 276 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 277 } +L_145: +; 278 +; 279 return TRUE; + LD A,1 +; 280 } +L_146: + LD SP,IX + POP IX + RET + + +;**************************** _scalar *************************** +;Name Addr/Register Size Type +;_argp STATIC 3 variable +;_strtol IMPORT ----- function +;_strtoul IMPORT ----- function +;_fields STATIC 1 variable +;_isxdigit IMPORT ----- function +;_isdigit IMPORT ----- function +;_isspace IMPORT ----- function +;_fmt_str STATIC 19 variable +;buffer IX-136 127 variable +;val IX-9 4 variable +;bp IX-5 3 variable +;i IX-2 1 variable +;ch IX-1 1 variable +;radix IX+6 3 parameter + + +; Stack Frame Size: 148 (bytes) +; Spill Code: 0 (instruction) + + +; 281 +; 282 /****************************************/ +; 283 /* Handle set conversions +; 284 /****************************************/ +; 285 static unsigned char set(void) +; 286 { +_set: + LD HL,-12 + CALL __frameset +; 287 char *p2; +; 288 char neg,ch; +; 289 char *p = 0; + LD BC,0 + LD (IX+-4),BC +; 290 char width; +; 291 +; 292 /* Use (p == 0) to signal the case that we are skipping this input +; 293 string. */ +; 294 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_150 +; 295 p = va_arg(argp,char*); + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD BC,(HL) + LD (IX+-4),BC +L_150: +; 296 +; 297 if (neg = (*fmt_str.set_begin == '^')) + LD HL,(_fmt_str+7) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,94 + SBC HL,BC + JR NZ,L__81 + LD A,1 + JR L__82 +L__81: + XOR A,A +L__82: + LD (IX+-9),A + OR A,A + JR Z,L_151 +; 298 fmt_str.set_begin++; + LD BC,(_fmt_str+7) + INC BC + LD (_fmt_str+7),BC +L_151: +; 299 +; 300 width = fmt_str.field_width; + LD A,(_fmt_str+5) + LD (IX+-1),A +; 301 if (width == 0) + OR A,A + JR NZ,L_169 +; 302 width = 127; + LD (IX+-1),127 +; 303 +; 304 while (width--) + JR L_169 +L_170: +; 305 { +; 306 if ((ch = get()) == EOF) + CALL _get + LD (IX+-8),L + LD A,(IX+-8) + CP A,-1 + JR NZ,L_159 +; 307 return FALSE; + XOR A,A + JR L_177 +L_159: +; 308 +; 309 /* Look for a match in the set. */ +; 310 for(p2 = fmt_str.set_begin; p2 < fmt_str.set_end; ++p2) + LD BC,(_fmt_str+7) + LD (IX+-7),BC + JR L_158 +L_156: +; 311 if (*p2 == ch) + LD HL,(IX+-7) + LD A,(HL) + CP A,(IX+-8) + JR Z,L_165 + LD BC,(IX+-7) + INC BC + LD (IX+-7),BC +; 312 break; /* Matched one in the set. */ +L_158: + LD BC,(_fmt_str+10) + LD HL,(IX+-7) + OR A,A + SBC HL,BC + JR C,L_156 +L_165: +; 313 +; 314 if (p2 < fmt_str.set_end && *p2 == ch) + LD BC,(_fmt_str+10) + LD HL,(IX+-7) + OR A,A + SBC HL,BC + JR NC,L_164 + LD HL,(IX+-7) + LD A,(HL) + CP A,(IX+-8) + JR NZ,L_164 +; 315 { +; 316 /* We stop scanning if we match a character in the negative set. */ +; 317 if (neg) + LD A,(IX+-9) + OR A,A + JR NZ,L_173 + JR L_168 +; 318 break; +; 319 } +; 320 else +L_164: +; 321 { +; 322 /* Likewise, we stop scanning if we fail to match a character in +; 323 the positive set. */ +; 324 if (!neg) + LD A,(IX+-9) + OR A,A + JR Z,L_173 +; 325 break; +; 326 } +L_168: +; 327 +; 328 /* Store the valid character. */ +; 329 if (p) + LD HL,(IX+-4) + CALL __icmpzero + JR Z,L_169 +; 330 *(p++) = ch; + LD BC,(IX+-4) + LD (IX+-12),BC + LD HL,BC + LD A,(IX+-8) + LD (HL),A + LD BC,(IX+-4) + INC BC + LD (IX+-4),BC +; 331 } +L_169: + LD A,(IX+-1) + DEC (IX+-1) + OR A,A + JR NZ,L_170 +L_173: +; 332 +; 333 if (width > 0) + XOR A,A + CP A,(IX+-1) + JP P,L_175 +; 334 unget(); + CALL _unget +L_175: +; 335 +; 336 if (p) + LD HL,(IX+-4) + CALL __icmpzero + JR Z,L_176 +; 337 *p = '\0'; + LD HL,(IX+-4) + LD (HL),0 +L_176: +; 338 +; 339 return TRUE; + LD A,1 +; 340 } +L_177: + LD SP,IX + POP IX + RET + + +;**************************** _set *************************** +;Name Addr/Register Size Type +;_argp STATIC 3 variable +;_fmt_str STATIC 19 variable +;neg IX-9 1 variable +;ch IX-8 1 variable +;p2 IX-7 3 variable +;p IX-4 3 variable +;width IX-1 1 variable + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + +; 341 +; 342 /************************************************* +; 343 * +; 344 * _u_scan - scan formated string from a file or string +; 345 * +; 346 * Inputs: +; 347 * src - NULL = input from keyboard, else input from string +; 348 * fmt - format string +; 349 * argp - argument list pointer +; 350 * +; 351 * Returns: +; 352 * Number of characters transmitted, or +; 353 * -1 if an error occured. +; 354 * +; 355 *************************************************/ +; 356 int _u_scan(char *src,char *fmt,va_list ap) +; 357 { +__u_scan: + LD HL,-7 + CALL __frameset +; 358 int i; +; 359 int ch; +; 360 unsigned char ok=TRUE; + LD (IX+-1),1 +; 361 +; 362 argp = ap; + LD BC,(IX+12) + LD (_argp),BC +; 363 fields = 0; + XOR A,A + LD (_fields),A +; 364 len = 0; + LD BC,0 + LD (_len),BC +; 365 prev_ch = 0; + LD (_prev_ch),BC +; 366 isunget = 0; + XOR A,A + LD (_isunget),A +; 367 bptr = NULL; + LD (_bptr),BC +; 368 +; 369 if (src) + LD HL,(IX+6) + CALL __icmpzero + JR Z,L_215 +; 370 bptr = src; + LD BC,(IX+6) + LD (_bptr),BC +; 371 +; 372 while ( ok && prev_ch!=EOF && *fmt) { + JR L_215 +L_216: +; 373 fmt = _u_sscan(fmt,&fmt_str); + LD BC,_fmt_str + PUSH BC + LD BC,(IX+9) + PUSH BC + CALL __u_sscan + POP BC + POP BC + LD (IX+9),HL +; 374 if (fmt_str.status == FMT_ERR) + LD A,(_fmt_str) + CP A,1 + JR NZ,L_214 +; 375 return(fields); + LD A,(_fields) + UEXT HL + LD L,A + JR L_222 +; 376 else if (fmt_str.status == FMT_PASS_THRU) { +L_214: + LD A,(_fmt_str) + CP A,2 + JR NZ,L_212 +; 377 if (isspace(fmt_str.chr)) + LD A,(_fmt_str+3) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR Z,L_187 +; 378 { +; 379 do ch=get(); +L_181: + CALL _get + LD (IX+-4),HL +; 380 while(isspace(ch)); + LD BC,HL + PUSH BC + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_181 +; 381 unget(); + CALL _unget +; 382 } else + JR L_215 +L_187: +; 383 { +; 384 ch = get(); + CALL _get + LD (IX+-4),HL +; 385 if (ch && ch != fmt_str.chr) + CALL __icmpzero + JR Z,L_215 + LD A,(_fmt_str+3) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,(IX+-4) + SBC HL,BC + JR NZ,L_220 + JR L_215 +; 386 break; +; 387 } +; 388 } +; 389 else if (fmt_str.flags & FMT_FLAG_SET) { +L_212: + LD A,(_fmt_str+1) + AND A,128 + JR Z,L_210 +; 390 ok = set(); + CALL _set + LD (IX+-1),A +; 391 } +; 392 else { + JR L_215 +L_210: +; 393 switch (fmt_str.type) { + LD A,(_fmt_str+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__105: + DW 18 + DB 65 + DW24 L_195 + + DB 69 + DW24 L_196 + + DB 70 + DW24 L_197 + + DB 71 + DW24 L_198 + + DB 88 + DW24 L_193 + + DB 97 + DW24 L_199 + + DB 99 + DW24 L_203 + + DB 100 + DW24 L_188 + + DB 101 + DW24 L_200 + + DB 102 + DW24 L_201 + + DB 103 + DW24 L_202 + + DB 105 + DW24 L_189 + + DB 110 + DW24 L_206 + + DB 111 + DW24 L_194 + + DB 112 + DW24 L_205 + + DB 115 + DW24 L_204 + + DB 117 + DW24 L_190 + + DB 120 + DW24 L_192 + + DW24 L_215 + +; 394 register int radix; +; 395 case 'd': +L_188: +; 396 case 'i': +L_189: +; 397 case 'u': +L_190: +; 398 radix=10; + LD BC,10 + LD (IX+-7),BC +; 399 goto _sclr; + JR L_191 +; 400 case 'x': +L_192: +; 401 case 'X': +L_193: +; 402 radix=16; + LD BC,16 + LD (IX+-7),BC +; 403 goto _sclr; + JR L_191 +; 404 case 'o': +L_194: +; 405 radix=8; + LD BC,8 + LD (IX+-7),BC +L_191: +; 406 _sclr: +; 407 ok = scalar(radix); + LD BC,(IX+-7) + PUSH BC + CALL _scalar + POP BC + LD (IX+-1),A +; 408 +; 409 break; + JR L_215 +; 410 case 'A': +L_195: +; 411 case 'E': +L_196: +; 412 case 'F': +L_197: +; 413 case 'G': +L_198: +; 414 case 'a': +L_199: +; 415 case 'e': +L_200: +; 416 case 'f': +L_201: +; 417 case 'g': +L_202: +; 418 ok = fpoint(); + CALL _fpoint + LD (IX+-1),A +; 419 break; + JR L_215 +; 420 case 'c': +L_203: +; 421 ok = character(); + CALL _character + LD (IX+-1),A +; 422 break; + JR L_215 +; 423 case 's': +L_204: +; 424 ok = string(); + CALL _string + LD (IX+-1),A +; 425 break; + JR L_215 +; 426 case 'p': +L_205: +; 427 ok = pointer(); + CALL _pointer + LD (IX+-1),A +; 428 break; + JR L_215 +; 429 case 'n': +L_206: +; 430 if (!(fmt_str.flags & FMT_FLAG_IGNORE)) { + LD A,(_fmt_str+1) + AND A,16 + JR NZ,L_215 +; 431 *(va_arg(argp,int*)) = len; + LD IY,(_argp) + LEA BC,IY+3 + LD (_argp),BC + LD IY,(_argp) + LEA HL,IY+-3 + LD HL,(HL) + LD BC,(_len) + LD (HL),BC +; 432 ++fields; + LD A,(_fields) + INC A + LD (_fields),A +; 433 } +; 434 break; +; 435 } +; 436 } +; 437 } +L_215: + LD A,(IX+-1) + OR A,A + JR Z,L_220 + LD BC,16777215 + LD HL,(_prev_ch) + OR A,A + SBC HL,BC + JR Z,L_220 + LD HL,(IX+9) + LD A,(HL) + OR A,A + JR NZ,L_216 +L_220: +; 438 // ISO Spec: Return EOF if an input error occurs before any conversion. +; 439 // Otherwise return the number of input items assigned. +; 440 // A sucessfull passthrough counts as a conversion, so we look at len, +; 441 // which will be 1 for a unsucessfull call to get on the first try. +; 442 if (prev_ch == EOF && len<=1) + LD BC,16777215 + LD HL,(_prev_ch) + OR A,A + SBC HL,BC + JR NZ,L_221 + LD BC,(_len) + LD HL,1 + OR A,A + SBC HL,BC + JP M,L_221 +; 443 return EOF; + LD HL,16777215 + JR L_222 +L_221: +; 444 return fields; + LD A,(_fields) + UEXT HL + LD L,A +; 445 } +L_222: + LD SP,IX + POP IX + RET + + +;**************************** __u_scan *************************** +;Name Addr/Register Size Type +;_isspace IMPORT ----- function +;_fmt_str STATIC 19 variable +;__u_sscan IMPORT ----- function +;_bptr STATIC 3 variable +;_isunget STATIC 1 variable +;_prev_ch STATIC 3 variable +;_len STATIC 3 variable +;_fields STATIC 1 variable +;_argp STATIC 3 variable +;radix IX-7 3 variable +;ch IX-4 3 variable +;ok IX-1 1 variable +;ap IX+12 3 parameter +;fmt IX+9 3 parameter +;src IX+6 3 parameter + + +; Stack Frame Size: 22 (bytes) +; Spill Code: 0 (instruction) + + + XREF _getchar:ROM + XREF _isxdigit:ROM + XREF _isspace:ROM + XREF _isdigit:ROM + XREF __u_sscan:ROM + XREF _strtoul:ROM + XREF _strtol:ROM + XREF _strtod:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __case8:ROM + XDEF __u_scan + END diff --git a/frontends/calculator/CEdev/lib/shared/usscan.src b/frontends/calculator/CEdev/lib/shared/usscan.src new file mode 100644 index 0000000..ab1a994 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/usscan.src @@ -0,0 +1,630 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\USSCAN.C" + .assume ADL=1 + SEGMENT DATA +_sscan_fsa: + DB 2 + DB 0 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 1 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 8 + DB 254 + DB 3 + DB 5 + DB 4 + DB 9 + DB 6 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 5 + DB 4 + DB 9 + DB 6 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 5 + DB 4 + DB 9 + DB 6 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 254 + DB 9 + DB 6 + DB 254 + DB 254 + DB 6 + DB 6 + DB 6 + DB 6 + DB 6 + DB 6 + DB 6 + DB 7 + DB 6 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 + DB 255 +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 /* actions */ +; 11 +; 12 #define ACC -1 +; 13 #define ERR -2 +; 14 +; 15 #define CR 13 +; 16 #define LF 10 +; 17 +; 18 /* +-{0..9} +; 19 {sp,tab,nl}{h,l,L}| +-{d,i,o,u,x,e,f,g,s,c,p,n} +; 20 | | | | {others} +; 21 % | * | | | [ ] | +; 22 +-----------------------------------+ */ +; 23 static char sscan_fsa[10][9] = { + SEGMENT CODE +; 24 /* 0 */ { 2, 0, 1, 1, 1, 1, 1, 1, 1}, +; 25 /* 1 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 26 /* 2 */ { 8,ERR, 3, 5, 4, 9, 6,ERR,ERR}, +; 27 /* 3 */ {ERR,ERR,ERR, 5, 4, 9, 6,ERR,ERR}, +; 28 /* 4 */ {ERR,ERR,ERR, 5, 4, 9, 6,ERR,ERR}, +; 29 /* 5 */ {ERR,ERR,ERR,ERR,ERR, 9, 6,ERR,ERR}, +; 30 /* 6 */ { 6, 6, 6, 6, 6, 6, 6, 7, 6}, +; 31 /* 7 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 32 /* 8 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 33 /* 9 */ {ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC,ACC}, +; 34 }; +; 35 +; 36 /************************************************* +; 37 * +; 38 * _u_sscan - scan a scanf format string +; 39 * +; 40 * Inputs: +; 41 * fmt - pointer to format string +; 42 * str - pointer to fmt_type structure +; 43 * where the results are put +; 44 * +; 45 * Returns: +; 46 * new pointer to format string +; 47 * +; 48 *************************************************/ +; 49 char *_u_sscan(char *fmt, struct fmt_type *str) { +__u_sscan: + LD HL,-7 + CALL __frameset +; 50 char pstate; +; 51 char state = 0; + LD (IX+-2),0 +; 52 unsigned char class; +; 53 char ch; +; 54 +; 55 str->flags = 0; + LD IY,(IX+9) + LD (IY+1),0 +; 56 str->field_width = 0; + LD (IY+5),0 +; 57 str->precision = 0; + LD (IY+6),0 +; 58 str->size = 0; + LD (IY+2),0 +; 59 str->type = '\0'; + LD (IY+4),0 +; 60 +; 61 for (;;) { +L_55: +; 62 ch = *(fmt++); + LD BC,(IX+6) + LD (IX+-7),BC + LD HL,BC + LD A,(HL) + LD (IX+-3),A + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 63 switch(ch) { + LD A,(IX+-3) + SEXT HL + LD L,(IX+-3) + CALL __case8 +L__0: + DW 35 + DB 37 + DW24 L_1 + + DB 42 + DW24 L_2 + + DB 48 + DW24 L_6 + + DB 49 + DW24 L_7 + + DB 50 + DW24 L_8 + + DB 51 + DW24 L_9 + + DB 52 + DW24 L_10 + + DB 53 + DW24 L_11 + + DB 54 + DW24 L_12 + + DB 55 + DW24 L_13 + + DB 56 + DW24 L_14 + + DB 57 + DW24 L_15 + + DB 65 + DW24 L_16 + + DB 69 + DW24 L_17 + + DB 70 + DW24 L_18 + + DB 71 + DW24 L_19 + + DB 76 + DW24 L_5 + + DB 88 + DW24 L_20 + + DB 91 + DW24 L_34 + + DB 93 + DW24 L_35 + + DB 97 + DW24 L_21 + + DB 99 + DW24 L_22 + + DB 100 + DW24 L_23 + + DB 101 + DW24 L_24 + + DB 102 + DW24 L_25 + + DB 103 + DW24 L_26 + + DB 104 + DW24 L_3 + + DB 105 + DW24 L_27 + + DB 108 + DW24 L_4 + + DB 110 + DW24 L_28 + + DB 111 + DW24 L_29 + + DB 112 + DW24 L_30 + + DB 115 + DW24 L_31 + + DB 117 + DW24 L_32 + + DB 120 + DW24 L_33 + + DW24 L_36 + +; 64 case '%': +L_1: +; 65 class = 0; + LD (IX+-1),0 +; 66 break; + JR L_37 +; 67 /***** Treat these as pass through: +; 68 case ' ': +; 69 case '\t': +; 70 case '\n': +; 71 class = 1; +; 72 break; +; 73 ****/ +; 74 case '*': +L_2: +; 75 class = 2; + LD (IX+-1),2 +; 76 break; + JR L_37 +; 77 case 'h': +L_3: +; 78 case 'l': +L_4: +; 79 case 'L': +L_5: +; 80 class = 3; + LD (IX+-1),3 +; 81 break; + JR L_37 +; 82 case '0': +L_6: +; 83 case '1': +L_7: +; 84 case '2': +L_8: +; 85 case '3': +L_9: +; 86 case '4': +L_10: +; 87 case '5': +L_11: +; 88 case '6': +L_12: +; 89 case '7': +L_13: +; 90 case '8': +L_14: +; 91 case '9': +L_15: +; 92 class = 4; + LD (IX+-1),4 +; 93 break; + JR L_37 +; 94 case 'A': +L_16: +; 95 case 'E': +L_17: +; 96 case 'F': +L_18: +; 97 case 'G': +L_19: +; 98 case 'X': +L_20: +; 99 case 'a': +L_21: +; 100 case 'c': +L_22: +; 101 case 'd': +L_23: +; 102 case 'e': +L_24: +; 103 case 'f': +L_25: +; 104 case 'g': +L_26: +; 105 case 'i': +L_27: +; 106 case 'n': +L_28: +; 107 case 'o': +L_29: +; 108 case 'p': +L_30: +; 109 case 's': +L_31: +; 110 case 'u': +L_32: +; 111 case 'x': +L_33: +; 112 class = 5; + LD (IX+-1),5 +; 113 break; + JR L_37 +; 114 case '[': +L_34: +; 115 class = 6; + LD (IX+-1),6 +; 116 break; + JR L_37 +; 117 case ']': +L_35: +; 118 class = 7; + LD (IX+-1),7 +; 119 break; + JR L_37 +; 120 default: +L_36: +; 121 class = 8; + LD (IX+-1),8 +; 122 } +L_37: +; 123 +; 124 pstate = state; + LD A,(IX+-2) + LD (IX+-4),A +; 125 state = sscan_fsa[state][class]; + LD A,(IX+-2) + SEXT HL + LD L,(IX+-2) + LD A,9 + CALL __imul_b + LD A,(IX+-1) + LD BC,_sscan_fsa + ADD HL,BC + LD BC,HL + UEXT HL + LD L,A + ADD HL,BC + LD A,(HL) + LD (IX+-2),A +; 126 +; 127 switch (state) { + SEXT HL + LD L,(IX+-2) + CALL __case24 +L__1: + DW 10 + DW 1 + DB 0 + DW24 L_40 + + DW 3 + DB 0 + DW24 L_42 + + DW 4 + DB 0 + DW24 L_43 + + DW 5 + DB 0 + DW24 L_44 + + DW 6 + DB 0 + DW24 L_45 + + DW 7 + DB 0 + DW24 L_53 + + DW 8 + DB 0 + DW24 L_41 + + DW 9 + DB 0 + DW24 L_54 + + DW 65534 + DB 255 + DW24 L_39 + + DW 65535 + DB 255 + DW24 L_38 + + DW24 L_55 + +; 128 case ACC: +L_38: +; 129 str->status = FMT_OK; + LD IY,(IX+9) + LD (IY+0),0 +; 130 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_57 +; 131 case ERR: +L_39: +; 132 str->status = FMT_ERR; + LD IY,(IX+9) + LD (IY+0),1 +; 133 return(fmt-1); + LD IY,(IX+6) + LEA HL,IY+-1 + JR L_57 +; 134 case 1: +L_40: +; 135 case 8: +L_41: +; 136 str->status = FMT_PASS_THRU; + LD IY,(IX+9) + LD (IY+0),2 +; 137 str->chr = ch; + LD A,(IX+-3) + LD (IY+3),A +; 138 return(fmt); + LD HL,(IX+6) + JR L_57 +; 139 case 3: +L_42: +; 140 str->flags |= FMT_FLAG_IGNORE; + LD IY,(IX+9) + LD A,(IY+1) + SET 4,A + LD (IY+1),A +; 141 break; + JR L_55 +; 142 case 4: +L_43: +; 143 str->field_width = str->field_width * 10 + (ch - '0'); + LD IY,(IX+9) + LD B,(IY+5) + LD C,10 + MLT BC + LD A,(IX+-3) + ADD A,-48 + LD B,A + LD A,C + ADD A,B + LD (IY+5),A +; 144 break; + JR L_55 +; 145 case 5: +L_44: +; 146 str->size = ch; + LD A,(IX+-3) + LD IY,(IX+9) + LD (IY+2),A +; 147 break; + JR L_55 +; 148 case 6: +L_45: +; 149 if (pstate != state) { + LD A,(IX+-4) + CP A,(IX+-2) + JR Z,L_55 +; 150 str->flags |= FMT_FLAG_SET; + LD IY,(IX+9) + LD A,(IY+1) + SET 7,A + LD (IY+1),A +; 151 str->set_begin = fmt; + LD BC,(IX+6) + LD (IY+7),BC +; 152 // Check for sets that start with [] or [^] +; 153 if (*fmt == '^') + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,94 + SBC HL,BC + JR NZ,L_50 +; 154 fmt++; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_50: +; 155 if (*fmt == ']') + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,93 + SBC HL,BC + JR NZ,L_55 +; 156 fmt++; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 157 +; 158 } +; 159 break; + JR L_55 +; 160 case 7: +L_53: +; 161 str->set_end = fmt-1; + LD IY,(IX+6) + LEA BC,IY+-1 + LD IY,(IX+9) + LD (IY+10),BC +; 162 break; + JR L_55 +; 163 case 9: +L_54: +; 164 str->type = ch; + LD A,(IX+-3) + LD IY,(IX+9) + LD (IY+4),A +; 165 break; + JR L_55 +; 166 } +; 167 } +; 168 } +L_57: + LD SP,IX + POP IX + RET + + +;**************************** __u_sscan *************************** +;Name Addr/Register Size Type +;_sscan_fsa STATIC 90 variable +;pstate IX-4 1 variable +;ch IX-3 1 variable +;state IX-2 1 variable +;class IX-1 1 variable +;str IX+9 3 parameter +;fmt IX+6 3 parameter + + +; Stack Frame Size: 19 (bytes) +; Spill Code: 0 (instruction) + + + XREF __frameset:ROM + XREF __case24:ROM + XREF __case8:ROM + XREF __imul_b:ROM + XDEF __u_sscan + END diff --git a/frontends/calculator/CEdev/lib/shared/ustoa.src b/frontends/calculator/CEdev/lib/shared/ustoa.src new file mode 100644 index 0000000..792c27a --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/ustoa.src @@ -0,0 +1,71 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\USTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 #ifndef _PTR_ +; 10 #define _PTR_ * +; 11 #endif +; 12 +; 13 /************************************************* +; 14 * +; 15 * _u_stoa - convert a short to a number of base rad +; 16 * +; 17 * Inputs: +; 18 * int - int to be converted +; 19 * str - target char array +; 20 * rad - radix +; 21 * fmt - format structure with conversion info +; 22 * +; 23 * Returns: +; 24 * next address past the end of the string +; 25 * +; 26 *************************************************/ +; 27 #ifndef _MULTI_THREAD +; 28 void _u_stoa(short n) +; 29 { +__u_stoa: + CALL __frameset0 +; 30 _u_ltoa((long)n); + LD A,(IX+7) + RLA + SBC A,A + LD BC,(IX+6) + CALL __stoi + LD C,A + LD B,0 + PUSH BC + PUSH HL + CALL __u_ltoa + POP BC + POP BC +; 31 } + LD SP,IX + POP IX + RET + + +;**************************** __u_stoa *************************** +;Name Addr/Register Size Type +;__u_ltoa IMPORT ----- function +;n IX+6 2 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ltoa:ROM + XREF __stoi:ROM + XREF __frameset0:ROM + XDEF __u_stoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uuitoa.src b/frontends/calculator/CEdev/lib/shared/uuitoa.src new file mode 100644 index 0000000..79a7db4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uuitoa.src @@ -0,0 +1,64 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UUITOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_uitoa - convert an unsigned int to a number of base rad +; 12 * +; 13 * Inputs: +; 14 * int - int to be converted +; 15 * str - target char array +; 16 * rad - radix +; 17 * fmt - format structure with conversion info +; 18 * +; 19 * Returns: +; 20 * next address past the end of the string +; 21 * +; 22 *************************************************/ +; 23 #ifndef _MULTI_THREAD +; 24 void _u_uitoa(unsigned int n) +; 25 { +__u_uitoa: + CALL __frameset0 +; 26 _u_ultoa((unsigned long)n); + LD BC,(IX+6) + LD DE,BC + XOR A,A + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL __u_ultoa + POP BC + POP BC +; 27 } + LD SP,IX + POP IX + RET + + +;**************************** __u_uitoa *************************** +;Name Addr/Register Size Type +;__u_ultoa IMPORT ----- function +;n IX+6 3 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ultoa:ROM + XREF __frameset0:ROM + XDEF __u_uitoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uultoa.src b/frontends/calculator/CEdev/lib/shared/uultoa.src new file mode 100644 index 0000000..e86e130 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uultoa.src @@ -0,0 +1,326 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UULTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 #ifndef _PTR_ +; 10 #define _PTR_ * +; 11 #endif +; 12 +; 13 /************************************************* +; 14 * +; 15 * _u_ultoa - convert an unsigned long to a number +; 16 * of base rad +; 17 * +; 18 * Inputs: +; 19 * ulg - unsigned long to be converted +; 20 * str - target char array +; 21 * rad - radix +; 22 * fmt - format structure with conversion info +; 23 * +; 24 * Returns: +; 25 * next address past the end of the string +; 26 * +; 27 *************************************************/ +; 28 +; 29 void __print_sendstring(char *sp); +; 30 +; 31 #ifndef _MULTI_THREAD +; 32 void _u_ultoa(unsigned long n) +; 33 #else +; 34 void _mt_ultoa(unsigned long n,char* __print_buff,struct fmt_type* print_fmt) +; 35 #define __print_fmt (*print_fmt) +; 36 #endif +; 37 { +__u_ultoa: + LD HL,-22 + CALL __frameset +; 38 unsigned char a; +; 39 unsigned char t; +; 40 char _PTR_ s = __print_buff; + LD BC,___print_buff + LD (IX+-3),BC +; 41 unsigned char nz = (n != 0); + LD HL,(IX+6) + LD E,(IX+9) + CALL __lcmpzero + JR Z,L__1 + LD A,1 + JR L__2 +L__1: + XOR A,A +L__2: + LD (IX+-7),A +; 42 char rad; +; 43 +; 44 a = 'A'; + LD (IX+-5),65 +; 45 switch (__print_fmt.type) + LD A,(___print_fmt+4) + LD B,A + SEXT HL + LD L,B + CALL __case8 +L__3: + DW 7 + DB 88 + DW24 L_8 + + DB 100 + DW24 L_1 + + DB 105 + DW24 L_2 + + DB 111 + DW24 L_4 + + DB 112 + DW24 L_6 + + DB 117 + DW24 L_3 + + DB 120 + DW24 L_5 + + DW24 L_0 + +; 46 { +; 47 default: +L_0: +; 48 case 'd': +L_1: +; 49 case 'i': +L_2: +; 50 case 'u': +L_3: +; 51 rad = 10; + LD (IX+-4),10 +; 52 break; + JR L_14 +; 53 case 'o': +L_4: +; 54 rad = 8; + LD (IX+-4),8 +; 55 break; + JR L_14 +; 56 case 'x': +L_5: +; 57 case 'p': +L_6: +; 58 if ( !(__print_fmt.flags&FMT_FLAG_UPPERCASE)) + LD A,(___print_fmt+1) + AND A,32 + JR NZ,L_8 +; 59 a = 'a'; + LD (IX+-5),97 +; 60 // Fall into next case +; 61 case 'X': +L_8: +; 62 rad = 16; + LD (IX+-4),16 +; 63 break; +; 64 } +; 65 +; 66 do +L_14: +; 67 { /* generate digits in reverse order */ +; 68 t = n % (unsigned char)rad; + UEXT HL + LD L,(IX+-4) + LD BC,HL + LD A,H + LD HL,(IX+6) + LD E,(IX+9) + CALL __lremu + LD BC,HL + LD (IX+-6),C +; 69 if (t > 9) + LD A,9 + CP A,(IX+-6) + JR NC,L_13 +; 70 *(s++) = (t - (unsigned char)10) + a; + LD BC,(IX+-3) + LD (IX+-10),BC + LD A,(IX+-6) + ADD A,-10 + ADD A,(IX+-5) + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 71 else + JR L_15 +L_13: +; 72 *(s++) = t + (unsigned char)'0'; + LD BC,(IX+-3) + LD (IX+-13),BC + LD A,(IX+-6) + ADD A,48 + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 73 } while (n /= rad); +L_15: + LD A,(IX+-4) + SEXT HL + LD L,(IX+-4) + LD BC,HL + LD A,H + LD HL,(IX+6) + LD E,(IX+9) + CALL __ldivu + LD (IX+6),HL + LD (IX+9),E + LD HL,(IX+6) + LD E,(IX+9) + CALL __lcmpzero + JR NZ,L_14 +; 74 +; 75 while (s - __print_buff < (unsigned char) __print_fmt.precision) { + JR L_18 +L_19: +; 76 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-16),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 77 } +L_18: + LD A,(___print_fmt+6) + UEXT HL + LD L,A + LD DE,HL + LD HL,(IX+-3) + OR A,A + LD BC,___print_buff + SBC HL,BC + OR A,A + SBC HL,DE + JP M,L_19 +; 78 if (__print_fmt.flags & FMT_FLAG_POUND) { + LD A,(___print_fmt+1) + AND A,8 + JR Z,L_31 +; 79 if (nz) { + LD A,(IX+-7) + OR A,A + JR Z,L_31 +; 80 if (rad == (char)16) { + LD A,(IX+-4) + CP A,16 + JR NZ,L_26 +; 81 *(s++) = ('X'-'A')+a; + LD BC,(IX+-3) + LD (IX+-19),BC + LD A,(IX+-5) + ADD A,23 + LD HL,BC + LD (HL),A + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 82 *(s++) = '0'; + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 83 } +; 84 else if (rad == (char)8) { + JR L_31 +L_26: + LD A,(IX+-4) + CP A,8 + JR NZ,L_31 +; 85 *(s++) = '0'; + LD BC,(IX+-3) + LD (IX+-22),BC + LD HL,BC + LD (HL),48 + LD BC,(IX+-3) + INC BC + LD (IX+-3),BC +; 86 } +; 87 } +; 88 } +L_31: +; 89 +; 90 // ISO Spec: If a precision is specified the zero flag is ignored +; 91 if (__print_fmt.precision ) + LD A,(___print_fmt+6) + OR A,A + JR Z,L_32 +; 92 __print_fmt.flags &= ~FMT_FLAG_PAD_ZERO; + LD A,(___print_fmt+1) + RES 6,A + LD (___print_fmt+1),A +L_32: +; 93 +; 94 *s = '\0'; + LD HL,(IX+-3) +; 95 +; 96 _u_reverse(__print_buff); + LD BC,___print_buff + PUSH BC + LD (HL),0 + CALL __u_reverse + POP BC +; 97 #ifndef _MULTI_THREAD +; 98 __print_sendstring(__print_buff); + LD BC,___print_buff + PUSH BC + CALL ___print_sendstring + POP BC +; 99 #endif +; 100 } + LD SP,IX + POP IX + RET + + +;**************************** __u_ultoa *************************** +;Name Addr/Register Size Type +;___print_sendstring IMPORT ----- function +;__u_reverse IMPORT ----- function +;___print_fmt IMPORT 19 variable +;___print_buff IMPORT unknown variable +;nz IX-7 1 variable +;t IX-6 1 variable +;a IX-5 1 variable +;rad IX-4 1 variable +;s IX-3 3 variable +;n IX+6 4 parameter + + +; Stack Frame Size: 34 (bytes) +; Spill Code: 0 (instruction) + + + XREF ___print_sendstring:ROM + XREF __u_reverse:ROM + XREF ___print_buff:ROM + XREF ___print_fmt:ROM + XREF __ldivu:ROM + XREF __lremu:ROM + XREF __frameset:ROM + XREF __lcmpzero:ROM + XREF __case8:ROM + XDEF __u_ultoa + END diff --git a/frontends/calculator/CEdev/lib/shared/uustoa.src b/frontends/calculator/CEdev/lib/shared/uustoa.src new file mode 100644 index 0000000..18041e9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/uustoa.src @@ -0,0 +1,64 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UUSTOA.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_ustoa - convert an unsigned short to a number of base rad +; 12 * +; 13 * Inputs: +; 14 * int - int to be converted +; 15 * str - target char array +; 16 * rad - radix +; 17 * fmt - format structure with conversion info +; 18 * +; 19 * Returns: +; 20 * next address past the end of the string +; 21 * +; 22 *************************************************/ +; 23 #ifndef _MULTI_THREAD +; 24 void _u_ustoa(unsigned short n) +; 25 { +__u_ustoa: + CALL __frameset0 +; 26 _u_ultoa((unsigned long)n); + LD BC,(IX+6) + CALL __stoiu + LD C,0 + LD B,0 + PUSH BC + PUSH HL + CALL __u_ultoa + POP BC + POP BC +; 27 } + LD SP,IX + POP IX + RET + + +;**************************** __u_ustoa *************************** +;Name Addr/Register Size Type +;__u_ultoa IMPORT ----- function +;n IX+6 2 parameter + + +; Stack Frame Size: 9 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_ultoa:ROM + XREF __stoiu:ROM + XREF __frameset0:ROM + XDEF __u_ustoa + END diff --git a/frontends/calculator/CEdev/lib/shared/vsprintf.src b/frontends/calculator/CEdev/lib/shared/vsprintf.src new file mode 100644 index 0000000..d940239 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/vsprintf.src @@ -0,0 +1,64 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\VSPRINTF.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 #include +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * vsprintf - print to a string (variable args) +; 12 * +; 13 * Inputs: +; 14 * string - pointer to string to write to +; 15 * fmt - format string +; 16 * args - argument list +; 17 * +; 18 * Returns: +; 19 * Number of characters transmitted, or +; 20 * -1 if an error occured. +; 21 * +; 22 *************************************************/ +; 23 int vsprintf(char *string,char *fmt,va_list args) { +_vsprintf: + CALL __frameset0 +; 24 return(_u_print(string, fmt, args)); + LD BC,(IX+12) + PUSH BC + LD BC,(IX+9) + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL __u_print + POP BC + POP BC + POP BC +; 25 } + LD SP,IX + POP IX + RET + + +;**************************** _vsprintf *************************** +;Name Addr/Register Size Type +;__u_print IMPORT ----- function +;args IX+12 3 parameter +;fmt IX+9 3 parameter +;string IX+6 3 parameter + + +; Stack Frame Size: 15 (bytes) +; Spill Code: 0 (instruction) + + + XREF __u_print:ROM + XREF __frameset0:ROM + XDEF _vsprintf + END diff --git a/frontends/calculator/CEdev/lib/shared/zx7_Decompress.src b/frontends/calculator/CEdev/lib/shared/zx7_Decompress.src new file mode 100644 index 0000000..e45c146 --- /dev/null +++ b/frontends/calculator/CEdev/lib/shared/zx7_Decompress.src @@ -0,0 +1,117 @@ +; --- +; void zx7_Decompress(void *dest, void *src) +; --- +; Dec 2012 by Einar Saukas & Urusergi +; "Turbo" version (89 bytes, 25% faster) +; --- + + .def _zx7_Decompress + .assume adl=1 + +; enter : hl = void *src +; de = void *dst +; +; exit : hl = & following uncompressed block +; +; uses : af, bc, de, hl + +_zx7_Decompress: + pop bc + pop de + pop hl + push hl + push de + push bc + + ld a, 128 + +zx7t_copy_byte_loop: + + ldi ; copy literal byte + +zx7t_main_loop: + + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + jr nc, zx7t_copy_byte_loop ; next bit indicates either literal or sequence + +; determine number of bits used for length (Elias gamma coding) + + push de + ld de, 0 + ld bc, 1 + +zx7t_len_size_loop: + + inc d + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + jr nc, zx7t_len_size_loop + jp zx7t_len_value_start + +; determine length + +zx7t_len_value_loop: + + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl c + rl b + jr c, zx7t_exit ; check end marker + +zx7t_len_value_start: + + dec d + jr nz, zx7t_len_value_loop + inc bc ; adjust length + +; determine offset + + ld e, (hl) ; load offset flag (1 bit) + offset value (7 bits) + inc hl + + sla e + inc e + + jr nc, zx7t_offset_end ; if offset flag is set, load 4 extra bits + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl d ; insert first bit into D + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl d ; insert second bit into D + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + rl d ; insert third bit into D + add a, a ; check next bit + call z, zx7t_load_bits ; no more bits left? + ccf + jr c, zx7t_offset_end + inc d ; equivalent to adding 128 to DE + +zx7t_offset_end: + + rr e ; insert inverted fourth bit into E + +; copy previous sequence + + ex (sp), hl ; store source, restore destination + push hl ; store destination + sbc hl, de ; HL = destination - offset - 1 + pop de ; DE = destination + ldir + +zx7t_exit: + + pop hl ; restore source address (compressed data) + jp nc, zx7t_main_loop + +zx7t_load_bits: + + ld a, (hl) ; load another group of 8 bits + inc hl + rla + ret + + + end diff --git a/frontends/calculator/CEdev/lib/static/acos.src b/frontends/calculator/CEdev/lib/static/acos.src new file mode 100644 index 0000000..7136ebe --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/acos.src @@ -0,0 +1,54 @@ + .ref __frameset0 + .ref __fcmp + .ref __fsub + .ref _asin + .ref _errno + .def _acos + .assume adl=1 + +; #define pio2 1.57079632679490 +; +; double acos(double arg) { +; if((arg > 1.) || (arg < -1.)) { +; errno = EDOM; +; return(0.); +; } +; return(pio2 - asin(arg)); +; } + +_acos: + pop hl + pop de + pop bc + push bc + push de + push hl + ld a,e + ld hl,8388608 + ld e,63 + push bc + push hl + call __fcmp + pop bc + pop hl + jp m,l_1 + ld e,a + ld a,191 + call __fcmp + jp p,l_2 + +l_1: ld hl,4 + ld (_errno),hl + ld l,h + ld e,h + ret + +l_2: push de + push hl + call _asin + ld bc,13176795 + ld a,63 + call __fsub + ld hl,bc + ld e,a + ret diff --git a/frontends/calculator/CEdev/lib/static/asin.src b/frontends/calculator/CEdev/lib/static/asin.src new file mode 100644 index 0000000..0ea0c03 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/asin.src @@ -0,0 +1,178 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ASIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */ +; 2 +; 3 /** +; 4 * asin(arg) return the arcsin of arg. +; 5 * arctan is called after appropriate range reduction. +; 6 */ +; 7 +; 8 #include +; 9 #include +; 10 +; 11 #define pio2 1.57079632679490 +; 12 +; 13 double asin(double arg) { +_asin: + LD HL,-8 + CALL __frameset +; 14 +; 15 double sign, temp; +; 16 +; 17 sign = 1.; + LD BC,8388608 + LD (IX+-8),BC + LD A,63 + LD (IX+-5),A +; 18 if(arg < 0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_2 +; 19 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 20 sign = -1.; + LD BC,8388608 + LD (IX+-8),BC + LD A,191 + LD (IX+-5),A +; 21 } +L_2: +; 22 +; 23 if(arg > 1.) { + LD HL,8388608 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_3 +; 24 errno = EDOM; + LD BC,4 + LD (_errno),BC + OR A,A +; 25 return(0.); + SBC HL,HL + LD E,0 + JR L_7 +; 26 } +L_3: +; 27 +; 28 temp = sqrt(1. - arg*arg); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD E,A + LD HL,BC + LD BC,8388608 + LD A,63 + CALL __fsub + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _sqrt + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 29 if(arg > 0.7) { + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + LD HL,3355443 + CALL __fcmp + JP P,L_5 +; 30 temp = pio2 - atan(temp/arg); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _atan + POP BC + POP BC + LD BC,13176795 + LD A,63 + CALL __fsub + LD (IX+-4),BC + LD (IX+-1),A +; 31 } else { + JR L_6 +L_5: +; 32 temp = atan(arg/temp); + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _atan + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 33 } +L_6: +; 34 +; 35 return(sign*temp); + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD E,A + LD HL,BC +; 36 } +L_7: + LD SP,IX + POP IX + RET + + +;**************************** _asin *************************** +;Name Addr/Register Size Type +;_atan IMPORT ----- function +;_sqrt IMPORT ----- function +;_errno IMPORT 3 variable +;sign IX-8 4 variable +;temp IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 20 (bytes) +; Spill Code: 0 (instruction) + + + XREF _sqrt:ROM + XREF _atan:ROM + XREF _errno:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _asin + END diff --git a/frontends/calculator/CEdev/lib/static/atan.src b/frontends/calculator/CEdev/lib/static/atan.src new file mode 100644 index 0000000..e84ad82 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atan.src @@ -0,0 +1,341 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ATAN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */ +; 2 +; 3 /** +; 4 * floating-point arctangent +; 5 * +; 6 * atan returns the value of the arctangent of its +; 7 * argument in the range [-pi/2,pi/2]. +; 8 * +; 9 * atan2 returns the arctangent of arg1/arg2 +; 10 * in the range [-pi,pi]. +; 11 * +; 12 * there are no error returns. +; 13 * +; 14 * coefficients are #5077 from Hart & Cheney. (19.56D) +; 15 */ +; 16 +; 17 +; 18 #define sq2p1 2.41421356237309e0 +; 19 #define sq2m1 0.414213562373095e0 +; 20 #define pio2 1.57079632679489e0 +; 21 #define pio4 0.785398163397448e0 +; 22 #define p4 0.161536412982230e2 +; 23 #define p3 0.268425481955040e3 +; 24 #define p2 0.115302935154049e4 +; 25 #define p1 0.178040631643320e4 +; 26 #define p0 0.896785974036639e3 +; 27 #define q4 0.589569705084446e2 +; 28 #define q3 0.536265374031215e3 +; 29 #define q2 0.166678381488163e4 +; 30 #define q1 0.207933497444541e4 +; 31 #define q0 0.896785974036639e3 +; 32 +; 33 +; 34 /** +; 35 * atan makes its argument positive and +; 36 * calls the inner routine satan. +; 37 */ +; 38 +; 39 double atan(double arg) { +_atan: + CALL __frameset0 + OR A,A +; 40 double satan(double); +; 41 +; 42 if(arg>0) { + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_1 +; 43 return(satan(arg)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _satan + POP BC + POP BC + JR L_2 +; 44 } else { +L_1: +; 45 return(-satan(-arg)); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,HL + LD A,E + CALL __fneg + LD E,A + LD HL,BC +; 46 } +; 47 } +L_2: + LD SP,IX + POP IX + RET + + +;**************************** _atan *************************** +;Name Addr/Register Size Type +;_satan IMPORT ----- function +;arg IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + +; 48 +; 49 +; 50 /** +; 51 * atan2 discovers what quadrant the angle +; 52 * is in and calls atan. +; 53 */ +; 54 +; 55 +; 56 /** +; 57 * satan reduces its argument (known to be positive) +; 58 * to the range [0,0.414...] and calls xatan. +; 59 */ +; 60 +; 61 double satan(double arg) { +_satan: + LD HL,-4 + CALL __frameset +; 62 double xatan(double); +; 63 +; 64 if(arg < sq2m1) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,13898701 + LD A,62 + CALL __fcmp + JP P,L_6 +; 65 return(xatan(arg)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _xatan + POP BC + POP BC + JR L_7 +; 66 } else if(arg > sq2p1) { +L_6: + LD HL,1737338 + LD E,64 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_4 +; 67 return(pio2 - xatan(1.0/arg)); + LD HL,(IX+6) + LD E,(IX+9) + LD BC,8388608 + LD A,63 + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _xatan + POP BC + POP BC + LD BC,13176795 + LD A,63 + CALL __fsub + LD E,A + LD HL,BC + JR L_7 +; 68 } else { +L_4: +; 69 return(pio4 + xatan((arg-1.0)/(arg+1.0))); + LD HL,8388608 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD (IX+-4),BC + LD (IX+-1),A + LD A,(IX+9) + LD BC,(IX+6) + LD HL,8388608 + LD E,63 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _xatan + POP BC + POP BC + LD BC,HL + LD HL,4788187 + LD A,E + LD E,63 + CALL __fadd + LD E,A + LD HL,BC +; 70 } +; 71 } +L_7: + LD SP,IX + POP IX + RET + + +;**************************** _satan *************************** +;Name Addr/Register Size Type +;_xatan IMPORT ----- function +;arg IX+6 4 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + +; 72 +; 73 /** +; 74 * xatan evaluates a series valid in the +; 75 * range [-0.414...,+0.414...]. +; 76 */ +; 77 +; 78 static double xatan(double arg) { +_xatan: + LD HL,-8 + CALL __frameset +; 79 double argsq; +; 80 double value; +; 81 +; 82 argsq = arg*arg; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 83 value = ((((p4*argsq + p3)*argsq + p2)*argsq + p1)*argsq + p0); + LD HL,8469160 + LD E,65 + CALL __fmul + LD HL,8795766 + LD E,67 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,9445616 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,14585089 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,6304333 + LD E,68 + CALL __fadd + LD (IX+-8),BC + LD (IX+-5),A +; 84 value = value/(((((argsq + q4)*argsq + q3)*argsq + q2)*argsq + q1)*argsq + q0); + LD BC,(IX+-4) + LD A,(IX+-1) + LD HL,7066608 + LD E,66 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,397564 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,13654293 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,128348 + LD E,69 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,6304333 + LD E,68 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fdiv + LD (IX+-8),BC + LD (IX+-5),A +; 85 return(value*arg); + LD HL,(IX+6) + LD E,(IX+9) + LD A,(IX+-5) + CALL __fmul + LD E,A + LD HL,BC +; 86 } + LD SP,IX + POP IX + RET + + +;**************************** _xatan *************************** +;Name Addr/Register Size Type +;value IX-8 4 variable +;argsq IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 20 (bytes) +; Spill Code: 0 (instruction) + + + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XDEF _satan + XDEF _atan + END diff --git a/frontends/calculator/CEdev/lib/static/atan2.src b/frontends/calculator/CEdev/lib/static/atan2.src new file mode 100644 index 0000000..f6840d2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atan2.src @@ -0,0 +1,179 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\ATAN2.C" + .assume ADL=1 + SEGMENT CODE +; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */ +; 2 +; 3 #define pio2 1.57079632679489e0 +; 4 +; 5 double atan2(double arg1,double arg2) { +_atan2: + CALL __frameset0 +; 6 double satan(double); +; 7 +; 8 if((arg1+arg2)==arg1) { + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JR NZ,L_9 +; 9 if(arg1 >= 0.) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP M,L_1 +; 10 return(pio2); + LD HL,13176795 + LD E,63 + JR L_10 +; 11 } else { +L_1: +; 12 return(-pio2); + LD HL,13176795 + LD E,191 + JR L_10 +; 13 } +; 14 } else if(arg2 < 0.) { +L_9: + LD HL,(IX+12) + LD E,(IX+15) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_7 +; 15 if(arg1 >= 0.) { + LD HL,(IX+6) + LD E,(IX+9) + XOR A,A + CALL __fcmp + JP M,L_3 +; 16 return(pio2+pio2 - satan(-arg1/arg2)); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD HL,(IX+12) + LD E,(IX+15) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,4788187 + LD A,64 + CALL __fsub + LD E,A + LD HL,BC + JR L_10 +; 17 } else { +L_3: +; 18 return(-pio2-pio2 + satan(arg1/arg2)); + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,HL + LD HL,4788187 + LD A,E + LD E,192 + CALL __fadd + LD E,A + LD HL,BC + JR L_10 +; 19 } +; 20 } else if(arg1 > 0) { +L_7: + OR A,A + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_5 +; 21 return(satan(arg1/arg2)); + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + JR L_10 +; 22 } else { +L_5: +; 23 return(-satan(-arg1/arg2)); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD HL,(IX+12) + LD E,(IX+15) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _satan + POP BC + POP BC + LD BC,HL + LD A,E + CALL __fneg + LD E,A + LD HL,BC +; 24 } +; 25 } +L_10: + LD SP,IX + POP IX + RET + + +;**************************** _atan2 *************************** +;Name Addr/Register Size Type +;_satan IMPORT ----- function +;arg2 IX+12 4 parameter +;arg1 IX+6 4 parameter + + +; Stack Frame Size: 18 (bytes) +; Spill Code: 0 (instruction) + + + XREF _satan:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset0:ROM + XDEF _atan2 + END diff --git a/frontends/calculator/CEdev/lib/static/atof.src b/frontends/calculator/CEdev/lib/static/atof.src new file mode 100644 index 0000000..bfabf06 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atof.src @@ -0,0 +1,20 @@ + .ref __frameset0 + .ref _strtod + .def _atof + .assume adl=1 + +; double atof(char *str); + +_atof: + pop hl + pop bc + push bc + push hl + or a,a + sbc hl,hl + push hl + push bc + call _strtod + pop bc + pop hl + ret diff --git a/frontends/calculator/CEdev/lib/static/ceil.src b/frontends/calculator/CEdev/lib/static/ceil.src new file mode 100644 index 0000000..591da78 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ceil.src @@ -0,0 +1,31 @@ + .ref __frameset0 + .ref __fneg + .ref _floor + .def _ceil + .assume adl=1 + +; double ceil(double d); + +_ceil: + call __frameset0 + ld bc,(ix+6) + ld a,(ix+9) + call __fneg + ld l,a + ld h,0 + push hl + push bc + call _floor + pop bc + pop bc + push hl + pop bc + ld a,e + call __fneg + ld e,a + push bc + pop hl + ld sp,ix + pop ix + ret + \ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/static/cos.src b/frontends/calculator/CEdev/lib/static/cos.src new file mode 100644 index 0000000..3145df8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/cos.src @@ -0,0 +1,33 @@ + .ref _sinus + .ref __frameset0 + .ref __fcmp + .ref __fneg + .def _cos + .assume adl=1 + +; double cos(double arg); + +_cos: + call __frameset0 + ld hl,(ix+6) + ld e,(ix+9) + ld bc,0 + xor a,a + push de + push hl + call __fcmp + pop bc + pop de + ld a,e + jp p,l_1 + call __fneg + +l_1: ld hl,1 + push hl + ld l,a + push hl + push bc + call _sinus + ld sp,ix + pop ix + ret diff --git a/frontends/calculator/CEdev/lib/static/exp.src b/frontends/calculator/CEdev/lib/static/exp.src new file mode 100644 index 0000000..ccae75e --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/exp.src @@ -0,0 +1,234 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\EXP.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /************************************************************************/ +; 6 /* +; 7 exp returns the exponential function of its +; 8 floating-point argument. +; 9 +; 10 The coefficients are #1069 from Hart and Cheney. (22.35D) +; 11 */ +; 12 +; 13 #include +; 14 #include +; 15 +; 16 #define p0 0.20803843466947e7 +; 17 #define p1 0.30286971697440e5 +; 18 #define p2 0.60614853300611e2 +; 19 #define q0 0.60027203602388e7 +; 20 #define q1 0.32772515180829e6 +; 21 #define q2 0.17492876890931e4 +; 22 #define log2e 1.44269504088896 +; 23 #define sqrt2 1.41421356237310 +; 24 #define maxf 10000 +; 25 +; 26 double exp(double arg) { +_exp: + LD HL,-23 + CALL __frameset +; 27 double fraction; +; 28 double temp1, temp2, xsq; +; 29 int ent; +; 30 +; 31 if ( arg == 0.0 ){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_2 +; 32 return 1.0; + LD HL,8388608 + LD E,63 + JR L_6 +; 33 } +L_2: +; 34 if ( arg < -maxf ){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,1851392 + LD A,198 + CALL __fcmp + JP P,L_4 + OR A,A +; 35 return 0.0; + SBC HL,HL + LD E,0 + JR L_6 +; 36 } +L_4: +; 37 if ( arg > maxf ){ + LD HL,1851392 + LD E,70 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_5 +; 38 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 39 return HUGE_VAL ; + LD HL,(__huge_val) + LD A,(__huge_val+3) + LD E,A + JR L_6 +; 40 } +L_5: +; 41 arg *= log2e; + LD HL,12102203 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+6),BC + LD (IX+9),A +; 42 ent = floor( arg ); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _floor + POP BC + POP BC + LD A,E + LD BC,HL + CALL __ftol + LD (IX+-11),BC +; 43 fraction = arg - ent - 0.5; + CALL __itol + CALL __ltof + OR A,A + SBC HL,HL + LD E,63 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD (IX+-8),BC + LD (IX+-5),A +; 44 xsq = fraction * fraction; + LD E,(IX+-5) + LD A,(IX+-5) + LD HL,BC + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 45 temp1 = ((p2 * xsq + p1) * xsq + p0) * fraction; + LD HL,7501212 + LD E,66 + CALL __fmul + LD HL,15506930 + LD E,70 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,16643075 + LD E,73 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD (IX+-15),BC + LD (IX+-12),A +; 46 temp2 = ((1.0 * xsq + q2) * xsq + q1) * xsq + q0; + LD BC,(IX+-4) + LD A,(IX+-1) + LD HL,14330165 + LD E,68 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,10487205 + LD E,72 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,12005441 + LD E,74 + CALL __fadd + LD (IX+-19),BC + LD (IX+-16),A +; 47 return ldexp( sqrt2 * (temp2+temp1) / (temp2-temp1), ent ); + LD DE,(IX+-11) + PUSH DE + LD HL,(IX+-15) + LD E,(IX+-12) + LD A,(IX+-16) + CALL __fadd + LD HL,11863283 + LD E,63 + CALL __fmul + LD (IX+-22),BC + LD (IX+-23),A + LD A,(IX+-16) + LD BC,(IX+-19) + LD HL,(IX+-15) + LD E,(IX+-12) + CALL __fsub + LD E,A + LD HL,BC + LD BC,(IX+-22) + LD A,(IX+-23) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _ldexp + POP BC + POP BC + POP BC +; 48 } +L_6: + LD SP,IX + POP IX + RET + + +;**************************** _exp *************************** +;Name Addr/Register Size Type +;_ldexp IMPORT ----- function +;_floor IMPORT ----- function +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;temp2 IX-19 4 variable +;temp1 IX-15 4 variable +;ent IX-11 3 variable +;fraction IX-8 4 variable +;xsq IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 35 (bytes) +; Spill Code: 0 (instruction) + + + XREF _floor:ROM + XREF _ldexp:ROM + XREF __huge_val:ROM + XREF _errno:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XDEF _exp + END diff --git a/frontends/calculator/CEdev/lib/static/fabs.src b/frontends/calculator/CEdev/lib/static/fabs.src new file mode 100644 index 0000000..36bbacd --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/fabs.src @@ -0,0 +1,14 @@ + .def _fabs + .assume adl=1 + +; double fabs(double j); + +_fabs: + pop bc + pop hl + pop de + push de + push hl + push bc + res 7,e + ret diff --git a/frontends/calculator/CEdev/lib/static/floor.src b/frontends/calculator/CEdev/lib/static/floor.src new file mode 100644 index 0000000..7a2dd34 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/floor.src @@ -0,0 +1,114 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FLOOR.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /************************************************************************/ +; 8 #include +; 9 +; 10 double floor(double d) { +_floor: + LD HL,-4 + CALL __frameset +; 11 double fraction; +; 12 +; 13 if (d<0.0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_3 +; 14 d = -d; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 15 fraction = modf(d, (double *)&d); + PEA IX+6 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 16 if (fraction != 0.0) + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,0 + XOR A,A + CALL __fcmp + JR Z,L_1 +; 17 d += 1; + LD HL,8388608 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fadd + LD (IX+6),BC + LD (IX+9),A +L_1: +; 18 d = -d; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 19 } else { + JR L_4 +L_3: +; 20 fraction = modf(d, (double *)&d); + PEA IX+6 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 21 } +L_4: +; 22 return(d); + LD HL,(IX+6) + LD E,(IX+9) +; 23 } + LD SP,IX + POP IX + RET + + +;**************************** _floor *************************** +;Name Addr/Register Size Type +;_modf IMPORT ----- function +;fraction IX-4 4 variable +;d IX+6 4 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __fadd:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _floor + END diff --git a/frontends/calculator/CEdev/lib/static/fmod.src b/frontends/calculator/CEdev/lib/static/fmod.src new file mode 100644 index 0000000..0073ef7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/fmod.src @@ -0,0 +1,135 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FMOD.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /************************************************************************/ +; 8 #include +; 9 +; 10 /************************************************* +; 11 * +; 12 * fmod - modulo +; 13 * +; 14 * Inputs: +; 15 * x - dividend +; 16 * y - divisor +; 17 * +; 18 * Returns: +; 19 * x mod y +; 20 * +; 21 *************************************************/ +; 22 +; 23 double fmod(double x, double y) { +_fmod: + LD HL,-8 + CALL __frameset +; 24 double z; +; 25 double result; +; 26 +; 27 if (y == 0.0) { + LD HL,(IX+12) + LD E,(IX+15) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_1 + OR A,A +; 28 return 0; + SBC HL,HL + LD E,0 + JR L_5 +; 29 } +L_1: +; 30 +; 31 modf(x/y,&z); + PEA IX+-8 + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fdiv + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _modf + POP BC + POP BC + POP BC +; 32 result = x - z*y; + LD HL,(IX+12) + LD E,(IX+15) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD E,A + LD HL,BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD (IX+-4),BC + LD (IX+-1),A +; 33 +; 34 if ((x < 0) && (result > 0)) { + LD HL,(IX+6) + LD E,(IX+9) + XOR A,A + LD BC,0 + CALL __fcmp + JP P,L_4 + OR A,A + SBC HL,HL + LD E,0 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fcmp + JP P,L_4 +; 35 result = -result; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 36 } +L_4: +; 37 +; 38 return(result); + LD HL,(IX+-4) + LD E,(IX+-1) +; 39 } +L_5: + LD SP,IX + POP IX + RET + + +;**************************** _fmod *************************** +;Name Addr/Register Size Type +;_modf IMPORT ----- function +;z IX-8 4 variable +;result IX-4 4 variable +;y IX+12 4 parameter +;x IX+6 4 parameter + + +; Stack Frame Size: 26 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _fmod + END diff --git a/frontends/calculator/CEdev/lib/static/frexp.src b/frontends/calculator/CEdev/lib/static/frexp.src new file mode 100644 index 0000000..77df2d8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/frexp.src @@ -0,0 +1,141 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\FREXP.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */ +; 4 /* */ +; 5 /* San Jose, California */ +; 6 /* */ +; 7 /************************************************************************/ +; 8 +; 9 #include +; 10 +; 11 typedef union +; 12 { +; 13 float value; +; 14 unsigned long bits; +; 15 } Ieee754; +; 16 +; 17 enum +; 18 { // The IEEE 754 format is: +; 19 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM +; 20 // (with an implicit mantissa high-order 1-bit.) +; 21 mastissa_shift = 0, +; 22 mastissa_bits = 23, +; 23 exponent_bits = 8, +; 24 exponent_shift = mastissa_shift + mastissa_bits, +; 25 sign_shift = exponent_shift + exponent_bits, +; 26 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000 +; 27 exponent_max = (1 << exponent_bits) -1, +; 28 exponent_base = 127, +; 29 exponent_min = 0 +; 30 }; +; 31 +; 32 // frexp - Standard C library routine +; 33 // frexp returns the exponent and mantissa of its floating point +; 34 // argument. +; 35 // +; 36 // Arguments: +; 37 // value - the floating point argument +; 38 // pExponent - pointer to the returned exponent +; 39 // +; 40 // Returns: +; 41 // - a floating point number between 0.5 and 1.0 (or zero if +; 42 // the input argument is zero) +; 43 // +; 44 double frexp( double value, int *pExponent ) +; 45 { +_frexp: + LD HL,-8 + CALL __frameset +; 46 Ieee754 floating; +; 47 long exponentBits = 0; + LD BC,0 + LD (IX+-8),BC + XOR A,A + LD (IX+-5),A +; 48 +; 49 floating.value = value; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 50 if ( value != 0.0 ) + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR Z,L_2 +; 51 { +; 52 exponentBits = (floating.bits +; 53 & ((unsigned long) exponent_mask << exponent_shift)) +; 54 - ((exponent_base - 1L) << exponent_shift); + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,8388608 + LD A,127 + CALL __land + LD BC,0 + LD A,193 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 55 floating.bits -= exponentBits; // adjust exponent + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __lsub + LD (IX+-4),HL + LD (IX+-1),E +; 56 } +L_2: +; 57 if ( pExponent != 0 ) + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_3 +; 58 { +; 59 *pExponent = exponentBits >> exponent_shift; + LD BC,(IX+-8) + LD A,(IX+-5) + LD L,23 + CALL __lshrs + LD HL,(IX+12) + LD (HL),BC +; 60 } +L_3: +; 61 return floating.value; + LD HL,(IX+-4) + LD E,(IX+-1) +; 62 } + LD SP,IX + POP IX + RET + + +;**************************** _frexp *************************** +;Name Addr/Register Size Type +;exponentBits IX-8 4 variable +;floating IX-4 4 variable +;pExponent IX+12 3 parameter +;value IX+6 4 parameter + + +; Stack Frame Size: 23 (bytes) +; Spill Code: 0 (instruction) + + + XREF __ladd:ROM + XREF __lsub:ROM + XREF __land:ROM + XREF __lshrs:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XREF __icmpzero:ROM + XDEF _frexp + END diff --git a/frontends/calculator/CEdev/lib/static/ldexp.src b/frontends/calculator/CEdev/lib/static/ldexp.src new file mode 100644 index 0000000..a656d62 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ldexp.src @@ -0,0 +1,194 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\LDEXP.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 +; 12 typedef union +; 13 { +; 14 float value; +; 15 unsigned long bits; +; 16 } Ieee754; +; 17 +; 18 enum +; 19 { // The IEEE 754 format is: +; 20 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM +; 21 // (with an implicit mantissa high-order 1-bit.) +; 22 mastissa_shift = 0, +; 23 mastissa_bits = 23, +; 24 exponent_bits = 8, +; 25 exponent_shift = mastissa_shift + mastissa_bits, +; 26 sign_shift = exponent_shift + exponent_bits, +; 27 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000 +; 28 exponent_max = (1 << exponent_bits) -1, +; 29 exponent_base = 127, +; 30 exponent_min = 0 +; 31 }; +; 32 +; 33 // ldexp - Standard C library routine +; 34 // ldexp returns the argument multiplied by an integral (positive or +; 35 // negative) power of two. +; 36 // +; 37 // Arguments: +; 38 // value - the floating point argument +; 39 // power - the power of two to be used +; 40 // +; 41 // Returns: +; 42 // - the argument multiplied by an integral power of two +; 43 // +; 44 double ldexp( double value, int power ) +; 45 { +_ldexp: + LD HL,-14 + CALL __frameset +; 46 Ieee754 floating; +; 47 int exponent; +; 48 int powerplusexponent; +; 49 +; 50 if ( value == 0.0 ) return 0; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_1 + OR A,A + SBC HL,HL + LD E,0 + JR L_10 +L_1: +; 51 +; 52 floating.value = value; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 53 exponent = (floating.bits >> exponent_shift) & exponent_mask; + LD L,23 + CALL __lshru + LD HL,BC + LD A,L + UEXT HL + LD L,A + LD (IX+-10),HL +; 54 powerplusexponent = power + exponent; + LD BC,(IX+12) + ADD HL,BC + LD (IX+-7),HL +; 55 +; 56 if ( powerplusexponent > exponent_max ) + LD BC,HL + LD HL,255 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_8 +; 57 { +; 58 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 59 return (floating.bits & (1L << sign_shift)) == 0 ? HUGE_VAL : - HUGE_VAL; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,0 + LD A,128 + CALL __land + CALL __lcmpzero + JR NZ,L_4 + LD BC,(__huge_val) + LD A,(__huge_val+3) + LD (IX+-14),BC + LD (IX+-11),A + JR L_5 +L_4: + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD (IX+-14),BC + LD (IX+-11),A +L_5: + LD HL,(IX+-14) + LD E,(IX+-11) + JR L_10 +; 60 } +L_8: +; 61 if ( powerplusexponent <= exponent_min ) // CR 3964 + LD BC,(IX+-7) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_9 +; 62 { +; 63 errno = ERANGE; + LD BC,5 + LD (_errno),BC + OR A,A +; 64 return 0.0; + SBC HL,HL + LD E,0 + JR L_10 +; 65 } +L_9: +; 66 floating.bits += (long) power << exponent_shift; // adjust exponent + LD BC,(IX+12) + CALL __itol + LD L,23 + CALL __lshl + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __ladd + LD (IX+-4),HL + LD (IX+-1),E +; 67 return floating.value; + LD HL,(IX+-4) + LD E,(IX+-1) +; 68 } +L_10: + LD SP,IX + POP IX + RET + + +;**************************** _ldexp *************************** +;Name Addr/Register Size Type +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;temp2 IX-14 4 variable +;exponent IX-10 3 variable +;powerplusexponent IX-7 3 variable +;floating IX-4 4 variable +;power IX+12 3 parameter +;value IX+6 4 parameter + + +; Stack Frame Size: 29 (bytes) +; Spill Code: 0 (instruction) + + + XREF __huge_val:ROM + XREF _errno:ROM + XREF __ladd:ROM + XREF __land:ROM + XREF __lshl:ROM + XREF __lshru:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __lcmpzero:ROM + XDEF _ldexp + END diff --git a/frontends/calculator/CEdev/lib/static/log.src b/frontends/calculator/CEdev/lib/static/log.src new file mode 100644 index 0000000..e84217b --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/log.src @@ -0,0 +1,233 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\LOG.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1999-2008 by Zilog, Inc. */ +; 4 /* */ +; 5 /************************************************************************/ +; 6 /* +; 7 log returns the natural logarithm of its floating +; 8 point argument. +; 9 +; 10 The coefficients are #2705 from Hart & Cheney. (19.38D) +; 11 +; 12 It calls frexp. +; 13 */ +; 14 +; 15 #include +; 16 #include +; 17 +; 18 #define log2 0.693147180559945e0 +; 19 #define ln10 2.30258509299404 +; 20 #define sqrto2 0.707106781186548e0 +; 21 #define p0 -0.240139179559211e2 +; 22 #define p1 0.309572928215377e2 +; 23 #define p2 -0.963769093368687e1 +; 24 #define p3 0.421087371217980e0 +; 25 #define q0 -0.120069589779605e2 +; 26 #define q1 0.194809660700890e2 +; 27 #define q2 -0.891110902798312e1 +; 28 +; 29 double log( double arg ) +; 30 { +_log: + LD HL,-27 + CALL __frameset + OR A,A +; 31 double x,z, zsq, temp; +; 32 int exp; +; 33 +; 34 if ( arg <= 0.0 ){ + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP M,L_1 +; 35 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 36 return -HUGE_VAL; + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD E,A + LD HL,BC + JR L_5 +; 37 } +L_1: +; 38 x = frexp( arg, & exp ); + PEA IX+-15 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _frexp + POP BC + POP BC + POP BC + LD (IX+-8),HL + LD (IX+-5),E +; 39 if ( x < sqrto2 ){ + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,3474675 + LD A,63 + CALL __fcmp + JP P,L_4 + OR A,A +; 40 x *= 2; + SBC HL,HL + LD E,64 + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A +; 41 exp--; + LD BC,(IX+-15) + DEC BC + LD (IX+-15),BC +; 42 } +L_4: +; 43 +; 44 z = (x-1)/(x+1); + LD HL,8388608 + LD E,63 + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fsub + LD (IX+-27),BC + LD (IX+-24),A + LD A,(IX+-5) + LD BC,(IX+-8) + LD HL,8388608 + LD E,63 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-27) + LD A,(IX+-24) + CALL __fdiv + LD (IX+-19),BC + LD (IX+-16),A +; 45 zsq = z*z; + LD E,(IX+-16) + LD A,(IX+-16) + LD HL,BC + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 46 +; 47 temp = ((p3*zsq + p2)*zsq + p1)*zsq + p0; + LD HL,14129348 + LD E,62 + CALL __fmul + LD HL,1717243 + LD E,193 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,16230537 + LD E,65 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,12590209 + LD E,193 + CALL __fadd + LD (IX+-12),BC + LD (IX+-9),A +; 48 temp = temp/(((1.0*zsq + q2)*zsq + q1)*zsq + q0); + LD BC,(IX+-4) + LD A,(IX+-1) + LD HL,955367 + LD E,193 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,10213637 + LD E,65 + CALL __fadd + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD HL,4201601 + LD E,193 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fdiv + LD (IX+-12),BC + LD (IX+-9),A +; 49 temp = temp*z + exp*log2; + LD HL,(IX+-19) + LD E,(IX+-16) + LD A,(IX+-9) + CALL __fmul + LD (IX+-23),BC + LD BC,(IX+-15) + LD (IX+-20),A + CALL __itol + CALL __ltof + LD HL,3240472 + LD E,63 + CALL __fmul + LD E,A + LD HL,BC + LD BC,(IX+-23) + LD A,(IX+-20) + CALL __fadd + LD (IX+-12),BC + LD (IX+-9),A +; 50 return temp; + LD E,(IX+-9) + LD HL,BC +; 51 } +L_5: + LD SP,IX + POP IX + RET + + +;**************************** _log *************************** +;Name Addr/Register Size Type +;_frexp IMPORT ----- function +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;z IX-19 4 variable +;exp IX-15 3 variable +;temp IX-12 4 variable +;x IX-8 4 variable +;zsq IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 39 (bytes) +; Spill Code: 0 (instruction) + + + XREF _frexp:ROM + XREF __huge_val:ROM + XREF _errno:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XDEF _log + END diff --git a/frontends/calculator/CEdev/lib/static/log10.src b/frontends/calculator/CEdev/lib/static/log10.src new file mode 100644 index 0000000..e0f7265 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/log10.src @@ -0,0 +1,48 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\LOG10.C" + .assume ADL=1 + SEGMENT CODE +; 1 #include +; 2 +; 3 double log10(double x) { +_log10: + CALL __frameset0 +; 4 return log(x) / M_LN10; + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _log + POP BC + POP BC + LD BC,HL + LD HL,1269134 + LD A,E + LD E,64 + CALL __fdiv + LD E,A + LD HL,BC +; 5 } + LD SP,IX + POP IX + RET + + +;**************************** _log10 *************************** +;Name Addr/Register Size Type +;_log IMPORT ----- function +;x IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _log:ROM + XREF __fdiv:ROM + XREF __frameset0:ROM + XDEF _log10 + END diff --git a/frontends/calculator/CEdev/lib/static/modf.src b/frontends/calculator/CEdev/lib/static/modf.src new file mode 100644 index 0000000..6172da4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/modf.src @@ -0,0 +1,166 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\MODF.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 #include +; 11 +; 12 typedef union { +; 13 float value; +; 14 unsigned long bits; +; 15 } Ieee754; +; 16 +; 17 enum +; 18 { // The IEEE 754 format is: +; 19 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM +; 20 // (with an implicit mantissa high-order 1-bit.) +; 21 mastissa_shift = 0, +; 22 mastissa_bits = 23, +; 23 exponent_bits = 8, +; 24 exponent_shift = mastissa_shift + mastissa_bits, +; 25 sign_shift = exponent_shift + exponent_bits, +; 26 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000 +; 27 exponent_max = (1 << exponent_bits) -1, +; 28 exponent_base = 127, +; 29 exponent_min = 0 +; 30 }; +; 31 +; 32 /* modf - Standard C library routine +; 33 * modf returns the integral and fractional components of its +; 34 * floating point argument. +; 35 * +; 36 * Arguments: +; 37 * value - the floating point argument +; 38 * pIntegral - pointer to the returned integral component +; 39 * +; 40 * Returns: +; 41 * - the fractional component +; 42 */ +; 43 double modf( double value, double *pIntegral ) { +_modf: + LD HL,-7 + CALL __frameset +; 44 Ieee754 integral; +; 45 int exponent; +; 46 +; 47 integral.value = value; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 48 frexp( value, &exponent); + PEA IX+-7 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _frexp + POP BC + POP BC + POP BC +; 49 if ( exponent <= 0 ) { // set integral portion to zero + LD BC,(IX+-7) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_2 +; 50 integral.bits = 0; + LD BC,0 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A +; 51 } else if ( exponent <= mastissa_bits ) { // mask out fractional portion + JR L_4 +L_2: + LD BC,(IX+-7) + LD HL,23 + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_4 +; 52 integral.bits &= -1L << (mastissa_bits - exponent + 1); + LD HL,23 + LD BC,(IX+-7) + OR A,A + SBC HL,BC + INC HL + LD BC,HL + CALL __itol + LD HL,BC + LD BC,16777215 + LD A,255 + CALL __lshl + LD E,A + LD HL,BC + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __land + LD (IX+-4),HL + LD (IX+-1),E +; 53 } +L_4: +; 54 if ( pIntegral != 0 ) { + LD HL,(IX+12) + CALL __icmpzero + JR Z,L_5 +; 55 *pIntegral = integral.value; + LD HL,(IX+12) + LD BC,(IX+-4) + LD A,(IX+-1) + LD (HL),BC + INC HL + INC HL + INC HL + LD (HL),A +; 56 } +L_5: +; 57 return value - integral.value; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fsub + LD E,A + LD HL,BC +; 58 } + LD SP,IX + POP IX + RET + + +;**************************** _modf *************************** +;Name Addr/Register Size Type +;_frexp IMPORT ----- function +;exponent IX-7 3 variable +;integral IX-4 4 variable +;pIntegral IX+12 3 parameter +;value IX+6 4 parameter + + +; Stack Frame Size: 22 (bytes) +; Spill Code: 0 (instruction) + + + XREF _frexp:ROM + XREF __land:ROM + XREF __lshl:ROM + XREF __fsub:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XDEF _modf + END diff --git a/frontends/calculator/CEdev/lib/static/pow.src b/frontends/calculator/CEdev/lib/static/pow.src new file mode 100644 index 0000000..b9a8c19 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/pow.src @@ -0,0 +1,187 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\POW.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 #include +; 11 #include +; 12 +; 13 double pow( double arg1, double arg2 ) { +_pow: + LD HL,-8 + CALL __frameset + OR A,A +; 14 double result; +; 15 long temp; +; 16 +; 17 if ( arg1 > 0.0 ){ + SBC HL,HL + LD E,0 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_8 +; 18 return exp( arg2 * log( arg1 ) ); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _log + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+12) + LD E,(IX+15) + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _exp + POP BC + POP BC + JR L_12 +; 19 } +L_8: +; 20 if ( arg1 < 0.0 ){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_10 +; 21 temp = arg2; +; 22 if ( temp == arg2 ){ + LD BC,(IX+12) + LD A,(IX+15) + CALL __ftol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+12) + LD A,(IX+15) + CALL __fcmp + JR NZ,L_6 +; 23 result = exp( arg2 * log( -arg1 ) ); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _log + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+12) + LD E,(IX+15) + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _exp + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 24 return temp & 1 ? -result : result; + LD BC,(IX+12) + LD A,(IX+15) + CALL __ftol + LD A,C + AND A,1 + UEXT HL + LD L,A + LD E,H + CALL __lcmpzero + JR Z,L_3 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-8),BC + LD (IX+-5),A + JR L_4 +L_3: + LD BC,(IX+-4) + LD A,(IX+-1) + LD (IX+-8),BC + LD (IX+-5),A +L_4: + LD HL,(IX+-8) + LD E,(IX+-5) + JR L_12 +; 25 } +L_6: +; 26 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 27 } +L_10: + OR A,A +; 28 if ( arg2 <= 0.0 ){ + SBC HL,HL + LD E,0 + LD BC,(IX+12) + LD A,(IX+15) + CALL __fcmp + JP M,L_11 +; 29 errno = EDOM; + LD BC,4 + LD (_errno),BC +; 30 } +L_11: + OR A,A +; 31 return 0.0; + SBC HL,HL +; 32 } +L_12: + LD SP,IX + POP IX + RET + + +;**************************** _pow *************************** +;Name Addr/Register Size Type +;_errno IMPORT 3 variable +;_log IMPORT ----- function +;_exp IMPORT ----- function +;temp1 IX-8 4 variable +;result IX-4 4 variable +;arg2 IX+12 4 parameter +;arg1 IX+6 4 parameter + + +; Stack Frame Size: 26 (bytes) +; Spill Code: 0 (instruction) + + + XREF _log:ROM + XREF _exp:ROM + XREF _errno:ROM + XREF __fmul:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __ltof:ROM + XREF __frameset:ROM + XREF __lcmpzero:ROM + XDEF _pow + END diff --git a/frontends/calculator/CEdev/lib/static/sin.src b/frontends/calculator/CEdev/lib/static/sin.src new file mode 100644 index 0000000..8929126 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sin.src @@ -0,0 +1,340 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\SIN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C) 1999-2008 by Zilog, Inc. */ +; 4 /* */ +; 5 /************************************************************************/ +; 6 /* +; 7 C program for floating point sin/cos. +; 8 Calls modf. +; 9 There are no error exits. +; 10 Coefficients are #3370 from Hart & Cheney (18.80D). +; 11 */ +; 12 #include +; 13 +; 14 +; 15 #define twoopi 0.636619772367581 +; 16 #define p0 0.135788409787738e8 +; 17 #define p1 -0.494290810090284e7 +; 18 #define p2 0.440103053537527e6 +; 19 #define p3 -0.138472724998245e5 +; 20 #define p4 0.145968840666577e3 +; 21 #define q0 0.864455865292253e7 +; 22 #define q1 0.408179225234330e6 +; 23 #define q2 0.946309610153821e4 +; 24 #define q3 0.132653490878614e3 +; 25 +; 26 double sinus(double,int); +; 27 +; 28 double sin(double arg) { +_sin: + CALL __frameset0 +; 29 return(sinus(arg, 0)); + LD BC,0 + PUSH BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _sinus + POP BC + POP BC + POP BC +; 30 } + LD SP,IX + POP IX + RET + + +;**************************** _sin *************************** +;Name Addr/Register Size Type +;_sinus IMPORT ----- function +;arg IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + +; 31 +; 32 double sinus(double arg, int quad) +; 33 { +_sinus: + LD HL,-28 + CALL __frameset +; 34 double e, f; +; 35 int k; +; 36 double ysq; +; 37 double x,y; +; 38 double temp1, temp2; +; 39 +; 40 x = arg; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-4),BC + LD (IX+-1),A +; 41 if(x<0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_2 +; 42 x = -x; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 43 quad = quad + 2; + LD IY,(IX+12) + LEA IY,IY+2 + LD (IX+12),IY +; 44 } +L_2: +; 45 x = x*twoopi; /*underflow?*/ + LD HL,2292099 + LD E,63 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 46 if(x>32764){ + LD HL,16775168 + LD E,70 + CALL __fcmp + JP P,L_4 +; 47 y = modf(x,&e); + PEA IX+-16 + LD C,(IX+-1) + LD B,0 + PUSH BC + LD BC,(IX+-4) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-12),HL + LD (IX+-9),E +; 48 e = e + quad; + LD BC,(IX+12) + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-16) + LD A,(IX+-13) + CALL __fadd + LD (IX+-16),BC + LD (IX+-13),A +; 49 modf(0.25*e,&f); + PEA IX+-20 + LD A,(IX+-13) + LD HL,8388608 + LD E,62 + CALL __fmul + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _modf + POP BC + POP BC + POP BC +; 50 quad = e - 4*f; + LD BC,(IX+-20) + LD A,(IX+-17) + LD HL,8388608 + LD E,64 + CALL __fmul + LD E,A + LD HL,BC + LD BC,(IX+-16) + LD A,(IX+-13) + CALL __fsub + CALL __ftol + LD (IX+12),BC +; 51 }else{ + JR L_6 +L_4: +; 52 k = x; +; 53 y = x - k; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __ftol + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fsub + LD (IX+-12),BC + LD (IX+-9),A +; 54 quad = (quad + k) & 03; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __ftol + LD HL,BC + LD BC,(IX+12) + ADD HL,BC + LD A,L + AND A,3 + UEXT HL + LD L,A + LD (IX+12),HL +; 55 } +L_6: +; 56 if (quad & 01) + LD A,(IX+12) + AND A,1 + UEXT HL + LD L,A + CALL __icmpzero + JR Z,L_8 +; 57 y = 1-y; + LD HL,(IX+-12) + LD E,(IX+-9) + LD BC,8388608 + LD A,63 + CALL __fsub + LD (IX+-12),BC + LD (IX+-9),A +L_8: +; 58 if(quad > 1) + LD BC,(IX+12) + LD HL,1 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_9 +; 59 y = -y; + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fneg + LD (IX+-12),BC + LD (IX+-9),A +L_9: +; 60 +; 61 ysq = y*y; + LD HL,(IX+-12) + LD E,(IX+-9) + LD BC,(IX+-12) + LD A,(IX+-9) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A +; 62 temp1 = ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y; + LD HL,1177606 + LD E,67 + CALL __fmul + LD HL,5790999 + LD E,198 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,14083298 + LD E,72 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,9885816 + LD E,202 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,5190233 + LD E,75 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD (IX+-24),BC + LD (IX+-21),A +; 63 temp2 = ((((ysq+q3)*ysq+q2)*ysq+q1)*ysq+q0); + LD BC,(IX+-8) + LD A,(IX+-5) + LD HL,304971 + LD E,67 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,1301602 + LD E,70 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,13061735 + LD E,72 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,255951 + LD E,75 + CALL __fadd + LD (IX+-28),BC + LD (IX+-25),A +; 64 return(temp1/temp2); + LD HL,BC + LD BC,(IX+-24) + LD E,(IX+-25) + LD A,(IX+-21) + CALL __fdiv + LD E,A + LD HL,BC +; 65 } + LD SP,IX + POP IX + RET + + +;**************************** _sinus *************************** +;Name Addr/Register Size Type +;_modf IMPORT ----- function +;temp2 IX-28 4 variable +;temp1 IX-24 4 variable +;f IX-20 4 variable +;e IX-16 4 variable +;y IX-12 4 variable +;ysq IX-8 4 variable +;x IX-4 4 variable +;quad IX+12 3 parameter +;arg IX+6 4 parameter + + +; Stack Frame Size: 43 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset0:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XDEF _sinus + XDEF _sin + END diff --git a/frontends/calculator/CEdev/lib/static/sinh.src b/frontends/calculator/CEdev/lib/static/sinh.src new file mode 100644 index 0000000..79f6da9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sinh.src @@ -0,0 +1,377 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\SINH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 /* +; 10 sinh(arg) returns the hyperbolic sine of its floating- +; 11 point argument. +; 12 +; 13 The exponential function is called for arguments +; 14 greater in magnitude than 0.5. +; 15 +; 16 A series is used for arguments smaller in magnitude than 0.5. +; 17 The coefficients are #2029 from Hart & Cheney. (20.36D) +; 18 +; 19 cosh(arg) is computed from the exponential function for +; 20 all arguments. +; 21 */ +; 22 +; 23 #include +; 24 +; 25 #define p0 -0.630767364049772e+6 +; 26 #define p1 -0.899127202203951e+5 +; 27 #define p2 -0.289421135598956e+4 +; 28 #define p3 -0.263056321339750e+2 +; 29 #define q0 -0.630767364049772e+6 +; 30 #define q1 0.152151737879002e+5 +; 31 #define q2 -0.173678953558234e+3 +; 32 +; 33 double sinh(double arg) { +_sinh: + LD HL,-24 + CALL __frameset +; 34 double temp, argsq; +; 35 register int sign; +; 36 +; 37 sign = 1; + LD BC,1 + LD (IX+-11),BC +; 38 if(arg < 0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_4 +; 39 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 40 sign = -1; + LD BC,16777215 + LD (IX+-11),BC +; 41 } +L_4: +; 42 +; 43 if(arg > 21.) { + LD HL,11010048 + LD E,65 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_6 +; 44 temp = exp(arg)/2; + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _exp + POP BC + POP BC + LD A,E + LD BC,HL + OR A,A + SBC HL,HL + LD E,64 + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 45 if (sign>0) + LD BC,(IX+-11) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_2 +; 46 return(temp); + LD HL,(IX+-4) + LD E,(IX+-1) + JR L_8 +; 47 else +L_2: +; 48 return(-temp); + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD E,A + LD HL,BC + JR L_8 +; 49 } +L_6: + OR A,A +; 50 +; 51 if(arg > 0.5) { + SBC HL,HL + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_7 +; 52 return(sign*(exp(arg) - exp(-arg))/2); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _exp + POP BC + POP BC + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+-14),HL ; spill + LD (IX+-17),BC ; spill + LD HL,(IX+-14) ; unspill + LD C,A + LD B,0 + PUSH BC + LD (IX+-14),HL ; spill + LD HL,(IX+-17) ; unspill + PUSH HL + LD HL,(IX+-14) ; unspill + LD BC,HL + LD A,E + LD (IX+-23),BC + LD (IX+-24),A + CALL _exp + LD BC,(IX+-23) + LD A,(IX+-24) + POP IY + POP IY + CALL __fsub + LD (IX+-20),BC + LD BC,(IX+-11) + LD H,A + CALL __itol + CALL __ltof + LD E,A + LD A,H + LD HL,BC + LD BC,(IX+-20) + CALL __fmul + OR A,A + SBC HL,HL + LD E,64 + CALL __fdiv + LD E,A + LD HL,BC + JR L_8 +; 53 } +L_7: +; 54 +; 55 argsq = arg*arg; + LD HL,(IX+6) + LD E,(IX+9) + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+-8),BC + LD (IX+-5),A +; 56 temp = (((p3*argsq+p2)*argsq+p1)*argsq+p0)*arg; + LD HL,13791727 + LD E,193 + CALL __fmul + LD HL,3466082 + LD E,197 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,11508828 + LD E,199 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,1703670 + LD E,201 + CALL __fadd + LD HL,(IX+6) + LD E,(IX+9) + CALL __fmul + LD (IX+-4),BC + LD (IX+-1),A +; 57 temp /= (((argsq+q2)*argsq+q1)*argsq+q0); + LD BC,(IX+-8) + LD A,(IX+-5) + LD HL,2993616 + LD E,195 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,7191730 + LD E,70 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD HL,1703670 + LD E,201 + CALL __fadd + LD E,A + LD A,(IX+-1) + LD HL,BC + LD BC,(IX+-4) + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 58 return(sign*temp); + LD BC,(IX+-11) + CALL __itol + CALL __ltof + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD E,A + LD HL,BC +; 59 } +L_8: + LD SP,IX + POP IX + RET + + +;**************************** _sinh *************************** +;Name Addr/Register Size Type +;_exp IMPORT ----- function +;sign IX-11 3 variable +;argsq IX-8 4 variable +;temp IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 36 (bytes) +; Spill Code: 0 (instruction) + + +; 60 +; 61 double cosh(double arg) { +_cosh: + LD HL,-4 + CALL __frameset +; 62 double val; +; 63 +; 64 if(arg < 0) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_10 +; 65 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 66 } +L_10: +; 67 +; 68 val = exp(arg); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _exp + POP BC + POP BC + LD (IX+-4),HL + LD (IX+-1),E +; 69 +; 70 if(arg > 21.) { + LD E,65 + LD BC,(IX+6) + LD A,(IX+9) + LD HL,11010048 + CALL __fcmp + JP P,L_12 + OR A,A +; 71 return(val/2); + SBC HL,HL + LD E,64 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fdiv + LD E,A + LD HL,BC + JR L_13 +; 72 } +L_12: +; 73 +; 74 val += exp(-arg); + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD DE,BC + LD C,A + LD B,0 + PUSH BC + PUSH DE + CALL _exp + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fadd + LD (IX+-4),BC + LD (IX+-1),A + OR A,A +; 75 val /= 2; + SBC HL,HL + LD E,64 + CALL __fdiv + LD (IX+-4),BC + LD (IX+-1),A +; 76 return(val); + LD E,(IX+-1) + LD HL,BC +; 77 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _cosh *************************** +;Name Addr/Register Size Type +;_exp IMPORT ----- function +;val IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 16 (bytes) +; Spill Code: 0 (instruction) + + + XREF _exp:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XDEF _cosh + XDEF _sinh + END diff --git a/frontends/calculator/CEdev/lib/static/sqrt.src b/frontends/calculator/CEdev/lib/static/sqrt.src new file mode 100644 index 0000000..7a20210 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sqrt.src @@ -0,0 +1,83 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\SQRT.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 +; 10 #include +; 11 #include +; 12 +; 13 extern double sqrtf( double value ); +; 14 +; 15 // sqrt - Standard C library routine +; 16 // sqrt returns the square root of its floating point argument. +; 17 // +; 18 // Arguments: +; 19 // value - the floating point argument +; 20 // +; 21 // Returns: +; 22 // - the square root (or zero if the argument is negative) +; 23 // +; 24 +; 25 double sqrt( double value ) { +_sqrt: + CALL __frameset0 +; 26 if ( value < 0.0 ) { + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_1 +; 27 errno = EDOM; + LD BC,4 + LD (_errno),BC + OR A,A +; 28 return 0.0; + SBC HL,HL + LD E,0 + JR L_2 +; 29 } +L_1: +; 30 return sqrtf( value ); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _sqrtf + POP BC + POP BC +; 31 } +L_2: + LD SP,IX + POP IX + RET + + +;**************************** _sqrt *************************** +;Name Addr/Register Size Type +;_sqrtf IMPORT ----- function +;_errno IMPORT 3 variable +;value IX+6 4 parameter + + +; Stack Frame Size: 12 (bytes) +; Spill Code: 0 (instruction) + + + XREF _sqrtf:ROM + XREF _errno:ROM + XREF __fcmp:ROM + XREF __frameset0:ROM + XDEF _sqrt + END diff --git a/frontends/calculator/CEdev/lib/static/strtod.src b/frontends/calculator/CEdev/lib/static/strtod.src new file mode 100644 index 0000000..c879f1d --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/strtod.src @@ -0,0 +1,534 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\STRTOD.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 #include +; 10 #include +; 11 #include +; 12 #include +; 13 #include +; 14 #include +; 15 #include +; 16 //#include +; 17 +; 18 +; 19 /************************************************* +; 20 * +; 21 * strtod - string to double conversion +; 22 * +; 23 * Inputs: +; 24 * str - pointer to the character string +; 25 * endptr - pointer to pointer to char to +; 26 * put address of first char past +; 27 * the end of the string -- or NULL +; 28 * Returns: +; 29 * the value of the number +; 30 * +; 31 *************************************************/ +; 32 double strtod(char * str,char ** endptr) +; 33 { +_strtod: + LD HL,-23 + CALL __frameset +; 34 union +; 35 { +; 36 double d; +; 37 unsigned short s[2]; +; 38 }val; +; 39 int frac = 0; + LD BC,0 + LD (IX+-12),BC +; 40 int exp = 0; + LD (IX+-7),BC +; 41 signed char sign = 1; + LD (IX+-9),1 +; 42 signed char exp_sign = 1; + LD (IX+-8),1 +; 43 double temp; +; 44 +; 45 while (isspace(*str)) + JR L_0 +L_1: +; 46 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_0: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + PUSH HL + CALL _isspace + POP BC + CALL __icmpzero + JR NZ,L_1 +; 47 +; 48 if (*str == '-') { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,45 + SBC HL,BC + JR NZ,L_4 +; 49 sign = -1; + LD (IX+-9),255 +; 50 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 51 } +; 52 else if (*str == '+') + JR L_6 +L_4: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,43 + SBC HL,BC + JR NZ,L_6 +; 53 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +L_6: +; 54 +; 55 val.d = 0; + LD BC,0 + LD (IX+-4),BC + XOR A,A + LD (IX+-1),A +; 56 while (*str >= '0' && *str <= '9') { + JR L_8 +L_9: +; 57 val.d = val.d * 10 + (*str - '0'); + LD HL,2097152 + LD E,65 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-20),A + LD HL,(IX+6) + LD A,(HL) + LD D,A + SEXT HL + LD L,D + LD IY,HL + LD (IX+-23),BC + LEA BC,IY+-48 + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-23) + LD A,(IX+-20) + CALL __fadd + LD (IX+-4),BC + LD (IX+-1),A +; 58 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 59 } +L_8: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + CALL __setflag + JP M,L_14 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,57 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_9 +L_14: +; 60 +; 61 if (*str == '.') { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,46 + SBC HL,BC + JR NZ,L_24 +; 62 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 63 while (*str >= '0' && *str <= '9') { + JR L_11 +L_12: +; 64 val.d = val.d * 10 + (*str - '0'); + LD HL,2097152 + LD E,65 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-16),A + LD HL,(IX+6) + LD A,(HL) + LD D,A + SEXT HL + LD L,D + LD IY,HL + LD (IX+-19),BC + LEA BC,IY+-48 + CALL __itol + CALL __ltof + LD E,A + LD HL,BC + LD BC,(IX+-19) + LD A,(IX+-16) + CALL __fadd + LD (IX+-4),BC + LD (IX+-1),A +; 65 ++frac; + LD BC,(IX+-12) + INC BC + LD (IX+-12),BC +; 66 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 67 } +L_11: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + CALL __setflag + JP M,L_24 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,57 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_12 +; 68 } +L_24: +; 69 +; 70 if (*str == 'e' || *str == 'E') { + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,101 + SBC HL,BC + JR Z,L_23 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,69 + SBC HL,BC + JR NZ,L_26 +L_23: +; 71 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 72 if (*str == '-') { + LD HL,BC + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,45 + SBC HL,BC + JR NZ,L_18 +; 73 exp_sign = -1; + LD (IX+-8),255 +; 74 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 75 } +; 76 else if (*str == '+') { + JR L_20 +L_18: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,43 + SBC HL,BC + JR NZ,L_20 +; 77 exp_sign = 1; + LD (IX+-8),1 +; 78 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 79 } +; 80 while (*str >= '0' && *str <= '9') { + JR L_20 +L_21: +; 81 exp = exp * 10 + (*str - '0'); + LD HL,(IX+-7) + LD A,10 + CALL __imul_b + LD IY,(IX+6) + LD A,(IY) + LD B,A + LD DE,HL + SEXT HL + LD L,B + LD IY,HL + LEA BC,IY+-48 + LD HL,DE + ADD HL,BC + LD (IX+-7),HL +; 82 ++str; + LD BC,(IX+6) + INC BC + LD (IX+6),BC +; 83 } +L_20: + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + OR A,A + LD BC,48 + SBC HL,BC + CALL __setflag + JP M,L_26 + LD HL,(IX+6) + LD A,(HL) + LD B,A + SEXT HL + LD L,B + LD BC,HL + LD HL,57 + OR A,A + SBC HL,BC + CALL __setflag + JP P,L_21 +; 84 } +L_26: +; 85 +; 86 if (endptr) + LD HL,(IX+9) + CALL __icmpzero + JR Z,L_28 +; 87 *endptr = str; + LD HL,(IX+9) + LD BC,(IX+6) + LD (HL),BC +L_28: +; 88 +; 89 if (exp_sign < 0 ) + LD A,(IX+-8) + OR A,A + JP P,L_29 +; 90 exp = -exp; + LD HL,(IX+-7) + CALL __ineg + LD (IX+-7),HL +L_29: +; 91 exp -= frac; + LD BC,(IX+-12) + LD HL,(IX+-7) + OR A,A + SBC HL,BC + LD (IX+-7),HL +; 92 if (val.d != 0) + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_32 + JR L_42 +; 93 { +; 94 while (exp > 0 ) +L_33: +; 95 { +; 96 val.d *= 10.0; + LD HL,2097152 + LD E,65 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-4),BC +; 97 if (val.s[1] == 0x7f80) + LEA HL,IX+-2 + LD (IX+-1),A + LD BC,(HL) + CALL __stoiu + OR A,A + LD BC,32640 + SBC HL,BC + JR NZ,L_31 +; 98 { +; 99 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 100 val.d = HUGE_VAL; + LD BC,(__huge_val) + LD A,(__huge_val+3) + LD (IX+-4),BC + LD (IX+-1),A +; 101 break; + JR L_36 +; 102 } +L_31: +; 103 --exp; + LD BC,(IX+-7) + DEC BC + LD (IX+-7),BC +; 104 } +L_32: + LD BC,(IX+-7) + OR A,A + SBC HL,HL + OR A,A + SBC HL,BC + CALL __setflag + JP M,L_33 +; 105 while (exp < 0 ) + JR L_36 +L_37: +; 106 { +; 107 val.d *= .1; + LD HL,13421773 + LD E,61 + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD (IX+-4),BC +; 108 if (val.s[1] == 0) + LEA HL,IX+-2 + LD (IX+-1),A + LD HL,(HL) + CALL __scmpzero + JR NZ,L_35 +; 109 { +; 110 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 111 break; + JR L_40 +; 112 } +L_35: +; 113 ++exp; + LD BC,(IX+-7) + INC BC + LD (IX+-7),BC +; 114 } +L_36: + LD HL,(IX+-7) + CALL __icmpzero + CALL __setflag + JP M,L_37 +L_40: +; 115 if (sign < 0 ) + LD A,(IX+-9) + OR A,A + JP P,L_42 +; 116 val.s[1] |= 0x8000; + LEA IY,IX+-2 + LD (IX+-15),IY + LD HL,(IX+-15) + LD HL,(HL) + LD.LIS BC,32768 + CALL __sor + LD BC,HL + LD HL,(IX+-15) + LD (HL),C + INC HL + LD (HL),B +; 117 } +L_42: +; 118 return val.d; + LD HL,(IX+-4) + LD E,(IX+-1) +; 119 } + LD SP,IX + POP IX + RET + + +;**************************** _strtod *************************** +;Name Addr/Register Size Type +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;_isspace IMPORT ----- function +;frac IX-12 3 variable +;sign IX-9 1 variable +;exp_sign IX-8 1 variable +;exp IX-7 3 variable +;val IX-4 4 variable +;endptr IX+9 3 parameter +;str IX+6 3 parameter + + +; Stack Frame Size: 35 (bytes) +; Spill Code: 0 (instruction) + + + XREF _errno:ROM + XREF _isspace:ROM + XREF __huge_val:ROM + XREF __ineg:ROM + XREF __sor:ROM + XREF __fadd:ROM + XREF __fmul:ROM + XREF __fcmp:ROM + XREF __ltof:ROM + XREF __stoiu:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __scmpzero:ROM + XREF __icmpzero:ROM + XREF __imul_b:ROM + XDEF _strtod + END diff --git a/frontends/calculator/CEdev/lib/static/tan.src b/frontends/calculator/CEdev/lib/static/tan.src new file mode 100644 index 0000000..e921da1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/tan.src @@ -0,0 +1,330 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\TAN.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 /* +; 10 floating point tangent +; 11 +; 12 A series is used after range reduction. +; 13 Coefficients are #4285 from Hart & Cheney. (19.74D) +; 14 */ +; 15 +; 16 #include +; 17 #include +; 18 +; 19 #define invpi 1.27323954473516 +; 20 #define p0 -0.130682026475483e+5 +; 21 #define p1 0.105597090171495e+4 +; 22 #define p2 -0.155068565348327e+2 +; 23 #define p3 0.342255438724100e-1 +; 24 #define p4 0.338663864267717e-4 +; 25 #define q0 -0.166389523894712e+5 +; 26 #define q1 0.476575136291648e+4 +; 27 #define q2 -0.155503316403171e+3 +; 28 +; 29 double tan(double arg) +; 30 { +_tan: + LD HL,-26 + CALL __frameset +; 31 double sign, temp, e, x, xsq; +; 32 int flag, i; +; 33 +; 34 flag = 0; + LD BC,0 + LD (IX+-19),BC +; 35 sign = 1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,63 + LD (IX+-1),A +; 36 if(arg < 0.){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_1 +; 37 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 38 sign = -1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,191 + LD (IX+-1),A +; 39 } +L_1: +; 40 arg = arg*invpi; /*overflow?*/ + LD HL,10680707 + LD E,63 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fmul + LD (IX+6),BC + LD (IX+9),A +; 41 x = modf(arg,(double *)&e); + PEA IX+-26 + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _modf + POP BC + POP BC + POP BC + LD (IX+-8),HL + LD (IX+-5),E +; 42 i = e; + LD BC,(IX+-26) + LD A,(IX+-23) + CALL __ftol + LD (IX+-22),BC +; 43 switch(i%4) { + LD BC,4 + LD HL,(IX+-22) + CALL __irems + CALL __seqcase +L__1: + DW 4 + DW 0 + DB 0 + DW24 L_6 + + DW24 L_2 + + DW24 L_3 + + DW24 L_4 + + DW24 L_6 + +; 44 case 1: +L_2: +; 45 x = 1. - x; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,8388608 + LD A,63 + CALL __fsub + LD (IX+-8),BC + LD (IX+-5),A +; 46 flag = 1; + LD BC,1 + LD (IX+-19),BC +; 47 break; + JR L_6 +; 48 +; 49 case 2: +L_3: +; 50 sign = - sign; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 51 flag = 1; + LD BC,1 + LD (IX+-19),BC +; 52 break; + JR L_6 +; 53 +; 54 case 3: +L_4: +; 55 x = 1. - x; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,8388608 + LD A,63 + CALL __fsub + LD (IX+-8),BC + LD (IX+-5),A +; 56 sign = - sign; + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fneg + LD (IX+-4),BC + LD (IX+-1),A +; 57 break; +; 58 +; 59 case 0: +; 60 break; +; 61 } +L_6: +; 62 +; 63 xsq = x*x; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __fmul + LD (IX+-12),BC + LD (IX+-9),A +; 64 temp = ((((p4*xsq+p3)*xsq+p2)*xsq+p1)*xsq+p0)*x; + LD HL,920513 + LD E,56 + CALL __fmul + LD HL,798741 + LD E,61 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,7871510 + LD E,193 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,8650514 + LD E,68 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,4993232 + LD E,198 + CALL __fadd + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __fmul + LD (IX+-16),BC + LD (IX+-13),A +; 65 temp = temp/(((1.0*xsq+q2)*xsq+q1)*xsq+q0); + LD BC,(IX+-12) + LD A,(IX+-9) + LD HL,1802457 + LD E,195 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,9760259 + LD E,69 + CALL __fadd + LD HL,(IX+-12) + LD E,(IX+-9) + CALL __fmul + LD HL,8519144 + LD E,198 + CALL __fadd + LD E,A + LD HL,BC + LD BC,(IX+-16) + LD A,(IX+-13) + CALL __fdiv + LD (IX+-16),BC + LD (IX+-13),A +; 66 +; 67 if(flag == 1) { + LD HL,(IX+-19) + OR A,A + LD BC,1 + SBC HL,BC + JR NZ,L_12 +; 68 if(temp == 0.) { + LD HL,(IX+-16) + LD E,(IX+-13) + LD BC,0 + XOR A,A + CALL __fcmp + JR NZ,L_10 +; 69 errno = ERANGE; + LD BC,5 + LD (_errno),BC +; 70 if (sign>0) + LD BC,(IX+-4) + LD A,(IX+-1) + OR A,A + SBC HL,HL + LD E,0 + CALL __fcmp + JP P,L_8 +; 71 return(HUGE_VAL); + LD HL,(__huge_val) + LD A,(__huge_val+3) + LD E,A + JR L_13 +L_8: +; 72 return(-HUGE_VAL); + LD BC,(__huge_val) + LD A,(__huge_val+3) + CALL __fneg + LD E,A + LD HL,BC + JR L_13 +; 73 } +L_10: +; 74 temp = 1./temp; + LD HL,(IX+-16) + LD E,(IX+-13) + LD BC,8388608 + LD A,63 + CALL __fdiv + LD (IX+-16),BC + LD (IX+-13),A +; 75 } +L_12: +; 76 return(sign*temp); + LD HL,(IX+-16) + LD E,(IX+-13) + LD BC,(IX+-4) + LD A,(IX+-1) + CALL __fmul + LD E,A + LD HL,BC +; 77 } +L_13: + LD SP,IX + POP IX + RET + + +;**************************** _tan *************************** +;Name Addr/Register Size Type +;__huge_val IMPORT 4 variable +;_errno IMPORT 3 variable +;_modf IMPORT ----- function +;e IX-26 4 variable +;i IX-22 3 variable +;flag IX-19 3 variable +;temp IX-16 4 variable +;xsq IX-12 4 variable +;x IX-8 4 variable +;sign IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 38 (bytes) +; Spill Code: 0 (instruction) + + + XREF _modf:ROM + XREF __huge_val:ROM + XREF _errno:ROM + XREF __irems:ROM + XREF __fadd:ROM + XREF __fsub:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __ftol:ROM + XREF __frameset:ROM + XREF __seqcase:ROM + XDEF _tan + END diff --git a/frontends/calculator/CEdev/lib/static/tanh.src b/frontends/calculator/CEdev/lib/static/tanh.src new file mode 100644 index 0000000..ca81134 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/tanh.src @@ -0,0 +1,129 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\TANH.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************************************/ +; 2 /* */ +; 3 /* Copyright (C)1987-2008 by */ +; 4 /* Zilog, Inc. */ +; 5 /* */ +; 6 /* San Jose, California */ +; 7 /* */ +; 8 /************************************************************************/ +; 9 /* +; 10 tanh(arg) computes the hyperbolic tangent of its floating +; 11 point argument. +; 12 +; 13 sinh and cosh are called except for large arguments, which +; 14 would cause overflow improperly. +; 15 */ +; 16 +; 17 #include +; 18 +; 19 double tanh(double arg) +; 20 { +_tanh: + LD HL,-10 + CALL __frameset +; 21 double sign; +; 22 +; 23 sign = 1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,63 + LD (IX+-1),A +; 24 if(arg < 0.){ + LD HL,(IX+6) + LD E,(IX+9) + LD BC,0 + XOR A,A + CALL __fcmp + JP P,L_2 +; 25 arg = -arg; + LD BC,(IX+6) + LD A,(IX+9) + CALL __fneg + LD (IX+6),BC + LD (IX+9),A +; 26 sign = -1.; + LD BC,8388608 + LD (IX+-4),BC + LD A,191 + LD (IX+-1),A +; 27 } +L_2: +; 28 +; 29 if(arg > 21.) + LD HL,11010048 + LD E,65 + LD BC,(IX+6) + LD A,(IX+9) + CALL __fcmp + JP P,L_3 +; 30 return(sign); + LD HL,(IX+-4) + LD E,(IX+-1) + JR L_4 +L_3: +; 31 +; 32 return(sign*sinh(arg)/cosh(arg)); + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + CALL _sinh + POP BC + POP BC + LD A,E + LD BC,HL + LD HL,(IX+-4) + LD E,(IX+-1) + CALL __fmul + LD (IX+-7),BC + LD C,(IX+9) + LD B,0 + PUSH BC + LD BC,(IX+6) + PUSH BC + LD B,A + LD (IX+-10),BC + CALL _cosh + LD BC,(IX+-10) + POP IY + POP IY + LD A,B + LD BC,(IX+-7) + CALL __fdiv + LD E,A + LD HL,BC +; 33 } +L_4: + LD SP,IX + POP IX + RET + + +;**************************** _tanh *************************** +;Name Addr/Register Size Type +;_cosh IMPORT ----- function +;_sinh IMPORT ----- function +;sign IX-4 4 variable +;arg IX+6 4 parameter + + +; Stack Frame Size: 22 (bytes) +; Spill Code: 0 (instruction) + + + XREF _sinh:ROM + XREF _cosh:ROM + XREF __fmul:ROM + XREF __fdiv:ROM + XREF __fneg:ROM + XREF __fcmp:ROM + XREF __frameset:ROM + XDEF _tanh + END diff --git a/frontends/calculator/CEdev/lib/static/ufltinfo.src b/frontends/calculator/CEdev/lib/static/ufltinfo.src new file mode 100644 index 0000000..8d15a7d --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ufltinfo.src @@ -0,0 +1,511 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UFLTINFO.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 #include +; 9 +; 10 #define BIT_PACKING 0 +; 11 #if (BIT_PACKING == 1) +; 12 typedef union +; 13 { +; 14 float f; +; 15 struct { +; 16 unsigned long sign:1, +; 17 exponent:8, +; 18 mantissa:23; +; 19 } s; +; 20 long l; +; 21 } ieee_795_float; +; 22 #else +; 23 typedef union { +; 24 float f; +; 25 unsigned long l; +; 26 struct { +; 27 unsigned int exponent1:1; +; 28 unsigned int mantissa:23; +; 29 unsigned int dummy:16; +; 30 unsigned int sign:1, exponent2:7; +; 31 } s; +; 32 }ieee_795_float; +; 33 #define EXP(e) ((e##2 << 1) | (e##1)) +; 34 #endif +; 35 +; 36 +; 37 typedef long reg_t; +; 38 typedef unsigned long ureg_t; +; 39 /************************************************* +; 40 * +; 41 * _u_flt_info - Fills flt_info structure +; 42 * +; 43 * Inputs: +; 44 * val - value to be converted +; 45 * info - flt_info structure to be filled in. +; 46 * +; 47 * Outputs: +; 48 * info->sign - TRUE if val is negative; FALSE otherwise. +; 49 * info->exp - The power of ten in scientific notation. +; 50 * info->digits[] - The first digit is the ones place, the rest are +; 51 * decimal digits. +; 52 * +; 53 * Returns: +; 54 * nothing +; 55 * +; 56 * Notes: +; 57 * I moved the rounding out to the calling routine (which does it +; 58 * anyway). As a space optimization, we compute all the digits out +; 59 * to MAXDIGITS, so we no longer pay attention to ndig. +; 60 * This only works for floating-point numbers having the format as +; 61 * specified in the above structure. +; 62 * Algorithm: +; 63 * Too much precision is lost working in the floating-point domain, so we +; 64 * unpack the fields of the floating-point number, force the base-2 +; 65 * exponent to zero and then convert the normalized mantissa to decimal +; 66 * digits. +; 67 *************************************************/ +; 68 void _u_flt_info(float val,struct flt_info * info) +; 69 { +__u_flt_info: + LD HL,-25 + CALL __frameset +; 70 ieee_795_float rep; +; 71 register reg_t exp; // The base-2 exponent as a signed value. +; 72 register reg_t exp10 = 0; // The base-10 exponent. + LD BC,0 + LD (IX+-12),BC + XOR A,A + LD (IX+-9),A +; 73 register ureg_t mant; // The mantissa, as an unsigned value. +; 74 register ureg_t i; +; 75 +; 76 // Clear the info structure (represents +0.000000000). +; 77 memset(info,0,sizeof(struct flt_info)); + LD BC,12 + PUSH BC + LD BC,0 + PUSH BC + LD BC,(IX+12) + PUSH BC + CALL _memset + POP BC + POP BC + POP BC +; 78 +; 79 rep.f = val; + LD BC,(IX+6) + LD A,(IX+9) + LD (IX+-18),BC + LD (IX+-15),A +; 80 +; 81 // All zero means zero! +; 82 if (rep.l == 0) return; + LD HL,BC + LD E,(IX+-15) + CALL __lcmpzero + JR Z,L_26 +; 83 +; 84 if (rep.s.sign) + LD HL,(IX+-15) + LD A,16 + CALL __ishl_b + LD A,23 + CALL __ishru_b + CALL __icmpzero + JR Z,L_3 +; 85 info->flags = FLT_INFO_SIGN; + LD IY,(IX+12) + LD (IY+0),1 +L_3: +; 86 +; 87 // OK, unpack some fields. +; 88 +; 89 exp = EXP(rep.s.exponent); + LEA BC,IX+-18 + LD (IX+-25),BC + LD IY,(IX+-25) + LD HL,(IY+3) + LD A,17 + CALL __ishl_b + LD A,17 + CALL __ishru_b + ADD HL,HL + LD DE,HL + LD HL,(IY+0) + LD A,23 + CALL __ishru_b + LD BC,HL + LD HL,DE + CALL __ior + LD BC,HL + CALL __itol + LD (IX+-8),BC + LD (IX+-5),A +; 90 +; 91 mant = rep.s.mantissa; + LD HL,(IY+0) + ADD HL,HL + LD A,1 + CALL __ishru_b + LD BC,HL + CALL __itol + LD (IX+-4),BC + LD (IX+-1),A +; 92 +; 93 // If the exponent is 0xff, it is a special representation (Inf or NaN). +; 94 if (exp == 0xff) + LD HL,(IX+-8) + LD E,(IX+-5) + XOR A,A + LD BC,255 + CALL __lcmps + JR NZ,L_9 +; 95 { +; 96 // If the mantissa is zero, it's Inf; otherwise, NaN. +; 97 if (rep.s.mantissa == 0) + LD HL,(IX+-18) + ADD HL,HL + LD A,1 + CALL __ishru_b + CALL __icmpzero + JR NZ,L_5 +; 98 info->flags |= FLT_INFO_INF; + LD IY,(IX+12) + LD A,(IY+0) + SET 1,A + LD (IY+0),A +; 99 else + JR L_26 +L_5: +; 100 info->flags |= FLT_INFO_NAN; + LD IY,(IX+12) + LD A,(IY+0) + SET 2,A + LD (IY+0),A +; 101 return; + JR L_26 +; 102 } +L_9: +; 103 +; 104 // If the exponent is zero, this is a denormalized number. +; 105 if (exp != 0) + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __lcmpzero + JR Z,L_10 +; 106 { +; 107 mant |= 0x800000uL; // Or in the implicit bit. + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,8388608 + XOR A,A + CALL __lor + LD (IX+-4),HL + LD (IX+-1),E +; 108 --exp; // And decrement the exponent. + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,16777215 + LD A,255 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 109 // (denormalized numbers are offset 126, not offset 127. +; 110 // In the assembly realm, we could handle this in one step by shifting the 1 +; 111 // into the msb of a left-adjusted 23-bit mantissa. +; 112 } +L_10: +; 113 +; 114 // Now, we have something that looks like +; 115 // 0000 0000 x.xxx xxxx xxxx xxxx xxxx xxxx +; 116 // in mant, and the binary exponent -- offset by +126 -- in exp. +; 117 // +; 118 // Now, we want to shift the mantissa left so we leave a few guard bits at the +; 119 // right end of the word, but we also want to leave four bits to the left of +; 120 // the decimal point so we can pick off the decimal digits later. +; 121 // +; 122 // If we move the decimal point from where it is to the right end of the first +; 123 // nibble, we essentially subtract 5 bits from the offset. But shifting the +; 124 // mantissa left by the same number of bits cancels the difference. +; 125 // Let's do the shift and subtract the remaining offset. +; 126 mant <<= 5; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,5 + CALL __lshl + LD (IX+-4),BC + LD (IX+-1),A +; 127 exp -= 126; + LD HL,(IX+-8) + LD E,(IX+-5) + LD A,255 + LD BC,16777090 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 128 +; 129 // Now the picture is +; 130 // 000x.xxxx xxxx xxxx xxxx xxxx xxx0 0000 +; 131 +; 132 // We want to drive the base-2 exponent to zero, and accumulate multiplication +; 133 // or division by 10 in the base-10 exponent. +; 134 // We start by decrementing the exponent while shifting the bits in the +; 135 // mantissa left by 1 each time. This changes the representation, but not its +; 136 // value. +; 137 // If the msb becomes true, a shift would cause us to lose information, so in +; 138 // that case, we divide the mantissa by 10 and increment the base-10 +; 139 // exponent. Once again, this changes the bits in the representation, but not +; 140 // the value that is represented -- at least not very much. Division by 10 +; 141 // may cause bits to fall of the end of the 32-bit word, and some precision is +; 142 // lost. But we always have a whole nibble, plus about 2/3 of a bit as guard +; 143 // bits. +; 144 +; 145 +; 146 // At most one of the following while loops will execute. +; 147 +; 148 // If the base-2 exponent is positive, this while loop drives it to zero by +; 149 // repeatedly shifting the mantissa left by one bit and decrementing the exponent. +; 150 // This changes the representation, but leaves unchanged the value +; 151 // it represents. +; 152 while (exp > 0) + JR L_14 +L_15: +; 153 { +; 154 if ((mant >> 27) > 9) + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,27 + CALL __lshru + LD HL,9 + CALL __lcmpu + JR NC,L_12 +; 155 { +; 156 // If a left shift would cause something greater than 9 to appear in the +; 157 // first nibble, normalize right. +; 158 mant /= 5; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,5 + XOR A,A + CALL __ldivu + LD (IX+-4),HL + LD (IX+-1),E +; 159 ++exp10; + LD HL,(IX+-12) + LD E,(IX+-9) + LD A,1 + CALL __ladd_b + LD (IX+-12),HL + LD (IX+-9),E +; 160 } +; 161 else + JR L_13 +L_12: +; 162 mant <<= 1; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,1 + CALL __lshl + LD (IX+-4),BC + LD (IX+-1),A +L_13: +; 163 // Dividing by 5 and adding one to the base-10 exponent is the same as +; 164 // shifting left by one bit: They both multiply the representation by two. +; 165 // Decrementing the base-2 exponent leaves the entire representation unchanged. +; 166 --exp; + LD HL,(IX+-8) + LD E,(IX+-5) + LD BC,16777215 + LD A,255 + CALL __ladd + LD (IX+-8),HL + LD (IX+-5),E +; 167 } +L_14: + OR A,A + SBC HL,HL + LD E,0 + LD BC,(IX+-8) + LD A,(IX+-5) + CALL __lcmps + CALL __setflag + JP M,L_15 +; 168 +; 169 // If the base-2 exponent is negative, this while loop drives it to zero by +; 170 // repeatedly shifting the mantissa right by one bit and incrementing the exponent. +; 171 while (exp < 0) + JR L_19 +L_20: +; 172 { +; 173 if ((mant >> 28) < 2) + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,28 + CALL __lshru + LD E,A + LD HL,BC + LD BC,2 + XOR A,A + CALL __lcmpu + JR NC,L_17 +; 174 { +; 175 // If a right shift would cause the first nibble to go to zero, normalize left. +; 176 mant *= 5; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,5 + XOR A,A + CALL __lmulu + LD (IX+-4),HL + LD (IX+-1),E +; 177 --exp10; + LD HL,(IX+-12) + LD E,(IX+-9) + LD BC,16777215 + LD A,255 + CALL __ladd + LD (IX+-12),HL + LD (IX+-9),E +; 178 } +; 179 else + JR L_18 +L_17: +; 180 mant >>= 1; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,1 + CALL __lshru + LD (IX+-4),BC + LD (IX+-1),A +L_18: +; 181 // Multiplying by 5 and subtracting one from the base-10 exponent is the +; 182 // same as shifting right by one bit: They both divide the representation by 2. +; 183 // Incrementing the base-2 exponent leaves the entire representation unchanged. +; 184 ++exp; + LD HL,(IX+-8) + LD E,(IX+-5) + LD A,1 + CALL __ladd_b + LD (IX+-8),HL + LD (IX+-5),E +; 185 } +L_19: + LD HL,(IX+-8) + LD E,(IX+-5) + CALL __lcmpzero + CALL __setflag + JP M,L_20 +; 186 +; 187 // Now, that we have driven the base-2 exponent to zero, the base-10 exponent +; 188 // is ready. +; 189 info->exp = exp10; + LD A,(IX+-12) + LD IY,(IX+12) + LD (IY+1),A +; 190 +; 191 // Finally, we can pick off the digits. +; 192 // This is done by picking off the first nibble (which must be a decimal digit +; 193 // between 1 and 9 inclusive) and then multiplying the remaining 28 bits by +; 194 // 10. That leaves another decimal digit (in [0,9]) in the top nibble, so we +; 195 // just loop for as many digits as we want. +; 196 for (i=0; i < MAXDIGITS; ++i) + LD BC,0 + LD (IX+-22),BC + XOR A,A + LD (IX+-19),A + JR L_25 +L_23: +; 197 { +; 198 info->digits[i] = mant >> 28; + LD BC,(IX+-4) + LD A,(IX+-1) + LD L,28 + CALL __lshru + LD IY,(IX+12) + LEA HL,IY+2 + LD DE,(IX+-22) + ADD HL,DE + LD (HL),C +; 199 mant &= 0xfffffffuL; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,16777215 + LD A,15 + CALL __land + LD (IX+-4),HL + LD (IX+-1),E +; 200 mant *= 10; + LD HL,(IX+-4) + LD E,(IX+-1) + LD BC,10 + XOR A,A + CALL __lmulu + LD (IX+-4),HL + LD (IX+-1),E + LD HL,(IX+-22) + LD E,(IX+-19) + LD A,1 + CALL __ladd_b + LD (IX+-22),HL + LD (IX+-19),E +; 201 } +L_25: + LD HL,(IX+-22) + LD E,(IX+-19) + LD BC,10 + XOR A,A + CALL __lcmpu + JR C,L_23 +; 202 +; 203 /* Rounding moved out to callers of _u_flt_info(). */ +; 204 } +L_26: + LD SP,IX + POP IX + RET + + +;**************************** __u_flt_info *************************** +;Name Addr/Register Size Type +;_memset IMPORT ----- function +;i IX-22 4 variable +;rep IX-18 6 variable +;exp10 IX-12 4 variable +;exp IX-8 4 variable +;mant IX-4 4 variable +;info IX+12 3 parameter +;val IX+6 4 parameter + + +; Stack Frame Size: 40 (bytes) +; Spill Code: 0 (instruction) + + + XREF _memset:ROM + XREF __lcmps:ROM + XREF __lcmpu:ROM + XREF __ladd:ROM + XREF __ldivu:ROM + XREF __lmulu:ROM + XREF __ior:ROM + XREF __lor:ROM + XREF __land:ROM + XREF __lshl:ROM + XREF __lshru:ROM + XREF __itol:ROM + XREF __frameset:ROM + XREF __setflag:ROM + XREF __icmpzero:ROM + XREF __lcmpzero:ROM + XREF __ladd_b:ROM + XREF __ishl_b:ROM + XREF __ishru_b:ROM + XDEF __u_flt_info + END diff --git a/frontends/calculator/CEdev/lib/static/ufltrnd.src b/frontends/calculator/CEdev/lib/static/ufltrnd.src new file mode 100644 index 0000000..2c1a2be --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ufltrnd.src @@ -0,0 +1,210 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4 +; -optsize -nomodsect -peephole -globalopt -localcse +; -const=ROM + FILE "..\UFLTRND.C" + .assume ADL=1 + SEGMENT CODE +; 1 /************************************************* +; 2 * Copyright (C) 1999-2008 by Zilog, Inc. +; 3 * All Rights Reserved +; 4 *************************************************/ +; 5 +; 6 #include +; 7 #include +; 8 +; 9 /************************************************* +; 10 * +; 11 * _u_flt_rnd - Round to specified number of digits +; 12 * +; 13 * Inputs: +; 14 * info - flt_info structure +; 15 * digits - number of digits of precision +; 16 * +; 17 * Returns: +; 18 * nothing +; 19 * +; 20 *************************************************/ +; 21 void _u_flt_rnd(struct flt_info *info, char digits) +; 22 { +__u_flt_rnd: + LD HL,-18 + CALL __frameset +; 23 register unsigned char i; +; 24 register unsigned char carry,any; +; 25 +; 26 if (digits <= 0) + XOR A,A + CP A,(IX+9) + CALL __setflag + JP P,L_14 +; 27 return; +; 28 +; 29 carry = any = 0; + LD (IX+-3),0 + LD (IX+-2),0 +; 30 for (i = MAXDIGITS-1; i >= digits; -- i) { + LD (IX+-1),9 + JR L_4 +L_2: +; 31 carry = info->digits[i] >= 5; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LD IY,(IX+6) + LEA HL,IY+2 + ADD HL,BC + LD (IX+-9),HL + LD A,(HL) + UEXT HL + LD L,A + OR A,A + LD BC,5 + SBC HL,BC + CALL __setflag + JP M,L__2 + LD A,1 + JR L__3 +L__2: + XOR A,A +L__3: + LD (IX+-2),A +; 32 any |= info->digits[i]; + LD HL,(IX+-9) + LD A,(HL) + OR A,(IX+-3) + LD (IX+-3),A +; 33 info->digits[i] = 0; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LD IY,(IX+6) + LEA HL,IY+2 + ADD HL,BC + LD (HL),0 + DEC (IX+-1) +; 34 } +L_4: + LD A,(IX+-1) + CP A,(IX+9) + JR NC,L_2 +; 35 +; 36 if (carry) + LD A,(IX+-2) + OR A,A + JR Z,L_9 +; 37 ++info->digits[i]; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LD IY,(IX+6) + LEA HL,IY+2 + ADD HL,BC + LD (IX+-18),HL ; spill + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LEA HL,IY+2 + ADD HL,BC + LD (IX+-15),HL ; spill + LD HL,(IX+-18) ; unspill + LD A,(HL) + LD HL,(IX+-15) ; unspill + INC A + LD (HL),A +; 38 while (i > 0 && info->digits[i] == 10) { + JR L_9 +L_10: +; 39 info->digits[i] = 0; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,(IX+-6) + ADD HL,BC + LD (HL),0 +; 40 --i; + DEC (IX+-1) +; 41 info->digits[i]++; + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,(IX+-6) + ADD HL,BC + LD (IX+-12),HL + LD A,(IX+-1) + UEXT HL + LD L,A + LD IY,(IX+-12) + LD BC,(IX+-6) + ADD HL,BC + LD A,(IY) + INC A + LD (HL),A +; 42 } +L_9: + XOR A,A + CP A,(IX+-1) + JR NC,L_13 + LD IY,(IX+6) + LEA BC,IY+2 + LD (IX+-6),BC + LD A,(IX+-1) + UEXT HL + LD L,A + LD BC,HL + LEA HL,IY+2 + ADD HL,BC + LD A,(HL) + UEXT HL + LD L,A + OR A,A + LD BC,10 + SBC HL,BC + JR Z,L_10 +L_13: +; 43 +; 44 if (info->digits[0] == 10) { + LD IY,(IX+6) + LD A,(IY+2) + UEXT HL + LD L,A + OR A,A + LD BC,10 + SBC HL,BC + JR NZ,L_14 +; 45 ++info->exp; + LD IY,(IX+6) + LD A,(IY+1) + INC A + LD (IY+1),A +; 46 info->digits[0] = 1; + LD (IY+2),1 +; 47 } +; 48 } +L_14: + LD SP,IX + POP IX + RET + + +;**************************** __u_flt_rnd *************************** +;Name Addr/Register Size Type +;G_0 IX-6 3 variable +;any IX-3 1 variable +;carry IX-2 1 variable +;i IX-1 1 variable +;digits IX+9 1 parameter +;info IX+6 3 parameter + + +; Stack Frame Size: 30 (bytes) +; Spill Code: 0 (instruction) + + + XREF __frameset:ROM + XREF __setflag:ROM + XDEF __u_flt_rnd + END -- cgit v1.2.3-101-g0448