
PAGE 01    DAI FIRMWARE 1EA0E-1EBFF  V1.1

002                         ORG   :EA0E
003                 *
004                 *
005                 *
006                 ***************************************
007                 * COPY OPERAND INTO REGISTERS B,C,D,E *
008                 ***************************************
009                 *
010                 * Entry: HL points to operand.
011                 * Exit:  HL points to last byte of operand.
012                 *        AF preserved.
013                 *
014 EA0E 46         L1E159  MOV   B,M
015 EA0F 23                 INX   H
016 EA10 4E                 MOV   C,M
017 EA11 23                 INX   H
018 EA12 56                 MOV   D,M
019 EA13 23                 INX   H
020 EA14 5E                 MOV   E,M
021 EA15 C9                 RET 
022                 *
023                 ************************************
024                 * CLEAR MACC AND REGISTERS A,B,C,D *
025                 ************************************
026                 *
027 EA16 21D500     AZERO   LXI   H,:00D5   Addr MACC
028 EA19 AF                 XRA   A         )
029 EA1A 47                 MOV   B,A       ) Clear ABCD
030 EA1B 4F                 MOV   C,A       )
031 EA1C 57                 MOV   D,A       )
032 EA1D C3DBE9             JMP   :E9DB     Clear MACC
033                 *
034                 *************************
035                 * FPT DIVIDE SUBROUTINE *
036                 *************************
037                 *
038                 * MACC = MACC / MEM. Rounded quotient in MACC
039                 * and registers ABCD, exponent in E.
040                 *
041                 * Entry: HL points to operand.
042                 * Exit:  CY=1: Overflow, result invalid.
043                 *        CY=0: Result in ABCD, EHL corrupted.
044                 *
045 EA20 CDF4EB     ADIV    CALL  :EBF4     Test if MEM=0; exp byte in A
046 EA23 CA54EA             JZ    :EA54     Then run divide by 0 error
047 EA26 F5                 PUSH  PSW       Save exp MEM
048 EA27 E680               ANI   :80       Sign bit only
049 EA29 47                 MOV   B,A       Preserve sign
050 EA2A F1                 POP   PSW       Get exp MEM
051 EA2B E67F               ANI   :7F       Skip sign bit
052 EA2D 2F                 CMA             ) 2-compl of exponent
053 EA2E 3C                 INR   A         )
054 EA2F FEC0               CPI   :C0       Overflow in sign bit ?
055 EA31 CA46EA             JZ    :EA46     Then run overflow error
056 EA34 E67F               ANI   :7F       Only compl. exp MEM
057 EA36 B0                 ORA   B         Add sign
058 EA37 CD1DEB             CALL  :EB1D     Subtract exponents
059 EA3A DA4BEA             JC    :EA4B     Evt. run overflow error
060 EA3D CA16EA             JZ    :EA16     If zero result: clear MACC +
061                                         ABCD
062 EA40 CD4AEC             CALL  :EC4A     Run fixed division
063 EA43 D206EB             JNC   :EB06     Round up if no overflow

PAGE 02    DAI FIRMWARE 1EA0E-1EBFF  V1.1

064                 *
065                 * If overflow:
066                 *
067 EA46 CD4BC0     OVERF   CALL  :C04B     Run overflow error
068 EA49 37                 STC             Flag error
069 EA4A C9                 RET 
070                 *
071                 ******************
072                 * ERROR HANDLING *
073                 ******************
074                 *
075                 * Entry: S=1: Overflow error.
076                 *        S=0: Underflow error.
077                 *        Z=1: Divide by zero error.
078                 *
079 EA4B FA46EA     OVUNF   JM    :EA46     Evt run overflow error
080 EA4E CD65C0     UNDRF   CALL  :C065     Run underflow error
081 EA51 C316EA             JMP   :EA16     Clear MACC + ABCD
082 EA54 CD6CC0     DIV0    CALL  :C06C     Run divide by 0 error
083 EA57 37                 STC             Flag error
084 EA58 C9                 RET 
085                 *
086                 *********************************
087                 * FPT MULTIPLICATION SUBROUTINE *
088                 *********************************
089                 *
090                 * MACC = MACC * MEM. Result in MACC and in
091                 * registers A,B,C,D.
092                 *
093                 * Entry: HL points to operand in memory.
094                 * Exit:  CY=1: Overflow; result invalid.
095                 *        CY=0: Result in ABCD. EHL corrupted.
096                 *
097 EA59 CDF4EB     AMUL    CALL  :EBF4     Test if MEM=0; exp byte in A
098 EA5C C41DEB             CNZ   :EB1D     Add exponents if not
099 EA5F DA4BEA             JC    :EA4B     Evt run error
100 EA62 CA16EA             JZ    :EA16     Result 0: Clear MACC + ABCD
101 EA65 CD00EC             CALL  :EC00     Multiply mantissa's
102                 *
103                 * Normalise if necessary:
104                 *
105 EA68 78                 MOV   A,B       1st product
106 EA69 B7                 ORA   A
107 EA6A C300EB             JMP   :EB00     Common exit with MUL/DIV
108                 *
109                 ***************************
110                 * FPT SUBTRACT SUBROUTINE *
111                 ***************************
112                 *
113                 * MACC = MACC - MEM.
114                 *
115                 * Entry: HL points to operand in memory.
116                 * Exit:  CY=1: Overflow.
117                 *        CY=0: Result in ABCD. EHL corrupted.
118                 *
119 EA6D 0680       ASUB    MVI   B,:80     Mask to change sign of
120                                         operand
121 EA6F C374EA             JMP   :EA74     Into AADD
122                 *
123                 **********************
124                 * FPT ADD SUBROUTINE *
125                 **********************

PAGE 03    DAI FIRMWARE 1EA0E-1EBFF  V1.1

126                 *
127                 * MACC = MACC - MEM.
128                 *
129                 * Entry: HL points to operand in memory.
130                 * Exit:  CY=1: Overflow.
131                 *        CY=0: Result in ABCD. EHL corrupted.
132                 *
133 EA72 0600       AADD    MVI   B,:00     Zero mask
134 EA74 3E7F       AD10    MVI   A,:7F     Most possible value
135 EA76 32DE00             STA   :00DE     Set MACC >> MEM
136 EA79 CDF4EB             CALL  :EBF4     Test if MEM =0; exp in A
137 EA7C CAF8E9             JZ    :E9F8     Then clear MACC + ABCD
138 EA7F 78                 MOV   A,B       Get mask
139 EA80 AE                 XRA   M         XOR with exp (ADD: gives
140                                         exp; SUB: gives -exp)
141 EA81 23                 INX   H
142 EA82 46                 MOV   B,M       )
143 EA83 23                 INX   H         )
144 EA84 4E                 MOV   C,M       ) Copy mantissa MEM into B
145 EA85 23                 INX   H         )
146 EA86 56                 MOV   D,M       )
147 EA87 5F                 MOV   E,A       Exp in E
148 EA88 21D500             LXI   H,:00D5   Addr MACC
149 EA8B 7E                 MOV   A,M       Get exp MACC
150 EA8C AB                 XRA   E         XOR with exp MEM
151 EA8D E680               ANI   :80       Sign only
152 EA8F 32D900             STA   :00D9     Store #80 if different signs
153 EA92 CDF4EB             CALL  :EBF4     Test if MACC=0; exp in A
154 EA95 CA11EB             JZ    :EB11     Jump if true
155 EA98 D5                 PUSH  D
156 EA99 7B                 MOV   A,E       Get exp MEM
157 EA9A CDE9C1             CALL  :C1E9     Sign extend
158 EA9D 5F                 MOV   E,A       Ext exp MEM in E
159 EA9E 7E                 MOV   A,M       Get exp MACC
160 EA9F CDE9C1             CALL  :C1E9     Sign extend
161 EAA2 93                 SUB   E         Calc difference
162 EAA3 D1                 POP   D
163 EAA4 32DE00             STA   :00DE     Save it
164 EAA7 FAB2EA             JM    :EAB2     If exp MACC < exp MEM:
165                                         exchange ABCD and MACC
166 EAAA FE19               CPI   :19       Total bits in mantissa
167 EAAC DAC6EA             JC    :EAC6     OK if difference between
168                                         both nrs <#19 in exp
169 EAAF C3F8E9             JMP   :E9F8     Else: Result is zero in
170                                         MACC and ABCD
171                             
172                 * Exchange MACC and ABCD:
173                             
174 EAB2 FEE7       L1E169  CPI   :E7       Total bits in mantissa
175 EAB4 DA16EB             JC    :EB16     If difference not too big
176 EAB7 73                 MOV   M,E       Ext exp MEM in MACC
177 EAB8 2F                 CMA             )
178 EAB9 3C                 INR   A         ) A = ext exp old MACC
179 EABA 23                 INX   H
180 EABB 5E                 MOV   E,M       ) Exchange 1st byte MACC
181 EABC 70                 MOV   M,B       ) mantissa and byte in B
182 EABD 43                 MOV   B,E       )
183 EABE 23                 INX   H
184 EABF 5E                 MOV   E,M       ) Exchange 2nd byte MACC
185 EAC0 71                 MOV   M,C       ) mantissa and byte in C
186 EAC1 4B                 MOV   C,E       )
187 EAC2 23                 INX   H

PAGE 04    DAI FIRMWARE 1EA0E-1EBFF  V1.1

188 EAC3 5E                 MOV   E,M       ) Exchange 3rd byte MACC
189 EAC4 72                 MOV   M,D       ) mantissa and byte in D
190 EAC5 53                 MOV   D,E       )
191                                         Now orig MACC in ABCD and
192                                         orig MEM in MACC
193 EAC6 1E00       L1E170  MVI   E,:00
194 EAC8 CD55EB             CALL  :EB55     Shift BCDE right A places
195 EACB 3AD900             LDA   :00D9     Get result XOR sign bits
196 EACE B7                 ORA   A
197 EACF 21D800             LXI   H,:00D8   Addr lobyte MACC
198 EAD2 FAEFEA             JM    :EAEF     Jump if different signbits
199                             
200                 * If both signs equal:
201                             
202 EAD5 7E                 MOV   A,M       )
203 EAD6 82                 ADD   D         )
204 EAD7 57                 MOV   D,A       )
205 EAD8 2B                 DCX   H         )
206 EAD9 7E                 MOV   A,M       ) Add mantissa MACC to BCD
207 EADA 89                 ADC   C         ) Result in BCD.
208 EADB 4F                 MOV   C,A       )
209 EADC 2B                 DCX   H         )
210 EADD 7E                 MOV   A,M       )
211 EADE 88                 ADC   B         )
212 EADF 47                 MOV   B,A       )
213 EAE0 D206EB             JNC   :EB06     Jump if no overflow
214 EAE3 CD70EB             CALL  :EB70     Else: shift BCDE right 1 bit
215 EAE6 CDD9EB             CALL  :EBD9     Incr exponent
216 EAE9 DA46EA             JC    :EA46     Evt run overflow error
217 EAEC C306EB             JMP   :EB06     Round up
218                             
219                 * If both signs not equal:
220                             
221 EAEF AF         L1E171  XRA   A         )
222 EAF0 93                 SUB   E         ) Compl exp in E
223 EAF1 5F                 MOV   E,A       )
224 EAF2 7E                 MOV   A,M       )
225 EAF3 9A                 SBB   D         )
226 EAF4 57                 MOV   D,A       ) Subtract BCD from mantissa
227 EAF5 2B                 DCX   H         ) MACC. Result in BCD.
228 EAF6 7E                 MOV   A,M       )
229 EAF7 99                 SBB   C         )
230 EAF8 4F                 MOV   C,A       )
231 EAF9 2B                 DCX   H         )
232 EAFA 7E                 MOV   A,M       )
233 EAFB 98                 SBB   B         )
234 EAFC 47                 MOV   B,A       )
235 EAFD DC7DEB             CC    :EB7D     Correct if overflow
236 EB00 F496EB     AD10A   CP    :EB96     Evt normalize BCDE
237 EB03 F216EA             JP    :EA16     and clear MACC + ABCD
238                             
239                 * Normal exit:
240                             
241 EB06 CDC3EB     ADD11   CALL  :EBC3     Round up BCD, result in MACC
242                                         exp in E
243 EB09 DA46EA             JC    :EA46     Evt run overflow error
244 EB0C 7B         L1E174  MOV   A,E       Get exponent
245 EB0D F601               ORI   :01       Set flags on exp OR 1
246 EB0F 7B                 MOV   A,E       Exp in A
247 EB10 C9                 RET 
248                             
249                 * If operand = 0:

PAGE 05    DAI FIRMWARE 1EA0E-1EBFF  V1.1

250                             
251 EB11 3E80       L1E175  MVI   A,:80
252 EB13 32DE00             STA   :00DE     (00DE)=#80
253 EB16 7B         L1E176  MOV   A,E       Get exponent
254 EB17 CDDBE9     L1E177  CALL  :E9DB     Copy ABCD into MACC
255 EB1A C30CEB             JMP   :EB0C     Take normal exit
256                 *
257                 **********************
258                 * FPT: ADD EXPONENTS *
259                 **********************
260                 *
261                 * Adds the exponent of the MACC to the exponent
262                 * of a operand in memory.
263                 *
264                 * Entry: HL points to FPT number in memory.
265                 *        A contains its exponent.
266                 *        Other number in MACC.
267                 * Exit:   Z=1:      MACC=0; HL=00D5
268                 *        CY=1:      Overflow: HL=00D5; MACC pres.
269                 *                   A: Sum of signed exponents SHL 1
270                 *        Z=0, CY=0: O.K.: HL=00D5; sum of exponents
271                 *                   in MACC.
272                 *
273 EB1D 47         MDEX    MOV   B,A       Exp MEM in B
274 EB1E 23                 INX   H
275 EB1F 4E                 MOV   C,M       )
276 EB20 23                 INX   H         ) Copy mantissa MEM in CDE
277 EB21 56                 MOV   D,M       )
278 EB22 23                 INX   H         )
279 EB23 5E                 MOV   E,M       )
280 EB24 CDF1EB             CALL  :EBF1     Test MACC=0; Exp MACC in A
281 EB27 C8                 RZ              Abort if MACC=0, Z=1
282 EB28 78                 MOV   A,B       Get exp MEM in A
283 EB29 CDE9C1             CALL  :C1E9     Sign extend
284 EB2C CDBAC1             CALL  :C1BA     Add exponents, result in MAC
285 EB2F D8                 RC              Abort if overflow, CY=1
286 EB30 78                 MOV   A,B       Get orig exp MEM
287 EB31 E680               ANI   :80       sign bit only
288 EB33 AE                 XRA   M         Evt correct sign
289 EB34 77                 MOV   M,A       Exp back into MACC
290 EB35 3E01               MVI   A,:01
291 EB37 B7                 ORA   A
292 EB38 C9                 RET 
293                 *
294                 *********************************
295                 * SHIFT BCDE LEFT (A) POSITIONS *
296                 *********************************
297                 *
298                 * Exit: AF preserved.
299                 *
300 EB39 F5         LSHN    PUSH  PSW
301 EB3A 6F                 MOV   L,A       Nr of shifts in L
302 EB3B 2D         L1E180  DCR   L
303 EB3C FA46EB             JM    :EB46     Abort if ready
304 EB3F B7                 ORA   A         Clear CY
305 EB40 CD48EB             CALL  :EB48     Shift BCDE left 1 position
306 EB43 C33BEB             JMP   :EB3B     Next shift
307 EB46 F1         L1E182  POP   PSW
308 EB47 C9                 RET 
309                 *
310                 *
311                 *

PAGE 06    DAI FIRMWARE 1EA0E-1EBFF  V1.1

312                 *********************
313                 * MULTIPLY BCDE * 2 *
314                 *********************
315                 *
316                 * Shifts BCDE left 1 position. Entry CY goes to
317                 * lsb of E.
318                 *
319                 * Exit: A corrupted, HL preserved.
320                 *       F set on result.
321                 *
322 EB48 7B         L1E183  MOV   A,E
323 EB49 17                 RAL             Shift left E
324 EB4A 5F                 MOV   E,A
325 EB4B 7A                 MOV   A,D
326 EB4C 17                 RAL             Shift left D
327 EB4D 57                 MOV   D,A
328 EB4E 79                 MOV   A,C
329 EB4F 17                 RAL             Shift left C
330 EB50 4F                 MOV   C,A
331 EB51 78                 MOV   A,B
332 EB52 8F                 ADC   A         B=2*B+CY
333 EB53 47                 MOV   B,A
334 EB54 C9                 RET 
335                 *
336                 **********************************
337                 * SHIFT BCDE RIGHT (A) POSITIONS *
338                 **********************************
339                 *
340 EB55 2E08       RSHN    MVI   L,:0008   Nr of shifts for 1 byte
341 EB57 BD         L1E185  CMP   L
342 EB58 FA64EB             JM    :EB64     Jump if A<8
343                             
344                 * Shift 8 bits right:
345                             
346 EB5B 5A                 MOV   E,D       )
347 EB5C 51                 MOV   D,C       ) Shift 8 pos in one
348 EB5D 48                 MOV   C,B       ) time
349 EB5E 0600               MVI   B,:00     )
350 EB60 95                 SUB   L         Update nr of shifts left
351 EB61 C257EB             JNZ   :EB57     Again if not ready
352                             
353                 * Shift 1 bit:
354                             
355 EB64 B7         L1E186  ORA   A
356 EB65 C8                 RZ              Abort if ready
357 EB66 6F                 MOV   L,A       L is nr of shifts
358 EB67 B7         L1E187  ORA   A
359 EB68 CD70EB             CALL  :EB70     Shift BCDE right one bit
360 EB6B 2D                 DCR   L         Update shift count
361 EB6C C267EB             JNZ   :EB67     Again if not ready
362 EB6F C9                 RET 
363                 *
364                 ********************
365                 * DIVIDE BCDE BY 2 *
366                 ********************
367                 *
368                 * Shifts contents BCDE right 1 position.
369                 *
370                 * Exit: AF corrupted, HL preserved.
371                 *
372 EB70 78         L1E188  MOV   A,B
373 EB71 1F                 RAR             Shift right B

PAGE 07    DAI FIRMWARE 1EA0E-1EBFF  V1.1

374 EB72 47                 MOV   B,A
375 EB73 79                 MOV   A,C
376 EB74 1F                 RAR             Shift right C
377 EB75 4F                 MOV   C,A
378 EB76 7A                 MOV   A,D
379 EB77 1F                 RAR             Shift right D
380 EB78 57                 MOV   D,A
381 EB79 7B                 MOV   A,E
382 EB7A 1F                 RAR             Shift right E
383 EB7B 5F                 MOV   E,A
384 EB7C C9                 RET 
385                 *
386                 *************************************
387                 * CHANGE SIGN OF A NUMBER IN MEMORY *
388                 * NEGATE CONTENTS REGISTERS B,C,D,E *
389                 *************************************
390                 *
391                 * Entry: HL points to 1st byte mantissa.
392                 *
393 EB7D 2B         L1E189  DCX   H         Pnts to exp
394 EB7E 7E                 MOV   A,M       Get exp
395 EB7F EE80               XRI   :80       Change sign bit
396 EB81 77                 MOV   M,A
397 EB82 AF         L1E190  XRA   A
398 EB83 6F                 MOV   L,A       L=0
399 EB84 93                 SUB   E
400 EB85 5F                 MOV   E,A       Negate E
401 EB86 7D                 MOV   A,L
402 EB87 9A                 SBB   D
403 EB88 57                 MOV   D,A       Negate D
404 EB89 7D                 MOV   A,L
405 EB8A 99                 SBB   C
406 EB8B 4F                 MOV   C,A       Negate C
407 EB8C 7D                 MOV   A,L
408 EB8D 98                 SBB   B
409 EB8E 6F                 MOV   L,A       Negated B in L
410 EB8F A0                 ANA   B
411 EB90 17                 RAL             msb into CY
412 EB91 45                 MOV   B,L       B = negated B
413 EB92 7D                 MOV   A,L
414 EB93 1F                 RAR             restore msb
415 EB94 8F                 ADC   A         A=2*A+CY
416 EB95 C9                 RET 
417                 *
418                 *********************************************
419                 * NORMALIZE CONTENTS BCDE, CORRECT EXPONENT *
420                 *********************************************
421                 *
422                 * Entry: FPT mantissa in BCDE, exponent in MACC.
423                 *
424                 * Mantissa is normalized and the exponent is
425                 * adjusted correctly.
426                 *
427 EB96 CDA0EB     L1E191  CALL  :EBA0     Normalize BCDE
428 EB99 D4B7C1             CNC   :C1B7     Add exponents if BCDE<>0
429 EB9C 3F                 CMC 
430 EB9D 1F                 RAR 
431 EB9E B7                 ORA   A
432 EB9F C9                 RET 
433                 *
434                 *
435                 *

PAGE 08    DAI FIRMWARE 1EA0E-1EBFF  V1.1

436                 ******************************
437                 * NORMALIZE CONTENTS B,C,D,E *
438                 ******************************
439                 *
440                 * Shifts contents BCDE left until the msb = 1.
441                 *
442                 * Exit: A: Minus number of shifts.
443                 *       HL restored, S+Z-flag set on result.
444                 *       CY=1: BCDE was zero.
445                 *
446 EBA0 E5         L1E192  PUSH  H
447 EBA1 2E20               MVI   L,:20     Max 32 bits to shift
448 EBA3 78         L1E193  MOV   A,B       Get 1st byte
449 EBA4 B7                 ORA   A
450 EBA5 C2BAEB             JNZ   :EBBA     If '1'-bits in it
451                             
452                 * Shift 8 bits at once:
453                             
454 EBA8 41                 MOV   B,C       )
455 EBA9 4A                 MOV   C,D       ) Shift 1 byte
456 EBAA 53                 MOV   D,E       )
457 EBAB 5F                 MOV   E,A       )
458 EBAC 7D                 MOV   A,L
459 EBAD D608               SUI   :08       Count minus 8 bits
460 EBAF 6F                 MOV   L,A
461 EBB0 C2A3EB             JNZ   :EBA3     Continue if not ready
462 EBB3 E1                 POP   H
463 EBB4 37                 STC             If 4* 8 bits shifted and no
464                                         '1' found: BCDE was 0: CY=1
465 EBB5 C9                 RET 
466                             
467                 * Shift 1 bit:
468                             
469 EBB6 2D         L1E194  DCR   L         Update count
470 EBB7 CD48EB             CALL  :EB48     Shift BCDE 1 bit left
471 EBBA F2B6EB     L1E195  JP    :EBB6     Again if msb <> 0
472                             
473                 * If ready:
474                             
475 EBBD 7D                 MOV   A,L       Get nr of shifts left
476 EBBE D620               SUI   :20       Calc neg nr of shifts done
477 EBC0 B7                 ORA   A
478 EBC1 E1                 POP   H
479 EBC2 C9                 RET 
480                 *
481                 *********
482                 * ROUND *
483                 *********
484                 *
485                 * Rounds up a FPT mantissa in BCD(E). Result in
486                 * MACC, exponent also in E.
487                 *
488                 * Entry: FPT mantissa in BCDE.
489                 * Exit:  CY=1: overflow.
490                 *        All registers corrupted.
491                 *
492 EBC3 7B         L1E196  MOV   A,E       Get lobyte mantissa
493 EBC4 B7                 ORA   A
494 EBC5 FCD1EB             CM    :EBD1     Round up BCD if (E)
495                                         >= #80
496 EBC8 D8                 RC              Abort if overflow
497 EBC9 21D500             LXI   H,:00D5   Addr MACC

PAGE 09    DAI FIRMWARE 1EA0E-1EBFF  V1.1

498 EBCC 5E                 MOV   E,M       Get exp in E
499 EBCD 7E                 MOV   A,M       and in A
500 EBCE C3DBE9             JMP   :E9DB     Copy ABCD into MACC
501                 *
502                 * ROUND UP CONTENTS B,C,D:
503                 *
504                 * Increments a FPT mantissa in BCD with 1 in
505                 * the lsb. If required, the normalized exponent
506                 * is adjusted.
507                 *
508                 * Exit: CY=1: Overflow.
509                 *       AEHL preserved.
510                 *
511 EBD1 14         L1E197  INR   D         Add 1 to lobyte
512 EBD2 C0                 RNZ 
513 EBD3 0C                 INR   C         ) Add 1 to other bits to
514 EBD4 C0                 RNZ             ) if overflow
515 EBD5 04                 INR   B         )
516 EBD6 C0                 RNZ 
517 EBD7 0680               MVI   B,:80     If overflow from B: Set B
518                                         for smallest mantissa and
519                                         increment exponent
520                 *
521                 ************************************
522                 * INCREMENT A FPT EXPONENT OF MACC *
523                 ************************************
524                 *
525                 * Exit: ABCDEHL preserved. CY=1: overflow.
526                 *
527 EBD9 C5         L1E198  PUSH  B
528 EBDA F5                 PUSH  PSW
529 EBDB E5                 PUSH  H
530 EBDC 3E01               MVI   A,:01     1 to be added to exponent
531 EBDE 21D500     L1E199  LXI   H,:00D5   Addr MACC
532 EBE1 CDBAC1             CALL  :C1BA     Add 1 to exponent
533 EBE4 E1                 POP   H
534 EBE5 C1                 POP   B
535 EBE6 78                 MOV   A,B
536 EBE7 C1                 POP   B
537 EBE8 C9                 RET 
538                 *
539                 ***********************************************
540                 * DECREMENT FPT EXPONENT OF MACC - (not used) *
541                 ***********************************************
542                 *
543 EBE9 C5         L1E274  PUSH  B
544 EBEA F5                 PUSH  PSW
545 EBEB E5                 PUSH  H
546 EBEC 3EFF               MVI   A,:FF     -1 to be added to exponent
547 EBEE C3DEEB             JMP   :EBDE     Add it to MACC exp
548                 *
549                 ***************************
550                 * TEST IF OPERAND IS ZERO *
551                 ***************************
552                 *
553                 * TSTZA: Test if contents MACC is zero.
554                 * TSTZ:  Test if operand, pointed at by HL, is
555                 *        zero.
556                 *
557                 * Exit: A: hibyte operand.
558                 *       BCDE preserved.
559                 *       HL points to 1st byte of operand.

PAGE 10    DAI FIRMWARE 1EA0E-1EBFF  V1.1

560                 *       Z=1: Operand = 0.
561                 *
562 EBF1 21D500     TSTZA   LXI   H,:00D5   Operand = MACC
563 EBF4 7E         TSTZ    MOV   A,M
564 EBF5 23                 INX   H
565 EBF6 B6                 ORA   M
566 EBF7 23                 INX   H
567 EBF8 B6                 ORA   M
568 EBF9 23                 INX   H
569 EBFA B6                 ORA   M         Flags set on result OR
570                                         on all bytes of operand
571 EBFB 2B                 DCX   H
572 EBFC 2B                 DCX   H
573 EBFD 2B                 DCX   H
574 EBFE 7E                 MOV   A,M       Hibyte operand in A
575 EBFF C9                 RET 
576                 *
577                 *
578                 *
579 EC00                    END 
 
***************************
* S Y M B O L   T A B L E *
***************************
 
AADD   EA72   AD10   EA74   AD10A  EB00   ADD11  EB06   
ADIV   EA20   AMUL   EA59   ASUB   EA6D   AZERO  EA16   
DIV0   EA54   L1E159 EA0E   L1E169 EAB2   L1E170 EAC6   
L1E171 EAEF   L1E174 EB0C   L1E175 EB11   L1E176 EB16   
L1E177 EB17   L1E180 EB3B   L1E182 EB46   L1E183 EB48   
L1E185 EB57   L1E186 EB64   L1E187 EB67   L1E188 EB70   
L1E189 EB7D   L1E190 EB82   L1E191 EB96   L1E192 EBA0   
L1E193 EBA3   L1E194 EBB6   L1E195 EBBA   L1E196 EBC3   
L1E197 EBD1   L1E198 EBD9   L1E199 EBDE   L1E274 EBE9   
LSHN   EB39   MDEX   EB1D   OVERF  EA46   OVUNF  EA4B   
RSHN   EB55   TSTZ   EBF4   TSTZA  EBF1   UNDRF  EA4E
