ASMB,R,L,C   ** .EMIO **
      HED .EMIO I/O BVUFFER ROUTINE FOR EXTENDED MEMORY AREAS 
*     SOURCE: 92067-18058 
*     RELOC:  PART OF 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 .EMIO,7 92067-16035 REV.1805 771006 
      SUP 
      ENT .EMIO 
      EXT .EMAS,.EMAT,..MP,.NPGS,.IPGS,.MSG#,.MSGS,.ARRY
      EXT .SUM2,.EMSZ 
* 
* 
*  ROUTINE TO RESOLVE AN ELEMENT ADDRESS FOR AN EMA ARRAY 
*  AND TO MAP THE APPROPRIATE MAPPING SEGMENT TO CONTAIN
*  THE ENTIRE BUFFER STARTING AT THE ELEMENT AND HAS
*  LENGTH SPECIFIED IN THE CALLING SEQUENCE 
*  A SPECIAL NON-STANDARD MAPPING SEGMENT IS MAPPED IF THE
*  BUFFER DOES NOT FIT INTO A STANDARD MAPPING SEGMENT
* 
*  CALLING SEQUENCE:
*      JSB .EMIO
*      DEF RTN      RETURN ADDRESS FOR ERROR RETURNS
*      DEF BUFL     LENGTH OF BUFFER IN # WORDS 
*      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) 
*      OFFSET WORD 2    (HIGH 16 BITS)
*   --------------------- 
* 
* 
*  RETURNS:  ERROR RETURN: AT LOC RTN 
*            AREG=16(ASCII), BREG=EM(ASCII) 
*            NORMAL RETURN: AT LOC RTN+1
*            AREG = MEANINGLESS 
*            BREG = ELEMENT ADDRESS 
* 
* 
.EMIO NOP 
      LDA .EMIO     RETURN ADDRESS
      INA           POINT TO THE BUFFER LENGTH
      LDB .EMIO,I   SAVE RETURN ADDRESS 
      STB .EMIO 
      LDB XIDEX     EMA ROUTINE DECLARED IN CALLING PROG? 
      SZB,RSS 
      JMP ERROR     NO, THEN ERROR
      LDB A,I 
      LDB B,I       BUFFER LENGTH IN B REG
      STB BUFL      SAVE IT 
      SSB           -VE?
      JMP ERROR     YES, ERROR
      INA           POINT TO 'DEF TABLE' PARAMETER
      JSB .EMAS     RESOLVE ADDRESS OF ELEMENT
      SSA           ERROR ENCOUNTERED?
      JMP ERROR     YES 
* 
*   TEST IF SPECIAL MAPPING REQUIRED
* 
      ADB BUFL      ADD BUFFER LNGTH TO DISP IN MSEG
      CLA 
      RRL 6         #PAGES IN DISP + BUFL IN A REG
      SZB           REMAINDER=0?
      INA           NO
      STA TEMP      SAVE THIS VALUE 
      CMA,INA       NEGATE # PAGES
      ADA .MSGS     ADD MAPPING SEGMENT SIZE
      SSA           MSEG SIZE > DISP + BUFL?
      JMP SPMAP     NO THEN SPECIAL MAPPING REQUIRED
      LDA TEMP      GET #PAGES IN DISP FROM START OF EMA UPTO MSEG
      ADA .IPGS     ADD #PGS FROM START OF EMA UPTO ELEMENT 
      CMA,INA       NEGATE IT 
      ADA .EMSZ     EMA SZ - #PGS FROM START OF EMA TO END OF MSEG
      SSA           EMA SIZE SMALLER? 
      JMP ERROR     YES 
      JSB .EMAT     NO, THEN MAP STANDARD MSEG
      SSA           ERROR?
      JMP ERROR     YES 
* 
      ISZ .EMIO     NORMAL RETURN TO LOC RTN + 1
      JMP .EMIO,I 
* 
*   SPECIAL MAPPING REQUIRED
* 
SPMAP LDA .SUM1     DISP INTO PAGE CONTAINING ELEMENT 
      STA TEMP      SAVE IT 
      ADA BUFL      ADD #WRDS IN BUFFER 
      SSA           OVERFLOW? 
      JMP ERROR     YES, THEN ERROR 
      CLB           NO
      RRR 10        #PGS NEEDED TO MAP TO ACCESS ENTIRE BUFFER
      SZB           REMAINDER=0?
      INA           NO
      STA .SUM1     # PAGES TO BE MAPPED
      LDA .SUM2 
      STA .IPGS 
      CCA           SPECIAL MAPPING SEGMENT 
      STA .MSG# 
      JSB ..MP      MAP THE SPECIAL MAPPING SEGMENT 
      SSA           ERROR RETURN? 
      JMP ERROR     YES, THEN MAKE ERROR RETURN 
      LDB .ARRY     BASE ADDRESS OF ARRAY 
      ADB TEMP      # WORDS LEFT IN DISP
      ISZ .EMIO     NORMAL RETURN 
      JMP .EMIO,I 
* 
* 
ERROR DLD ERRCD 
      JMP .EMIO,I   ERROR RETURN
* 
* 
ERRCD ASC 2,16EM
BUFL  NOP 
TEMP  NOP 
.SUM1 EQU .NPGS 
N1    DEC -1
B1777 OCT 1777
XIDEX EQU 1645B 
A     EQU 0 
B     EQU 1 
      END 
                                                                                                                                                                                                            