ASMB,R,L,C * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAME: PART OF MATH LIBRARY * SOURCE: 24998-18XXX SEE NAM FOR LAST THREE DIGITS * RELOC: PART OF 24998-12001 * PGMR: BG & JTS * HED ".DTOI" DOUBLE TO INTEGER POWER NAM .DTOI,6 24998-1X048 REV.2001 750701 ENT .DTOI EXT .ZRNT,.XMPY,.XDIV,.DFER SPC 1 * * CALLING SEQUENCE: Y = D ** I * JSB .DTOI * DEF Y * DEF D * DEF I * (ERROR RETURN : D = 0 ; I < = 0) * (NORMAL RETURN) SPC 2 TDB NOP DEC 12 NOP I NOP EXPONENT D REP 3 BASE NOP Y NOP F REP 3 NOP SIGN NOP =+1,-1 IF I > 0, < 0 .DTOI NOP JSB .ZRNT DEF LIBX LDA *-2 LDB *-4 SSA,RSS STB TDB+2 CHECK IF RE-ENTERENT OR NOT LDA TDB+2,I STA Y SAVE ADDRESS OF Y ISZ TDB+2 LDA TDB+2,I STA D SAVE ADDRESS OF D ISZ TDB+2 LDA TDB+2,I LDA 0,I STA I STORE I ISZ TDB+2 SET RETURN ADDRESS JSB .DFER D=D DEF D DEF D,I LDA D LDB I SZA D = 0 ? JMP NOT0 NO. SSB,RSS I < 0 SZB,RSS OR I = 0 ? JMP ERROR YES ERROR JMP ANS0 NO. ANSWER = 0. NOT0 SZB,RSS I = 0 ? JMP ANS1 YES. ANSWER = 1. JSB .DFER SET F=1.0 DEF F DEF ONE CLB,INB IF I > 0 , SIGN = +1 LDA I SSA CCB IF I < 0 , SIGN = -1 STB SIGN SSB CMA,INA SET I = / I / STA I LOOP LDA I SLA,RSS LAST BIT OF I = 0 ? JMP *+5 YES JSB .XMPY NO. F = F * D ADF DEF F DEF F DEF D LDA I ARS DIVIDE I BY 2 SZA,RSS I = 0 ? JMP FINIS YES. STA I NO. SAVE I JSB .XMPY D = D * D DEF D DEF D DEF D JMP LOOP DO IT AGAIN FINIS ISZ SIGN I > 0 ? JMP POS JSB .XDIV NO. F = 1 / F DEF F ADONE DEF ONE DEF F POS LDA ADF RSS ANS0 LDA ADZRO GET ADDRESS OF CEX 0.0 RSS ANS1 LDA ADONE GET ADDRESS OF DEX 1.0 STA I TEMP JSB .DFER MOVE TO Y DEF Y,I DEF I,I ISZ TDB+2 GOOD RETURN JMP LIBX ERROR LDA MSG LDB MSG+1 LIBX JMP TDB+2,I RETURN ZERO DEX 0.0 ADZRO DEF ZERO ONE DEX 1.0 MSG ASC 2,12UN ERROR MESSAGE END *