
PAGE 01    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

002                         ORG   :E7D2
003                 *
004                 *
005                 *
006                 *******
007                 * SIN *
008                 *******
009                 *
010                 * MACC = SIN (MACC)  (Angle expressed in radians).
011                 *
012                 * See XCOS for explanation.
013                 *
014 E7D2 F5         XSIN    PUSH  PSW
015 E7D3 C5                 PUSH  B
016 E7D4 D5                 PUSH  D
017 E7D5 E5                 PUSH  H
018 E7D6 C3E3E7             JMP   :E7E3     To common part XSIN/XCOS
019                 *
020                 *******
021                 * COS *
022                 *******
023                 *
024                 * MACC = COS (MACC)  (Angle expressed in radians).
025                 *
026                 * Method: Polynomial approximation.
027                 *
028                 * Cos(X) is converted: cos(X) = sin(X+PI/2).
029                 *
030                 * Given X, N and Y are defined for:
031                 *      X/(2*PI) = N + Y; N is integer part.
032                 *
033                 * All arguments are converted to a range -PI/2 to
034                 * +PI/2:
035                 *      sin(N*2*PI+K) = sin(K)
036                 *      sin(PI/2+K)   = sin(PI/2-K)
037                 *      sin(PI*3/2+K) = sin(PI*3/2-K)
038                 *      sin(-PI/2+K)  = sin(-PI/2-K).
039                 *
040                 * Polynomial approx. F(Y) for sin(2*PI*Y) is:
041                 *      F(Y) = a1*Y + a2*Y^3 + ... + a5*Y^9.
042                 *
043 E7D9 F5         XCOS    PUSH  PSW
044 E7DA C5                 PUSH  B
045 E7DB D5                 PUSH  D
046 E7DC E5                 PUSH  H
047 E7DD 2133E8             LXI   H,:E833   Addr PI/2
048 E7E0 CD72EA             CALL  :EA72     X = X + PI/2
049                             
050                 * Entry from XSIN:
051                             
052 E7E3 213FE8     L1E132  LXI   H,:E83F   Addr PI*2
053 E7E6 CD20EA             CALL  :EA20     MACC = X/(2*PI) = N+Y
054 E7E9 CD54E1             CALL  :E154     Get FRAC(MACC) = Y
055 E7EC 21D500             LXI   H,:00D5   Addr MACC
056 E7EF 7E                 MOV   A,M       Get exp.byte
057 E7F0 E67F               ANI   :7F       Exp only
058 E7F2 CAFAE7             JZ    :E7FA     Jump if exp is 0
059 E7F5 FE7E               CPI   :7E
060 E7F7 DA18E8             JC    :E818     Jump if exp < 7E
061 E7FA BE         L1E133  CMP   M         Comp masked/non-masked exp
062 E7FB 2162C4             LXI   H,:C462   Addr FPT (1)
063 E7FE C472EA             CNZ   :EA72     Add 1 to Y if X negative

PAGE 02    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

064 E801 2137E8             LXI   H,:E837   Addr FPT (0.25)
065 E804 E5                 PUSH  H         Save pntr
066 E805 CD6DEA             CALL  :EA6D     MACC = MACC - 0.25
067 E808 CDEEE9             CALL  :E9EE     Take abs. value
068 E80B 213BE8             LXI   H,:E83B   Addr FPT (0.5)
069 E80E CD6DEA             CALL  :EA6D     MACC = MACC - 0.5
070 E811 CDEEE9             CALL  :E9EE     Take abs. value
071 E814 E1                 POP   H         Get addr FPT (0.25)
072 E815 CD6DEA             CALL  :EA6D     MACC = MACC - 0.25
073 E818 21E300     L1E134  LXI   H,:00E3
074 E81B E5                 PUSH  H
075 E81C CDD6E9             CALL  :E9D6     Copy MACC into 00E3-E6
076 E81F E3                 XTHL            HL=00E3; stack: 00E7
077 E820 CD59EA             CALL  :EA59     MACC = 2 * MACC
078 E823 E1                 POP   H         HL=00E7
079 E824 CDDBE9             CALL  :E9DB     Copy 2*MACC into 00E7-EA
080 E827 CD16EA             CALL  :EA16     Clear MACC + reg ABCD
081 E82A 213FE8             LXI   H,:E83F   Addr Taylor sum constants
082 E82D CDAAE5             CALL  :E5AA     Calc Taylor sum
083 E830 C34DC1             JMP   :C14D     Popall, ret
084                             
085                 * CONSTANTS FOR 'XSIN' AND 'XCOS':
086                             
087 E833 01         FPHPI   DATA  :01       FPT (PI/2)
088 E834 C9                 DATA  :C9
089 E835 0F                 DATA  :0F
090 E836 DB                 DATA  :DB
091                 *
092 E837 7F         L1E304  DATA  :7F       FPT (0.25)
093 E838 80                 DATA  :80
094 E839 00                 DATA  :00
095 E83A 00                 DATA  :00
096                 *
097 E83B 00         L1E305  DATA  :00       FPT (0.5)
098 E83C 80                 DATA  :80
099 E83D 00                 DATA  :00
100 E83E 00                 DATA  :00
101                 *
102 E83F 03         L1E306  DATA  :03       a1: about PI*2
103 E840 C9                 DATA  :C9       6.2831853
104 E841 0F                 DATA  :0F
105 E842 DB                 DATA  :DB
106                 *
107 E843 86                 DATA  :86       a2: about -(PI*2)^3/3!
108 E844 A5                 DATA  :A5       -41.341681
109 E845 5D                 DATA  :5D
110 E846 E2                 DATA  :E2
111                 *
112 E847 07                 DATA  :07       a3: about (PI*2)^5/5!
113 E848 A3                 DATA  :A3       81.602481
114 E849 34                 DATA  :34
115 E84A 78                 DATA  :78
116                 *
117 E84B 87                 DATA  :87       a4: about -(PI*2)^7/7!
118 E84C 99                 DATA  :99       -76.581285
119 E84D 29                 DATA  :29
120 E84E 9E                 DATA  :9E
121                 *
122 E84F 06                 DATA  :06       a5: about (PI*2)^9/9!
123 E850 9F                 DATA  :9F       39.760722
124 E851 0A                 DATA  :0A
125 E852 FB                 DATA  :FB

PAGE 03    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

126                 *
127 E853 00                 DATA  :00       End of table
128 E854 00                 DATA  :00
129                 *
130                 *********
131                 * POWER *
132                 *********
133                 *
134                 * MACC = MACC ^ MEM.
135                 *
136                 * Entry: HL points to power in memory.
137                 * Exit:  All registers preserved.
138                 *
139                 * Conditions for a^X:
140                 *       a > 0.
141                 *       ABS (x*ln(a)) in valid range.
142                 *
143                 * Method: a^X = e^(X*ln(a)).
144                 *
145 E855 F5         XPWR    PUSH  PSW
146 E856 C5                 PUSH  B
147 E857 D5                 PUSH  D
148 E858 E5                 PUSH  H
149 E859 E5                 PUSH  H         Save addr X
150 E85A CDF8E9             CALL  :E9F8     Get a in reg ABCD
151 E85D E1                 POP   H         Restore addr X
152 E85E CA6DE8             JZ    :E86D     Abort if a = 0
153 E861 FAD0E9             JM    :E9D0     Argument error if nr < 0
154 E864 CD45E7             CALL  :E745     MACC = ln(a)
155 E867 CD59EA             CALL  :EA59     MACC = X*ln(a)
156 E86A CD67E6             CALL  :E667     MACC = e^(X*ln(a))
157 E86D C34DC1     XPW10   JMP   :C14D     Popall, ret
158                 *
159                 ********
160                 * LOGT *
161                 ********
162                 *
163                 * MACC = LOG (MACC).
164                 *
165                 * Method: log(X) = ln(x) / ln(10).
166                 *
167                 * Exit: All registers preserved.
168                 *
169 E870 F5         XLOG    PUSH  PSW
170 E871 C5                 PUSH  B
171 E872 D5                 PUSH  D
172 E873 E5                 PUSH  H
173 E874 CD45E7             CALL  :E745     MACC = ln(ABS(X))
174 E877 2190E8             LXI   H,:E890   Addr 1/ln(10)
175 E87A CD59EA             CALL  :EA59     MACC = ln(x)/ln(10)
176 E87D C34DC1             JMP   :C14D     Popall, ret
177                 *
178                 ********
179                 * ALOG *
180                 ********
181                 *
182                 * MACC = ALOG (MACC).
183                 *
184                 * Method: 10^X = e^(X*ln(10)).
185                 *
186                 * Exit: All registers preserved.
187                 *

PAGE 04    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

188 E880 F5         XALOG   PUSH  PSW
189 E881 C5                 PUSH  B
190 E882 D5                 PUSH  D
191 E883 E5                 PUSH  H
192 E884 2190E8             LXI   H,:E890   Addr 1/ln(10)
193 E887 CD20EA             CALL  :EA20     MACC = X*ln(10)
194 E88A CD67E6             CALL  :E667     MACC = e^(X*ln(10))
195 E88D C34DC1             JMP   :C14D     Popall, ret
196                             
197                 * CONSTANT FOR 'XLOG' AND 'XALOG':
198                             
199 E890 7F         FLGTI   DATA  :7F       1/ln(10)
200 E891 DE                 DATA  :DE
201 E892 5B                 DATA  :5B
202 E893 D9                 DATA  :D9
203                 *
204                 *******
205                 * TAN *
206                 *******
207                 *
208                 * MACC = TAN (MACC)  (Angle in radians).
209                 *
210                 * Method: tan(X) = sin(X)/cos(X).
211                 *         In-accurate for X close to 0 or close
212                 *         to n*PI/2.
213                 *
214                 * Exit: All registers preserved.
215                 *
216 E894 E5         XTAN    PUSH  H
217 E895 CD1EC2             CALL  :C21E     Save X on stack
218 E898 CDD9E7             CALL  :E7D9     MACC = cos(X)
219 E89B 21EF00             LXI   H,:00EF
220 E89E CD1CE1             CALL  :E11C     Store cos(X) in 00EF-F2
221 E8A1 CD34C2             CALL  :C234     Get X from stack
222 E8A4 CDD2E7             CALL  :E7D2     MACC = sin(X)
223 E8A7 CD08E1             CALL  :E108     MACC = sin(X)/cos(X)
224 E8AA E1                 POP   H
225 E8AB C9                 RET 
226                 *
227                 ********
228                 * ATAN *
229                 ********
230                 *
231                 * MACC = ATAN (MACC)  (Angle expressed in radians).
232                 *
233                 * Method: Polynomial approximation.
234                 *
235                 * ATAN(Z) for -0.25 <= Z <= 0.25 approximated by:
236                 *       F(X) = X*(1 - Q1*X^2 + Q2*X^4 - Q3*X^6).
237                 *
238                 * To cope with range:
239                 *       ATAN(-Z) = - ATAN(Z).
240                 *       ATAN(Z) = a(k) + ATAN((Z-b(k))/(Z*b(k)+1)),
241                 *                 with k = 1, 2 or 3,
242                 *                 a(k) = k*PI/7,
243                 *                 b(k) = TAN(a(k))
244                 *
245                 * Values for k:
246                 *       k=0 if ABS(Z) < 0.25
247                 *       k=1 if 0.25 < ABS(Z) < 0.75
248                 *       k=2 if 0.75 < ABS(Z) < 2
249                 *       k=3 if ABS(Z) > 2.

PAGE 05    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

250                 *
251                 * Then X = (Z-b(k))/(Z*b(k)+1), and
252                 *      ATAN(Z) =  a(k) + F(X), if Z >= 0
253                 *      ATAN(Z) = -a(k) - F(X), if Z < 0.
254                 *
255 E8AC F5         XATAN   PUSH  PSW
256 E8AD C5                 PUSH  B
257 E8AE D5                 PUSH  D
258 E8AF E5                 PUSH  H
259 E8B0 CDF1EB             CALL  :EBF1     Check if Z=0
260 E8B3 CA43E9             JZ    :E943     Then abort
261 E8B6 F5                 PUSH  PSW       Save exp byte
262 E8B7 CDEEE9             CALL  :E9EE     reg ABCD = ABS(Z)
263 E8BA 21EF00             LXI   H,:00EF
264 E8BD CDDBE9             CALL  :E9DB     Copy ABS(Z) into 00EF-F2
265                             
266                 * Calculate k:
267                             
268 E8C0 FE40               CPI   :40
269 E8C2 DAD3E8             JC    :E8D3     Jump if exp < #40
270 E8C5 FE7F               CPI   :7F
271 E8C7 3E01               MVI   A,:01
272 E8C9 CAE6E8             JZ    :E8E6     k=1 if exp=#7F
273 E8CC 215EC4             LXI   H,:C45E   Addr FPT(0)
274 E8CF E5                 PUSH  H
275 E8D0 C315E9             JMP   :E915     Cont with k=1, a(k)=0
276 E8D3 FE01       L1E141  CPI   :01
277 E8D5 3E02               MVI   A,:02
278 E8D7 CAE6E8             JZ    :E8E6     k=2 if exp=1
279 E8DA D2E3E8             JNC   :E8E3     k=3 if exp >1
280 E8DD 78                 MOV   A,B       Get hibyte mantissa
281 E8DE 07                 RLC 
282 E8DF 07                 RLC 
283 E8E0 3E01               MVI   A,:01     k=1 if (B)= 10...
284                                         k=2 if (B)= 11...
285 E8E2 3F                 CMC 
286 E8E3 3F         L1E142  CMC 
287 E8E4 CE00               ACI   :00
288                 *
289 E8E6 87         L1E143  ADD   A         Final k in A
290 E8E7 87                 ADD   A
291 E8E8 87                 ADD   A         *8
292 E8E9 213EE9             LXI   H,:E93E   Startaddr for a,b table
293 E8EC 5F                 MOV   E,A       )
294 E8ED 1600               MVI   D,:00     ) offset in DE
295 E8EF 19                 DAD   D
296 E8F0 E5                 PUSH  H         Addr a(k)
297 E8F1 110400             LXI   D,:0004
298 E8F4 19                 DAD   D
299 E8F5 E5                 PUSH  H         Addr b(k)
300 E8F6 CD59EA             CALL  :EA59     MACC = Z*b(k)
301 E8F9 2162C4             LXI   H,:C462   Addr FPT(1)
302 E8FC CD72EA             CALL  :EA72     MACC = Z*b(k)+1
303 E8FF 21DF00             LXI   H,:00DF
304 E902 CDDBE9             CALL  :E9DB     (Z*b(k)+1) into 00DF-E2
305 E905 21EF00             LXI   H,:00EF
306 E908 CDFBE9             CALL  :E9FB     ABS(Z) in MACC
307 E90B E1                 POP   H         Addr b(k)
308 E90C CD6DEA             CALL  :EA6D     MACC = Z-b(k)
309 E90F 21DF00             LXI   H,:00DF
310 E912 CD20EA             CALL  :EA20     MACC = X =
311                                         = (Z-b(k))/(Z*b(k)+1)

PAGE 06    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

312 E915 21EF00     L1E144  LXI   H,:00EF
313 E918 E5                 PUSH  H
314 E919 E5                 PUSH  H
315 E91A CDD6E9             CALL  :E9D6     Copy X into 00EF-F2
316 E91D E1                 POP   H
317 E91E CD59EA             CALL  :EA59     MACC = X^2
318 E921 21E300             LXI   H,:00E3
319 E924 CDDBE9             CALL  :E9DB     Copy X^2 into 00E3-E6
320 E927 CDDBE9             CALL  :E9DB     Copy X^2 into 00E7-EA
321 E92A 2162C4             LXI   H,:C462   Addr FPT(1)
322 E92D CDFBE9             CALL  :E9FB     Copy FPT(1) into MACC
323 E930 215EE9             LXI   H,:E95E   Start table Taylor constants
324 E933 CDAAE5             CALL  :E5AA     Calc Taylor sum
325 E936 E1                 POP   H
326 E937 CD59EA             CALL  :EA59     Taylor sum * X (=F(X))
327 E93A E1                 POP   H
328 E93B CD72EA             CALL  :EA72     Add a(k) (= ATAN(Z))
329 E93E F1                 POP   PSW       Get orig. exp byte
330 E93F B7                 ORA   A         Was Z negative ?
331 E940 FCE4E9             CM    :E9E4     Then MACC = - ATAN(Z)
332 E943 C34DC1     L1E145  JMP   :C14D     Popall, ret
333                             
334                 * CONSTANTS FOR 'XATN':
335                             
336 E946 7F         FATC1   DATA  :7F       a(1): PI/7
337 E947 E5                 DATA  :E5       0.4487989506
338 E948 C8                 DATA  :C8
339 E949 FA                 DATA  :FA
340                 *
341 E94A 7F                 DATA  :7F       b(1): TAN(a(1))
342 E94B F6                 DATA  :F6       0.4815746188
343 E94C 90                 DATA  :90
344 E94D F3                 DATA  :F3
345                 *
346 E94E 00                 DATA  :00       a(2): 2*PI/7
347 E94F E5                 DATA  :E5       0.8975979011
348 E950 C8                 DATA  :C8
349 E951 FA                 DATA  :FA
350                 *
351 E952 01                 DATA  :01       b(2): TAN(a(1))
352 E953 A0                 DATA  :A0       1.253960337
353 E954 81                 DATA  :81
354 E955 C6                 DATA  :C6
355                 *
356 E956 01                 DATA  :01       a(3): 3*PI/7
357 E957 AC                 DATA  :AC       1.346396852
358 E958 56                 DATA  :56
359 E959 BB                 DATA  :BB
360                 *
361 E95A 03                 DATA  :03       b(3): TAN(a(3))
362 E95B 8C                 DATA  :8C       4.381286272
363 E95C 33                 DATA  :33
364 E95D 7F                 DATA  :7F
365                 *
366 E95E FF         FATPL   DATA  :FF       Q1: about -1/3
367 E95F AA                 DATA  :AA       -0.333329573
368 E960 AA                 DATA  :AA
369 E961 2D                 DATA  :2D
370                 *
371 E962 7E                 DATA  :7E       Q2: about 1/5
372 E963 CC                 DATA  :CC       0.199641035
373 E964 6E                 DATA  :6E

PAGE 07    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

374 E965 B3                 DATA  :B3
375                 *
376 E966 FE                 DATA  :FE       Q3: about -1/7
377 E967 86                 DATA  :86       -0.131779888
378 E968 F1                 DATA  :F1
379 E969 4F                 DATA  :4F
380                 *
381 E96A 00                 DATA  :00       End of table
382 E96B 00                 DATA  :00
383                 *
384                 ********
385                 * ASIN *
386                 ********
387                 *
388                 * MACC = ASIN (MACC).  Result in radians.
389                 *
390                 * Range: -PI/2 < X < PI/2.
391                 *
392                 * Method: ASIN(X) = ATAN(X/SQR(1-x^2)).
393                 *
394                 * Exit: All registers preserved.
395                 *
396 E96C F5         XASIN   PUSH  PSW
397 E96D C5                 PUSH  B
398 E96E D5                 PUSH  D
399 E96F E5                 PUSH  H
400 E970 CDF8E9             CALL  :E9F8     Get X in reg ABCD
401 E973 5F                 MOV   E,A       Exp byte in E
402 E974 E67F               ANI   :7F       Mask sign
403 E976 FE01               CPI   :01
404 E978 DA99E9             JC    :E999     Jump if in range
405 E97B C294E9             JNZ   :E994     If >2 or <1
406 E97E 78                 MOV   A,B       )
407 E97F E67F               ANI   :7F       ) Check if mantissa
408 E981 B1                 ORA   C         ) = 80 00 00 (= +/- 1)
409 E982 B2                 ORA   D         )
410 E983 C2D0E9             JNZ   :E9D0     Error if not
411 E986 7B                 MOV   A,E       Get exp
412 E987 B7                 ORA   A         Set flags on it
413 E988 2133E8             LXI   H,:E833   Addr PI/2
414 E98B CD12E1             CALL  :E112     Copy PI/2 into MACC
415 E98E FCE4E9             CM    :E9E4     If nr <0: MACC = -PI/2
416 E991 C34DC1     FASRET  JMP   :C14D     Popall, ret
417                 *
418 E994 FE40       FAS10   CPI   :40
419 E996 DAD0E9             JC    :E9D0     Error if exp <#40
420 E999 CD1EC2     FAS20   CALL  :C21E     Save X on stack
421 E99C 210000             LXI   H,:0000
422 E99F 39                 DAD   SP        HL=SP
423 E9A0 CD59EA             CALL  :EA59     MACC = X^2
424 E9A3 CDE4E9             CALL  :E9E4     MACC = -X^2
425 E9A6 2162C4             LXI   H,:C462   Addr FPT(1)
426 E9A9 CD72EA             CALL  :EA72     MACC = 1-X^2
427 E9AC CDF8E5             CALL  :E5F8     MACC = SQR(1-X^2)
428 E9AF 21EF00             LXI   H,:00EF
429 E9B2 CD1CE1             CALL  :E11C     SQR(1-X^2) in 00EF-F2
430 E9B5 CD34C2             CALL  :C234     Get X from stack in MACC
431 E9B8 CD08E1             CALL  :E108     MACC = X/(SQR(1-X^2))
432 E9BB CDACE8             CALL  :E8AC     MACC = ATAN (MACC)
433 E9BE C391E9             JMP   :E991     Ready
434                 *
435                 *

PAGE 08    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

436                 ********
437                 * ACOS *
438                 ********
439                 *
440                 * MACC = ACOS (MACC). Result in radians.
441                 *
442                 * Range: 0 < X < PI.
443                 *
444                 * Method: ACOS(X) = PI/2 - ASIN(X).
445                 *
446                 * Exit: All registers preserved.
447                 *
448 E9C1 CD6CE9     XACOS   CALL  :E96C     MACC = ASIN(X)
449 E9C4 CD4AE1             CALL  :E14A     MACC = -ASIN(X)
450 E9C7 E5                 PUSH  H
451 E9C8 2133E8             LXI   H,:E833   Addr PI/2
452 E9CB CDAAED             CALL  :EDAA     MACC = PI/2-ASIN(X)
453 E9CE E1                 POP   H
454 E9CF C9                 RET 
455                             
456                 * Error exit:
457                             
458 E9D0 CD5EC0     FASER   CALL  :C05E     Run argument error
459 E9D3 C391E9             JMP   :E991     Abort
460                 *
461                 *******************************************
462                 * COPY MACC INTO OPERAND AND INTO A,B,C,D *
463                 *******************************************
464                 *
465                 * Entry: HL points to operand.
466                 * Exit:  HL points past operand.
467                 *        AFBCD set as for ATEST.
468                 *
469                 * From ASTORE used to store reg A,B,C,D into
470                 * an operand, pointed at by HL.
471                 *
472 E9D6 E5         ASAVE   PUSH  H
473 E9D7 CDF8E9             CALL  :E9F8     Copy MEM into MACC and ABCD
474 E9DA E1                 POP   H
475 E9DB 77         ASTORE  MOV   M,A       )
476 E9DC 23                 INX   H         )
477 E9DD 70                 MOV   M,B       ) Copy reg A,B,C,D into MEM
478 E9DE 23                 INX   H         )
479 E9DF 71                 MOV   M,C       )
480 E9E0 23                 INX   H         )
481 E9E1 72                 MOV   M,D       )
482 E9E2 23                 INX   H
483 E9E3 C9                 RET 
484                 *
485                 *******************************
486                 * SUBROUTINE CHANGE SIGN MACC *
487                 *******************************
488                 *
489 E9E4 CDF1EB     ACHGS   CALL  :EBF1     Check if MACC empty
490 E9E7 C8                 RZ              Then ready
491 E9E8 0180FF             LXI   B,:FF80   Set mask
492 E9EB C3F1E9             JMP   :E9F1     Change sign bit
493                 *
494                 *****************************
495                 * SUBROUTINE FPT ABS (MACC) *
496                 *****************************
497                 *

PAGE 09    DAI FIRMWARE 1E7D2-1EA0D  V1.0  Rev.1

498                 * From ATEST also used to copy MACC into ABCD.
499                 * From L1E158 used to copy operand (pointed at
500                 * by HL) into ABCD and into MACC.
501                 *
502 E9EE 01007F     L1E155  LXI   B,:7F00   Set mask
503 E9F1 21D500     L1E156  LXI   H,:00D5   Addr MACC
504 E9F4 78                 MOV   A,B       Mask in A
505 E9F5 A6                 ANA   M         AND exp byte with mask
506 E9F6 A9                 XRA   C         Set sign bit = 0
507 E9F7 77                 MOV   M,A       Update exp byte MACC
508                 *
509 E9F8 21D500     ATEST   LXI   H,:00D5   Addr MACC
510 E9FB CDF4EB     L1E158  CALL  :EBF4     Check if MEM = 0, get
511                                         exp byte in A
512 E9FE CA16EA             JZ    :EA16     Then clear MACC + ABCD
513 EA01 5F                 MOV   E,A       exp byte in E
514 EA02 23                 INX   H         )
515 EA03 46                 MOV   B,M       )
516 EA04 23                 INX   H         ) Mantissa from MEM
517 EA05 4E                 MOV   C,M       ) into BCD
518 EA06 23                 INX   H         )
519 EA07 56                 MOV   D,M       )
520 EA08 21D500             LXI   H,:00D5   Addr MACC
521 EA0B C317EB             JMP   :EB17     Copy ABCD into MACC;
522                                         exp from E in A, flags
523                                         set on exp ORI 01
524                 *
525                 *
526                 *
527 EA0E                    END 
 
***************************
* S Y M B O L   T A B L E *
***************************
 
ACHGS  E9E4   ASAVE  E9D6   ASTORE E9DB   ATEST  E9F8   
FAS10  E994   FAS20  E999   FASER  E9D0   FASRET E991   
FATC1  E946   FATPL  E95E   FLGTI  E890   FPHPI  E833   
L1E132 E7E3   L1E133 E7FA   L1E134 E818   L1E141 E8D3   
L1E142 E8E3   L1E143 E8E6   L1E144 E915   L1E145 E943   
L1E155 E9EE   L1E156 E9F1   L1E158 E9FB   L1E304 E837   
L1E305 E83B   L1E306 E83F   XACOS  E9C1   XALOG  E880   
XASIN  E96C   XATAN  E8AC   XCOS   E7D9   XLOG   E870   
XPW10  E86D   XPWR   E855   XSIN   E7D2   XTAN   E894
