*COMDECK PINIT
_$J+   PAGE EJECT ? 
_$R-,G-,I-? 
_ 
* 
************************************************************************
************************************************************************
**                                                                    **
**                                                                    **
**             * *   S Y S T E M   I N I T I A L I Z A T I O N   * *  **
**                                                                    **
**                                                                    **
************************************************************************
************************************************************************
*                                                                      *
** OVERVIEW -  THIS PROCEDURE CONTROLS THE SEQUENCE OF INITIALIZATION  *
*              BY CALLING OTHER PROCEDURES.                            *
*              BEFORE CALLING OTHER PROCEDURES THIS PROCEDURE RECOVERS *
*              PROCEDURES TO BE LOADED IN $4000-$4FFF. THEY ARE LOADED *
*              BY SAM-P IN A AREA BEYOND NCB, BASED ON START OF BUFFER *
*              AREA (IN LOC. 4) AND MAXIMUM NCB SIZE (IN LOC. 5).      *
*              THE SAVE AREA STARTS AT THE NEXT HIGHER PAGE BOUNDARY.  *
*              THIS PROCEDURE AND THE PROCEDURES CALLED RESIDE IN THE  *
*              SYSTEM BUFFER AREA, EXCEPT THE FIRST 2 BASE PROCEDURES. *
*                                                                      *
** EXTERNAL SUBROUTINES USED :                                         *
*               1) PBPUTPAGE - SET UP PAGE REGISTERS IF PAGING DEFINED *
*               2) PBSTPMODE - SET PAGE MODE IF PAGING DEFINED         *
*               3) PISIZCORE - DETERMINE CORE SIZE                     *
*               4) PIPROTECT - SET PROGRAM PROTECT BITS                *
*               5) PINCBINIT - BUILD ROUTING TABLES FROM NCB           *
*               6) PILCBS    - BUILD CIB AND PORT TABLES               *
*               7) PIGETABLE - BUILD TIMER, LCB AND SUBLCB TABLES      *
*               8) PILCBINIT - INITIALIZE LCBS AND SUBLCBS             *
*               9) PIBUF1    - BUILD INITIAL BUFFERS                   *
*              10) PIFR1     - INITIALIZE FILE 1 REGISTERS             *
*              11) PIWLINIT  - BUILD WORKLIST                          *
*              12) PIINIT    - MISCL INITIALIZATION                    *
               13) PIAPPS    - BUILD AND SEND ONLINE MSG               *
*              14) PIMLIA    - INITIALIZED MLIA                        *
*              15) PILININIT - FIXED LINES INITIALIZATION              *
               16) PITMRSRVS - TIMER SERVICES INITIALIZATION           *
               17) PIBUF2    - BUILD LAST OF BUFFERS                   *
*                                                                      *
** NOTES -     PIBUF2 MUST BE THE LAST PROCEDURE CALLED.  ANT NEW      *
*              INITIALIZATION ROUTINES MUST BE ADDED AFTER PIBUF2.     *
*                                                                      *
*              THE GLOBAL NPINTAB INDICATES THE CURRENT PLACE IN       *
*              INITIALIZATION IN CASE OF FAILURE.                      *
*                                                                      *
************************************************************************
* 
? 
PROCEDURE PINIT;
CONST PAGE0MODE = 0;                        _ PAGE BANK ZERO           ?
    SVLOC = 4;                              _SAVE ADDRESS OF BUFF FWA  ?
    MXLOC = 5;                              _SAVE ADDRESS OF NCB SIZE  ?
    SAMFWA = $4000;                         _SAMP FIRST WORD ADDRESS   ?
    SAMLNG = $1000;                         _LENGTH OF SAMP            ?
TYPE
    PTRINT = PACKED RECORD
      CASE PINT : INTEGER OF
      0 : (PTR : 'INTEGER); 
      1 : (INT : INTEGER);
      2 : (PAGE : B05BITS;
           DISP : B011BITS);
      END;
VAR I : INTEGER;
    SAMPTR : 'CFNCBFILE;                    _SAMP FWA POINTER          ?
    SAVPTR : 'CFNCBFILE;                    _SAM SAVE FWA POINTER      ?
    BUFPTR,                                 _BUFFER ADDRESS POINTER    ?
    MAXPTR : PTRINT;                        _NCB MAX POINTER           ?
BEGIN 
    INST($E400,                             _LOAD Q REGISTER           ?
         B1DMTA,                            _  WITH ADDRESS OF DEADMAN ?
                                            _   TIMER RESET CODE       ?
         $0BA2);                            _ AND EXECUTE THAT         ?
                                            _  MICROSEQUENCE           ?
    I := SAMFWA;
    REPEAT
      INST($E400,I,$0700);                  _CLEAR PROTECT FROM AREA   ?
      I := I + 1; 
    UNTIL I = SAMFWA + SAMLNG;
  
    BUFPTR.INT := SAMFWA; 
    SAMPTR := BUFPTR.PTR;                   _SAM AREA FWA              ?
    BUFPTR.INT := SVLOC;                    _BUFFER FWA SAVE POINTER   ?
    MAXPTR.INT := MXLOC;                    _ MAX NCB LENGTH POINTER   ?
    BUFPTR.INT := BUFPTR.PTR' + MAXPTR.PTR' + $7FF; 
    BUFPTR.DISP := 0; 
    SAVPTR := BUFPTR.PTR;                   _DATA SAVE BUFFER AREA FWA ?
    FOR I := 1 TO SAMLNG DO 
      SAMPTR'.CFWORD[I] := SAVPTR'.CFWORD[I]; 
  WITH NPINTAB.NPISFL DO                    _ INITIALIZATION STATUS WD ?
  BEGIN 
    FOR I := 0 TO 31 DO 
    PBPUTPAGE(I,I);                         _SET UP PAGE REGISTERS     ?
    PBSTPMODE(PAGE0MODE);                   _SET PAGE MODE 0           ?
    B0B0 := TRUE;                           _ TRACE                    ?
    PISIZCOR;                               _ DETERMINE CORE SIZE      ?
  
    B0B1 := TRUE;                           _ TRACE                    ?
    PIPROTECT;                              _ SET UP PROTECT BITS      ?
  
    B0B2 := TRUE;                           _ TRACE                    ?
    PINCBINIT;                              _ BUILD ROUTING TABLES     ?
  
    B0B3 := TRUE;                           _ TRACE                    ?
    PILCBS;                                 _ BUILD MUX TABLES         ?
  
    B0B4 := TRUE;                           _ TRACE                    ?
    PIGETABLE;                              _ BUILD OPS TABLES         ?
  
    B0B5 := TRUE;                           _ TRACE                    ?
    PILCBINIT;                              _ INITIALIZE LCBS FROM NCB ?
  
    B0B6 := TRUE;                           _ TRACE                    ?
    PIFR1;                                  _ INIT FILE 1 REGISTERS    ?
  
    B0B7 := TRUE;                           _ TRACE                    ?
    PIBUF1;                                 _ INITIALIZE BUFFERS       ?
  
    B0B8 := TRUE;                           _ TRACE                    ?
    PIWLINIT;                               _ INITIALIZE WORKLISTS     ?
  
    B0B9 := TRUE;                           _ TRACE                    ?
    PIINIT;                                 _ MISCL. INIT.             ?
  
    B0B10 := TRUE;                          _ TRACE                    ?
    PIAPPS;                                 _ APPLICATION INIT         ?
  
    B0B11 := TRUE;                          _ TRACE                    ?
    PIMLIA; 
  
    B0B12 := TRUE;                          _ TRACE                    ?
    PILININIT;                              _ FIXED LINE INITIALIZATION?
  
    B0B13 := TRUE;                          _ TRACE                    ?
    INST($E400,                             _LOAD Q REGISTER           ?
         B1DMTA,                            _  WITH ADDRESS OF DEADMAN ?
                                            _   TIMER RESET CODE       ?
         $0BA2);                            _ AND EXECUTE THAT         ?
                                            _  MICROSEQUENCE           ?
    PITMRSRVS;                              _INITIALIZE TIMER SERVICES ?
    B0B14 := TRUE;                          _ TRACE                    ?
_ 
*              * * N O T E  -  THIS MUST BE THE LAST CALL  * *
? 
    PIBUF2;                                 _ BUILD LAST BUFFERS/EXIT  ?
  
  END;  _ WITH  ? 
  
END;    _ PINIT ? 
