ASMB,L,C HED ".ERES" - EMA ADDRESS RESOLVER. * NAME: .ERES * SOURCE: 92067-18475 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: B.G. * * *************************************************************** * * (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. * * *************************************************************** * NAM .ERES,7 92067-1X475 REV.2013 781226 * ENT .ERES SUP * A EQU 0 SPC 1 * .ERES RESOLVES AN ADDRESS IN EMA BUT DOES NOT MAP IN THE * PAGE CONTAINING THE RESULTING ADDRESS. INSTEAD, THE * ADDRESS IS RETURNED IN (B,A). THE CALLING SEQUENCE IS * IDENTICAL TO THAT OF ".EMAP" EXCEPT THE "ARRAY ADDRESS" * IS IGNORED, SO THE ARRAY MUST ALWAYS BE IN EMA. SPC 2 * LOCALS. * EMSG ASC 2,20EM T1 BSS 1 UPPER WORD RUNNING RESULT. T2 BSS 1 LOWER. ND BSS 1 LOOP COUNTER OF # DIMENSIONS. TABLE BSS 1 ADDR OF ARRAY DESCRIPTOR. RTN BSS 1 RETURN ADDRESS. * * ERROR HANDLING AND ZERO-DIMENSION CASE. * ERROR DLD EMSG (A,B) = ASCII "20EM" JMP RTN,I TAKE ERROR EXIT. ZEROD DLD TABLE,I JUST CHECK SIGN OF OFFSET. JMP NCHK SPC 2 * COPY RETURN ADDRESS, TABLE ADDR, & # DIM. * .ERES NOP LDA .ERES,I COPY RETURN ADDR. ISZ .ERES STA RTN ISZ .ERES SKIP ARRAY ADDR LDA .ERES COPY TABLE ADDR ISZ .ERES LDA A,I (FIRST REMOVE INDIRECTS) RAL,CLE,SLA,ERA JMP *-2 LDB A,I B = # DIM. INA SKIP IT IN TABLE. STA TABLE SSB # DIM < 0 ? JMP ERROR YES. CMB,INB,SZB,RSS NEGATE. ZERO ? JMP ZEROD YES. STB ND NO. KEEP AS COUNTER. CLA SET CURRENT OFFSET TO ZERO. STA T1 STA T2 SKP * LOOP THRU SUBSCRIPTS AND COMPUTE OFFSET. * LOOP LDA .ERES,I NEXT SUBSCRIPT ADDR. ISZ .ERES LDA A,I NEXT SUBSCRIPT. CLO ADD - (LOWER BOUND) CAREFULLY. ADA TABLE,I ISZ TABLE CLE,SSA,RSS RESULT NEGATIVE SOC OR OVERFLOW ? JMP ERROR YES. ADA T2 NO. ADD TO CURRENT SUM. STA T2 SEZ PROPOGATE CARRY. ISZ T1 (CAN'T SKIP) LDA TABLE,I SIZE OF PREVIOUS DIM (OR # WDS / ELEMENT) SSA NEGATIVE ? JMP ERROR YES. MPY T2 LOWER PRODUCT. STA T2 SSB IF T2<15> = 1, FIX UPPER PART OF PRODUCT. ADB TABLE,I LDA T1 UPPER PART OLD VALUE. STB T1 SAVE UPPER PART LOWER MULTIPLY. SZA,RSS ANY NEED TO DO UPPER MULTIPLY ? JMP LOOPE NO. MPY TABLE,I YES. DO IT. CLE,SZB THIRD WORD ? JMP ERROR YES. ADA T1 NO. ADD TO SUM. STA T1 SEZ,INA,RSS OFL ? (A#-1) SSA JMP ERROR YES. LOOPE ISZ TABLE ISZ ND DO ONCE FOR EACH DIMENSION. JMP LOOP * * ADD OFFSET FROM START OF EMA. * DLD TABLE,I THIS IS IT. CLE,SSB NEGATIVE ? JMP ERROR YES. ADA T2 ADD LOWERS. SEZ,CLE PROPOGATE CARRY. ISZ T1 (T1#-1) ADB T1 ADD UPPERS. SEZ,RSS CARRY OR NCHK SSB RESULT < 0 ? JMP ERROR YES. ISZ RTN NO. RETURN RESULT IN (B,A) JMP RTN,I SPC 1 END