ASMB,R,L,C ** .EMAP ** HED .EMAP ROUTINE TO RESOLVE ELEMENT ADDRESS OF AN ARRAY * SOURCE: 92067-18290 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: S.P.K. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 .EMAP,7 92067-1X290 REV.2013 771031 SUP ENT .EMAP EXT .EMAS,.EMAT * * * ROUTINE TO RESOLVE ELEMENT ADDRESS FOR EMA AND NON-EMA * ARRAYS. IF THE ARRAY IS NON-EMA 16 BIT ARITHMETIC IS * PERFORMED. IF THE ARRAY IS AN EMA 32 BIT ARITHMETIC IS * PERFORMED AND THE APPROPIATE MAPPING SEGMENT CONTAINING * THE ELEMENT IS MAPPED IN THE MSEG LOG ADDRESS SPACE * * CALLING SEQUENCE: * JSB .EMAP * DEF RTN RETURN ADDRESS FOR ERROR RETURNS * DEF ARRAY START ADDRESS OF ARRAY * DEF TABLE TABLE CONTAINING ARRAY PARAMETERS * DEF A(N) SUBSCRIPT VALUE FOR NTH DIMENSION * DEF A(N-1) " " " (N-1)ST " * . * . * DEF A(2) " " " 2ND " * DEF A(1) " " " 1ST " * RTN -- ERROR RETURN -- * -- NORMAL RETURN -- * *THE PARAMETER TABLE IS: * -------------------- * # DIMENSIONS * - L(N) * D(N-1) * - L(N-1) * . * . * - L(2) * D(1) * - L(1) * # WORDS/ELEMENT * OFFSET WORD 1 (LOW 16 BITS) USED ONLY * OFFSET WORD 2 (HIGH 16 BITS) FOR EMA * --------------------- * * * RETURNS: ERROR RETURN: AT LOC RTN * AREG=15(ASCII), BREG=EM(ASCII) * NORMAL RETURN: AT LOC RTN+1 * AREG = MEANINGLESS * BREG = ELEMENT ADDRESS * * .EMAP NOP ROUTINE TO RESOLVE ARRAY ADDRESS LDA .EMAP,I GET RETURN ADDRESS STA RETRN SAVE IT ISZ .EMAP POINT TO ARRAY ADDRESS LDB .EMAP,I GET ARRAY ADDRESS JMP *+2 REMOVE INDIRECTS LDB B,I RBL,CLE,SLB,ERB JMP *-2 * ISZ .EMAP POINT TO THE TABLE ADDRESS LDA XIDEX DETERMINE WHETHER ARRAY ADDRESS SZA,RSS GIVEN IS THAT OF AN EMA OR NON-EMA ARRAY JMP NOEMA CALLING PROG DOES NOT HAVE EMA DECLARED INA POINT 2ND WORD OF ID SEG EXT XLA A,I GET CONTENTS OF 2ND WORD OF ID SEG EXT OF PROG CLE,ERA MOVE BITS 15-11 INTO 14-10 POSITION AND B76K GET LOGICAL START ADDR OF MSEG CMA,INA ADA B ARRAY ADDRESS SPECIFIED < START MSEG? SSA JMP NOEMA NO THEN A NON-EMA ARRAY LDA .EMAP POINTER TO TABLE ADDRESS JSB .EMAS RESOLVE ELEMENT ADDRESS FOR EMA ARRAY SSA,RSS ERROR ENCOUNTERED? JSB .EMAT MAP NECESSARY MSEG TO GET ELEM IN LOG ADDR SPACE SSA ERROR ENCOUNTERED? JMP ERROR ISZ RETRN NO, ELEMENT ADDRESS IS IN B REG JMP RETRN,I NORMAL RETURN TO RTN+1 LOCATION * * NON - EMA ARRAY - RESOLVE ELEMENT ADDRESS USING * 16 BIT ARITHMETIC * NOEMA STB ARRAY SAVE ARRAY ADDRESS LDA .EMAP,I GET TABLE ADDRESS RSS REMOVE INDIRECTS IF ANY LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA PTABL ADDRESS OF PARAMETER TABLE LDA A,I # OF DIMENSIONS SSA -VE? JMP ERROR YES, ERROR SZA,RSS 0 DIMENSIONS? JMP NODIM YES CMA,INA STA NDIM -VE # OF DIMENSIONS TO USE AS COUNTER CLA STA SUM1 INITIALIZE VARIABLE TO HOLD DISPLACEMENT LOOP ISZ PTABL POINT TO -(LOWER BOUND) OF ITH DIMENSION ISZ .EMAP POINT TO SUBSCRIPT VALUE OF ITH DIMENSION LDA .EMAP,I GET SUBSCRIPT VALUE --- A(I) LDA A,I CLO CLEAR OVERFLOW REGISTER ADA PTABL,I A(I)-L(I) SUBSCRIPT VALUE-LOWER BOUND SSA,RSS LOWER BOUND > SUBSCRIPT VALUE? SOC C OVERFLOW REG SET? JMP ERROR YES, ERROR ADA SUM1 ACCUMULATE DISPLACEMENT - IF OVERFLOW ISZ PTABL IT WILL BE DETECTED AFTER MULTIPLY LDB PTABL,I DIMENSION SIZE OF (I-1)ST DIMENSION D(I-1) SSB -VE? JMP ERROR YES, THEN ERROR MPY B (A(I) - L(I))*D(I-1) SZB,RSS OVERFLOW INTO B REG? SSA NO, OVERFLOW INTO BIT 15 OF A REG? JMP ERROR YES STA SUM1 NEW VALUE FOR DISPLACEMENT ISZ NDIM INCREMENT # DIMENSIONS COUNTER JMP LOOP ALL DIMENSIONS NOT DONE YET * NODIM LDB ARRAY ARRAY ADDRESS ADB A ADD DISPLACEMENT ISZ RETRN NORMAL RETURN AT LOC RTN+1 JMP RETRN,I * * ERROR DLD ERRCD ERROR ENCOUNTERED JMP RETRN,I RETURN AT LOC RTN * * ERRCD ASC 2,15EM ERROR CODE PTABL NOP SUM1 NOP NDIM NOP ARRAY NOP RETRN NOP * B76K OCT 76000 * XIDEX EQU 1645B A EQU 0 B EQU 1 * END * *