diff options
Diffstat (limited to 'frontends/calculator/CEdev/lib/static')
25 files changed, 4816 insertions, 0 deletions
diff --git a/frontends/calculator/CEdev/lib/static/acos.src b/frontends/calculator/CEdev/lib/static/acos.src new file mode 100644 index 0000000..7136ebe --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/acos.src @@ -0,0 +1,54 @@ + .ref __frameset0
+ .ref __fcmp
+ .ref __fsub
+ .ref _asin
+ .ref _errno
+ .def _acos
+ .assume adl=1
+
+; #define pio2 1.57079632679490
+;
+; double acos(double arg) {
+; if((arg > 1.) || (arg < -1.)) {
+; errno = EDOM;
+; return(0.);
+; }
+; return(pio2 - asin(arg));
+; }
+
+_acos:
+ pop hl
+ pop de
+ pop bc
+ push bc
+ push de
+ push hl
+ ld a,e
+ ld hl,8388608
+ ld e,63
+ push bc
+ push hl
+ call __fcmp
+ pop bc
+ pop hl
+ jp m,l_1
+ ld e,a
+ ld a,191
+ call __fcmp
+ jp p,l_2
+
+l_1: ld hl,4
+ ld (_errno),hl
+ ld l,h
+ ld e,h
+ ret
+
+l_2: push de
+ push hl
+ call _asin
+ ld bc,13176795
+ ld a,63
+ call __fsub
+ ld hl,bc
+ ld e,a
+ ret
diff --git a/frontends/calculator/CEdev/lib/static/asin.src b/frontends/calculator/CEdev/lib/static/asin.src new file mode 100644 index 0000000..0ea0c03 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/asin.src @@ -0,0 +1,178 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\ASIN.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */
+; 2
+; 3 /**
+; 4 * asin(arg) return the arcsin of arg.
+; 5 * arctan is called after appropriate range reduction.
+; 6 */
+; 7
+; 8 #include <errno.h>
+; 9 #include <math.h>
+; 10
+; 11 #define pio2 1.57079632679490
+; 12
+; 13 double asin(double arg) {
+_asin:
+ LD HL,-8
+ CALL __frameset
+; 14
+; 15 double sign, temp;
+; 16
+; 17 sign = 1.;
+ LD BC,8388608
+ LD (IX+-8),BC
+ LD A,63
+ LD (IX+-5),A
+; 18 if(arg < 0) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_2
+; 19 arg = -arg;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 20 sign = -1.;
+ LD BC,8388608
+ LD (IX+-8),BC
+ LD A,191
+ LD (IX+-5),A
+; 21 }
+L_2:
+; 22
+; 23 if(arg > 1.) {
+ LD HL,8388608
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_3
+; 24 errno = EDOM;
+ LD BC,4
+ LD (_errno),BC
+ OR A,A
+; 25 return(0.);
+ SBC HL,HL
+ LD E,0
+ JR L_7
+; 26 }
+L_3:
+; 27
+; 28 temp = sqrt(1. - arg*arg);
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+ LD BC,8388608
+ LD A,63
+ CALL __fsub
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _sqrt
+ POP BC
+ POP BC
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 29 if(arg > 0.7) {
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD HL,3355443
+ CALL __fcmp
+ JP P,L_5
+; 30 temp = pio2 - atan(temp/arg);
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _atan
+ POP BC
+ POP BC
+ LD BC,13176795
+ LD A,63
+ CALL __fsub
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 31 } else {
+ JR L_6
+L_5:
+; 32 temp = atan(arg/temp);
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _atan
+ POP BC
+ POP BC
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 33 }
+L_6:
+; 34
+; 35 return(sign*temp);
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+; 36 }
+L_7:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _asin ***************************
+;Name Addr/Register Size Type
+;_atan IMPORT ----- function
+;_sqrt IMPORT ----- function
+;_errno IMPORT 3 variable
+;sign IX-8 4 variable
+;temp IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 20 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _sqrt:ROM
+ XREF _atan:ROM
+ XREF _errno:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __frameset:ROM
+ XDEF _asin
+ END
diff --git a/frontends/calculator/CEdev/lib/static/atan.src b/frontends/calculator/CEdev/lib/static/atan.src new file mode 100644 index 0000000..e84ad82 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atan.src @@ -0,0 +1,341 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\ATAN.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */
+; 2
+; 3 /**
+; 4 * floating-point arctangent
+; 5 *
+; 6 * atan returns the value of the arctangent of its
+; 7 * argument in the range [-pi/2,pi/2].
+; 8 *
+; 9 * atan2 returns the arctangent of arg1/arg2
+; 10 * in the range [-pi,pi].
+; 11 *
+; 12 * there are no error returns.
+; 13 *
+; 14 * coefficients are #5077 from Hart & Cheney. (19.56D)
+; 15 */
+; 16
+; 17
+; 18 #define sq2p1 2.41421356237309e0
+; 19 #define sq2m1 0.414213562373095e0
+; 20 #define pio2 1.57079632679489e0
+; 21 #define pio4 0.785398163397448e0
+; 22 #define p4 0.161536412982230e2
+; 23 #define p3 0.268425481955040e3
+; 24 #define p2 0.115302935154049e4
+; 25 #define p1 0.178040631643320e4
+; 26 #define p0 0.896785974036639e3
+; 27 #define q4 0.589569705084446e2
+; 28 #define q3 0.536265374031215e3
+; 29 #define q2 0.166678381488163e4
+; 30 #define q1 0.207933497444541e4
+; 31 #define q0 0.896785974036639e3
+; 32
+; 33
+; 34 /**
+; 35 * atan makes its argument positive and
+; 36 * calls the inner routine satan.
+; 37 */
+; 38
+; 39 double atan(double arg) {
+_atan:
+ CALL __frameset0
+ OR A,A
+; 40 double satan(double);
+; 41
+; 42 if(arg>0) {
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_1
+; 43 return(satan(arg));
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _satan
+ POP BC
+ POP BC
+ JR L_2
+; 44 } else {
+L_1:
+; 45 return(-satan(-arg));
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _satan
+ POP BC
+ POP BC
+ LD BC,HL
+ LD A,E
+ CALL __fneg
+ LD E,A
+ LD HL,BC
+; 46 }
+; 47 }
+L_2:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _atan ***************************
+;Name Addr/Register Size Type
+;_satan IMPORT ----- function
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 12 (bytes)
+; Spill Code: 0 (instruction)
+
+
+; 48
+; 49
+; 50 /**
+; 51 * atan2 discovers what quadrant the angle
+; 52 * is in and calls atan.
+; 53 */
+; 54
+; 55
+; 56 /**
+; 57 * satan reduces its argument (known to be positive)
+; 58 * to the range [0,0.414...] and calls xatan.
+; 59 */
+; 60
+; 61 double satan(double arg) {
+_satan:
+ LD HL,-4
+ CALL __frameset
+; 62 double xatan(double);
+; 63
+; 64 if(arg < sq2m1) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,13898701
+ LD A,62
+ CALL __fcmp
+ JP P,L_6
+; 65 return(xatan(arg));
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _xatan
+ POP BC
+ POP BC
+ JR L_7
+; 66 } else if(arg > sq2p1) {
+L_6:
+ LD HL,1737338
+ LD E,64
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_4
+; 67 return(pio2 - xatan(1.0/arg));
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,8388608
+ LD A,63
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _xatan
+ POP BC
+ POP BC
+ LD BC,13176795
+ LD A,63
+ CALL __fsub
+ LD E,A
+ LD HL,BC
+ JR L_7
+; 68 } else {
+L_4:
+; 69 return(pio4 + xatan((arg-1.0)/(arg+1.0)));
+ LD HL,8388608
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fsub
+ LD (IX+-4),BC
+ LD (IX+-1),A
+ LD A,(IX+9)
+ LD BC,(IX+6)
+ LD HL,8388608
+ LD E,63
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _xatan
+ POP BC
+ POP BC
+ LD BC,HL
+ LD HL,4788187
+ LD A,E
+ LD E,63
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+; 70 }
+; 71 }
+L_7:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _satan ***************************
+;Name Addr/Register Size Type
+;_xatan IMPORT ----- function
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 16 (bytes)
+; Spill Code: 0 (instruction)
+
+
+; 72
+; 73 /**
+; 74 * xatan evaluates a series valid in the
+; 75 * range [-0.414...,+0.414...].
+; 76 */
+; 77
+; 78 static double xatan(double arg) {
+_xatan:
+ LD HL,-8
+ CALL __frameset
+; 79 double argsq;
+; 80 double value;
+; 81
+; 82 argsq = arg*arg;
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fmul
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 83 value = ((((p4*argsq + p3)*argsq + p2)*argsq + p1)*argsq + p0);
+ LD HL,8469160
+ LD E,65
+ CALL __fmul
+ LD HL,8795766
+ LD E,67
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,9445616
+ LD E,68
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,14585089
+ LD E,68
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,6304333
+ LD E,68
+ CALL __fadd
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 84 value = value/(((((argsq + q4)*argsq + q3)*argsq + q2)*argsq + q1)*argsq + q0);
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD HL,7066608
+ LD E,66
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,397564
+ LD E,68
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,13654293
+ LD E,68
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,128348
+ LD E,69
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,6304333
+ LD E,68
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __fdiv
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 85 return(value*arg);
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD A,(IX+-5)
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+; 86 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _xatan ***************************
+;Name Addr/Register Size Type
+;value IX-8 4 variable
+;argsq IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 20 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __frameset0:ROM
+ XREF __frameset:ROM
+ XDEF _satan
+ XDEF _atan
+ END
diff --git a/frontends/calculator/CEdev/lib/static/atan2.src b/frontends/calculator/CEdev/lib/static/atan2.src new file mode 100644 index 0000000..f6840d2 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atan2.src @@ -0,0 +1,179 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\ATAN2.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /* Copyright (c) 2000-2008 Zilog, Inc. */
+; 2
+; 3 #define pio2 1.57079632679489e0
+; 4
+; 5 double atan2(double arg1,double arg2) {
+_atan2:
+ CALL __frameset0
+; 6 double satan(double);
+; 7
+; 8 if((arg1+arg2)==arg1) {
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JR NZ,L_9
+; 9 if(arg1 >= 0.) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP M,L_1
+; 10 return(pio2);
+ LD HL,13176795
+ LD E,63
+ JR L_10
+; 11 } else {
+L_1:
+; 12 return(-pio2);
+ LD HL,13176795
+ LD E,191
+ JR L_10
+; 13 }
+; 14 } else if(arg2 < 0.) {
+L_9:
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_7
+; 15 if(arg1 >= 0.) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ XOR A,A
+ CALL __fcmp
+ JP M,L_3
+; 16 return(pio2+pio2 - satan(-arg1/arg2));
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _satan
+ POP BC
+ POP BC
+ LD BC,4788187
+ LD A,64
+ CALL __fsub
+ LD E,A
+ LD HL,BC
+ JR L_10
+; 17 } else {
+L_3:
+; 18 return(-pio2-pio2 + satan(arg1/arg2));
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _satan
+ POP BC
+ POP BC
+ LD BC,HL
+ LD HL,4788187
+ LD A,E
+ LD E,192
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ JR L_10
+; 19 }
+; 20 } else if(arg1 > 0) {
+L_7:
+ OR A,A
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_5
+; 21 return(satan(arg1/arg2));
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _satan
+ POP BC
+ POP BC
+ JR L_10
+; 22 } else {
+L_5:
+; 23 return(-satan(-arg1/arg2));
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _satan
+ POP BC
+ POP BC
+ LD BC,HL
+ LD A,E
+ CALL __fneg
+ LD E,A
+ LD HL,BC
+; 24 }
+; 25 }
+L_10:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _atan2 ***************************
+;Name Addr/Register Size Type
+;_satan IMPORT ----- function
+;arg2 IX+12 4 parameter
+;arg1 IX+6 4 parameter
+
+
+; Stack Frame Size: 18 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _satan:ROM
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __frameset0:ROM
+ XDEF _atan2
+ END
diff --git a/frontends/calculator/CEdev/lib/static/atof.src b/frontends/calculator/CEdev/lib/static/atof.src new file mode 100644 index 0000000..bfabf06 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/atof.src @@ -0,0 +1,20 @@ + .ref __frameset0
+ .ref _strtod
+ .def _atof
+ .assume adl=1
+
+; double atof(char *str);
+
+_atof:
+ pop hl
+ pop bc
+ push bc
+ push hl
+ or a,a
+ sbc hl,hl
+ push hl
+ push bc
+ call _strtod
+ pop bc
+ pop hl
+ ret
diff --git a/frontends/calculator/CEdev/lib/static/ceil.src b/frontends/calculator/CEdev/lib/static/ceil.src new file mode 100644 index 0000000..591da78 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ceil.src @@ -0,0 +1,31 @@ + .ref __frameset0
+ .ref __fneg
+ .ref _floor
+ .def _ceil
+ .assume adl=1
+
+; double ceil(double d);
+
+_ceil:
+ call __frameset0
+ ld bc,(ix+6)
+ ld a,(ix+9)
+ call __fneg
+ ld l,a
+ ld h,0
+ push hl
+ push bc
+ call _floor
+ pop bc
+ pop bc
+ push hl
+ pop bc
+ ld a,e
+ call __fneg
+ ld e,a
+ push bc
+ pop hl
+ ld sp,ix
+ pop ix
+ ret
+
\ No newline at end of file diff --git a/frontends/calculator/CEdev/lib/static/cos.src b/frontends/calculator/CEdev/lib/static/cos.src new file mode 100644 index 0000000..3145df8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/cos.src @@ -0,0 +1,33 @@ + .ref _sinus
+ .ref __frameset0
+ .ref __fcmp
+ .ref __fneg
+ .def _cos
+ .assume adl=1
+
+; double cos(double arg);
+
+_cos:
+ call __frameset0
+ ld hl,(ix+6)
+ ld e,(ix+9)
+ ld bc,0
+ xor a,a
+ push de
+ push hl
+ call __fcmp
+ pop bc
+ pop de
+ ld a,e
+ jp p,l_1
+ call __fneg
+
+l_1: ld hl,1
+ push hl
+ ld l,a
+ push hl
+ push bc
+ call _sinus
+ ld sp,ix
+ pop ix
+ ret
diff --git a/frontends/calculator/CEdev/lib/static/exp.src b/frontends/calculator/CEdev/lib/static/exp.src new file mode 100644 index 0000000..ccae75e --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/exp.src @@ -0,0 +1,234 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\EXP.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */
+; 4 /* */
+; 5 /************************************************************************/
+; 6 /*
+; 7 exp returns the exponential function of its
+; 8 floating-point argument.
+; 9
+; 10 The coefficients are #1069 from Hart and Cheney. (22.35D)
+; 11 */
+; 12
+; 13 #include <errno.h>
+; 14 #include <math.h>
+; 15
+; 16 #define p0 0.20803843466947e7
+; 17 #define p1 0.30286971697440e5
+; 18 #define p2 0.60614853300611e2
+; 19 #define q0 0.60027203602388e7
+; 20 #define q1 0.32772515180829e6
+; 21 #define q2 0.17492876890931e4
+; 22 #define log2e 1.44269504088896
+; 23 #define sqrt2 1.41421356237310
+; 24 #define maxf 10000
+; 25
+; 26 double exp(double arg) {
+_exp:
+ LD HL,-23
+ CALL __frameset
+; 27 double fraction;
+; 28 double temp1, temp2, xsq;
+; 29 int ent;
+; 30
+; 31 if ( arg == 0.0 ){
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR NZ,L_2
+; 32 return 1.0;
+ LD HL,8388608
+ LD E,63
+ JR L_6
+; 33 }
+L_2:
+; 34 if ( arg < -maxf ){
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,1851392
+ LD A,198
+ CALL __fcmp
+ JP P,L_4
+ OR A,A
+; 35 return 0.0;
+ SBC HL,HL
+ LD E,0
+ JR L_6
+; 36 }
+L_4:
+; 37 if ( arg > maxf ){
+ LD HL,1851392
+ LD E,70
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_5
+; 38 errno = ERANGE;
+ LD BC,5
+ LD (_errno),BC
+; 39 return HUGE_VAL ;
+ LD HL,(__huge_val)
+ LD A,(__huge_val+3)
+ LD E,A
+ JR L_6
+; 40 }
+L_5:
+; 41 arg *= log2e;
+ LD HL,12102203
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fmul
+ LD (IX+6),BC
+ LD (IX+9),A
+; 42 ent = floor( arg );
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _floor
+ POP BC
+ POP BC
+ LD A,E
+ LD BC,HL
+ CALL __ftol
+ LD (IX+-11),BC
+; 43 fraction = arg - ent - 0.5;
+ CALL __itol
+ CALL __ltof
+ OR A,A
+ SBC HL,HL
+ LD E,63
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fsub
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 44 xsq = fraction * fraction;
+ LD E,(IX+-5)
+ LD A,(IX+-5)
+ LD HL,BC
+ CALL __fmul
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 45 temp1 = ((p2 * xsq + p1) * xsq + p0) * fraction;
+ LD HL,7501212
+ LD E,66
+ CALL __fmul
+ LD HL,15506930
+ LD E,70
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,16643075
+ LD E,73
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD (IX+-15),BC
+ LD (IX+-12),A
+; 46 temp2 = ((1.0 * xsq + q2) * xsq + q1) * xsq + q0;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD HL,14330165
+ LD E,68
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,10487205
+ LD E,72
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,12005441
+ LD E,74
+ CALL __fadd
+ LD (IX+-19),BC
+ LD (IX+-16),A
+; 47 return ldexp( sqrt2 * (temp2+temp1) / (temp2-temp1), ent );
+ LD DE,(IX+-11)
+ PUSH DE
+ LD HL,(IX+-15)
+ LD E,(IX+-12)
+ LD A,(IX+-16)
+ CALL __fadd
+ LD HL,11863283
+ LD E,63
+ CALL __fmul
+ LD (IX+-22),BC
+ LD (IX+-23),A
+ LD A,(IX+-16)
+ LD BC,(IX+-19)
+ LD HL,(IX+-15)
+ LD E,(IX+-12)
+ CALL __fsub
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-22)
+ LD A,(IX+-23)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _ldexp
+ POP BC
+ POP BC
+ POP BC
+; 48 }
+L_6:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _exp ***************************
+;Name Addr/Register Size Type
+;_ldexp IMPORT ----- function
+;_floor IMPORT ----- function
+;__huge_val IMPORT 4 variable
+;_errno IMPORT 3 variable
+;temp2 IX-19 4 variable
+;temp1 IX-15 4 variable
+;ent IX-11 3 variable
+;fraction IX-8 4 variable
+;xsq IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 35 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _floor:ROM
+ XREF _ldexp:ROM
+ XREF __huge_val:ROM
+ XREF _errno:ROM
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fcmp:ROM
+ XREF __ftol:ROM
+ XREF __ltof:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XDEF _exp
+ END
diff --git a/frontends/calculator/CEdev/lib/static/fabs.src b/frontends/calculator/CEdev/lib/static/fabs.src new file mode 100644 index 0000000..36bbacd --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/fabs.src @@ -0,0 +1,14 @@ + .def _fabs
+ .assume adl=1
+
+; double fabs(double j);
+
+_fabs:
+ pop bc
+ pop hl
+ pop de
+ push de
+ push hl
+ push bc
+ res 7,e
+ ret
diff --git a/frontends/calculator/CEdev/lib/static/floor.src b/frontends/calculator/CEdev/lib/static/floor.src new file mode 100644 index 0000000..7a2dd34 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/floor.src @@ -0,0 +1,114 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\FLOOR.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */
+; 4 /* */
+; 5 /* San Jose, California */
+; 6 /* */
+; 7 /************************************************************************/
+; 8 #include <math.h>
+; 9
+; 10 double floor(double d) {
+_floor:
+ LD HL,-4
+ CALL __frameset
+; 11 double fraction;
+; 12
+; 13 if (d<0.0) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_3
+; 14 d = -d;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 15 fraction = modf(d, (double *)&d);
+ PEA IX+6
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _modf
+ POP BC
+ POP BC
+ POP BC
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 16 if (fraction != 0.0)
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR Z,L_1
+; 17 d += 1;
+ LD HL,8388608
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fadd
+ LD (IX+6),BC
+ LD (IX+9),A
+L_1:
+; 18 d = -d;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 19 } else {
+ JR L_4
+L_3:
+; 20 fraction = modf(d, (double *)&d);
+ PEA IX+6
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _modf
+ POP BC
+ POP BC
+ POP BC
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 21 }
+L_4:
+; 22 return(d);
+ LD HL,(IX+6)
+ LD E,(IX+9)
+; 23 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _floor ***************************
+;Name Addr/Register Size Type
+;_modf IMPORT ----- function
+;fraction IX-4 4 variable
+;d IX+6 4 parameter
+
+
+; Stack Frame Size: 16 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _modf:ROM
+ XREF __fadd:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __frameset:ROM
+ XDEF _floor
+ END
diff --git a/frontends/calculator/CEdev/lib/static/fmod.src b/frontends/calculator/CEdev/lib/static/fmod.src new file mode 100644 index 0000000..0073ef7 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/fmod.src @@ -0,0 +1,135 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\FMOD.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */
+; 4 /* */
+; 5 /* San Jose, California */
+; 6 /* */
+; 7 /************************************************************************/
+; 8 #include <math.h>
+; 9
+; 10 /*************************************************
+; 11 *
+; 12 * fmod - modulo
+; 13 *
+; 14 * Inputs:
+; 15 * x - dividend
+; 16 * y - divisor
+; 17 *
+; 18 * Returns:
+; 19 * x mod y
+; 20 *
+; 21 *************************************************/
+; 22
+; 23 double fmod(double x, double y) {
+_fmod:
+ LD HL,-8
+ CALL __frameset
+; 24 double z;
+; 25 double result;
+; 26
+; 27 if (y == 0.0) {
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR NZ,L_1
+ OR A,A
+; 28 return 0;
+ SBC HL,HL
+ LD E,0
+ JR L_5
+; 29 }
+L_1:
+; 30
+; 31 modf(x/y,&z);
+ PEA IX+-8
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fdiv
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _modf
+ POP BC
+ POP BC
+ POP BC
+; 32 result = x - z*y;
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fsub
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 33
+; 34 if ((x < 0) && (result > 0)) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ XOR A,A
+ LD BC,0
+ CALL __fcmp
+ JP P,L_4
+ OR A,A
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fcmp
+ JP P,L_4
+; 35 result = -result;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fneg
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 36 }
+L_4:
+; 37
+; 38 return(result);
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+; 39 }
+L_5:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _fmod ***************************
+;Name Addr/Register Size Type
+;_modf IMPORT ----- function
+;z IX-8 4 variable
+;result IX-4 4 variable
+;y IX+12 4 parameter
+;x IX+6 4 parameter
+
+
+; Stack Frame Size: 26 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _modf:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __frameset:ROM
+ XDEF _fmod
+ END
diff --git a/frontends/calculator/CEdev/lib/static/frexp.src b/frontends/calculator/CEdev/lib/static/frexp.src new file mode 100644 index 0000000..77df2d8 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/frexp.src @@ -0,0 +1,141 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\FREXP.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */
+; 4 /* */
+; 5 /* San Jose, California */
+; 6 /* */
+; 7 /************************************************************************/
+; 8
+; 9 #include <math.h>
+; 10
+; 11 typedef union
+; 12 {
+; 13 float value;
+; 14 unsigned long bits;
+; 15 } Ieee754;
+; 16
+; 17 enum
+; 18 { // The IEEE 754 format is:
+; 19 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
+; 20 // (with an implicit mantissa high-order 1-bit.)
+; 21 mastissa_shift = 0,
+; 22 mastissa_bits = 23,
+; 23 exponent_bits = 8,
+; 24 exponent_shift = mastissa_shift + mastissa_bits,
+; 25 sign_shift = exponent_shift + exponent_bits,
+; 26 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000
+; 27 exponent_max = (1 << exponent_bits) -1,
+; 28 exponent_base = 127,
+; 29 exponent_min = 0
+; 30 };
+; 31
+; 32 // frexp - Standard C library routine
+; 33 // frexp returns the exponent and mantissa of its floating point
+; 34 // argument.
+; 35 //
+; 36 // Arguments:
+; 37 // value - the floating point argument
+; 38 // pExponent - pointer to the returned exponent
+; 39 //
+; 40 // Returns:
+; 41 // - a floating point number between 0.5 and 1.0 (or zero if
+; 42 // the input argument is zero)
+; 43 //
+; 44 double frexp( double value, int *pExponent )
+; 45 {
+_frexp:
+ LD HL,-8
+ CALL __frameset
+; 46 Ieee754 floating;
+; 47 long exponentBits = 0;
+ LD BC,0
+ LD (IX+-8),BC
+ XOR A,A
+ LD (IX+-5),A
+; 48
+; 49 floating.value = value;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 50 if ( value != 0.0 )
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR Z,L_2
+; 51 {
+; 52 exponentBits = (floating.bits
+; 53 & ((unsigned long) exponent_mask << exponent_shift))
+; 54 - ((exponent_base - 1L) << exponent_shift);
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,8388608
+ LD A,127
+ CALL __land
+ LD BC,0
+ LD A,193
+ CALL __ladd
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 55 floating.bits -= exponentBits; // adjust exponent
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __lsub
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 56 }
+L_2:
+; 57 if ( pExponent != 0 )
+ LD HL,(IX+12)
+ CALL __icmpzero
+ JR Z,L_3
+; 58 {
+; 59 *pExponent = exponentBits >> exponent_shift;
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ LD L,23
+ CALL __lshrs
+ LD HL,(IX+12)
+ LD (HL),BC
+; 60 }
+L_3:
+; 61 return floating.value;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+; 62 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _frexp ***************************
+;Name Addr/Register Size Type
+;exponentBits IX-8 4 variable
+;floating IX-4 4 variable
+;pExponent IX+12 3 parameter
+;value IX+6 4 parameter
+
+
+; Stack Frame Size: 23 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF __ladd:ROM
+ XREF __lsub:ROM
+ XREF __land:ROM
+ XREF __lshrs:ROM
+ XREF __fcmp:ROM
+ XREF __frameset:ROM
+ XREF __icmpzero:ROM
+ XDEF _frexp
+ END
diff --git a/frontends/calculator/CEdev/lib/static/ldexp.src b/frontends/calculator/CEdev/lib/static/ldexp.src new file mode 100644 index 0000000..a656d62 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ldexp.src @@ -0,0 +1,194 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\LDEXP.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9 #include <errno.h>
+; 10 #include <math.h>
+; 11
+; 12 typedef union
+; 13 {
+; 14 float value;
+; 15 unsigned long bits;
+; 16 } Ieee754;
+; 17
+; 18 enum
+; 19 { // The IEEE 754 format is:
+; 20 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
+; 21 // (with an implicit mantissa high-order 1-bit.)
+; 22 mastissa_shift = 0,
+; 23 mastissa_bits = 23,
+; 24 exponent_bits = 8,
+; 25 exponent_shift = mastissa_shift + mastissa_bits,
+; 26 sign_shift = exponent_shift + exponent_bits,
+; 27 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000
+; 28 exponent_max = (1 << exponent_bits) -1,
+; 29 exponent_base = 127,
+; 30 exponent_min = 0
+; 31 };
+; 32
+; 33 // ldexp - Standard C library routine
+; 34 // ldexp returns the argument multiplied by an integral (positive or
+; 35 // negative) power of two.
+; 36 //
+; 37 // Arguments:
+; 38 // value - the floating point argument
+; 39 // power - the power of two to be used
+; 40 //
+; 41 // Returns:
+; 42 // - the argument multiplied by an integral power of two
+; 43 //
+; 44 double ldexp( double value, int power )
+; 45 {
+_ldexp:
+ LD HL,-14
+ CALL __frameset
+; 46 Ieee754 floating;
+; 47 int exponent;
+; 48 int powerplusexponent;
+; 49
+; 50 if ( value == 0.0 ) return 0;
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR NZ,L_1
+ OR A,A
+ SBC HL,HL
+ LD E,0
+ JR L_10
+L_1:
+; 51
+; 52 floating.value = value;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 53 exponent = (floating.bits >> exponent_shift) & exponent_mask;
+ LD L,23
+ CALL __lshru
+ LD HL,BC
+ LD A,L
+ UEXT HL
+ LD L,A
+ LD (IX+-10),HL
+; 54 powerplusexponent = power + exponent;
+ LD BC,(IX+12)
+ ADD HL,BC
+ LD (IX+-7),HL
+; 55
+; 56 if ( powerplusexponent > exponent_max )
+ LD BC,HL
+ LD HL,255
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_8
+; 57 {
+; 58 errno = ERANGE;
+ LD BC,5
+ LD (_errno),BC
+; 59 return (floating.bits & (1L << sign_shift)) == 0 ? HUGE_VAL : - HUGE_VAL;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,0
+ LD A,128
+ CALL __land
+ CALL __lcmpzero
+ JR NZ,L_4
+ LD BC,(__huge_val)
+ LD A,(__huge_val+3)
+ LD (IX+-14),BC
+ LD (IX+-11),A
+ JR L_5
+L_4:
+ LD BC,(__huge_val)
+ LD A,(__huge_val+3)
+ CALL __fneg
+ LD (IX+-14),BC
+ LD (IX+-11),A
+L_5:
+ LD HL,(IX+-14)
+ LD E,(IX+-11)
+ JR L_10
+; 60 }
+L_8:
+; 61 if ( powerplusexponent <= exponent_min ) // CR 3964
+ LD BC,(IX+-7)
+ OR A,A
+ SBC HL,HL
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_9
+; 62 {
+; 63 errno = ERANGE;
+ LD BC,5
+ LD (_errno),BC
+ OR A,A
+; 64 return 0.0;
+ SBC HL,HL
+ LD E,0
+ JR L_10
+; 65 }
+L_9:
+; 66 floating.bits += (long) power << exponent_shift; // adjust exponent
+ LD BC,(IX+12)
+ CALL __itol
+ LD L,23
+ CALL __lshl
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __ladd
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 67 return floating.value;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+; 68 }
+L_10:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _ldexp ***************************
+;Name Addr/Register Size Type
+;__huge_val IMPORT 4 variable
+;_errno IMPORT 3 variable
+;temp2 IX-14 4 variable
+;exponent IX-10 3 variable
+;powerplusexponent IX-7 3 variable
+;floating IX-4 4 variable
+;power IX+12 3 parameter
+;value IX+6 4 parameter
+
+
+; Stack Frame Size: 29 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF __huge_val:ROM
+ XREF _errno:ROM
+ XREF __ladd:ROM
+ XREF __land:ROM
+ XREF __lshl:ROM
+ XREF __lshru:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XREF __lcmpzero:ROM
+ XDEF _ldexp
+ END
diff --git a/frontends/calculator/CEdev/lib/static/log.src b/frontends/calculator/CEdev/lib/static/log.src new file mode 100644 index 0000000..e84217b --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/log.src @@ -0,0 +1,233 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\LOG.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1999-2008 by Zilog, Inc. */
+; 4 /* */
+; 5 /************************************************************************/
+; 6 /*
+; 7 log returns the natural logarithm of its floating
+; 8 point argument.
+; 9
+; 10 The coefficients are #2705 from Hart & Cheney. (19.38D)
+; 11
+; 12 It calls frexp.
+; 13 */
+; 14
+; 15 #include <errno.h>
+; 16 #include <math.h>
+; 17
+; 18 #define log2 0.693147180559945e0
+; 19 #define ln10 2.30258509299404
+; 20 #define sqrto2 0.707106781186548e0
+; 21 #define p0 -0.240139179559211e2
+; 22 #define p1 0.309572928215377e2
+; 23 #define p2 -0.963769093368687e1
+; 24 #define p3 0.421087371217980e0
+; 25 #define q0 -0.120069589779605e2
+; 26 #define q1 0.194809660700890e2
+; 27 #define q2 -0.891110902798312e1
+; 28
+; 29 double log( double arg )
+; 30 {
+_log:
+ LD HL,-27
+ CALL __frameset
+ OR A,A
+; 31 double x,z, zsq, temp;
+; 32 int exp;
+; 33
+; 34 if ( arg <= 0.0 ){
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP M,L_1
+; 35 errno = EDOM;
+ LD BC,4
+ LD (_errno),BC
+; 36 return -HUGE_VAL;
+ LD BC,(__huge_val)
+ LD A,(__huge_val+3)
+ CALL __fneg
+ LD E,A
+ LD HL,BC
+ JR L_5
+; 37 }
+L_1:
+; 38 x = frexp( arg, & exp );
+ PEA IX+-15
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _frexp
+ POP BC
+ POP BC
+ POP BC
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 39 if ( x < sqrto2 ){
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD BC,3474675
+ LD A,63
+ CALL __fcmp
+ JP P,L_4
+ OR A,A
+; 40 x *= 2;
+ SBC HL,HL
+ LD E,64
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __fmul
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 41 exp--;
+ LD BC,(IX+-15)
+ DEC BC
+ LD (IX+-15),BC
+; 42 }
+L_4:
+; 43
+; 44 z = (x-1)/(x+1);
+ LD HL,8388608
+ LD E,63
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __fsub
+ LD (IX+-27),BC
+ LD (IX+-24),A
+ LD A,(IX+-5)
+ LD BC,(IX+-8)
+ LD HL,8388608
+ LD E,63
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-27)
+ LD A,(IX+-24)
+ CALL __fdiv
+ LD (IX+-19),BC
+ LD (IX+-16),A
+; 45 zsq = z*z;
+ LD E,(IX+-16)
+ LD A,(IX+-16)
+ LD HL,BC
+ CALL __fmul
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 46
+; 47 temp = ((p3*zsq + p2)*zsq + p1)*zsq + p0;
+ LD HL,14129348
+ LD E,62
+ CALL __fmul
+ LD HL,1717243
+ LD E,193
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,16230537
+ LD E,65
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,12590209
+ LD E,193
+ CALL __fadd
+ LD (IX+-12),BC
+ LD (IX+-9),A
+; 48 temp = temp/(((1.0*zsq + q2)*zsq + q1)*zsq + q0);
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD HL,955367
+ LD E,193
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,10213637
+ LD E,65
+ CALL __fadd
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD HL,4201601
+ LD E,193
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-12)
+ LD A,(IX+-9)
+ CALL __fdiv
+ LD (IX+-12),BC
+ LD (IX+-9),A
+; 49 temp = temp*z + exp*log2;
+ LD HL,(IX+-19)
+ LD E,(IX+-16)
+ LD A,(IX+-9)
+ CALL __fmul
+ LD (IX+-23),BC
+ LD BC,(IX+-15)
+ LD (IX+-20),A
+ CALL __itol
+ CALL __ltof
+ LD HL,3240472
+ LD E,63
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-23)
+ LD A,(IX+-20)
+ CALL __fadd
+ LD (IX+-12),BC
+ LD (IX+-9),A
+; 50 return temp;
+ LD E,(IX+-9)
+ LD HL,BC
+; 51 }
+L_5:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _log ***************************
+;Name Addr/Register Size Type
+;_frexp IMPORT ----- function
+;__huge_val IMPORT 4 variable
+;_errno IMPORT 3 variable
+;z IX-19 4 variable
+;exp IX-15 3 variable
+;temp IX-12 4 variable
+;x IX-8 4 variable
+;zsq IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 39 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _frexp:ROM
+ XREF __huge_val:ROM
+ XREF _errno:ROM
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __ltof:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XDEF _log
+ END
diff --git a/frontends/calculator/CEdev/lib/static/log10.src b/frontends/calculator/CEdev/lib/static/log10.src new file mode 100644 index 0000000..e0f7265 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/log10.src @@ -0,0 +1,48 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\LOG10.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 #include <math.h>
+; 2
+; 3 double log10(double x) {
+_log10:
+ CALL __frameset0
+; 4 return log(x) / M_LN10;
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _log
+ POP BC
+ POP BC
+ LD BC,HL
+ LD HL,1269134
+ LD A,E
+ LD E,64
+ CALL __fdiv
+ LD E,A
+ LD HL,BC
+; 5 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _log10 ***************************
+;Name Addr/Register Size Type
+;_log IMPORT ----- function
+;x IX+6 4 parameter
+
+
+; Stack Frame Size: 12 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _log:ROM
+ XREF __fdiv:ROM
+ XREF __frameset0:ROM
+ XDEF _log10
+ END
diff --git a/frontends/calculator/CEdev/lib/static/modf.src b/frontends/calculator/CEdev/lib/static/modf.src new file mode 100644 index 0000000..6172da4 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/modf.src @@ -0,0 +1,166 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\MODF.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9
+; 10 #include <math.h>
+; 11
+; 12 typedef union {
+; 13 float value;
+; 14 unsigned long bits;
+; 15 } Ieee754;
+; 16
+; 17 enum
+; 18 { // The IEEE 754 format is:
+; 19 // SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
+; 20 // (with an implicit mantissa high-order 1-bit.)
+; 21 mastissa_shift = 0,
+; 22 mastissa_bits = 23,
+; 23 exponent_bits = 8,
+; 24 exponent_shift = mastissa_shift + mastissa_bits,
+; 25 sign_shift = exponent_shift + exponent_bits,
+; 26 exponent_mask = (1 << exponent_bits) -1, // shifted = 0x7F800000
+; 27 exponent_max = (1 << exponent_bits) -1,
+; 28 exponent_base = 127,
+; 29 exponent_min = 0
+; 30 };
+; 31
+; 32 /* modf - Standard C library routine
+; 33 * modf returns the integral and fractional components of its
+; 34 * floating point argument.
+; 35 *
+; 36 * Arguments:
+; 37 * value - the floating point argument
+; 38 * pIntegral - pointer to the returned integral component
+; 39 *
+; 40 * Returns:
+; 41 * - the fractional component
+; 42 */
+; 43 double modf( double value, double *pIntegral ) {
+_modf:
+ LD HL,-7
+ CALL __frameset
+; 44 Ieee754 integral;
+; 45 int exponent;
+; 46
+; 47 integral.value = value;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 48 frexp( value, &exponent);
+ PEA IX+-7
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _frexp
+ POP BC
+ POP BC
+ POP BC
+; 49 if ( exponent <= 0 ) { // set integral portion to zero
+ LD BC,(IX+-7)
+ OR A,A
+ SBC HL,HL
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_2
+; 50 integral.bits = 0;
+ LD BC,0
+ LD (IX+-4),BC
+ XOR A,A
+ LD (IX+-1),A
+; 51 } else if ( exponent <= mastissa_bits ) { // mask out fractional portion
+ JR L_4
+L_2:
+ LD BC,(IX+-7)
+ LD HL,23
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_4
+; 52 integral.bits &= -1L << (mastissa_bits - exponent + 1);
+ LD HL,23
+ LD BC,(IX+-7)
+ OR A,A
+ SBC HL,BC
+ INC HL
+ LD BC,HL
+ CALL __itol
+ LD HL,BC
+ LD BC,16777215
+ LD A,255
+ CALL __lshl
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __land
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 53 }
+L_4:
+; 54 if ( pIntegral != 0 ) {
+ LD HL,(IX+12)
+ CALL __icmpzero
+ JR Z,L_5
+; 55 *pIntegral = integral.value;
+ LD HL,(IX+12)
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD (HL),BC
+ INC HL
+ INC HL
+ INC HL
+ LD (HL),A
+; 56 }
+L_5:
+; 57 return value - integral.value;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fsub
+ LD E,A
+ LD HL,BC
+; 58 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _modf ***************************
+;Name Addr/Register Size Type
+;_frexp IMPORT ----- function
+;exponent IX-7 3 variable
+;integral IX-4 4 variable
+;pIntegral IX+12 3 parameter
+;value IX+6 4 parameter
+
+
+; Stack Frame Size: 22 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _frexp:ROM
+ XREF __land:ROM
+ XREF __lshl:ROM
+ XREF __fsub:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XREF __icmpzero:ROM
+ XDEF _modf
+ END
diff --git a/frontends/calculator/CEdev/lib/static/pow.src b/frontends/calculator/CEdev/lib/static/pow.src new file mode 100644 index 0000000..b9a8c19 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/pow.src @@ -0,0 +1,187 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\POW.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9
+; 10 #include <errno.h>
+; 11 #include <math.h>
+; 12
+; 13 double pow( double arg1, double arg2 ) {
+_pow:
+ LD HL,-8
+ CALL __frameset
+ OR A,A
+; 14 double result;
+; 15 long temp;
+; 16
+; 17 if ( arg1 > 0.0 ){
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_8
+; 18 return exp( arg2 * log( arg1 ) );
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _log
+ POP BC
+ POP BC
+ LD A,E
+ LD BC,HL
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ CALL __fmul
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _exp
+ POP BC
+ POP BC
+ JR L_12
+; 19 }
+L_8:
+; 20 if ( arg1 < 0.0 ){
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_10
+; 21 temp = arg2;
+; 22 if ( temp == arg2 ){
+ LD BC,(IX+12)
+ LD A,(IX+15)
+ CALL __ftol
+ CALL __ltof
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+12)
+ LD A,(IX+15)
+ CALL __fcmp
+ JR NZ,L_6
+; 23 result = exp( arg2 * log( -arg1 ) );
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _log
+ POP BC
+ POP BC
+ LD A,E
+ LD BC,HL
+ LD HL,(IX+12)
+ LD E,(IX+15)
+ CALL __fmul
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _exp
+ POP BC
+ POP BC
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 24 return temp & 1 ? -result : result;
+ LD BC,(IX+12)
+ LD A,(IX+15)
+ CALL __ftol
+ LD A,C
+ AND A,1
+ UEXT HL
+ LD L,A
+ LD E,H
+ CALL __lcmpzero
+ JR Z,L_3
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fneg
+ LD (IX+-8),BC
+ LD (IX+-5),A
+ JR L_4
+L_3:
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD (IX+-8),BC
+ LD (IX+-5),A
+L_4:
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ JR L_12
+; 25 }
+L_6:
+; 26 errno = EDOM;
+ LD BC,4
+ LD (_errno),BC
+; 27 }
+L_10:
+ OR A,A
+; 28 if ( arg2 <= 0.0 ){
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+12)
+ LD A,(IX+15)
+ CALL __fcmp
+ JP M,L_11
+; 29 errno = EDOM;
+ LD BC,4
+ LD (_errno),BC
+; 30 }
+L_11:
+ OR A,A
+; 31 return 0.0;
+ SBC HL,HL
+; 32 }
+L_12:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _pow ***************************
+;Name Addr/Register Size Type
+;_errno IMPORT 3 variable
+;_log IMPORT ----- function
+;_exp IMPORT ----- function
+;temp1 IX-8 4 variable
+;result IX-4 4 variable
+;arg2 IX+12 4 parameter
+;arg1 IX+6 4 parameter
+
+
+; Stack Frame Size: 26 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _log:ROM
+ XREF _exp:ROM
+ XREF _errno:ROM
+ XREF __fmul:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __ftol:ROM
+ XREF __ltof:ROM
+ XREF __frameset:ROM
+ XREF __lcmpzero:ROM
+ XDEF _pow
+ END
diff --git a/frontends/calculator/CEdev/lib/static/sin.src b/frontends/calculator/CEdev/lib/static/sin.src new file mode 100644 index 0000000..8929126 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sin.src @@ -0,0 +1,340 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\SIN.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C) 1999-2008 by Zilog, Inc. */
+; 4 /* */
+; 5 /************************************************************************/
+; 6 /*
+; 7 C program for floating point sin/cos.
+; 8 Calls modf.
+; 9 There are no error exits.
+; 10 Coefficients are #3370 from Hart & Cheney (18.80D).
+; 11 */
+; 12 #include <math.h>
+; 13
+; 14
+; 15 #define twoopi 0.636619772367581
+; 16 #define p0 0.135788409787738e8
+; 17 #define p1 -0.494290810090284e7
+; 18 #define p2 0.440103053537527e6
+; 19 #define p3 -0.138472724998245e5
+; 20 #define p4 0.145968840666577e3
+; 21 #define q0 0.864455865292253e7
+; 22 #define q1 0.408179225234330e6
+; 23 #define q2 0.946309610153821e4
+; 24 #define q3 0.132653490878614e3
+; 25
+; 26 double sinus(double,int);
+; 27
+; 28 double sin(double arg) {
+_sin:
+ CALL __frameset0
+; 29 return(sinus(arg, 0));
+ LD BC,0
+ PUSH BC
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _sinus
+ POP BC
+ POP BC
+ POP BC
+; 30 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _sin ***************************
+;Name Addr/Register Size Type
+;_sinus IMPORT ----- function
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 12 (bytes)
+; Spill Code: 0 (instruction)
+
+
+; 31
+; 32 double sinus(double arg, int quad)
+; 33 {
+_sinus:
+ LD HL,-28
+ CALL __frameset
+; 34 double e, f;
+; 35 int k;
+; 36 double ysq;
+; 37 double x,y;
+; 38 double temp1, temp2;
+; 39
+; 40 x = arg;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 41 if(x<0) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_2
+; 42 x = -x;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 43 quad = quad + 2;
+ LD IY,(IX+12)
+ LEA IY,IY+2
+ LD (IX+12),IY
+; 44 }
+L_2:
+; 45 x = x*twoopi; /*underflow?*/
+ LD HL,2292099
+ LD E,63
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fmul
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 46 if(x>32764){
+ LD HL,16775168
+ LD E,70
+ CALL __fcmp
+ JP P,L_4
+; 47 y = modf(x,&e);
+ PEA IX+-16
+ LD C,(IX+-1)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+-4)
+ PUSH BC
+ CALL _modf
+ POP BC
+ POP BC
+ POP BC
+ LD (IX+-12),HL
+ LD (IX+-9),E
+; 48 e = e + quad;
+ LD BC,(IX+12)
+ CALL __itol
+ CALL __ltof
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-16)
+ LD A,(IX+-13)
+ CALL __fadd
+ LD (IX+-16),BC
+ LD (IX+-13),A
+; 49 modf(0.25*e,&f);
+ PEA IX+-20
+ LD A,(IX+-13)
+ LD HL,8388608
+ LD E,62
+ CALL __fmul
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _modf
+ POP BC
+ POP BC
+ POP BC
+; 50 quad = e - 4*f;
+ LD BC,(IX+-20)
+ LD A,(IX+-17)
+ LD HL,8388608
+ LD E,64
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-16)
+ LD A,(IX+-13)
+ CALL __fsub
+ CALL __ftol
+ LD (IX+12),BC
+; 51 }else{
+ JR L_6
+L_4:
+; 52 k = x;
+; 53 y = x - k;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __ftol
+ CALL __itol
+ CALL __ltof
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fsub
+ LD (IX+-12),BC
+ LD (IX+-9),A
+; 54 quad = (quad + k) & 03;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __ftol
+ LD HL,BC
+ LD BC,(IX+12)
+ ADD HL,BC
+ LD A,L
+ AND A,3
+ UEXT HL
+ LD L,A
+ LD (IX+12),HL
+; 55 }
+L_6:
+; 56 if (quad & 01)
+ LD A,(IX+12)
+ AND A,1
+ UEXT HL
+ LD L,A
+ CALL __icmpzero
+ JR Z,L_8
+; 57 y = 1-y;
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ LD BC,8388608
+ LD A,63
+ CALL __fsub
+ LD (IX+-12),BC
+ LD (IX+-9),A
+L_8:
+; 58 if(quad > 1)
+ LD BC,(IX+12)
+ LD HL,1
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_9
+; 59 y = -y;
+ LD BC,(IX+-12)
+ LD A,(IX+-9)
+ CALL __fneg
+ LD (IX+-12),BC
+ LD (IX+-9),A
+L_9:
+; 60
+; 61 ysq = y*y;
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ LD BC,(IX+-12)
+ LD A,(IX+-9)
+ CALL __fmul
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 62 temp1 = ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y;
+ LD HL,1177606
+ LD E,67
+ CALL __fmul
+ LD HL,5790999
+ LD E,198
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,14083298
+ LD E,72
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,9885816
+ LD E,202
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,5190233
+ LD E,75
+ CALL __fadd
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ CALL __fmul
+ LD (IX+-24),BC
+ LD (IX+-21),A
+; 63 temp2 = ((((ysq+q3)*ysq+q2)*ysq+q1)*ysq+q0);
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ LD HL,304971
+ LD E,67
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,1301602
+ LD E,70
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,13061735
+ LD E,72
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,255951
+ LD E,75
+ CALL __fadd
+ LD (IX+-28),BC
+ LD (IX+-25),A
+; 64 return(temp1/temp2);
+ LD HL,BC
+ LD BC,(IX+-24)
+ LD E,(IX+-25)
+ LD A,(IX+-21)
+ CALL __fdiv
+ LD E,A
+ LD HL,BC
+; 65 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _sinus ***************************
+;Name Addr/Register Size Type
+;_modf IMPORT ----- function
+;temp2 IX-28 4 variable
+;temp1 IX-24 4 variable
+;f IX-20 4 variable
+;e IX-16 4 variable
+;y IX-12 4 variable
+;ysq IX-8 4 variable
+;x IX-4 4 variable
+;quad IX+12 3 parameter
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 43 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _modf:ROM
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __ftol:ROM
+ XREF __ltof:ROM
+ XREF __itol:ROM
+ XREF __frameset0:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XREF __icmpzero:ROM
+ XDEF _sinus
+ XDEF _sin
+ END
diff --git a/frontends/calculator/CEdev/lib/static/sinh.src b/frontends/calculator/CEdev/lib/static/sinh.src new file mode 100644 index 0000000..79f6da9 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sinh.src @@ -0,0 +1,377 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\SINH.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9 /*
+; 10 sinh(arg) returns the hyperbolic sine of its floating-
+; 11 point argument.
+; 12
+; 13 The exponential function is called for arguments
+; 14 greater in magnitude than 0.5.
+; 15
+; 16 A series is used for arguments smaller in magnitude than 0.5.
+; 17 The coefficients are #2029 from Hart & Cheney. (20.36D)
+; 18
+; 19 cosh(arg) is computed from the exponential function for
+; 20 all arguments.
+; 21 */
+; 22
+; 23 #include <math.h>
+; 24
+; 25 #define p0 -0.630767364049772e+6
+; 26 #define p1 -0.899127202203951e+5
+; 27 #define p2 -0.289421135598956e+4
+; 28 #define p3 -0.263056321339750e+2
+; 29 #define q0 -0.630767364049772e+6
+; 30 #define q1 0.152151737879002e+5
+; 31 #define q2 -0.173678953558234e+3
+; 32
+; 33 double sinh(double arg) {
+_sinh:
+ LD HL,-24
+ CALL __frameset
+; 34 double temp, argsq;
+; 35 register int sign;
+; 36
+; 37 sign = 1;
+ LD BC,1
+ LD (IX+-11),BC
+; 38 if(arg < 0) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_4
+; 39 arg = -arg;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 40 sign = -1;
+ LD BC,16777215
+ LD (IX+-11),BC
+; 41 }
+L_4:
+; 42
+; 43 if(arg > 21.) {
+ LD HL,11010048
+ LD E,65
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_6
+; 44 temp = exp(arg)/2;
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _exp
+ POP BC
+ POP BC
+ LD A,E
+ LD BC,HL
+ OR A,A
+ SBC HL,HL
+ LD E,64
+ CALL __fdiv
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 45 if (sign>0)
+ LD BC,(IX+-11)
+ OR A,A
+ SBC HL,HL
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_2
+; 46 return(temp);
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ JR L_8
+; 47 else
+L_2:
+; 48 return(-temp);
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fneg
+ LD E,A
+ LD HL,BC
+ JR L_8
+; 49 }
+L_6:
+ OR A,A
+; 50
+; 51 if(arg > 0.5) {
+ SBC HL,HL
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_7
+; 52 return(sign*(exp(arg) - exp(-arg))/2);
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _exp
+ POP BC
+ POP BC
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+-14),HL ; spill
+ LD (IX+-17),BC ; spill
+ LD HL,(IX+-14) ; unspill
+ LD C,A
+ LD B,0
+ PUSH BC
+ LD (IX+-14),HL ; spill
+ LD HL,(IX+-17) ; unspill
+ PUSH HL
+ LD HL,(IX+-14) ; unspill
+ LD BC,HL
+ LD A,E
+ LD (IX+-23),BC
+ LD (IX+-24),A
+ CALL _exp
+ LD BC,(IX+-23)
+ LD A,(IX+-24)
+ POP IY
+ POP IY
+ CALL __fsub
+ LD (IX+-20),BC
+ LD BC,(IX+-11)
+ LD H,A
+ CALL __itol
+ CALL __ltof
+ LD E,A
+ LD A,H
+ LD HL,BC
+ LD BC,(IX+-20)
+ CALL __fmul
+ OR A,A
+ SBC HL,HL
+ LD E,64
+ CALL __fdiv
+ LD E,A
+ LD HL,BC
+ JR L_8
+; 53 }
+L_7:
+; 54
+; 55 argsq = arg*arg;
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fmul
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 56 temp = (((p3*argsq+p2)*argsq+p1)*argsq+p0)*arg;
+ LD HL,13791727
+ LD E,193
+ CALL __fmul
+ LD HL,3466082
+ LD E,197
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,11508828
+ LD E,199
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,1703670
+ LD E,201
+ CALL __fadd
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ CALL __fmul
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 57 temp /= (((argsq+q2)*argsq+q1)*argsq+q0);
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ LD HL,2993616
+ LD E,195
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,7191730
+ LD E,70
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD HL,1703670
+ LD E,201
+ CALL __fadd
+ LD E,A
+ LD A,(IX+-1)
+ LD HL,BC
+ LD BC,(IX+-4)
+ CALL __fdiv
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 58 return(sign*temp);
+ LD BC,(IX+-11)
+ CALL __itol
+ CALL __ltof
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+; 59 }
+L_8:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _sinh ***************************
+;Name Addr/Register Size Type
+;_exp IMPORT ----- function
+;sign IX-11 3 variable
+;argsq IX-8 4 variable
+;temp IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 36 (bytes)
+; Spill Code: 0 (instruction)
+
+
+; 60
+; 61 double cosh(double arg) {
+_cosh:
+ LD HL,-4
+ CALL __frameset
+; 62 double val;
+; 63
+; 64 if(arg < 0) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_10
+; 65 arg = -arg;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 66 }
+L_10:
+; 67
+; 68 val = exp(arg);
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _exp
+ POP BC
+ POP BC
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 69
+; 70 if(arg > 21.) {
+ LD E,65
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD HL,11010048
+ CALL __fcmp
+ JP P,L_12
+ OR A,A
+; 71 return(val/2);
+ SBC HL,HL
+ LD E,64
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fdiv
+ LD E,A
+ LD HL,BC
+ JR L_13
+; 72 }
+L_12:
+; 73
+; 74 val += exp(-arg);
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD DE,BC
+ LD C,A
+ LD B,0
+ PUSH BC
+ PUSH DE
+ CALL _exp
+ POP BC
+ POP BC
+ LD A,E
+ LD BC,HL
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fadd
+ LD (IX+-4),BC
+ LD (IX+-1),A
+ OR A,A
+; 75 val /= 2;
+ SBC HL,HL
+ LD E,64
+ CALL __fdiv
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 76 return(val);
+ LD E,(IX+-1)
+ LD HL,BC
+; 77 }
+L_13:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _cosh ***************************
+;Name Addr/Register Size Type
+;_exp IMPORT ----- function
+;val IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 16 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _exp:ROM
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __ltof:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XDEF _cosh
+ XDEF _sinh
+ END
diff --git a/frontends/calculator/CEdev/lib/static/sqrt.src b/frontends/calculator/CEdev/lib/static/sqrt.src new file mode 100644 index 0000000..7a20210 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/sqrt.src @@ -0,0 +1,83 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\SQRT.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9
+; 10 #include <errno.h>
+; 11 #include <math.h>
+; 12
+; 13 extern double sqrtf( double value );
+; 14
+; 15 // sqrt - Standard C library routine
+; 16 // sqrt returns the square root of its floating point argument.
+; 17 //
+; 18 // Arguments:
+; 19 // value - the floating point argument
+; 20 //
+; 21 // Returns:
+; 22 // - the square root (or zero if the argument is negative)
+; 23 //
+; 24
+; 25 double sqrt( double value ) {
+_sqrt:
+ CALL __frameset0
+; 26 if ( value < 0.0 ) {
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_1
+; 27 errno = EDOM;
+ LD BC,4
+ LD (_errno),BC
+ OR A,A
+; 28 return 0.0;
+ SBC HL,HL
+ LD E,0
+ JR L_2
+; 29 }
+L_1:
+; 30 return sqrtf( value );
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _sqrtf
+ POP BC
+ POP BC
+; 31 }
+L_2:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _sqrt ***************************
+;Name Addr/Register Size Type
+;_sqrtf IMPORT ----- function
+;_errno IMPORT 3 variable
+;value IX+6 4 parameter
+
+
+; Stack Frame Size: 12 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _sqrtf:ROM
+ XREF _errno:ROM
+ XREF __fcmp:ROM
+ XREF __frameset0:ROM
+ XDEF _sqrt
+ END
diff --git a/frontends/calculator/CEdev/lib/static/strtod.src b/frontends/calculator/CEdev/lib/static/strtod.src new file mode 100644 index 0000000..c879f1d --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/strtod.src @@ -0,0 +1,534 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\STRTOD.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9 #include <stdlib.h>
+; 10 #include <ctype.h>
+; 11 #include <stdio.h>
+; 12 #include <limits.h>
+; 13 #include <stddef.h>
+; 14 #include <math.h>
+; 15 #include <errno.h>
+; 16 //#include <float.h>
+; 17
+; 18
+; 19 /*************************************************
+; 20 *
+; 21 * strtod - string to double conversion
+; 22 *
+; 23 * Inputs:
+; 24 * str - pointer to the character string
+; 25 * endptr - pointer to pointer to char to
+; 26 * put address of first char past
+; 27 * the end of the string -- or NULL
+; 28 * Returns:
+; 29 * the value of the number
+; 30 *
+; 31 *************************************************/
+; 32 double strtod(char * str,char ** endptr)
+; 33 {
+_strtod:
+ LD HL,-23
+ CALL __frameset
+; 34 union
+; 35 {
+; 36 double d;
+; 37 unsigned short s[2];
+; 38 }val;
+; 39 int frac = 0;
+ LD BC,0
+ LD (IX+-12),BC
+; 40 int exp = 0;
+ LD (IX+-7),BC
+; 41 signed char sign = 1;
+ LD (IX+-9),1
+; 42 signed char exp_sign = 1;
+ LD (IX+-8),1
+; 43 double temp;
+; 44
+; 45 while (isspace(*str))
+ JR L_0
+L_1:
+; 46 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+L_0:
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ PUSH HL
+ CALL _isspace
+ POP BC
+ CALL __icmpzero
+ JR NZ,L_1
+; 47
+; 48 if (*str == '-') {
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,45
+ SBC HL,BC
+ JR NZ,L_4
+; 49 sign = -1;
+ LD (IX+-9),255
+; 50 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 51 }
+; 52 else if (*str == '+')
+ JR L_6
+L_4:
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,43
+ SBC HL,BC
+ JR NZ,L_6
+; 53 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+L_6:
+; 54
+; 55 val.d = 0;
+ LD BC,0
+ LD (IX+-4),BC
+ XOR A,A
+ LD (IX+-1),A
+; 56 while (*str >= '0' && *str <= '9') {
+ JR L_8
+L_9:
+; 57 val.d = val.d * 10 + (*str - '0');
+ LD HL,2097152
+ LD E,65
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fmul
+ LD (IX+-20),A
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD D,A
+ SEXT HL
+ LD L,D
+ LD IY,HL
+ LD (IX+-23),BC
+ LEA BC,IY+-48
+ CALL __itol
+ CALL __ltof
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-23)
+ LD A,(IX+-20)
+ CALL __fadd
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 58 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 59 }
+L_8:
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,48
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_14
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ LD BC,HL
+ LD HL,57
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_9
+L_14:
+; 60
+; 61 if (*str == '.') {
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,46
+ SBC HL,BC
+ JR NZ,L_24
+; 62 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 63 while (*str >= '0' && *str <= '9') {
+ JR L_11
+L_12:
+; 64 val.d = val.d * 10 + (*str - '0');
+ LD HL,2097152
+ LD E,65
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fmul
+ LD (IX+-16),A
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD D,A
+ SEXT HL
+ LD L,D
+ LD IY,HL
+ LD (IX+-19),BC
+ LEA BC,IY+-48
+ CALL __itol
+ CALL __ltof
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-19)
+ LD A,(IX+-16)
+ CALL __fadd
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 65 ++frac;
+ LD BC,(IX+-12)
+ INC BC
+ LD (IX+-12),BC
+; 66 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 67 }
+L_11:
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,48
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_24
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ LD BC,HL
+ LD HL,57
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_12
+; 68 }
+L_24:
+; 69
+; 70 if (*str == 'e' || *str == 'E') {
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,101
+ SBC HL,BC
+ JR Z,L_23
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,69
+ SBC HL,BC
+ JR NZ,L_26
+L_23:
+; 71 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 72 if (*str == '-') {
+ LD HL,BC
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,45
+ SBC HL,BC
+ JR NZ,L_18
+; 73 exp_sign = -1;
+ LD (IX+-8),255
+; 74 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 75 }
+; 76 else if (*str == '+') {
+ JR L_20
+L_18:
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,43
+ SBC HL,BC
+ JR NZ,L_20
+; 77 exp_sign = 1;
+ LD (IX+-8),1
+; 78 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 79 }
+; 80 while (*str >= '0' && *str <= '9') {
+ JR L_20
+L_21:
+; 81 exp = exp * 10 + (*str - '0');
+ LD HL,(IX+-7)
+ LD A,10
+ CALL __imul_b
+ LD IY,(IX+6)
+ LD A,(IY)
+ LD B,A
+ LD DE,HL
+ SEXT HL
+ LD L,B
+ LD IY,HL
+ LEA BC,IY+-48
+ LD HL,DE
+ ADD HL,BC
+ LD (IX+-7),HL
+; 82 ++str;
+ LD BC,(IX+6)
+ INC BC
+ LD (IX+6),BC
+; 83 }
+L_20:
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ OR A,A
+ LD BC,48
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_26
+ LD HL,(IX+6)
+ LD A,(HL)
+ LD B,A
+ SEXT HL
+ LD L,B
+ LD BC,HL
+ LD HL,57
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP P,L_21
+; 84 }
+L_26:
+; 85
+; 86 if (endptr)
+ LD HL,(IX+9)
+ CALL __icmpzero
+ JR Z,L_28
+; 87 *endptr = str;
+ LD HL,(IX+9)
+ LD BC,(IX+6)
+ LD (HL),BC
+L_28:
+; 88
+; 89 if (exp_sign < 0 )
+ LD A,(IX+-8)
+ OR A,A
+ JP P,L_29
+; 90 exp = -exp;
+ LD HL,(IX+-7)
+ CALL __ineg
+ LD (IX+-7),HL
+L_29:
+; 91 exp -= frac;
+ LD BC,(IX+-12)
+ LD HL,(IX+-7)
+ OR A,A
+ SBC HL,BC
+ LD (IX+-7),HL
+; 92 if (val.d != 0)
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR NZ,L_32
+ JR L_42
+; 93 {
+; 94 while (exp > 0 )
+L_33:
+; 95 {
+; 96 val.d *= 10.0;
+ LD HL,2097152
+ LD E,65
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fmul
+ LD (IX+-4),BC
+; 97 if (val.s[1] == 0x7f80)
+ LEA HL,IX+-2
+ LD (IX+-1),A
+ LD BC,(HL)
+ CALL __stoiu
+ OR A,A
+ LD BC,32640
+ SBC HL,BC
+ JR NZ,L_31
+; 98 {
+; 99 errno = ERANGE;
+ LD BC,5
+ LD (_errno),BC
+; 100 val.d = HUGE_VAL;
+ LD BC,(__huge_val)
+ LD A,(__huge_val+3)
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 101 break;
+ JR L_36
+; 102 }
+L_31:
+; 103 --exp;
+ LD BC,(IX+-7)
+ DEC BC
+ LD (IX+-7),BC
+; 104 }
+L_32:
+ LD BC,(IX+-7)
+ OR A,A
+ SBC HL,HL
+ OR A,A
+ SBC HL,BC
+ CALL __setflag
+ JP M,L_33
+; 105 while (exp < 0 )
+ JR L_36
+L_37:
+; 106 {
+; 107 val.d *= .1;
+ LD HL,13421773
+ LD E,61
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fmul
+ LD (IX+-4),BC
+; 108 if (val.s[1] == 0)
+ LEA HL,IX+-2
+ LD (IX+-1),A
+ LD HL,(HL)
+ CALL __scmpzero
+ JR NZ,L_35
+; 109 {
+; 110 errno = ERANGE;
+ LD BC,5
+ LD (_errno),BC
+; 111 break;
+ JR L_40
+; 112 }
+L_35:
+; 113 ++exp;
+ LD BC,(IX+-7)
+ INC BC
+ LD (IX+-7),BC
+; 114 }
+L_36:
+ LD HL,(IX+-7)
+ CALL __icmpzero
+ CALL __setflag
+ JP M,L_37
+L_40:
+; 115 if (sign < 0 )
+ LD A,(IX+-9)
+ OR A,A
+ JP P,L_42
+; 116 val.s[1] |= 0x8000;
+ LEA IY,IX+-2
+ LD (IX+-15),IY
+ LD HL,(IX+-15)
+ LD HL,(HL)
+ LD.LIS BC,32768
+ CALL __sor
+ LD BC,HL
+ LD HL,(IX+-15)
+ LD (HL),C
+ INC HL
+ LD (HL),B
+; 117 }
+L_42:
+; 118 return val.d;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+; 119 }
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _strtod ***************************
+;Name Addr/Register Size Type
+;__huge_val IMPORT 4 variable
+;_errno IMPORT 3 variable
+;_isspace IMPORT ----- function
+;frac IX-12 3 variable
+;sign IX-9 1 variable
+;exp_sign IX-8 1 variable
+;exp IX-7 3 variable
+;val IX-4 4 variable
+;endptr IX+9 3 parameter
+;str IX+6 3 parameter
+
+
+; Stack Frame Size: 35 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _errno:ROM
+ XREF _isspace:ROM
+ XREF __huge_val:ROM
+ XREF __ineg:ROM
+ XREF __sor:ROM
+ XREF __fadd:ROM
+ XREF __fmul:ROM
+ XREF __fcmp:ROM
+ XREF __ltof:ROM
+ XREF __stoiu:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XREF __scmpzero:ROM
+ XREF __icmpzero:ROM
+ XREF __imul_b:ROM
+ XDEF _strtod
+ END
diff --git a/frontends/calculator/CEdev/lib/static/tan.src b/frontends/calculator/CEdev/lib/static/tan.src new file mode 100644 index 0000000..e921da1 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/tan.src @@ -0,0 +1,330 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\TAN.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9 /*
+; 10 floating point tangent
+; 11
+; 12 A series is used after range reduction.
+; 13 Coefficients are #4285 from Hart & Cheney. (19.74D)
+; 14 */
+; 15
+; 16 #include <errno.h>
+; 17 #include <math.h>
+; 18
+; 19 #define invpi 1.27323954473516
+; 20 #define p0 -0.130682026475483e+5
+; 21 #define p1 0.105597090171495e+4
+; 22 #define p2 -0.155068565348327e+2
+; 23 #define p3 0.342255438724100e-1
+; 24 #define p4 0.338663864267717e-4
+; 25 #define q0 -0.166389523894712e+5
+; 26 #define q1 0.476575136291648e+4
+; 27 #define q2 -0.155503316403171e+3
+; 28
+; 29 double tan(double arg)
+; 30 {
+_tan:
+ LD HL,-26
+ CALL __frameset
+; 31 double sign, temp, e, x, xsq;
+; 32 int flag, i;
+; 33
+; 34 flag = 0;
+ LD BC,0
+ LD (IX+-19),BC
+; 35 sign = 1.;
+ LD BC,8388608
+ LD (IX+-4),BC
+ LD A,63
+ LD (IX+-1),A
+; 36 if(arg < 0.){
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_1
+; 37 arg = -arg;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 38 sign = -1.;
+ LD BC,8388608
+ LD (IX+-4),BC
+ LD A,191
+ LD (IX+-1),A
+; 39 }
+L_1:
+; 40 arg = arg*invpi; /*overflow?*/
+ LD HL,10680707
+ LD E,63
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fmul
+ LD (IX+6),BC
+ LD (IX+9),A
+; 41 x = modf(arg,(double *)&e);
+ PEA IX+-26
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _modf
+ POP BC
+ POP BC
+ POP BC
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 42 i = e;
+ LD BC,(IX+-26)
+ LD A,(IX+-23)
+ CALL __ftol
+ LD (IX+-22),BC
+; 43 switch(i%4) {
+ LD BC,4
+ LD HL,(IX+-22)
+ CALL __irems
+ CALL __seqcase
+L__1:
+ DW 4
+ DW 0
+ DB 0
+ DW24 L_6
+
+ DW24 L_2
+
+ DW24 L_3
+
+ DW24 L_4
+
+ DW24 L_6
+
+; 44 case 1:
+L_2:
+; 45 x = 1. - x;
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD BC,8388608
+ LD A,63
+ CALL __fsub
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 46 flag = 1;
+ LD BC,1
+ LD (IX+-19),BC
+; 47 break;
+ JR L_6
+; 48
+; 49 case 2:
+L_3:
+; 50 sign = - sign;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fneg
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 51 flag = 1;
+ LD BC,1
+ LD (IX+-19),BC
+; 52 break;
+ JR L_6
+; 53
+; 54 case 3:
+L_4:
+; 55 x = 1. - x;
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD BC,8388608
+ LD A,63
+ CALL __fsub
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 56 sign = - sign;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fneg
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 57 break;
+; 58
+; 59 case 0:
+; 60 break;
+; 61 }
+L_6:
+; 62
+; 63 xsq = x*x;
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __fmul
+ LD (IX+-12),BC
+ LD (IX+-9),A
+; 64 temp = ((((p4*xsq+p3)*xsq+p2)*xsq+p1)*xsq+p0)*x;
+ LD HL,920513
+ LD E,56
+ CALL __fmul
+ LD HL,798741
+ LD E,61
+ CALL __fadd
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ CALL __fmul
+ LD HL,7871510
+ LD E,193
+ CALL __fadd
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ CALL __fmul
+ LD HL,8650514
+ LD E,68
+ CALL __fadd
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ CALL __fmul
+ LD HL,4993232
+ LD E,198
+ CALL __fadd
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __fmul
+ LD (IX+-16),BC
+ LD (IX+-13),A
+; 65 temp = temp/(((1.0*xsq+q2)*xsq+q1)*xsq+q0);
+ LD BC,(IX+-12)
+ LD A,(IX+-9)
+ LD HL,1802457
+ LD E,195
+ CALL __fadd
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ CALL __fmul
+ LD HL,9760259
+ LD E,69
+ CALL __fadd
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ CALL __fmul
+ LD HL,8519144
+ LD E,198
+ CALL __fadd
+ LD E,A
+ LD HL,BC
+ LD BC,(IX+-16)
+ LD A,(IX+-13)
+ CALL __fdiv
+ LD (IX+-16),BC
+ LD (IX+-13),A
+; 66
+; 67 if(flag == 1) {
+ LD HL,(IX+-19)
+ OR A,A
+ LD BC,1
+ SBC HL,BC
+ JR NZ,L_12
+; 68 if(temp == 0.) {
+ LD HL,(IX+-16)
+ LD E,(IX+-13)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JR NZ,L_10
+; 69 errno = ERANGE;
+ LD BC,5
+ LD (_errno),BC
+; 70 if (sign>0)
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ OR A,A
+ SBC HL,HL
+ LD E,0
+ CALL __fcmp
+ JP P,L_8
+; 71 return(HUGE_VAL);
+ LD HL,(__huge_val)
+ LD A,(__huge_val+3)
+ LD E,A
+ JR L_13
+L_8:
+; 72 return(-HUGE_VAL);
+ LD BC,(__huge_val)
+ LD A,(__huge_val+3)
+ CALL __fneg
+ LD E,A
+ LD HL,BC
+ JR L_13
+; 73 }
+L_10:
+; 74 temp = 1./temp;
+ LD HL,(IX+-16)
+ LD E,(IX+-13)
+ LD BC,8388608
+ LD A,63
+ CALL __fdiv
+ LD (IX+-16),BC
+ LD (IX+-13),A
+; 75 }
+L_12:
+; 76 return(sign*temp);
+ LD HL,(IX+-16)
+ LD E,(IX+-13)
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ CALL __fmul
+ LD E,A
+ LD HL,BC
+; 77 }
+L_13:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _tan ***************************
+;Name Addr/Register Size Type
+;__huge_val IMPORT 4 variable
+;_errno IMPORT 3 variable
+;_modf IMPORT ----- function
+;e IX-26 4 variable
+;i IX-22 3 variable
+;flag IX-19 3 variable
+;temp IX-16 4 variable
+;xsq IX-12 4 variable
+;x IX-8 4 variable
+;sign IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 38 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _modf:ROM
+ XREF __huge_val:ROM
+ XREF _errno:ROM
+ XREF __irems:ROM
+ XREF __fadd:ROM
+ XREF __fsub:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __ftol:ROM
+ XREF __frameset:ROM
+ XREF __seqcase:ROM
+ XDEF _tan
+ END
diff --git a/frontends/calculator/CEdev/lib/static/tanh.src b/frontends/calculator/CEdev/lib/static/tanh.src new file mode 100644 index 0000000..ca81134 --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/tanh.src @@ -0,0 +1,129 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\TANH.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /************************************************************************/
+; 2 /* */
+; 3 /* Copyright (C)1987-2008 by */
+; 4 /* Zilog, Inc. */
+; 5 /* */
+; 6 /* San Jose, California */
+; 7 /* */
+; 8 /************************************************************************/
+; 9 /*
+; 10 tanh(arg) computes the hyperbolic tangent of its floating
+; 11 point argument.
+; 12
+; 13 sinh and cosh are called except for large arguments, which
+; 14 would cause overflow improperly.
+; 15 */
+; 16
+; 17 #include <math.h>
+; 18
+; 19 double tanh(double arg)
+; 20 {
+_tanh:
+ LD HL,-10
+ CALL __frameset
+; 21 double sign;
+; 22
+; 23 sign = 1.;
+ LD BC,8388608
+ LD (IX+-4),BC
+ LD A,63
+ LD (IX+-1),A
+; 24 if(arg < 0.){
+ LD HL,(IX+6)
+ LD E,(IX+9)
+ LD BC,0
+ XOR A,A
+ CALL __fcmp
+ JP P,L_2
+; 25 arg = -arg;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fneg
+ LD (IX+6),BC
+ LD (IX+9),A
+; 26 sign = -1.;
+ LD BC,8388608
+ LD (IX+-4),BC
+ LD A,191
+ LD (IX+-1),A
+; 27 }
+L_2:
+; 28
+; 29 if(arg > 21.)
+ LD HL,11010048
+ LD E,65
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ CALL __fcmp
+ JP P,L_3
+; 30 return(sign);
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ JR L_4
+L_3:
+; 31
+; 32 return(sign*sinh(arg)/cosh(arg));
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ CALL _sinh
+ POP BC
+ POP BC
+ LD A,E
+ LD BC,HL
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ CALL __fmul
+ LD (IX+-7),BC
+ LD C,(IX+9)
+ LD B,0
+ PUSH BC
+ LD BC,(IX+6)
+ PUSH BC
+ LD B,A
+ LD (IX+-10),BC
+ CALL _cosh
+ LD BC,(IX+-10)
+ POP IY
+ POP IY
+ LD A,B
+ LD BC,(IX+-7)
+ CALL __fdiv
+ LD E,A
+ LD HL,BC
+; 33 }
+L_4:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** _tanh ***************************
+;Name Addr/Register Size Type
+;_cosh IMPORT ----- function
+;_sinh IMPORT ----- function
+;sign IX-4 4 variable
+;arg IX+6 4 parameter
+
+
+; Stack Frame Size: 22 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _sinh:ROM
+ XREF _cosh:ROM
+ XREF __fmul:ROM
+ XREF __fdiv:ROM
+ XREF __fneg:ROM
+ XREF __fcmp:ROM
+ XREF __frameset:ROM
+ XDEF _tanh
+ END
diff --git a/frontends/calculator/CEdev/lib/static/ufltinfo.src b/frontends/calculator/CEdev/lib/static/ufltinfo.src new file mode 100644 index 0000000..8d15a7d --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ufltinfo.src @@ -0,0 +1,511 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\UFLTINFO.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /*************************************************
+; 2 * Copyright (C) 1999-2008 by Zilog, Inc.
+; 3 * All Rights Reserved
+; 4 *************************************************/
+; 5
+; 6 #include <stddef.h>
+; 7 #include <format.h>
+; 8 #include <string.h>
+; 9
+; 10 #define BIT_PACKING 0
+; 11 #if (BIT_PACKING == 1)
+; 12 typedef union
+; 13 {
+; 14 float f;
+; 15 struct {
+; 16 unsigned long sign:1,
+; 17 exponent:8,
+; 18 mantissa:23;
+; 19 } s;
+; 20 long l;
+; 21 } ieee_795_float;
+; 22 #else
+; 23 typedef union {
+; 24 float f;
+; 25 unsigned long l;
+; 26 struct {
+; 27 unsigned int exponent1:1;
+; 28 unsigned int mantissa:23;
+; 29 unsigned int dummy:16;
+; 30 unsigned int sign:1, exponent2:7;
+; 31 } s;
+; 32 }ieee_795_float;
+; 33 #define EXP(e) ((e##2 << 1) | (e##1))
+; 34 #endif
+; 35
+; 36
+; 37 typedef long reg_t;
+; 38 typedef unsigned long ureg_t;
+; 39 /*************************************************
+; 40 *
+; 41 * _u_flt_info - Fills flt_info structure
+; 42 *
+; 43 * Inputs:
+; 44 * val - value to be converted
+; 45 * info - flt_info structure to be filled in.
+; 46 *
+; 47 * Outputs:
+; 48 * info->sign - TRUE if val is negative; FALSE otherwise.
+; 49 * info->exp - The power of ten in scientific notation.
+; 50 * info->digits[] - The first digit is the ones place, the rest are
+; 51 * decimal digits.
+; 52 *
+; 53 * Returns:
+; 54 * nothing
+; 55 *
+; 56 * Notes:
+; 57 * I moved the rounding out to the calling routine (which does it
+; 58 * anyway). As a space optimization, we compute all the digits out
+; 59 * to MAXDIGITS, so we no longer pay attention to ndig.<THH>
+; 60 * This only works for floating-point numbers having the format as
+; 61 * specified in the above structure.
+; 62 * Algorithm:
+; 63 * Too much precision is lost working in the floating-point domain, so we
+; 64 * unpack the fields of the floating-point number, force the base-2
+; 65 * exponent to zero and then convert the normalized mantissa to decimal
+; 66 * digits.
+; 67 *************************************************/
+; 68 void _u_flt_info(float val,struct flt_info * info)
+; 69 {
+__u_flt_info:
+ LD HL,-25
+ CALL __frameset
+; 70 ieee_795_float rep;
+; 71 register reg_t exp; // The base-2 exponent as a signed value.
+; 72 register reg_t exp10 = 0; // The base-10 exponent.
+ LD BC,0
+ LD (IX+-12),BC
+ XOR A,A
+ LD (IX+-9),A
+; 73 register ureg_t mant; // The mantissa, as an unsigned value.
+; 74 register ureg_t i;
+; 75
+; 76 // Clear the info structure (represents +0.000000000).
+; 77 memset(info,0,sizeof(struct flt_info));
+ LD BC,12
+ PUSH BC
+ LD BC,0
+ PUSH BC
+ LD BC,(IX+12)
+ PUSH BC
+ CALL _memset
+ POP BC
+ POP BC
+ POP BC
+; 78
+; 79 rep.f = val;
+ LD BC,(IX+6)
+ LD A,(IX+9)
+ LD (IX+-18),BC
+ LD (IX+-15),A
+; 80
+; 81 // All zero means zero!
+; 82 if (rep.l == 0) return;
+ LD HL,BC
+ LD E,(IX+-15)
+ CALL __lcmpzero
+ JR Z,L_26
+; 83
+; 84 if (rep.s.sign)
+ LD HL,(IX+-15)
+ LD A,16
+ CALL __ishl_b
+ LD A,23
+ CALL __ishru_b
+ CALL __icmpzero
+ JR Z,L_3
+; 85 info->flags = FLT_INFO_SIGN;
+ LD IY,(IX+12)
+ LD (IY+0),1
+L_3:
+; 86
+; 87 // OK, unpack some fields.
+; 88
+; 89 exp = EXP(rep.s.exponent);
+ LEA BC,IX+-18
+ LD (IX+-25),BC
+ LD IY,(IX+-25)
+ LD HL,(IY+3)
+ LD A,17
+ CALL __ishl_b
+ LD A,17
+ CALL __ishru_b
+ ADD HL,HL
+ LD DE,HL
+ LD HL,(IY+0)
+ LD A,23
+ CALL __ishru_b
+ LD BC,HL
+ LD HL,DE
+ CALL __ior
+ LD BC,HL
+ CALL __itol
+ LD (IX+-8),BC
+ LD (IX+-5),A
+; 90
+; 91 mant = rep.s.mantissa;
+ LD HL,(IY+0)
+ ADD HL,HL
+ LD A,1
+ CALL __ishru_b
+ LD BC,HL
+ CALL __itol
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 92
+; 93 // If the exponent is 0xff, it is a special representation (Inf or NaN).
+; 94 if (exp == 0xff)
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ XOR A,A
+ LD BC,255
+ CALL __lcmps
+ JR NZ,L_9
+; 95 {
+; 96 // If the mantissa is zero, it's Inf; otherwise, NaN.
+; 97 if (rep.s.mantissa == 0)
+ LD HL,(IX+-18)
+ ADD HL,HL
+ LD A,1
+ CALL __ishru_b
+ CALL __icmpzero
+ JR NZ,L_5
+; 98 info->flags |= FLT_INFO_INF;
+ LD IY,(IX+12)
+ LD A,(IY+0)
+ SET 1,A
+ LD (IY+0),A
+; 99 else
+ JR L_26
+L_5:
+; 100 info->flags |= FLT_INFO_NAN;
+ LD IY,(IX+12)
+ LD A,(IY+0)
+ SET 2,A
+ LD (IY+0),A
+; 101 return;
+ JR L_26
+; 102 }
+L_9:
+; 103
+; 104 // If the exponent is zero, this is a denormalized number.
+; 105 if (exp != 0)
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __lcmpzero
+ JR Z,L_10
+; 106 {
+; 107 mant |= 0x800000uL; // Or in the implicit bit.
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,8388608
+ XOR A,A
+ CALL __lor
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 108 --exp; // And decrement the exponent.
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD BC,16777215
+ LD A,255
+ CALL __ladd
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 109 // (denormalized numbers are offset 126, not offset 127.
+; 110 // In the assembly realm, we could handle this in one step by shifting the 1
+; 111 // into the msb of a left-adjusted 23-bit mantissa.
+; 112 }
+L_10:
+; 113
+; 114 // Now, we have something that looks like
+; 115 // 0000 0000 x.xxx xxxx xxxx xxxx xxxx xxxx
+; 116 // in mant, and the binary exponent -- offset by +126 -- in exp.
+; 117 //
+; 118 // Now, we want to shift the mantissa left so we leave a few guard bits at the
+; 119 // right end of the word, but we also want to leave four bits to the left of
+; 120 // the decimal point so we can pick off the decimal digits later.
+; 121 //
+; 122 // If we move the decimal point from where it is to the right end of the first
+; 123 // nibble, we essentially subtract 5 bits from the offset. But shifting the
+; 124 // mantissa left by the same number of bits cancels the difference.
+; 125 // Let's do the shift and subtract the remaining offset.
+; 126 mant <<= 5;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD L,5
+ CALL __lshl
+ LD (IX+-4),BC
+ LD (IX+-1),A
+; 127 exp -= 126;
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD A,255
+ LD BC,16777090
+ CALL __ladd
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 128
+; 129 // Now the picture is
+; 130 // 000x.xxxx xxxx xxxx xxxx xxxx xxx0 0000
+; 131
+; 132 // We want to drive the base-2 exponent to zero, and accumulate multiplication
+; 133 // or division by 10 in the base-10 exponent.
+; 134 // We start by decrementing the exponent while shifting the bits in the
+; 135 // mantissa left by 1 each time. This changes the representation, but not its
+; 136 // value.
+; 137 // If the msb becomes true, a shift would cause us to lose information, so in
+; 138 // that case, we divide the mantissa by 10 and increment the base-10
+; 139 // exponent. Once again, this changes the bits in the representation, but not
+; 140 // the value that is represented -- at least not very much. Division by 10
+; 141 // may cause bits to fall of the end of the 32-bit word, and some precision is
+; 142 // lost. But we always have a whole nibble, plus about 2/3 of a bit as guard
+; 143 // bits.
+; 144
+; 145
+; 146 // At most one of the following while loops will execute.
+; 147
+; 148 // If the base-2 exponent is positive, this while loop drives it to zero by
+; 149 // repeatedly shifting the mantissa left by one bit and decrementing the exponent.
+; 150 // This changes the representation, but leaves unchanged the value
+; 151 // it represents.
+; 152 while (exp > 0)
+ JR L_14
+L_15:
+; 153 {
+; 154 if ((mant >> 27) > 9)
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD L,27
+ CALL __lshru
+ LD HL,9
+ CALL __lcmpu
+ JR NC,L_12
+; 155 {
+; 156 // If a left shift would cause something greater than 9 to appear in the
+; 157 // first nibble, normalize right.
+; 158 mant /= 5;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,5
+ XOR A,A
+ CALL __ldivu
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 159 ++exp10;
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ LD A,1
+ CALL __ladd_b
+ LD (IX+-12),HL
+ LD (IX+-9),E
+; 160 }
+; 161 else
+ JR L_13
+L_12:
+; 162 mant <<= 1;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD L,1
+ CALL __lshl
+ LD (IX+-4),BC
+ LD (IX+-1),A
+L_13:
+; 163 // Dividing by 5 and adding one to the base-10 exponent is the same as
+; 164 // shifting left by one bit: They both multiply the representation by two.
+; 165 // Decrementing the base-2 exponent leaves the entire representation unchanged.
+; 166 --exp;
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD BC,16777215
+ LD A,255
+ CALL __ladd
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 167 }
+L_14:
+ OR A,A
+ SBC HL,HL
+ LD E,0
+ LD BC,(IX+-8)
+ LD A,(IX+-5)
+ CALL __lcmps
+ CALL __setflag
+ JP M,L_15
+; 168
+; 169 // If the base-2 exponent is negative, this while loop drives it to zero by
+; 170 // repeatedly shifting the mantissa right by one bit and incrementing the exponent.
+; 171 while (exp < 0)
+ JR L_19
+L_20:
+; 172 {
+; 173 if ((mant >> 28) < 2)
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD L,28
+ CALL __lshru
+ LD E,A
+ LD HL,BC
+ LD BC,2
+ XOR A,A
+ CALL __lcmpu
+ JR NC,L_17
+; 174 {
+; 175 // If a right shift would cause the first nibble to go to zero, normalize left.
+; 176 mant *= 5;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,5
+ XOR A,A
+ CALL __lmulu
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 177 --exp10;
+ LD HL,(IX+-12)
+ LD E,(IX+-9)
+ LD BC,16777215
+ LD A,255
+ CALL __ladd
+ LD (IX+-12),HL
+ LD (IX+-9),E
+; 178 }
+; 179 else
+ JR L_18
+L_17:
+; 180 mant >>= 1;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD L,1
+ CALL __lshru
+ LD (IX+-4),BC
+ LD (IX+-1),A
+L_18:
+; 181 // Multiplying by 5 and subtracting one from the base-10 exponent is the
+; 182 // same as shifting right by one bit: They both divide the representation by 2.
+; 183 // Incrementing the base-2 exponent leaves the entire representation unchanged.
+; 184 ++exp;
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ LD A,1
+ CALL __ladd_b
+ LD (IX+-8),HL
+ LD (IX+-5),E
+; 185 }
+L_19:
+ LD HL,(IX+-8)
+ LD E,(IX+-5)
+ CALL __lcmpzero
+ CALL __setflag
+ JP M,L_20
+; 186
+; 187 // Now, that we have driven the base-2 exponent to zero, the base-10 exponent
+; 188 // is ready.
+; 189 info->exp = exp10;
+ LD A,(IX+-12)
+ LD IY,(IX+12)
+ LD (IY+1),A
+; 190
+; 191 // Finally, we can pick off the digits.
+; 192 // This is done by picking off the first nibble (which must be a decimal digit
+; 193 // between 1 and 9 inclusive) and then multiplying the remaining 28 bits by
+; 194 // 10. That leaves another decimal digit (in [0,9]) in the top nibble, so we
+; 195 // just loop for as many digits as we want.
+; 196 for (i=0; i < MAXDIGITS; ++i)
+ LD BC,0
+ LD (IX+-22),BC
+ XOR A,A
+ LD (IX+-19),A
+ JR L_25
+L_23:
+; 197 {
+; 198 info->digits[i] = mant >> 28;
+ LD BC,(IX+-4)
+ LD A,(IX+-1)
+ LD L,28
+ CALL __lshru
+ LD IY,(IX+12)
+ LEA HL,IY+2
+ LD DE,(IX+-22)
+ ADD HL,DE
+ LD (HL),C
+; 199 mant &= 0xfffffffuL;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,16777215
+ LD A,15
+ CALL __land
+ LD (IX+-4),HL
+ LD (IX+-1),E
+; 200 mant *= 10;
+ LD HL,(IX+-4)
+ LD E,(IX+-1)
+ LD BC,10
+ XOR A,A
+ CALL __lmulu
+ LD (IX+-4),HL
+ LD (IX+-1),E
+ LD HL,(IX+-22)
+ LD E,(IX+-19)
+ LD A,1
+ CALL __ladd_b
+ LD (IX+-22),HL
+ LD (IX+-19),E
+; 201 }
+L_25:
+ LD HL,(IX+-22)
+ LD E,(IX+-19)
+ LD BC,10
+ XOR A,A
+ CALL __lcmpu
+ JR C,L_23
+; 202
+; 203 /* Rounding moved out to callers of _u_flt_info(). */
+; 204 }
+L_26:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** __u_flt_info ***************************
+;Name Addr/Register Size Type
+;_memset IMPORT ----- function
+;i IX-22 4 variable
+;rep IX-18 6 variable
+;exp10 IX-12 4 variable
+;exp IX-8 4 variable
+;mant IX-4 4 variable
+;info IX+12 3 parameter
+;val IX+6 4 parameter
+
+
+; Stack Frame Size: 40 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF _memset:ROM
+ XREF __lcmps:ROM
+ XREF __lcmpu:ROM
+ XREF __ladd:ROM
+ XREF __ldivu:ROM
+ XREF __lmulu:ROM
+ XREF __ior:ROM
+ XREF __lor:ROM
+ XREF __land:ROM
+ XREF __lshl:ROM
+ XREF __lshru:ROM
+ XREF __itol:ROM
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XREF __icmpzero:ROM
+ XREF __lcmpzero:ROM
+ XREF __ladd_b:ROM
+ XREF __ishl_b:ROM
+ XREF __ishru_b:ROM
+ XDEF __u_flt_info
+ END
diff --git a/frontends/calculator/CEdev/lib/static/ufltrnd.src b/frontends/calculator/CEdev/lib/static/ufltrnd.src new file mode 100644 index 0000000..2c1a2be --- /dev/null +++ b/frontends/calculator/CEdev/lib/static/ufltrnd.src @@ -0,0 +1,210 @@ +; Zilog eZ80 ANSI C Compiler Release 3.4
+; -optsize -nomodsect -peephole -globalopt -localcse
+; -const=ROM
+ FILE "..\UFLTRND.C"
+ .assume ADL=1
+ SEGMENT CODE
+; 1 /*************************************************
+; 2 * Copyright (C) 1999-2008 by Zilog, Inc.
+; 3 * All Rights Reserved
+; 4 *************************************************/
+; 5
+; 6 #include <stddef.h>
+; 7 #include <format.h>
+; 8
+; 9 /*************************************************
+; 10 *
+; 11 * _u_flt_rnd - Round to specified number of digits
+; 12 *
+; 13 * Inputs:
+; 14 * info - flt_info structure
+; 15 * digits - number of digits of precision
+; 16 *
+; 17 * Returns:
+; 18 * nothing
+; 19 *
+; 20 *************************************************/
+; 21 void _u_flt_rnd(struct flt_info *info, char digits)
+; 22 {
+__u_flt_rnd:
+ LD HL,-18
+ CALL __frameset
+; 23 register unsigned char i;
+; 24 register unsigned char carry,any;
+; 25
+; 26 if (digits <= 0)
+ XOR A,A
+ CP A,(IX+9)
+ CALL __setflag
+ JP P,L_14
+; 27 return;
+; 28
+; 29 carry = any = 0;
+ LD (IX+-3),0
+ LD (IX+-2),0
+; 30 for (i = MAXDIGITS-1; i >= digits; -- i) {
+ LD (IX+-1),9
+ JR L_4
+L_2:
+; 31 carry = info->digits[i] >= 5;
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,HL
+ LD IY,(IX+6)
+ LEA HL,IY+2
+ ADD HL,BC
+ LD (IX+-9),HL
+ LD A,(HL)
+ UEXT HL
+ LD L,A
+ OR A,A
+ LD BC,5
+ SBC HL,BC
+ CALL __setflag
+ JP M,L__2
+ LD A,1
+ JR L__3
+L__2:
+ XOR A,A
+L__3:
+ LD (IX+-2),A
+; 32 any |= info->digits[i];
+ LD HL,(IX+-9)
+ LD A,(HL)
+ OR A,(IX+-3)
+ LD (IX+-3),A
+; 33 info->digits[i] = 0;
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,HL
+ LD IY,(IX+6)
+ LEA HL,IY+2
+ ADD HL,BC
+ LD (HL),0
+ DEC (IX+-1)
+; 34 }
+L_4:
+ LD A,(IX+-1)
+ CP A,(IX+9)
+ JR NC,L_2
+; 35
+; 36 if (carry)
+ LD A,(IX+-2)
+ OR A,A
+ JR Z,L_9
+; 37 ++info->digits[i];
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,HL
+ LD IY,(IX+6)
+ LEA HL,IY+2
+ ADD HL,BC
+ LD (IX+-18),HL ; spill
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,HL
+ LEA HL,IY+2
+ ADD HL,BC
+ LD (IX+-15),HL ; spill
+ LD HL,(IX+-18) ; unspill
+ LD A,(HL)
+ LD HL,(IX+-15) ; unspill
+ INC A
+ LD (HL),A
+; 38 while (i > 0 && info->digits[i] == 10) {
+ JR L_9
+L_10:
+; 39 info->digits[i] = 0;
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,(IX+-6)
+ ADD HL,BC
+ LD (HL),0
+; 40 --i;
+ DEC (IX+-1)
+; 41 info->digits[i]++;
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,(IX+-6)
+ ADD HL,BC
+ LD (IX+-12),HL
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD IY,(IX+-12)
+ LD BC,(IX+-6)
+ ADD HL,BC
+ LD A,(IY)
+ INC A
+ LD (HL),A
+; 42 }
+L_9:
+ XOR A,A
+ CP A,(IX+-1)
+ JR NC,L_13
+ LD IY,(IX+6)
+ LEA BC,IY+2
+ LD (IX+-6),BC
+ LD A,(IX+-1)
+ UEXT HL
+ LD L,A
+ LD BC,HL
+ LEA HL,IY+2
+ ADD HL,BC
+ LD A,(HL)
+ UEXT HL
+ LD L,A
+ OR A,A
+ LD BC,10
+ SBC HL,BC
+ JR Z,L_10
+L_13:
+; 43
+; 44 if (info->digits[0] == 10) {
+ LD IY,(IX+6)
+ LD A,(IY+2)
+ UEXT HL
+ LD L,A
+ OR A,A
+ LD BC,10
+ SBC HL,BC
+ JR NZ,L_14
+; 45 ++info->exp;
+ LD IY,(IX+6)
+ LD A,(IY+1)
+ INC A
+ LD (IY+1),A
+; 46 info->digits[0] = 1;
+ LD (IY+2),1
+; 47 }
+; 48 }
+L_14:
+ LD SP,IX
+ POP IX
+ RET
+
+
+;**************************** __u_flt_rnd ***************************
+;Name Addr/Register Size Type
+;G_0 IX-6 3 variable
+;any IX-3 1 variable
+;carry IX-2 1 variable
+;i IX-1 1 variable
+;digits IX+9 1 parameter
+;info IX+6 3 parameter
+
+
+; Stack Frame Size: 30 (bytes)
+; Spill Code: 0 (instruction)
+
+
+ XREF __frameset:ROM
+ XREF __setflag:ROM
+ XDEF __u_flt_rnd
+ END
|