PAGE 01 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 002 ORG :E414 003 * 004 * 005 * 006 *********************************** 007 * CHANGE CONTENTS MACC TO INTEGER * 008 *********************************** 009 * 010 * Entry: None. 011 * Exit: All registers preserved. 012 * 013 E414 F5 XFIX PUSH PSW 014 E415 C5 PUSH B 015 E416 D5 PUSH D 016 E417 E5 PUSH H 017 E418 CD33E1 CALL :E133 Copy MACC to ABCD 018 E41B F5 PUSH PSW Save exp.byte 019 E41C E67F ANI :7F Exponent only 020 E41E CA3BE4 JZ :E43B Exp=0: Clear MACC, abort 021 E421 FE40 CPI :40 Exp negative ? 022 E423 D23BE4 JNC :E43B Then clear MACC, abort 023 E426 D620 SUI :20 Exp >= 32 ? 024 E428 D23FE4 JNC :E43F Then run overflow error 025 E42B 2F CMA ) 2-complement of exp 026 E42C 3C INR A ) 027 E42D CD55EB CALL :EB55 Shift BCDE right A times 028 E430 F1 POP PSW Get exp byte 029 E431 B7 ORA A 030 E432 FCC9E3 CM :E3C9 Nr <0: negate BCDE 031 E435 DA22E3 JC :E322 Jump if overflow 032 E438 C328E3 JMP :E328 Copy BCDE into MACC, abort 033 034 * If number is 0 or exponent negative: 035 036 E43B F1 L1E65 POP PSW 037 E43C C30EE4 JMP :E40E Clear MACC, abort 038 039 * if overflow: 040 041 E43F F1 L1E66 POP PSW 042 E440 C322E3 JMP :E322 Run overflow error, abort 043 * 044 ************** 045 * FPT INT(X) * 046 ************** 047 * 048 * The contents of the MACC is replaced by its 049 * FPT integer part. The fractional bits of the 050 * mantissa are masked off. 051 * 052 * Exit: All registers preserved. 053 * 054 E443 F5 XFINT PUSH PSW 055 E444 C5 PUSH B 056 E445 D5 PUSH D 057 E446 E5 PUSH H 058 E447 21D500 LXI H,:00D5 Addr MACC 059 E44A 7E MOV A,M Get exp.byte 060 E44B E67F ANI :7F Exponent only 061 E44D CA0EE4 JZ :E40E If exp=0: Clear MACC, abort 062 E450 FE40 CPI :40 Exp negative ? 063 E452 D20EE4 JNC :E40E Then clear MACC, abort PAGE 02 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 064 E455 D619 SUI :19 Exp - nr of mantissa bits 065 E457 21D800 LXI H,:00D8 Addr lobyte MACC 066 E45A 1E03 MVI E,:03 3 bytes in mantissa 067 E45C 57 MOV D,A Rest exp in D 068 E45D 0E08 L1E68 MVI C,:08 8 bits pro byte 069 E45F 14 L1E69 INR D Rest exp + 1 070 E460 37 STC Mask '1' for bits reqd 071 E461 F265E4 JP :E465 If rest exp >=0 072 E464 3F CMC Mask '0' for bits not reqd 073 E465 1F L1E70 RAR Shift CY into A to make mask 074 E466 0D DCR C 075 E467 C25FE4 JNZ :E45F Next bit if not ready 076 E46A A6 ANA M Mask MACC byte with mask 077 E46B 77 MOV M,A Result back in MACC 078 E46C 2B DCX H Addr next MACC byte 079 E46D 1D DCR E 080 E46E C25DE4 JNZ :E45D Next byte if not ready 081 E471 C34DC1 JMP :C14D Popall, ret 082 * 083 ********************* 084 * AMD: FPT ADDITION * 085 ********************* 086 * 087 * MTOS = MTOS + MEM. 088 * 089 * Entry: HL points to operand in memory. 090 * Exit: All registers preserved. 091 * 092 E474 CD27E5 ZFADD CALL :E527 Wait, load, operate imm. 093 E477 10 DATA :10 FPT addition 094 E478 C9 RET 095 * 096 ************************ 097 * AMD: FPT SUBTRACTION * 098 ************************ 099 * 100 * MTOS = MTOS - MEM. 101 * 102 * Entry: HL points to operand in memory. 103 * Exit: All registers preserved. 104 * 105 E479 CD27E5 ZFSUB CALL :E527 Wait, load, operate imm. 106 E47C 11 DATA :11 FPT subtraction 107 E47D C9 RET 108 * 109 *************************** 110 * AMD: FPT MULTIPLICATION * 111 *************************** 112 * 113 * MTOS = MTOS * MEM. 114 * 115 * Entry: HL points to multiplier in memory. 116 * Exit: All registers preserved. 117 * 118 E47E CD27E5 ZFMUL CALL :E527 Wait, load, operate imm. 119 E481 12 DATA :12 FPT multiplication 120 E482 C9 RET 121 * 122 ********************* 123 * AMD: FPT DIVISION * 124 ********************* 125 * PAGE 03 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 126 * MTOS = MTOS / MEM. 127 * 128 * Entry: HL points to divisor in memory. 129 * Exit: All registers preserved. 130 * 131 E483 CD27E5 ZFDIV CALL :E527 Wait, load, operate imm. 132 E486 13 DATA :13 FPT division 133 E487 C9 RET 134 * 135 **************** 136 * AMD: FPT ABS * 137 **************** 138 * 139 * MTOS is replaced by its absolute value (FPT). 140 * 141 * Entry: None. 142 * Exit: All registers preserved. 143 * 144 E488 F5 ZFABS PUSH PSW 145 E489 CD95ED CALL :ED95 Get status bits 146 E48C 00 NOP 147 E48D 87 ADD A Test bit 6 (sign) 148 E48E FC93E4 CM :E493 Change sign if reqd (FPT) 149 E491 F1 POP PSW 150 E492 C9 RET 151 * 152 **************************************** 153 * AMD: CHANGE SIGN MTOS CONTENTS (FPT) * 154 **************************************** 155 * 156 * MTOS = - MTOS. 157 * 158 * Entry: None. 159 * Exit: All registers preserved. 160 * 161 E493 CD35E5 ZFCHS CALL :E535 Wait, operate immediate 162 E496 15 DATA :15 FPT change sign MTOS 163 E497 C9 RET 164 * 165 ******************* 166 * AMD: FPT INT(X) * 167 ******************* 168 * 169 * MTOS is replaced by its integer part. 170 * 171 E498 CDEFE4 ZFINT CALL :E4EF Convert MTOS to INT 172 173 * Entry for AMD: Change MTOS to FPT: 174 175 E49B CD35E5 ZFLT CALL :E535 Wait, load, operate imm. 176 E49E 1C DATA :1C Convert MTOS to FPT 177 E49F C9 RET 178 * 179 ***************** 180 * AMD: FPT FRAC * 181 ***************** 182 * 183 * MTOS is replaced by its fractional part. 184 * 185 E4A0 CD35E5 ZFRAC CALL :E535 Wait, load, operate imm. 186 E4A3 37 DATA :37 Push MTOS 187 E4A4 CD98E4 CALL :E498 MTOS = INT(MTOS) PAGE 04 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 188 E4A7 CD35E5 CALL :E535 Wait, load, operate imm. 189 E4AA 11 DATA :11 Subtract whole number 190 E4AB C9 RET 191 * 192 ****************************** 193 * part of AMD: POWER (1EDA1) * 194 ****************************** 195 * 196 * Entry: HL points to operand in memory. 197 * Exit: All registers preserved. 198 * 199 E4AC CD27E5 MPR14 CALL :E527 Wait, load, operate imm. 200 E4AF 0B DATA :0B MTOS = MTOS ^ MEM 201 E4B0 C9 RET 202 * 203 ************ 204 * AMD: LOG * 205 ************ 206 * 207 E4B1 CD35E5 ZLN CALL :E535 Wait, operate immediate 208 E4B4 09 DATA :09 MTOS = LN (MTOS) 209 E4B5 C9 RET 210 * 211 ************ 212 * AMD: EXP * 213 ************ 214 * 215 E4B6 CD35E5 ZEXP CALL :E535 Wait, operate immediate 216 E4B9 0A DATA :0A MTOS = E ^ MTOS 217 E4BA C9 RET 218 * 219 ************* 220 * AMD: LOGT * 221 ************* 222 * 223 E4BB CD35E5 ZLOG CALL :E535 Wait, operate immediate 224 E4BE 08 DATA :08 MTOS = LOG (MTOS) 225 E4BF C9 RET 226 * 227 ************* 228 * AMD: ALOG * 229 ************* 230 * 231 E4C0 E5 ZALOG PUSH H 232 E4C1 2190E8 LXI H,:E890 Addr 1/logn(10) 233 E4C4 CD83E4 CALL :E483 MTOS = MTOS/MEM 234 E4C7 E1 POP H 235 E4C8 CDB6E4 CALL :E4B6 MTOS = e ^ MTOS 236 E4CB C9 RET 237 * 238 ************ 239 * AMD: SQR * 240 ************ 241 * 242 E4CC CD35E5 ZSQRT CALL :E535 Wait, operate immediate 243 E4CF 01 DATA :01 MTOS = SQRT (MTOS) 244 E4D0 C9 RET 245 * 246 ************ 247 * AMD: SIN * 248 ************ 249 * PAGE 05 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 250 E4D1 CD35E5 ZSIN CALL :E535 Wait, operate immediate 251 E4D4 02 DATA :02 MTOS = SIN (MTOS) 252 E4D5 C9 RET 253 * 254 ************ 255 * AMD: COS * 256 ************ 257 * 258 E4D6 CD35E5 ZCOS CALL :E535 Wait, operate immediate 259 E4D9 03 DATA :03 MTOS = COS (MTOS) 260 E4DA C9 RET 261 * 262 ************ 263 * AMD: TAN * 264 ************ 265 * 266 E4DB CD35E5 ZTAN CALL :E535 Wait, operate immediate 267 E4DE 04 DATA :04 MTOS = TAN (MTOS) 268 E4DF C9 RET 269 * 270 ************* 271 * AMD: ASIN * 272 ************* 273 * 274 E4E0 CD35E5 ZASIN CALL :E535 Wait, operate immediate 275 E4E3 05 DATA :05 MTOS = ASIN (MTOS) 276 E4E4 C9 RET 277 * 278 ************* 279 * AMD: ACOS * 280 ************* 281 * 282 E4E5 CD35E5 ZACOS CALL :E535 Wait, operate immediate 283 E4E8 06 DATA :06 MTOS = ACOS (MTOS) 284 E4E9 C9 RET 285 * 286 ************ 287 * AMD: ATN * 288 ************ 289 * 290 E4EA CD35E5 ZATAN CALL :E535 Wait, operate immediate 291 E4ED 07 DATA :07 MTOS = ATAN (MTOS) 292 E4EE C9 RET 293 * 294 **************************************** 295 * AMD: CHANGE CONTENTS MTOS TO INTEGER * 296 **************************************** 297 * 298 E4EF CD35E5 ZFIX CALL :E535 Wait, operate immediate 299 E4F2 1E DATA :1E MTOS = INT(MTOS) 300 E4F3 C9 RET 301 * 302 ********************* 303 * AMD: INT ADDITION * 304 ********************* 305 * 306 * MTOS = MTOS + MEM. 307 * 308 * Entry: HL points to number in memory. 309 * Exit: All registers reserved. 310 * 311 E4F4 CD27E5 ZIADD CALL :E527 Wait, load, operate imm. PAGE 06 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 312 E4F7 2C DATA :2C INT addition 313 E4F8 C9 RET 314 * 315 ************************ 316 * AMD: INT SUBTRACTION * 317 ************************ 318 * 319 * MTOS = MTOS - MEM. 320 * 321 * Entry: HL points to number in memory. 322 * Exit: All registers preserved. 323 * 324 E4F9 CD27E5 ZISUB CALL :E527 Wait, load, operate imm. 325 E4FC 2D DATA :2D INT subtraction 326 E4FD C9 RET 327 * 328 *************************** 329 * AMD: INT MULTIPLICATION * 330 *************************** 331 * 332 * MTOS = MTOS * MEM. 333 * 334 * Entry: HL points to number in memory. 335 * Exit: All registers preserved. 336 * 337 E4FE CD27E5 ZIMUL CALL :E527 Wait, load, operate imm. 338 E501 2E DATA :2E INT multiplication 339 E502 C9 RET 340 * 341 ********************* 342 * AMD: INT DIVISION * 343 ********************* 344 * 345 * MTOS = MTOS / MEM. 346 * 347 * Entry: HL points to number in memory. 348 * Exit: All registers preserved. 349 * 350 E503 CD27E5 ZIDIV CALL :E527 Wait, load, operate imm. 351 E506 2F DATA :2F INT division 352 E507 C9 RET 353 * 354 ***************************** 355 * AMD: INT DIVIDE REMAINDER * 356 ***************************** 357 * 358 * MTOS = INT remainder of MTOS / MEM. 359 * 360 * Entry: HL points to number in memory. 361 * Exit: All registers preserved. 362 * 363 E508 CD35E5 ZIREM CALL :E535 Wait, operate immediate 364 E50B 37 DATA :37 Push MTOS 365 E50C CD03E5 CALL :E503 INT divide 366 E50F CDFEE4 CALL :E4FE INT multiply back 367 E512 CD35E5 CALL :E535 Wait, operate immediate 368 E515 2D DATA :2D Subtract: difference = 369 remainder 370 E516 C9 RET 371 * 372 * 373 * PAGE 07 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 374 **************** 375 * AMD: INT ABS * 376 **************** 377 * 378 * MTOS = absolute value of MTOS (INT). 379 * 380 E517 F5 ZIABS PUSH PSW 381 E518 CD95ED CALL :ED95 Get status bits 382 E51B 00 NOP 383 E51C 87 ADD A Test bit 6 (sign) 384 E51D FC22E5 CM :E522 Change sign MTOS if reqd 385 E520 F1 POP PSW 386 E521 C9 RET 387 * 388 ******************************* 389 * AMD: CHANGE SIGN MTOS (INT) * 390 ******************************* 391 * 392 E522 CD35E5 ZICHS CALL :E535 Wait, operate immediate 393 E525 34 DATA :34 MTOS = - MTOS 394 E526 C9 RET 395 * 396 ************************************** 397 * AMD: WAIT, LOAD, OPERATE IMMEDIATE * 398 ************************************** 399 * 400 * Call has to be followed by a 1 byte AMD command. 401 * 402 E527 CD3BE5 WLOPI CALL :E53B Wait for ready, evt. error 403 indications 404 E52A CD88E5 CALL :E588 Load 2nd operand in MTOS 405 E52D E3 OPI XTHL HL pnts to command byte 406 E52E F5 PUSH PSW 407 E52F CDCCEC CALL :ECCC Issue command to AMD 408 E532 F1 POP PSW 409 E533 E3 XTHL Restore returnaddr 410 E534 C9 RET 411 * 412 ******************************** 413 * AMD: WAIT, OPERATE IMMEDIATE * 414 ******************************** 415 * 416 * Call has to be followed by a 1 byte AMD command. 417 * 418 E535 CD3BE5 WOPI CALL :E53B Wait ready, evt. error 419 indications 420 E538 C32DE5 JMP :E52D Issue command to AMD 421 * 422 ********************************* 423 * AMD: WAIT FOR MATH.CHIP READY * 424 ********************************* 425 * 426 * Waits for math.chip ready. Handles eventual 427 * errors if found. 428 * 429 * Exit: If no errors: All registers preserved. 430 * 431 E53B F5 WMATH PUSH PSW 432 E53C 3A02FB WMT10 LDA :FB02 Get status math.chip 433 E53F B7 ORA A 434 E540 FA3CE5 JM :E53C If busy: wait for ready 435 E543 E61E ANI :1E Error codes only PAGE 08 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 436 E545 CA5DE5 JZ :E55D Abort if no errors 437 E548 00 NOP 438 E549 CDD2EC CALL :ECD2 Reset AMD status 439 E54C 1F RAR 440 E54D 1F RAR 441 E54E DC4BC0 CC :C04B Evt. run overflow error 442 E551 1F RAR 443 E552 DC65C0 CC :C065 Evt. run underflow error 444 E555 1F RAR 445 E556 DC5EC0 CC :C05E Evt. run argument error 446 E559 1F RAR 447 E55A DC6CC0 CC :C06C Evt. run divide by 0 error 448 E55D F1 WMT20 POP PSW Normal return 449 E55E C9 RET 450 * 451 ***************************************** 452 * AMD: COPY REGISTERS A,B,C,D INTO MTOS * 453 ***************************************** 454 * 455 E55F F5 ZPUT PUSH PSW 456 E560 7A MOV A,D D into A 457 E561 CD3BE5 CALL :E53B Wait ready 458 E564 3200FB ZPT10 STA :FB00 Copy (D) into MTOS 459 E567 79 MOV A,C C into A 460 E568 3200FB STA :FB00 Copy (C) into MTOS 461 E56B 78 MOV A,B 462 E56C C3D9EC JMP :ECD9 Copy (B)+(A) into MTOS 463 * 464 ***************************************** 465 * AMD: COPY MTOS INTO REGISTERS A,B,C,D * 466 ***************************************** 467 * 468 E56F CD3BE5 ZGET CALL :E53B Wait ready 469 E572 3A00FB LDA :FB00 Get hibyte from MTOS 470 E575 F5 PUSH PSW Save it on stack 471 E576 3A00FB LDA :FB00 Get 2nd byte from MTOS 472 E579 47 MOV B,A Store it in B 473 E57A 3A00FB LDA :FB00 Get 3rd byte from MTOS 474 E57D 4F MOV C,A Store it in C 475 E57E 3A00FB LDA :FB00 Get lobyte from MTOS 476 E581 57 MOV D,A Store it in D 477 E582 C364E5 JMP :E564 Restore MTOS 478 * 479 ************** 480 * (not used) * 481 ************** 482 * 483 E585 55 L1E109 MOV D,L 484 E586 E1 POP H 485 E587 C9 RET 486 * 487 ******************************* 488 * AMD: COPY OPERAND INTO MTOS * 489 ******************************* 490 * 491 * Entry: HL points to 1st byte of operand. 492 * Exit: All registers preserved. 493 * 494 E588 F5 ZLOAD PUSH PSW 495 E589 C5 PUSH B 496 E58A D5 PUSH D 497 E58B E5 PUSH H PAGE 09 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 498 E58C 7E MOV A,M 1st byte in A 499 E58D 23 INX H 500 E58E 46 MOV B,M 2nd byte in B 501 E58F 23 INX H 502 E590 4E MOV C,M 3rd byte in C 503 E591 23 INX H 504 E592 56 MOV D,M 4th byte in D 505 E593 CD5FE5 CALL :E55F Copy ABCD into MTOS 506 E596 C34DC1 JMP :C14D Popall, ret 507 * 508 ***************************** 509 * AMD: COPY MTOS TO OPERAND * 510 ***************************** 511 * 512 * Entry: HL points to 1st byte of operand. 513 * Exit: All registers preserved. 514 * 515 E599 F5 ZSAVE PUSH PSW 516 E59A C5 PUSH B 517 E59B D5 PUSH D 518 E59C E5 PUSH H 519 E59D CD6FE5 CALL :E56F Copy MTOS into ABCD 520 E5A0 77 MOV M,A ) 521 E5A1 23 INX H ) 522 E5A2 70 MOV M,B ) 523 E5A3 23 INX H ) Copy ABCD into operand 524 E5A4 71 MOV M,C ) 525 E5A5 23 INX H ) 526 E5A6 72 MOV M,D ) 527 E5A7 C34DC1 JMP :C14D Popall, ret 528 * 529 ************************ 530 * CALCULATE TAYLOR SUM * 531 ************************ 532 * 533 * Entry: HL points to a list with FPT constants 534 * (Mi with i = 0,1,2,...). 535 * MACC: Const. term of Taylor series (S0). 536 * 00E3-E6: Initial power of argument (P). 537 * 00E7-EA: Argument X. 538 * 539 * Routine computes: 540 * Sum = S0 + M0*P + M1*P*X + M2*P*X^2 + ...... 541 * 542 * Exit: 00EB-EE: Sum of series. 543 * 00E3-E6: Last P*X^i added in. 544 * 00E7-EA: Preserved. 545 * MACC + ABCD: Sum of series. 546 * FEHL corrupted. 547 * 548 E5AA E5 L1E112 PUSH H Save table pntr 549 E5AB 21EB00 LXI H,:00EB 550 E5AE CDD6E9 CALL :E9D6 Copy MACC (S0) into 00EB-EE 551 E5B1 21E300 LXI H,:00E3 552 E5B4 CDFBE9 CALL :E9FB Copy 00E3-E6 (P) into MACC 553 E5B7 E1 L1E113 POP H 554 E5B8 E5 PUSH H ) Get and save table pntr 555 E5B9 CD59EA CALL :EA59 MACC = P * Mi 556 E5BC 21EB00 LXI H,:00EB 557 E5BF E5 PUSH H 558 E5C0 CD72EA CALL :EA72 MACC = sum + P * Mi 559 E5C3 E1 POP H PAGE 10 DAI FIRMWARE 1E414-1E5F7 V1.0 Rev.1 560 E5C4 CDDBE9 CALL :E9DB Result in 00EB-EE 561 E5C7 3ADE00 LDA :00DE Get difference in exp 562 E5CA B7 ORA A 563 E5CB F2D3E5 JP :E5D3 564 E5CE FEE8 CPI :E8 565 E5D0 DAF3E5 JC :E5F3 566 E5D3 E1 L1E114 POP H Get table pntr 567 E5D4 23 INX H 568 E5D5 23 INX H 569 E5D6 23 INX H 570 E5D7 23 INX H HL pnts to next table entry 571 E5D8 E5 PUSH H Save table pntr 572 E5D9 23 INX H 573 E5DA 7E MOV A,M 574 E5DB B7 ORA A 575 E5DC F2F3E5 JP :E5F3 Jump if ready 576 E5DF 21E300 LXI H,:00E3 577 E5E2 E5 PUSH H 578 E5E3 CDFBE9 CALL :E9FB Copy 00E3-E6 into MACC 579 and reg ABCD 580 E5E6 21E700 LXI H,:00E7 581 E5E9 CD59EA CALL :EA59 Multiply with 00E7-EA 582 E5EC E1 POP H HL=00E3 583 E5ED CDDBE9 CALL :E9DB Copy ABCD into 00E3-E6 584 E5F0 C3B7E5 JMP :E5B7 Calc next sum 585 * 586 E5F3 E1 L1E115 POP H 587 E5F4 CDF8E9 CALL :E9F8 Copy result into MACC 588 and reg ABCD 589 E5F7 C9 RET 590 * 591 * 592 * 593 E5F8 END *************************** * S Y M B O L T A B L E * *************************** L1E109 E585 L1E112 E5AA L1E113 E5B7 L1E114 E5D3 L1E115 E5F3 L1E65 E43B L1E66 E43F L1E68 E45D L1E69 E45F L1E70 E465 MPR14 E4AC OPI E52D WLOPI E527 WMATH E53B WMT10 E53C WMT20 E55D WOPI E535 XFINT E443 XFIX E414 ZACOS E4E5 ZALOG E4C0 ZASIN E4E0 ZATAN E4EA ZCOS E4D6 ZEXP E4B6 ZFABS E488 ZFADD E474 ZFCHS E493 ZFDIV E483 ZFINT E498 ZFIX E4EF ZFLT E49B ZFMUL E47E ZFRAC E4A0 ZFSUB E479 ZGET E56F ZIABS E517 ZIADD E4F4 ZICHS E522 ZIDIV E503 ZIMUL E4FE ZIREM E508 ZISUB E4F9 ZLN E4B1 ZLOAD E588 ZLOG E4BB ZPT10 E564 ZPUT E55F ZSAVE E599 ZSIN E4D1 ZSQRT E4CC ZTAN E4DB