ASMB,L
      NAM TESEG 12824-1X054 REV.2026 800506 
      ENT TESEG 
      EXT .ESEG,.ENTR,$LIBR,$LIBX,$DVPT 
**************************************************************
* 
*     NAME:   TESEG 
*     SOURCE: 12824-18053 
*     RELOC:  PART OF 12824-16002 
*     PGMR:   CG
* 
*  ***********************************************************
*  * (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 CONSENT OF HEWLETT-PACKARD COMPANY.   *
*  ***********************************************************
* 
**************************************************************
XIDEX EQU 1645B 
* 
IERR  BSS 1 
TESEG NOP 
      JSB .ENTR     GET ADDRESSES 
      DEF IERR
      CLA           INITIALIZE ERROR COUNT
      STA ERROR 
* 
********************************************************************
* 
*     CALL .ESEG WITH #MAPS < 0 
* 
      CLA           SET FIRST MAP = 0 
      CCB           SET #MAPS = -1
      JSB .ESEG 
      DEF RTN1
      DEF TABL1 
RTN1  JSB ABCHK     TEST A & B REGISTERS
      ISZ ERROR     ERROR IF RETURNS HERE 
* 
********************************************************************
* 
*     CALL .ESEG WITH #MAPS > MSEG SIZE 
* 
      CLA           SET FIRST MAP = 0 
      LDB =D3       SET #MAPS = 3 
      JSB .ESEG 
      DEF RTN2
      DEF TABL1 
RTN2  JSB ABCHK     TEST A & B REGISTERS
      ISZ ERROR     ERROR IF RETURNS HERE 
* 
********************************************************************* 
* 
*     CALL .ESEG BY A NON-EMA PROGRAM 
* 
      LDA XIDEX     SAVE IDEX ADDR
      STA IDEX         IN IDEX
      JSB $LIBR     GO PRIVILEGED 
      NOP 
      CLA           CLEAR IDEX ADDR 
      STA XIDEX 
* 
      CLB,INB       SET #MAPS = 1 
      JSB .ESEG 
      DEF RTN3
      DEF TABL1 
RTN3  JSB ABCHK     CHECK A & B REGISTERS 
      ISZ ERROR     ERROR IF RETURNS HERE 
* 
      LDA IDEX      RESTORE IDEX ADDR 
      STA XIDEX 
      JSB $LIBX     GO UN-PRIVILEGED
      DEF *+1 
      DEF *+1 
* 
********************************************************************
* 
*     NORMAL CALL 
* 
      LDA XMAP1     SAVE USER MAPS
      IOR =B100000     IN MAP1
      USA 
* 
      CLA           SET FIRST MAP = 0 
      LDB =D2       SET #MAPS = 2 
      JSB .ESEG     LOAD MSEG MAPS
      DEF RTN4
      DEF TABL1 
RTN4  ISZ ERROR     ERROR IF RETURNS HERE 
* 
      LDA XMAP2     SAVE NEW USER MAPS
      IOR =B100000     IN MAP2
      USA 
* 
*     CALCULATE WHAT THE NEW USER MAP SHOULD BE 
* 
      ISZ IDEX      POINT TO 2ND WORD OF IDEX 
      XLA IDEX,I
      AND =B1777    SET A = PHYS START PAGE OF EMA
      STA SPEMA     SAVE IN SPEMA 
      XLA IDEX,I
      AND =B174000  SET A = LOG. START PAGE MSEG
      ALF,RAL 
      ADA XMAP1     SET A = BUFFER ADDR 
      STA 1         SET B = BUFFER ADDR 
      LDA SPEMA     SET A = 1ST PHYS PAGE 
      STA 1,I       STORE IN MAP1 BUFFER
      ADA TABL2     SET A = 2ND PHYS PAGE 
      IOR =B140000  SET RD,WRT PROTECT BITS 
      INB           INC BUFFER ADDR 
      STA 1,I       STORE IN MAP1 BUFFER
* 
      JSB COMP      COMPARE MAP BUFFERS 
      SKP 
* 
*     POINT 1ST DRIVER PARTITION MAP TO USER BASE PAGE
* 
      CLB,INB       SET B = 1 
      CBX           SET X = 1 (MAP) 
      XLA $DVPT     SET A = DRIVER PARTITION
      ADA =B40      POINT TO USER MAP 
      LDB XMAP1     POINT B TO USER BASE PAGE MAP 
* 
      JSB $LIBR     GO PRIVILEGED 
      NOP 
      XMM           LOAD THE MAP
* 
*     MOVE COPY OF MAPS ON BASE PAGE TO 2ND BUFFER
* 
      XLA $DVPT     SET A = DRIVER PARTITION
      ALF,ALF       MULTIPLY BY 2000B 
      RAL,RAL 
      ADA =B1740    SET A = MAPS ADDRESS
      LDB XMAP2     SET B = 2ND BUFFER
      MVW =D32      MOVE TO 2ND BUFFER
* 
      JSB $LIBX     GO UN-PRIVILEGED
      DEF *+1 
      DEF *+1 
* 
      JSB COMP      COMPARE MAP BUFFERS 
* 
**********************************************************************
* 
*     RETURN ERROR COUNT
* 
OK2   LDA ERROR 
      STA IERR,I
      JMP TESEG,I   RETURN
* 
********************************************************************
      SKP 
********************************************************************
* 
COMP  NOP 
* 
*     FIRST ZERO OUT DRIVER PARTITION MAPS IN BOTH BUFFERS
* 
      CLA           SET A = 0 
      XLB $DVPT     SET B = DRIVER PARTITION MAP
      ADB XMAP1     POINT TO 1ST BUFFER 
      STA 1,I       ZERO BUFFER MAP 
      INB           POINT TO 2ND MAP
      STA 1,I       ZERO BUFFER MAP 
* 
      XLB $DVPT     SET B = DRIVER PARTITION MAP
      ADB XMAP2     POINT TO 2ND BUFFER 
      STA 1,I       ZERO BUFFER MAP 
      INB           POINT TO 2ND MAP
      STA 1,I       ZERO BUFFER MAP 
* 
*     NOW COMPARE MAP BUFFERS 
* 
      LDA XMAP1     POINT A TO 1ST BUFFER 
      LDB XMAP2     POINT B TO 2ND BUFFER 
      CMW =D32      COMPARE 32 MAPS 
      JMP COMP,I    OK,RETURN 
      ISZ ERROR     ERROR IF RETURNS HERE 
      ISZ ERROR     ERROR IF RETURNS HERE 
      JMP COMP,I    ERROR RETURN
* 
********************************************************************
* 
ABCHK NOP 
      CPA ASC21     TEST A REGISTER 
      RSS           OK (NO SKIP)
      JMP ABCHK,I   ERROR RETURN
      CPB ASCEM     TEST B REGISTER 
      RSS           OK (NO SKIP)
      JMP ABCHK,I   ERROR RETURN
      ISZ ABCHK     SET OK RETURN 
      JMP ABCHK,I   RETURN
* 
ASC21 ASC 1,21
ASCEM ASC 1,EM
* 
********************************************************************
      SKP 
IDEX  BSS 1 
ERROR BSS 1 
TABL1 OCT 0 
TABL2 OCT 100 
XMAP1 DEF MAP1
MAP1  BSS 32
XMAP2 DEF MAP2
MAP2  BSS 32
SPEMA BSS 1 
* 
      END 
                                                                                                                                                                                                                                  