ASMB,R,L,C
*     NAME  : MRCNF 
*     SOURCE: 92064-18139 
*     RELOC:  92064-16028 
*     PROGMR: E.J.W.  BASED ON RTE-III VERSION D.L.S. 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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 MRCNF,3,90  92064-16028  REV.1726  770512 
      EXT $OPSY 
* 
A     EQU 0 
B     EQU 1 
* 
MRCNF NOP           THIS 'PROGRAM' IS ACTUALLY A SUBROUTINE 
      ADA D5         WHICH IS CALLED BY $MSC DURING THE START-UP
      STA IDNAM     SAVE A-REG (ADDR OF NAME IN ID SEG) 
      CLB           CLEAR A,B,S REGISTERS TO PREVENT
      CLA            POSSIBLE ERROR IF OPERATOR 
      OTA 1          ACCIDENTLY HITS RUN PREMATURELY
      HLT 70B       HALT 'CAUSE FLOPPY IBL CAN'T.  USER SETS S AND B. 
      STB NEWCH     SAVE B-REG (FLOPPY BOOT SETS I/O CHANNEL IN B)
      SZB,RSS        IF B=0, SKIP DISC SECTION
      JMP CRTIO 
* 
*     DISC RECONFIGURATION
* 
      LDB DRT       CHECK IF LU 2 POINTS TO FLOPPY
      INB 
      LDA B,I 
      SZA,RSS 
      JMP CRTIO     LU 2 = 0, SKIP DISC SECTION 
* 
      AND B77       COMPUTE EQT ADDR OF LU 2
      ADA M1         IF IT WASN'T 0 
      MPY D15 
      ADA EQTA
      ADA D4        INDEX TO EQT TYPE WORD
      LDA A,I 
      AND B374C 
      STA DMASK     SAVE DISC EQT TYPE BITS 
      AND B36K
      CPA B14K      27 < TYPE < 34 ?
      RSS            YES, IT IS DISC. SKIP
      JMP CRTIO      NO, NOT DISC 
* 
      LDA DMASK     SET A=EQT TYPE, CHP2=NEW I/O CHANNEL
      JSB SCAN      FIND EQT AND SET NEW I/O CHANNEL IN EQT 
      STA DKEQT     SAVE EQT #
      STB EQTAD     SAVE EQT ADDR 
      JSB SINT      SET UP INTERRUPT TABLE & TRAP CELL
      ISZ NEWCH     NEED 2 I/O SLOTS FOR FLOPPY 
      LDB EQTAD 
      JSB SINT      SET UP SECOND INT SLOT
* 
      LDB DRT       SET LU 2 TO POINT TO
      INB            CURRENT DISC EQT 
      LDA B,I       GET LU WORD AND REMOVE OLD EQT
      AND C77 
      IOR DKEQT 
      STA B,I       SET NEW WORD WITH CURRENT EQT 
* 
* 
*     SYSTEM CONSOLE RECONFIGURATION
* 
CRTIO LIA 1         GET NEW S.C. FOR
      AND B77        CONSOLE FROM S-REG 
      SZA,RSS        BITS 0-5.
      JMP TBGIO     IF ZERO, SKIP CRT SECTION 
* 
      STA NEWCH     SAVE S.C. FOR SCAN AND
      LDA CHSC3      CONFIGURE I-O
      IOR NEWCH      INSTRUCTIONS.
      STA CHSC3 
      LDA CHSC4 
      IOR NEWCH 
      STA CHSC4 
      LDA CHSC2 
      IOR NEWCH 
      STA CHSC2 
* 
      LDA CHMRS     SEND MASTER RESET.FLAG SET=12966A.
CHSC2 CLF 0 
CHSC3 OTA 0 
CHSC4 SFS 0 
* 
      CLE,RSS       IF NOT 12966A CARD, SET E=0.
      CCE           IF 12966A CARD, SET E=1.
* 
      LDB SYSTY     GET 
      ADB D4        OLD 
      LDA B,I       DEVICE
      AND B374C     TYPE. 
      CPA B2400 
      JMP PAS29 
* 
      SEZ 
      JMP PAS28     OLD=00, NEW=05. 
      JMP PAS27     OLD=00, NEW=00. 
* 
PAS29 SEZ 
      JMP PAS27     OLD=05, NEW=05. 
* 
PAS28 CLA,SEZ       OLD=05, NEW=00. 
      LDA B2400     SCAN FOR 00 OR
      JSB SCAN       05 DEVICE. 
* 
      STB SYSTY     SETUP BASE PAGE CONSOLE WORD. 
* 
      STA DRT,I     FIX LU#1. 
* 
PAS25 JSB SINT      SET INTERRUPT TABLE & TRAP CELL 
      JMP TBGIO 
* 
PAS27 ADB M1        CURRENT SYSTEM CONSOLE IS ALRIGHT 
      LDA B,I        EXCEPT FOR THE CHANNEL IN EQT
      AND C77        WORD 4.  FIX UP WORD 
      IOR NEWCH      4 THEN RETURN AND
      STA B,I       FIX UP BASE PAGE
      ADB M3
      JMP PAS25     TRAP CELL AND INTBA.
* 
* 
*     TIME-BASE-GENERATOR RECONFIGURATION 
* 
TBGIO LIA 1         GET NEW S.C.FOR 
      ALF,ALF        TBG FROM S-REG 
      RAL,RAL        BITS 6-11. 
      AND B77 
      SZA,RSS       IF ZERO,
      JMP PRVIO      SKIP TBG SECTION 
* 
      STA TBG 
      CLB           CLEAR 
      LDA INTBA      TBG
      ADA M6         INTERRUPT
      ADA TBG        TABLE
      STB A,I        LOCATION.
* 
      LDA JCICI     SET UP TBG
      STA TBG,I      TRAP CELL. 
* 
* 
*     PRIVILEGED TERMINATOR CARD RECONFIGURATION
* 
PRVIO LIA 1         GET NEW S.C.
      ALF            FOR PRIVILEGED 
      AND B17        INTERRUPT CARD.
      SZA,RSS       IF ZERO,
      JMP MEMSZ     SKIP PRIVILEGED INTERRUPT SECTION 
* 
      CPA B10       IF NEW S.C=10 
      CLA            THEN CLEAR 
      STA DUMMY      DUMMY. 
* 
      LDB JCICI     PUT 'JSB $CIC,I' INTO BASE
      STB DUMMY,I    PAGE TRAP CELL.
* 
* 
*     MEMORY SIZE RECONFIGURATION 
* 
MEMSZ LDA $OPSY 
      CPA M5        IS IT RTE-M III?
      JMP NOCHG      YES, THEN DON'T DO IT. 
* 
      LDB SZ32K     SET ADDR FOR 32K MEMORY CHECK 
      STB B,I       TRY STORING THERE 
      LDA B,I 
      CPA B         CAN WE READ IT BACK?
      JMP FNDSZ      YES, WE HAVE 32K!
* 
      LDB SZ24K      NO, TRY 24K MEMORY 
      STB B,I 
      LDA B,I 
      CPA B         CAN WE READ IT BACK?
      JMP FNDSZ      YES, WE HAVE 24K!
* 
      LDB SZ16K      NO, TRY 16K MEMORY 
      STB B,I 
      LDA B,I 
      CPA B         WE SHOULD HAVE THAT MUCH AT LEAST 
      RSS 
      JMP NOCHG     ...BUT IF WE DON'T... 
* 
FNDSZ LDA BGORG     SUBTRACT CURRENT HIGH ADDR
      CMA,INA        FROM MAX MEMORY INSTALLED NOW
      ADA B 
      STA TEMP0      AND SAVE THE DIFFERENCE
      ADA M7K.. 
      SSA           IS THERE AN INCREASE TO NEXT 8K BOARD?
      JMP NOCHG      NO, MAKE NO CHANGES
* 
      STB BGLWA      YES, SET UP NEW LWA
      STB BGORG 
      LDA AVMEM 
      ADA TEMP0 
      STA AVMEM     ADJUST FWA SAM BY SAME AMOUNT 
* 
NOCHG CLA           CLEAR OUT NAME IN ID SEG
      STA IDNAM,I    TO RELEASE ID SEG
      ISZ IDNAM 
      STA IDNAM,I 
      ISZ IDNAM 
      STA IDNAM,I 
      JMP MRCNF,I   RETURN TO SYSTEM START-UP SEQUENCE
* 
* 
CHMRS OCT 150077    MASTER RESET FOR 12966A CARD. 
DMASK NOP           FLOPPY DRIVER TYPE
DKEQT NOP 
EQTAD NOP 
OLDCH NOP           SET BY SCAN.
NEWCH NOP 
IDNAM NOP 
B10   OCT 10
B17   OCT 17
B77   OCT 77
B2400 OCT 2400
B14K  OCT 14000 
B36K  OCT 36000 
B374C OCT 37400 
C77   OCT 177700
M5    DEC -5
M6    DEC -6
M3    DEC -3
M1    DEC -1
D4    DEC 4 
D5    DEC 5 
D15   DEC 15
SZ32K OCT 77776 
SZ24K OCT 57777 
SZ16K OCT 37777 
M7K.. OCT -17776
      SKP 
* 
****************************************************************
* 
*     SCAN SUBROUTINE - FIND EQT BY TYPE & SET UP NEW I-O CHANNEL 
* 
*     ENTRY:
*      <NEWCH>:=NEW I/O CHANNEL # TO PUT INTO EQT 
*      <A>:=BITS 8-13 = DEVICE TYPE.
*      JSB SCAN 
* 
*     EXIT: 
*      <A>:=EQT#
*      <B>:=EQT1 ADDRESS. 
*      <OLDCH>:=OLD I/O CHANNEL # OF EQT
* 
****************************************************************
* 
SCAN  NOP 
      STA TEMP0     SAVE DEVICE TYPE MASK.
      LDB EQT#      SET 
      CMB,INB       UP
      STB COUNT     COUNT.
      LDB EQTA      POSITION TO FIRST 
      ADB D4         EQT WORD 5 
* 
SCAN1 LDA B,I       GET DEVICE TYPE 
      AND B374C      FROM EQT WORD 5. 
      CPA TEMP0     IF CORRECT TYPE,
      JMP SCAN2      THEN EXIT. 
      ADB D15       POSITION TO NEXT
      ISZ COUNT      EQT WORD 5.
      JMP SCAN1     CONTINUE SCAN.
* 
      LDA TEMP0 
      HLT 61B       IF NO DEVICE, 
      JMP *-1        HLT 61.  (A)=DEVICE TYPE TO BE FOUND 
* 
SCAN2 ADB M1
      LDA B,I 
      AND B77       GET OLD 
      STA OLDCH      CHANNEL AND
      LDA B,I        SAVE IT. 
      AND C77       FIX CHANNEL # 
      IOR NEWCH      IN EQT WORD 4. 
      STA B,I 
      ADB M3        POSITION TO EQT1. 
      LDA COUNT     COMPUTE 
      ADA EQT#       EQT #
      INA            AND
      JMP SCAN,I     RETURN.
* 
***************************************************************** 
* 
*     SINT SUBROUTINE - SET UP INTERRUPT TABLE & TRAP CELL
* 
*     ENTRY:
*      <NEWCH>:=NEW I/O CHANNEL # 
*      <B>:=EQT ADDR
*      JSB SINT 
* 
*     EXIT: 
*      REGISTERS MEANINGLESS
* 
***************************************************************** 
* 
SINT  NOP 
      STB TEMP0     SAVE EQT ADDR 
      LDA NEWCH     GET NEW I/O CHANNEL 
      ADA M6
      STA B 
      ADB INTBA     (B) = ADDR OF INTERRUPT TABLE ENTRY 
      CMA,CLE,SSA   TEST FOR NEGATIVE I/O CHANNEL 
      ADA INTLG     TEST FOR MAX I/O CHANNEL
      LDA TEMP0 
      SEZ,RSS       ANY ERROR IN ABOVE TESTS? 
      JMP BADCH      YES, ERROR HALT
* 
      STA B,I       SET EQT ADDR IN NEW INTERRUPT TABLE ENTRY 
* 
      LDA JCICI     GET 'JSB $CIC-LINK,I' AND 
      STA NEWCH,I    PUT INTO NEW TRAP CELL 
      JMP SINT,I    RETURN
* 
BADCH LDB INTLG     ERROR.  I O CHANNEL # TOO HIGH
      ADB D5
      LDA NEWCH             (A)=NEW I/O CHANNEL 
      HLT 63B       HLT 63  (B)=MAX I/O CHANNEL ALLOWED 
      JMP *-1 
* 
* 
TEMP0 NOP 
COUNT NOP 
* 
* 
JCICI EQU 5B        LOCATION 5 MUST BE 'JSB $CIC-LINK,I'
EQTA  EQU 1650B 
EQT#  EQU 1651B 
DRT   EQU 1652B 
INTBA EQU 1654B 
INTLG EQU 1655B 
TBG   EQU 1674B 
SYSTY EQU 1675B 
DUMMY EQU 1737B 
AVMEM EQU 1751B 
BGORG EQU 1752B 
BGLWA EQU 1777B 
* 
      END MRCNF 
                                                                                                                                                                                                