ASMB,Q,C
      HED I/O ROUTINES FOR EMA ARRAYS 
*     SOURCE: 92067-18305 
*     RELOC:  PART OF 92067-16268 AND 92067-16035 
*     PGMR:   G.A.A.,D.L.S. 
* 
*  ***************************************************************
*  * (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 .ZAE.,7 92067-1X305 REV.2013 781128 
* 
* 
*     THESE ROUTINES MAP IN ARRAYS TO BE PASSED TO THE FORMATER 
*     AND THEN PASS THEM TO THE FORMATER.  ARRAYS ARE MAPPED
*     IN 1024 WORDS AT A TIME SO AS TO INSURE THAT THAY ARE 
*     ALWAYS ADDRESSABLE. 
* 
* 
*     CALLING SEQUENCE: 
* 
* 
*     JSB <ENTRY> 
*     DEF OFSET 
*     DEF -ELEMENT COUNT
*     - RETURN -
* 
*     WHERE: <ENTRY> IS: .IAE. FOR ONE WORD VARAIABLE 
*                        .RAE. FOR TWO WORD VARAIABLES
*                        .XAE. FOR THREE WORD VARIABLES 
*                        .TAE. FOR FOUR WORD VARIABLES
* 
*            OFSET   IS THE ARRAYS OFFSET FROM THE START OF EMA 
*                    (A TWO WORD DOUBLE INTEGER)
* 
*            ELEMENT COUNT  IS THE NUMBER OF ELEMENTS OF THE GIVEN SIZE THAT
*                           ARE TO BE TRANSFERED. (THIS IS A NEGATIVE 
*                           DOUBLE INTEGER.)
* 
*     CALLING SEQUENCE TO THIS ROUTINE IS:
* 
*     DEC #WORDS/PAGE      (MUST BE WHOLE ELEMENTS) 
*     DEF TO DEFS TO OFFSET IN EMA AND -# ELEMENTS TO XFER
*     JSB .ZAE.     RETURN IS TO ABOVE ADDRESS POINTED TO +2
*     DEC #ELEMENTS/PAGE
*     DEF .IAY. OR .RAY. OR .XAY. OR .TAY. AS REQUIRED
* 
      EXT .EMAP,ERR0
      ENT .ZAE. 
* 
#WDS  NOP 
RTN   NOP 
N3    DEC -3
A     EQU 0 
B     EQU 1 
FMTR  NOP           HOLD FORMATER ENTRY ADDRESS 
XIDEX EQU 1645B     ADDRESS OF THE ID EXTENSION 
B174K OCT 174000
      SKP 
.ZAE. NOP           THIS IS WHERE IT HAPPENS
      CLB           SET TO DEFAULT TO ZERO IF NOT AN EMA PGM. 
      LDA XIDEX     FIRST GET 
      INA           THE 
      XLA A,I       EMA LOGICAL ADDRESS 
      AND B174K     ISOLATE THE PAGE
      RAR           PUT IN RIGHT SPOT IN WORD 
      STA EMAAD     PUT IN THE .EMAP CALL 
      LDA .ZAE.     GET THE RETURN ADDRESS AND
      ADA N3        USE IT TO INDEX INTO THE
      DLD A,I       THE DATA
      DST #WDS      SAVE THE #WORDS AND THE RETURN ADDRESS
      DLD B,I       GET THE DEF'S FOLLOWING THE CALL
      ISZ RTN       SET UP THE PROPER RETURN ADDRESS
      ISZ RTN       SET UP THE PROPER RETURN ADDRESS
      STB T1        SAVE THE ADDRESS OF THE COUNT 
      DLD A,I       GET THE OFFSET
      DST EMOF      AND SET IN THE .EMAP CALL 
      DLD .ZAE.,I   GET THE #WORDS/X AND THE FMTR ENTRY PT. 
      STB FMTR      SAVE IN THE FORMATER CALL 
      STA NELM      ALSO SAVE THE DEFAULT COUNT 
      DLD T1,I      GET THE TOTAL NUMBER OF WORDS IN THE ARRAY
T1    EQU *-1 
AGAIN DST COUNT     SAVE IT 
      ASL 1         TEST IF 
      INB,SZB       LESS THAN 32K LEFT (SETS E IF SKIP) 
      JMP OK        NO  GO DO THE DEFAULT XFER
* 
      ERA           YES RESTORE THE COUNT 
      ADA NELM      TEST IF LESS THAN THE DEFAULT 
      SSA           WELL? 
      JMP OK        NO GO DO THE DEFAULT
* 
      LDB COUNT     YES COMPUTE HOW MANY
      CMB,INB       AND 
      STB NELM      SET FOR THE CALL
* 
OK    JSB .EMAP     CALL .EMAP TO RESOLVE THE ADDRESS 
      DEF BOOM
EMAAD NOP           ADDRESS OF EMA FROM THE IDEX
      DEF TABLE     USE DUMMY TABLE 
BOOM  JSB ERR0      TOO BAD  YOU LOSE 
      STB CALL      SET ADDRESS FOR FMTR CALL 
      JSB FMTR,I    CALL THE FORMATER 
CALL  NOP           ADDRESS 
NELM  NOP           NUMBER OF ELEMENTS
* 
      CLE           COMPUTE WHAT IS LEFT
      LDA EMOF      FIRST THE 
      ADA #WDS      THE EMA OFFSET
      SEZ,CLE       MOST IS A CARRY 
      ISZ EMOF+1    IF CHANGE STEP IT 
      STA EMOF      RESTORE THE OFFSET
* 
      DLD COUNT 
      ADA NELM      SUBTRACT FROM NUMBER LEFT 
      SEZ,CLE       MOST IS A CARRY OF 1
      INB,SZB       INDEX COUNT 
      JMP AGAIN     IF NO ROLL OVER THEN DO IT AGAIN
* 
      JMP RTN,I     ELSE RETURN 
* 
* 
TABLE NOP           NO DIMENSIONS 
EMOF  NOP           DOUBLE WORD EMA OFFSET
      NOP 
COUNT NOP           DOUBLE WORD COUNT (NEGATIVE)
      NOP 
      END 
                    