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/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 ++++++++ 25 files changed, 4816 insertions(+) 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/static') 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