
PAGE 01    DAI FIRMWARE C000-C1FA  V1.1

002                         ORG   :C000
003                 *
004                 *
005                 *
006                 *  =================
007                 *** MATH. UTILITIES ***
008                 *  =================
009                 *
010                 *
011                 ***************
012                 * ENTRYPOINTS *
013                 ***************
014                 *
015 C000 C319C7     BASE    JMP   :C719     Reset (entry on hardware
016                                         reset)
017 C003 C335C0     XINIT   JMP   :C035     Math. package initialisation
018 C006 C3F3C0     XFINM   JMP   :C0F3     Incr. FPT number in memory
019 C009 C3FBC1     XFDCM   JMP   :C1FB     Decr. FPT number in memory
020                                         (not used)
021 C00C C379C0     XFCOMP  JMP   :C079     FPT Compare
022 C00F C3BBC0     XIINM   JMP   :C0BB     Incr. INT number in memory
023 C012 C3D5C0     XIDCM   JMP   :C0D5     Decr. INT number in memory
024                                         (not used)
025 C015 C3ACC0     XICOMP  JMP   :C0AC     INT Compare
026 C018 C31EC2     XPUSH   JMP   :C21E     Save MACC on stack
027 C01B C334C2     XPOP    JMP   :C234     Retrieve MACC from stack
028 C01E C349C2     XFCB    JMP   :C249     Input FPT number to MACC
029 C021 C361C3     XFBC    JMP   :C361     Conv. FPT number for output
030 C024 C373C5     XICB    JMP   :C573     Input INT number to MACC
031 C027 C3B2C5     XIBC    JMP   :C5B2     Conv. INT number for output
032 C02A C314C6     XHCB    JMP   :C614     Input Hex number to MACC
033 C02D C353C6     XHBC    JMP   :C653     Conv. MACC to Hex for output
034 C030 C386C4     XPRTY   JMP   :C486     Pretties up FPT/INT number
035 C033 E300       DECBUF  DBL   :00E3     Location output buffer
036                 *
037                 ********************************
038                 * MATH. PACKAGE INITIALISATION *
039                 ********************************
040                 *
041                 * Entry: HL: Address input encoding routine (DDE0).
042                 *        DE: Base address error routines (C7F2).
043                 * Exit:  AFDEHL corrupted, BC preserved.
044                 *
045 C035 22D200     MINIT   SHLD  :00D2     Init. (00D2/3)=DDE0
046 C038 EB                 XCHG
047 C039 22D000             SHLD  :00D0     Init. (00D0/1)=C7F2
048 C03C 3A02FB             LDA   :FB02     Get math.chip status
049 C03F B7                 ORA   A         Check if math.chip present
050 C040 3E00               MVI   A,:00     Flag = 0 if not
051 C042 FA47C0             JM    :C047
052 C045 3E7B               MVI   A,:7B     Flag = #7B if present
053 C047 32D400     LC18    STA   :00D4     Set math.chip flag
054 C04A C9                 RET 
055                 *
056                 **************************
057                 * OVERFLOW ERROR ROUTINE *
058                 **************************
059                 *
060                 * (From LC20 common part for various entries).
061                 *
062                 * Jump to (00D0/1) = Address 'overflow error'
063                 * routine (C7F2).

PAGE 02    DAI FIRMWARE C000-C1FA  V1.1

064                 *
065                 * Entry: If start at LC20: offset in HL.
066                 * Exit:  AFBCDEHL preserved.
067                 *        On stack original returnaddress.
068                 *
069 C04B E5         FPEOV   PUSH  H
070 C04C 210000             LXI   H,:0000   Init offset = 0
071                 *
072 C04F F5         LC20    PUSH  PSW
073 C050 D5                 PUSH  D
074 C051 EB                 XCHG            Offset in DE
075 C052 2AD000             LHLD  :00D0     Get addr pointer
076 C055 19                 DAD   D         Add offset
077 C056 7E                 MOV   A,M
078 C057 23                 INX   H
079 C058 66                 MOV   H,M
080 C059 6F                 MOV   L,A       Get addr routine in HL
081 C05A D1                 POP   D
082 C05B F1                 POP   PSW
083 C05C E3                 XTHL            New addr on stack
084 C05D C9                 RET             Continu with new address
085                 *
086                 ******************
087                 * ARGUMENT ERROR *
088                 ******************
089                 *
090                 * Jump to (00D0/1)+2 = Address 'number out of range'
091                 * routine (C7F4).
092                 *
093                 * Entry/exit: See FPEOV.
094                 *
095 C05E E5         FPEAE   PUSH  H
096 C05F 210200             LXI   H,:0002   Init. offset
097 C062 C34FC0             JMP   :C04F     Calc. new addr, go to it
098                 *
099                 *******************
100                 * UNDERFLOW ERROR *
101                 *******************
102                 *
103                 * Jump to (00D0/1)+4 = Return (C7F6).
104                 * Underflow gives 0 as result of operation.
105                 *
106                 * Entry/exit: See FPEOV.
107                 *
108 C065 E5         FPEUN   PUSH  H
109 C066 215EC4             LXI   H,:C45E   Addr. FPT(0)
110 C069 C30CD2             JMP   :D20C     Copy '0' into MACC
111                 *
112                 ************************
113                 * DIVIDE BY ZERO ERROR *
114                 ************************
115                 *
116                 * Jump to (00D0/1)+6 = Address 'divide by zero'
117                 * routine (C7F8).
118                 *
119                 * Entry/exit: See FPEOV.
120                 *
121 C06C E5         FPED0   PUSH  H
122 C06D 210600             LXI   H,:0006   Init. offset
123 C070 C34FC0             JMP   :C04F     Calc. new addr, go to it
124                 *
125                 *

PAGE 03    DAI FIRMWARE C000-C1FA  V1.1

126                 ***************************
127                 * GET CHARACTER FROM LINE *
128                 ***************************
129                 *
130                 * Entry: None.
131                 * Exit : All registers preserved.
132                 *        Address to continue on stack.
133                 *
134 C073 E5         LC22    PUSH  H
135 C074 2AD200             LHLD  :00D2     Get addr 'Get char' routine
136 C077 E3                 XTHL            on stack; restore HL
137 C078 C9                 RET             Goto (00D0/1)+2
138                 *
139                 **************************
140                 * FLOATING POINT COMPARE *
141                 **************************
142                 *
143                 * Compares normalised FPT numbers in MACC
144                 * and in M.
145                 *
146                 * Exit: ABCDEHL preserved.
147                 *       Flags: CY=1,S=0,Z=1: both nrs. 0
148                 *              CY=0,S=0,Z=1: both nrs. identical
149                 *              CY=0,S=0,Z=0: MACC > M
150                 *              CY=0,S=1,Z=0: MACC < M
151                 *
152 C079 C5         FCOMP   PUSH  B
153 C07A F5                 PUSH  PSW
154 C07B D5                 PUSH  D
155 C07C E5                 PUSH  H
156 C07D E7                 RST   4         Copy MACC to reg A,B,C,D
157 C07E 15                 DATA  :15
158 C07F 5F                 MOV   E,A       Exp.byte in E
159 C080 AE                 XRA   M         XOR both exp.bytes
160 C081 FAB7C0             JM    :C0B7     Jump if different signs
161                             
162                 * If equal signs:
163                             
164 C084 C3E8D1             JMP   :D1E8     Goto D1E8, return to C087
165                 *
166 C087 17         LC23    RAL 
167 C088 C2A3C0             JNZ   :C0A3
168 C08B 7B         LC24    MOV   A,E
169 C08C 96                 SUB   M         Comp. exp. bytes
170 C08D C2A2C0             JNZ   :C0A2     Jump if not equal
171 C090 23                 INX   H
172 C091 78                 MOV   A,B
173 C092 96                 SUB   M         Comp. 1st bytes mantissa's
174 C093 C2A2C0             JNZ   :C0A2     Jump if not equal
175 C096 23                 INX   H
176 C097 79                 MOV   A,C
177 C098 96                 SUB   M         Comp. 2nd bytes mantissa's
178 C099 C2A2C0             JNZ   :C0A2     Jump if not equal
179 C09C 23                 INX   H
180 C09D 7A                 MOV   A,D
181 C09E 96                 SUB   M         Comp. 3rd bytes mantissa's
182 C09F CAA6C0     LC25    JZ    :C0A6     Jump if not equal
183 C0A2 1F         LC26    RAR             ) Set flags for output
184 C0A3 AB         LC27    XRA   E         )
185 C0A4 F601       LC28    ORI   :01       Clear CY-flag
186 C0A6 E1         LC29    POP   H
187 C0A7 D1                 POP   D

PAGE 04    DAI FIRMWARE C000-C1FA  V1.1

188 C0A8 C1                 POP   B
189 C0A9 78                 MOV   A,B       Restore A
190 C0AA C1                 POP   B
191 C0AB C9                 RET 
192                 *
193                 *******************
194                 * INTEGER COMPARE *
195                 *******************
196                 *
197                 * Compares INT numbers in MACC and M.
198                 * REMARK: Routine is incorrect when both
199                 *         numbers are negative ! Then result
200                 *         is if MACC > M due to LC26/LC27.
201                 *
202                 * Exit:  ABCDEHL preserved. CY=0
203                 *        Flags: S=0, Z=1: Both numbers equal
204                 *               S=0, Z=0: MACC > M
205                 *               S=1, Z=0: MACC < M
206                 *
207 C0AC C5         ICOMP   PUSH  B
208 C0AD F5                 PUSH  PSW
209 C0AE D5                 PUSH  D
210 C0AF E5                 PUSH  H
211 C0B0 E7                 RST   4         Copy MACC to reg. A,B,C,D
212 C0B1 15                 DATA  :15
213 C0B2 5F                 MOV   E,A       Sign byte in E
214 C0B3 AE                 XRA   M         XOR both sign bytes
215                 *
216                 *
217                 *
218                 *   =============================
219                 *** UPDATES in BASIC version V1.1 ***
220                 *   =============================
221                 *
222                 * The differences in BASIC V1.1 from V1.0 are given.
223                 *
224                 *   ]      : Indicates a total change of instruction
225                 *   !      : Indicates only a corrected jumpaddress
226                 *           due to a move of the original routine.
227                 *   No mark: Instructions only moved to other
228                 *            memory addresses (Mostly to obtain
229                 *            space for new routines).
230                 *
231                 *
232                 *******************
233                 * INTEGER COMPARE *
234                 *******************
235                 *
236                 * The temporary storage register E (sign byte) is
237                 * cleared to avoid problems when using the combined
238                 * FPT/INT exit LC27. This is done to remove a bug in
239                 * comparing 2 relational numeric operations. The
240                 * unitary operator '-' is now recognised correctly.
241                 *
242 C0B4 C3C8D1             JMP   :D1C8     ]
243                 *
244                             
245                 * If different signs:
246                             
247 C0B7 AE         LC241   XRA   M         Find out which one is neg:
248                                         S=1: MEM pos; MACC neg
249                                         S=0: MEM neg; MACC pos

PAGE 05    DAI FIRMWARE C000-C1FA  V1.1

250 C0B8 C3A4C0             JMP   :C0A4     Abort
251                 *
252                 **************************************
253                 * INCREMENT INTEGER NUMBER IN MEMORY *
254                 **************************************
255                 *
256                 * Entry: HL points to 1st byte of INT number.
257                 * Exit:  All registers preserved.
258                 *
259 C0BB F5         IINM    PUSH  PSW
260 C0BC E5                 PUSH  H
261 C0BD 23                 INX   H
262 C0BE 23                 INX   H
263 C0BF 23                 INX   H         HL pnts to last byte
264 C0C0 3E03               MVI   A,:03     Nr of bytes for INT nr
265 C0C2 34         LC30    INR   M         Incr. INT nr.
266 C0C3 C2D2C0             JNZ   :C0D2     Ready if no overflow
267 C0C6 2B                 DCX   H         Goto next byte
268 C0C7 3D                 DCR   A         1st byte reached?
269 C0C8 C2C2C0             JNZ   :C0C2     Incr. next byte
270 C0CB 34                 INR   M         Incr. 1st byte
271 C0CC 7E                 MOV   A,M       Get it
272 C0CD FE80               CPI   :80       msb=1?
273 C0CF CC4BC0             CZ    :C04B     Then overflow error
274 C0D2 E1         LC31    POP   H         Normal return
275 C0D3 F1                 POP   PSW
276 C0D4 C9                 RET 
277                 *
278                 ***************************************************
279                 * DECREMENT INTEGER NUMBER IN MEMORY - (not used) *
280                 ***************************************************
281                 *
282                 * Entry: HL points to 1st byte of INT number.
283                 * Exit:  All registers preserved.
284                 *
285 C0D5 F5         IDCM    PUSH  PSW
286 C0D6 C5                 PUSH  B
287 C0D7 E5                 PUSH  H
288 C0D8 23                 INX   H
289 C0D9 23                 INX   H
290 C0DA 23                 INX   H         HL pnts to last byte
291 C0DB 0603               MVI   B,:03     Nr. of bytes of INT nr.
292 C0DD 35         LC32    DCR   M         Decr. INT nr
293 C0DE 7E                 MOV   A,M
294 C0DF 3C                 INR   A         Check for overflow
295 C0E0 C2EFC0             JNZ   :C0EF     Ready if no overflow
296 C0E3 2B                 DCX   H         Goto next byte
297 C0E4 05                 DCR   B         Decr. byte count
298 C0E5 C2DDC0             JNZ   :C0DD     Next byte if not ready
299 C0E8 35                 DCR   M         Decr. hibyte
300 C0E9 7E                 MOV   A,M
301 C0EA FE7F               CPI   :7F       Check for overflow
302 C0EC CC4BC0             CZ    :C04B     Then run overflow error
303 C0EF E1         LC33    POP   H         Normal return
304 C0F0 C1                 POP   B
305 C0F1 F1                 POP   PSW
306 C0F2 C9                 RET 
307                 *
308                 *********************************************
309                 * INCREMENT FLOATING POINT NUMBER IN MEMORY *
310                 *********************************************
311                 *

PAGE 06    DAI FIRMWARE C000-C1FA  V1.1

312                 * If number = 0, or exponent < 0, a '1' is added
313                 * to the lsb of the mantissa. Else, the position
314                 * of the least significant '1' is looked up, and
315                 * a '1' is added to this position.
316                 * If the lsb of the mantissa is already a rounded
317                 * value, no increment occurs.
318                 *
319                 * Entry: HL points to 1st byte of FPT number.
320                 * Exit:  All registers preserved.
321                 *
322 C0F3 F5         FINM    PUSH  PSW
323 C0F4 C5                 PUSH  B
324 C0F5 D5                 PUSH  D
325 C0F6 E5                 PUSH  H
326 C0F7 1162C4             LXI   D,:C462   Addr FPT(1)
327 C0FA 7E                 MOV   A,M       Get exp.byte
328 C0FB E67F               ANI   :7F       Mask sign bit
329 C0FD CAACC1             JZ    :C1AC     If nr=0: add 1, abort
330 C100 FE40               CPI   :40       Is exponent negative?
331 C102 D2ACC1             JNC   :C1AC     Then add 1, abort
332 C105 FE19               CPI   :19       Lsb of mantissa is not lsb
333                                         of number ?
334 C107 D24DC1             JNC   :C14D     Then Popall, ret
335 C10A BE                 CMP   M         Check if nr. is negative
336 C10B 23                 INX   H
337 C10C C252C1             JNZ   :C152     Then jump
338                             
339                 * From LC34 also used by XFDCM.
340                 * Find lsb of mantissa if nr is positive:
341                             
342 C10F D609       LC34    SUI   :09       In 1st byte ?
343 C111 DCEEC1             CC    :C1EE     Then SHL bit into A (A) time
344 C114 DA36C1             JC    :C136     and jump
345 C117 23                 INX   H
346 C118 D608               SUI   :08       In 2nd byte ?
347 C11A DCEEC1             CC    :C1EE     Then SHL bit into A (A) time
348 C11D DA2EC1             JC    :C12E     and jump
349 C120 23                 INX   H
350 C121 D608               SUI   :08       In 3rd byte ?
351 C123 CDEEC1             CALL  :C1EE     Then SHL bit into A (A) time
352 C126 86                 ADD   M
353 C127 77                 MOV   M,A       Add 1 to 3rd byte mantissa
354 C128 D24DC1             JNC   :C14D     Ready if no overflow
355 C12B 2B                 DCX   H
356 C12C 3E01               MVI   A,:01     Overflow: add 1 to 2nd byte
357 C12E 86         LC35    ADD   M
358 C12F 77                 MOV   M,A       Add 1 to 2nd byte mantissa
359 C130 D24DC1             JNC   :C14D     Ready if no overflow
360 C133 2B                 DCX   H
361 C134 3E01               MVI   A,:01     Overflow: add 1 to 1st byte
362 C136 86         LC36    ADD   M
363 C137 77                 MOV   M,A       Add 1 to 1st byte mantissa
364 C138 D24DC1             JNC   :C14D     Ready if no overflow
365                             
366                 * If overflow into exponent byte:
367                             
368 C13B 1F                 RAR             )
369 C13C 77                 MOV   M,A       )
370 C13D 23                 INX   H         )
371 C13E 7E                 MOV   A,M       ) Shift all bits in
372 C13F 1F                 RAR             ) mantissa right
373 C140 77                 MOV   M,A       ) one position

PAGE 07    DAI FIRMWARE C000-C1FA  V1.1

374 C141 23                 INX   H         )
375 C142 7E                 MOV   A,M       )
376 C143 1F                 RAR             )
377 C144 77                 MOV   M,A       )
378 C145 2B                 DCX   H
379 C146 2B                 DCX   H
380 C147 2B                 DCX   H         HL pnts to exp.byte
381 C148 3E01               MVI   A,:01
382 C14A CDBAC1     LC37    CALL  :C1BA     Add 1 to exponent
383                 *
384 C14D E1         EXIT    POP   H
385 C14E D1                 POP   D
386 C14F C1                 POP   B
387 C150 F1                 POP   PSW
388 C151 C9                 RET 
389                             
390                 * Find lsb of mantissa if nr is negative:
391                             
392 C152 D609       LC39    SUI   :09       In 1st byte ?
393 C154 DCEEC1             CC    :C1EE     Then SHL bit into A (A) time
394 C157 DA7DC1             JC    :C17D     and jump
395 C15A 23                 INX   H
396 C15B D608               SUI   :08       In 2nd byte ?
397 C15D DCEEC1             CC    :C1EE     Then SHL bit into A (A) time
398 C160 DA73C1             JC    :C173     and jump
399 C163 23                 INX   H
400 C164 D608               SUI   :08       In 3rd byte ?
401 C166 DCEEC1             CC    :C1EE     Then SHL bit into A (A) time
402 C169 47                 MOV   B,A
403 C16A 7E                 MOV   A,M
404 C16B 90                 SUB   B         Subtract 1 from 3rd byte
405 C16C 77                 MOV   M,A
406 C16D D24DC1             JNC   :C14D     Ready if no borrow
407 C170 2B                 DCX   H
408 C171 3E01               MVI   A,:01     Subtract 1 from 2nd byte if
409                                         borrow
410 C173 47         LC40    MOV   B,A
411 C174 7E                 MOV   A,M
412 C175 90                 SUB   B         Subtract 1 from 2nd byte
413 C176 77                 MOV   M,A
414 C177 D24DC1             JNC   :C14D     Ready if no borrow
415 C17A 2B                 DCX   H
416 C17B 3E01               MVI   A,:01     Subtract 1 from 1st byte if
417                                         borrow
418 C17D 47         LC41    MOV   B,A
419 C17E 7E                 MOV   A,M
420 C17F 90                 SUB   B         Subtract 1 from 1st byte
421 C180 77                 MOV   M,A
422 C181 FA4DC1             JM    :C14D     Ready if normalised
423                             
424                 * If not normalised:
425                             
426 C184 0618               MVI   B,:18     Nr of mantissa bits
427 C186 23         LC42    INX   H         )
428 C187 23                 INX   H         )
429 C188 B7                 ORA   A         )
430 C189 7E                 MOV   A,M       )
431 C18A 17                 RAL             )
432 C18B 77                 MOV   M,A       ) Shift all bits
433 C18C 2B                 DCX   H         ) of mantissa
434 C18D 7E                 MOV   A,M       ) left one position
435 C18E 17                 RAL             )

PAGE 08    DAI FIRMWARE C000-C1FA  V1.1

436 C18F 77                 MOV   M,A       )
437 C190 2B                 DCX   H         )
438 C191 7E                 MOV   A,M       )
439 C192 17                 RAL             )
440 C193 77                 MOV   M,A       )
441 C194 B7                 ORA   A
442 C195 FA9FC1             JM    :C19F     If normalized
443 C198 05                 DCR   B         Update exp. count
444 C199 CAA6C1             JZ    :C1A6     If exp. now zero
445 C19C C386C1             JMP   :C186     Cont. normalisation
446                             
447                 * Normalisation done:
448                             
449 C19F 2B         LC43    DCX   H         Pnts to exp.byte
450 C1A0 78                 MOV   A,B       Get exp. count
451 C1A1 D619               SUI   :19       Minus nr of bytes in
452                                         mantissa
453 C1A3 C34AC1             JMP   :C14A     Update exponent, quit
454                             
455                 * If exponent is zero:
456                             
457 C1A6 2B         LC44    DCX   H
458 C1A7 3600               MVI   M,:00     Exp.byte is 0
459 C1A9 C34DC1             JMP   :C14D     Popall, ret
460                             
461                 * Simply add 1 (FINM) or add -1 (FDCM):
462                             
463 C1AC E7         LC45    RST   4         Copy number into MACC
464 C1AD 0C                 DATA  :0C
465 C1AE EB                 XCHG
466 C1AF E7                 RST   4         Add 1 or -1 (FPT)
467 C1B0 00                 DATA  :00
468 C1B1 EB                 XCHG
469 C1B2 E7                 RST   4         Copy MACC into memory
470 C1B3 0F                 DATA  :0F
471 C1B4 C34DC1             JMP   :C14D     Popall, ret
472                 *
473                 *****************
474                 * ADD EXPONENTS *
475                 *****************
476                 *
477                 * LC225 for operand in MACC.
478                 * LC46 for operand in M.
479                 *
480                 * Entry: Byte to be added to exponent in A.
481                 * Exit:  BCDEHL preserved.
482                 *        CY=0: O.K.
483                 *        CY=1: Overflow.
484                 *
485 C1B7 21D500     LC225   LXI   H,:00D5   Addr. MACC
486                 *
487 C1BA E5         LC46    PUSH  H
488 C1BB D5                 PUSH  D
489 C1BC C5                 PUSH  B
490 C1BD 4F                 MOV   C,A       Byte to be added in C
491 C1BE 7E                 MOV   A,M       Get exp.byte operand
492 C1BF E680               ANI   :80       Sign bit mantissa only
493 C1C1 47                 MOV   B,A       in B
494 C1C2 7E                 MOV   A,M       Get exp.byte
495 C1C3 CDE9C1             CALL  :C1E9     Sign extend
496 C1C6 F5                 PUSH  PSW       Save sign extended exp.byte
497 C1C7 A9                 XRA   C         XOR with byte to be added

PAGE 09    DAI FIRMWARE C000-C1FA  V1.1

498 C1C8 2F                 CMA 
499 C1C9 57                 MOV   D,A
500 C1CA F1                 POP   PSW       Get sign extended exp.byte
501 C1CB 81                 ADD   C         Add byte to exponent
502 C1CC 4F                 MOV   C,A       Store result
503 C1CD 1F                 RAR 
504 C1CE A9                 XRA   C
505 C1CF A2                 ANA   D
506 C1D0 FAE2C1             JM    :C1E2     If overflow into sign bit
507 C1D3 79                 MOV   A,C       Get new exp.byte
508 C1D4 17                 RAL 
509 C1D5 A9                 XRA   C
510 C1D6 FAE2C1             JM    :C1E2     If overflow into sign bit
511 C1D9 79                 MOV   A,C       Get new exp.byte
512 C1DA E67F               ANI   :7F       Exponent only
513 C1DC B0                 ORA   B         Add sign bit mantissa
514 C1DD 77                 MOV   M,A       Store it
515 C1DE C1         LC47    POP   B
516 C1DF D1                 POP   D
517 C1E0 E1                 POP   H
518 C1E1 C9                 RET             CY=0
519                             
520                 * If overflow into sign bit:
521                             
522 C1E2 79         LC48    MOV   A,C       Get new exp.byte
523 C1E3 17                 RAL 
524 C1E4 B7                 ORA   A
525 C1E5 37                 STC 
526 C1E6 C3DEC1             JMP   :C1DE     Abort with CY=1
527                 *
528                 ***************
529                 * SIGN EXTEND *
530                 ***************
531                 *
532                 * Exponent byte is normalized.
533                 *
534                 * Entry: Exp.byte in A.
535                 * Exit:  BCDEHL preserved.
536                 *        Normalized exp.byte in A: Exp.value in
537                 *        bits 7-2, sign mantissa in bit 1, sign
538                 *        exponent in bit 0.
539                 *
540 C1E9 07         SEXT    RLC 
541 C1EA 07                 RLC 
542 C1EB 0F                 RRC 
543 C1EC 1F                 RAR 
544 C1ED C9                 RET 
545                 *
546                 ************************************
547                 * MOVE A BIT INTO A LEFT (A) TIMES *
548                 ************************************
549                 *
550                 * Used to place a '1' in the correct position in
551                 * a byte for adding/subtracting '1' to/from the
552                 * least significant '1' of a FPT mantissa.
553                 *
554                 * Entry: A contains a neg. number indicating
555                 *        how often RAL has to be performed.
556                 * Exit:  Result in A,B.
557                 *        FCDEHL preserved.
558                 *
559 C1EE F5         LC50    PUSH  PSW

PAGE 10    DAI FIRMWARE C000-C1FA  V1.1

560 C1EF 47                 MOV   B,A       Save nr of shifts
561 C1F0 AF                 XRA   A         Clear A
562 C1F1 37                 STC             Set CY
563 C1F2 17         LC51    RAL             SHL
564 C1F3 04                 INR   B         Update count
565 C1F4 C2F2C1             JNZ   :C1F2     Continu if not ready
566 C1F7 47                 MOV   B,A       Save result
567 C1F8 F1                 POP   PSW
568 C1F9 78                 MOV   A,B       Result in A
569 C1FA C9                 RET 
570                 *
571                 *
572                 *
573 C1FB                    END 
 
***************************
* S Y M B O L   T A B L E *
***************************
 
BASE   C000   DECBUF C033   EXIT   C14D   FCOMP  C079   
FINM   C0F3   FPEAE  C05E   FPED0  C06C   FPEOV  C04B   
FPEUN  C065   ICOMP  C0AC   IDCM   C0D5   IINM   C0BB   
LC18   C047   LC20   C04F   LC22   C073   LC225  C1B7   
LC23   C087   LC24   C08B   LC241  C0B7   LC25   C09F   
LC26   C0A2   LC27   C0A3   LC28   C0A4   LC29   C0A6   
LC30   C0C2   LC31   C0D2   LC32   C0DD   LC33   C0EF   
LC34   C10F   LC35   C12E   LC36   C136   LC37   C14A   
LC39   C152   LC40   C173   LC41   C17D   LC42   C186   
LC43   C19F   LC44   C1A6   LC45   C1AC   LC46   C1BA   
LC47   C1DE   LC48   C1E2   LC50   C1EE   LC51   C1F2   
MINIT  C035   SEXT   C1E9   XFBC   C021   XFCB   C01E   
XFCOMP C00C   XFDCM  C009   XFINM  C006   XHBC   C02D   
XHCB   C02A   XIBC   C027   XICB   C024   XICOMP C015   
XIDCM  C012   XIINM  C00F   XINIT  C003   XPOP   C01B   
XPRTY  C030   XPUSH  C018
