ASMB,R,Q,C,Z
      IFN 
      HED RTE IV-A  CONFIGURATOR EXTENSION    92067-16006 
      XIF 
      IFZ 
      HED RTE IV-B CONFIGURATOR EXTENSION     92067-16516 
      XIF 
*     NAME:   $CNFX 
*     SOURCE: 92067-18006 
*     RELOC:  92067-16006     RTE IVA CONFIGURATOR EXTENSION
*     RELOC:  92067-16516     RTE IVB CONFIGURATOR EXTENSION
*     PGMR:   S. KAPOOR,D.VENHAUS 
* 
*  ***************************************************************
*  * (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 WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      IFN 
      NAM $CNFX,3 92067-16006 REV.1940 790906 
      XIF 
      IFZ 
      NAM $CNFX,3 92067-16516 REV.2001 791029 
      XIF 
      EXT $PCHN,$EXIT,$WRRD,$USRS,$ABDP,$TRTB,$TREN,$NPGQ 
      EXT $GDPG,$SAVE,$SMTB 
      EXT $PARS,$CVT3,$MATA,$MNP,$MCHN,$MBGP,$MRTP
      EXT $CFR,$BGFR,$RTFR,$IDEX,$SDA,$PLP,$CMST,$SBTB
      EXT $MPS2,$ENDS 
* 
      SUP 
* 
A     EQU 0 
B     EQU 1 
KEYWD EQU 1657B 
      HED CONSTANTS AND MESSAGES
.1    DEC 1 
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
.5    DEC 5 
.6    DEC 6 
.7    DEC 7 
.9    DEC 9 
.11   DEC 11
.12   DEC 12
.14   DEC 14
.15   DEC 15
.16   DEC 16
.18   DEC 18
.19   DEC 19
.28   DEC 28
.32   DEC 32
.33   DEC 33
* 
B77   OCT 77
B37   OCT 37
B140K OCT 140000
* 
.10   DEC 10
* 
YE    ASC 1,YE
NO    ASC 1,NO
E     ASC 1, E
R     ASC 1,R 
S     ASC 1,S 
RT    ASC 1,RT
BG    ASC 1,BG
PARTN ASC 15,PART'N  XX, XXXX,(XXXX) PAGES? 
APRTN DEF PARTN+8 
PAGES ASC 4, PAGES? 
APGS  DEF PAGES 
SPGS  ASC 7,,(XXXX) PAGES?
ASPGS DEF SPGS
SPACE ASC 1,
MSG23 ASC 10,CURRENT SIZE OF SAM: 
MSG24 ASC 10,DEFAULT:       WORDS 
MSG25 ASC 10,EXTENSION:     PAGES 
* 
MSG29 ASC 14,CURRENT PART'N DEFINITIONS:
MSG31 ASC 11,CURRENT PART'N REQMTS: 
MSG32 ASC 4,REALTIME
MSG33 ASC 5,BACKGROUND
MSG35 ASC 9,MAX PROGRAM SIZE: 
MSG36 ASC 11,W/OUT COMMON:    PAGES 
MSG37 ASC 11,W/ COMMON:       PAGES 
MSG38 ASC 11,W/ TABLE II:     PAGES 
MSG39 ASC 10,MAX # OF PART'NS:
MSG40 ASC 11,PAGES REMAINING: 
* 
A$SMT DEF $SMTB+0 
E$SMT DEF $SMTB+9 
USRST NOP 
ABDPG NOP 
SUBPR NOP 
PGSRM NOP 
MEMSZ NOP 
LSTLU NOP 
ECHO  NOP 
SAVE  BSS 4 
TEMP  NOP 
TEMP1 NOP 
TEMP2 NOP 
TEMP3 NOP 
TEMP4 NOP 
TEMP5 NOP 
STSME NOP 
SMEXS NOP 
ENDSM NOP 
* 
      HED PRINT INFORMATION ON MEMORY ORGANIZATION
* 
$CNFX XLA $PCHN     GET MEMORY SIZE 
      STA MEMSZ     SAVE IT 
      XLA $WRRD     GET LIST DEVICE LU# 
      STA LSTLU 
      XLA $TRTB     GET ECHO FLAG 
      STA ECHO
      LDB .10 
      JSB WRLST 
      DEF MSG23     CURRENT SIZE OF SAM:
      XLB $SAVE+2   GET # OF WORDS IN SAM DEFAULT 
      XLA $SAVE+13   HAVE TWO PIECES
      ADA B         ADD THE TWO PIECES
      CCE           CONVERT TO DECIMAL ASCII
      JSB $CVT3 
      INA           POINT TO LAST FOUR DIGITS 
      DLD A,I       SET UP MESSAGE
      DST MSG24+5   DEFAULT: XXXX WORDS 
      LDB .10 
      JSB WRLST     PRINT IT
      DEF MSG24 
      LDA $MPS2     # OF PAGES IN SAM EXT 
      ALF,RAL 
      RAL           # OF PAGES IN LOW 6 BITS
      AND B77       A REG HAS # OF PAGES IN SAM EXT 
      STA SMEXS     SAVE SIZE OF SAM EXT
      CCE           CONVERT TO ASCII DECIMAL
      JSB $CVT3 
      ADA .2        POINT TO LOW 2 DIGITS 
      LDA A,I       GET ASCII VALUE 
      STA MSG25+6   SET UP MESSAGE
      LDB .10 
      JSB WRLST     PRINT 
      DEF MSG25     EXTENSION: XX PAGES 
      LDA $SBTB+1   # OF PAGES IN DRIVER PARTITIONS 
      ADA $SBTB+3   # OF PAGES IN MEM RES BASE PAGE 
      ADA $SBTB+5   # OF PAGES IN MEM RES PARTN 
      ADA $ENDS     # OF PAGES UPTO SAM DEFAULT 
      STA STSME     PHSICAL START PAGE OF SAM EXT 
      IOR BIT15 
      SJS $GDPG     FIND THE FIRST GOOD PAGE FOR SAM EXT
      JMP SMER1     ERROR NO MORE PAGES LEFT
      STA STSME     START PAGE OF SAM EXT 
STRPG CCE           CONVERT TO ASCII DECIMAL
      JSB $CVT3 
      INA 
      DLD A,I       ASCII VALUE 
      DST MSG26+19   SET UP MESSAGE 
      LDB .21 
      JSB WRLST     PRINT MESSAGE 
      DEF MSG26     PHSICAL START PAGE OF SAM EXT XX
      LDA $ENDS     FIND # OF PAGES AVAIL FOR SAM EXT 
      CMA,INA 
      ADA .32       # OF PAGES BET END OF LOG MEM AND SAM DEFAULT 
      STA TEMP      SAVE IT 
      LDB STSME     PHSICAL START PAGE OF SAM EXT 
      CMB,INB 
      ADB MEMSZ     (MEMSZ-START OF SAM EXT)
      CMA,INA       - 
      ADA B         (32-$ENDS)
      SSA,RSS       WHICH IS GREATER? 
      LDB TEMP      THE SMALLER QUANTITY IS MAX SIZE OF SAME EXT
      STB MXSME     MAX. PAGES AVAIL FOR SAM EXT
      LDA B 
      CCE 
      JSB $CVT3     CONVERT IT TO ASCII DECIMAL 
      ADA .2
      LDA A,I       GET ASCII VALUE 
      STA MSG27+18  SET UP MESSAGE
      LDB .19 
      JSB WRLST 
      DEF MSG27     MAX PAGES AVAIL FOR SAM EXT: XX 
* 
      HED RECONFIGURE SAM EXTENSION 
      CLA           CLEAR $SMTB 
      LDB A$SMT 
CL$SM XSA B,I 
      CPB E$SMT     END OF $SMTB? 
      JMP SMEXQ     YES 
      INB           NO
      JMP CL$SM 
SMEXQ LDB .18 
      JSB QUERY 
      DEF MSG28     CHANGE SAM EXTENSION?(#PAGES/" "CR) 
      LDA PRSBF 
      SZA,RSS       NULL? 
      JMP NOCHG     YES, NO CHANGE IN SAM EXT 
      CLA           LOWER LIMIT 
      LDB APRSB     POINTER TO PARSE BUFFER 
      JSB TST#      TEST VALIDITY OF RESPONSE 
MXSME NOP           MAX AVAIL MEM FOR SAM EXT 
      JMP SMERR     ERROR 
      RSS 
NOCHG LDA SMEXS     SAM EXT SIZE GENERATED
      STA SMEXS 
* 
*   CHANGE SYSTEM MAP FOR NEW SAM EXT 
      CMA,INA,SZA,RSS SAM EXT SIZE IS 0?
      JMP NOSME     YES 
      STA TEMP1     -VE OF SAM EXT SIZE 
      CLA,INA 
      CAX 
      LDA $ENDS     LOGICAL START PAGE OF SAM EXT 
      STA TEMP5 
      LDA A$SMT     START OF $SMTB
      STA TEMP2     SAVE IT FOR POINTER VALUE 
      LDA STSME     PHYSICAL START PAGE 
      XSA TEMP2,I   SET INITIAL  START PAGE FOR SAM EXT 
      STA TEMP3 
      ISZ TEMP2     POINT TO # OF PAGES IN CHUNK ENTRY
SMELP IOR BIT15 
      SJS $GDPG     FIND NEXT GOOD PAGE 
      JMP SMER1     ERROR 
      CPA TEMP3     BAD PAGE ENCOUNTERED? 
      JMP INCR      NO
      LDB TEMP2 
      CPB E$SMT     END OF $SMTB REACHED? 
      JMP SMER2     YES, ERROR
      ISZ TEMP2     NO, POINT TO NEXT ENTRY 
      XSA TEMP2,I   START PHYSICAL PG FOR NEXT CHUNK OF SAM EXT 
      ISZ TEMP2 
INCR  XLB TEMP2,I   INCREMENT #PGS IN THIS CHUNK OF SAM EXT 
      INB 
      XSB TEMP2,I 
      STA B 
      ADB B40K      WRITE PROTECT SAM EXTENSION 
      LDA TEMP5 
      XMS           STORE PAGE # IN DMS REG 
      BLS,RBR       CLEAR BIT 14
      ISZ TEMP1     INCREMENT COUNTER 
      RSS           NOT DONE YET
      JMP SMELC     DONE
      ISZ TEMP5     INCREMENT LOGICAL PAGE #
      ISX 
      LDA B 
      STA TEMP3 
      JMP SMELP     STORE NEXT PAGE 
* 
SMERR LDA A10       ERROR 
      JSB ERROR 
      JMP SMEXQ 
SMER2 LDA A22       TOO MANY BAD PAGES IN SAM EXT 
      JSB ERROR 
      JMP SMEXQ 
* 
A10   ASC 1,10
A22   ASC 1,22
A12   ASC 1,12
B40K  OCT 40000 
.22   DEC 22
N2    DEC -2
MSG26 ASC 21,SAM EXTENSION STARTS AT PHYSICAL PAGE
MSG27 ASC 19,MAX PAGES AVAIL FOR SAM EXTENSION: 
MSG28 ASC 18,CHANGE SAM EXTENSION?(#PAGES/" "CR)
* 
SMER1 LDA A12 
      JSB ERROR 
      JMP SMEXQ 
* 
NOSME LDA $ENDS     NO CHANGE IN SAM EXT
      STA ENDSM     END OF SYSTEM 
      LDA STSME     START OF USER PARTN AREA
      XSA $USRS 
      CLA 
      STA $MPS2 
      XSA $SAVE+4 
      JMP RWPRO     READ-WRITE PROTECT REST OF THE REG
* 
* 
SMELC STA ENDSM     A REG HAS END OF LOG SYS PAGE 
      XSB $USRS     START PAGE OF USER PARTITIONS 
      LDB SMEXS     # OF PAGE IN SAM EXT
      BLF,BLF       # OF WORDS IN SAM EXT 
      RBL,RBL 
      CPA .32       DID SAM EXT END AT LOG PAGE 31? 
      RSS           THEN LAST ADDRESS MUST BE 77775B
      CLA,RSS 
      LDA N2
      ADB A 
      XSB $SAVE+4   # OF WORDS IN SAM EXT 
      LDA SMEXS     SAM EXT SIZE
      ALF,ALF 
      RAL,RAL       MOVE IT TO BITS 10-25 
      ADA STSME     START PAGE SAM EXT
      STA $MPS2 
* 
RWPRO CLA,INA       READ WRITE PROTECT REST OF
      CAX           THE REGISTERS IN THE SYSTEM MAP 
      LDA ENDSM     LOGICAL PAGE SAM EXT ENDS 
RWPRL CPA .32       LOGICAL REG # IS 32?
      JMP PRTDF     YES DONE
      LDB B140K     READ WRITE PROTECT NEXT REG 
      XMS 
      ISX 
      JMP RWPRL 
* 
      HED PARTITION DEFINITIONS 
* 
PRTDF LDB .14 
      JSB WRLST 
      DEF MSG29     CURRENT PART'N DEFINITIONS: 
      JSB PRNPR     PRINT LIST OF PARTITION DEFINITIONS 
      LDB .11       PRINT LIST OF 
      JSB WRLST 
      DEF MSG31     CURRENT PART'N REQMTS:
      LDB .4
      JSB WRLST     REALTIME
      DEF MSG32 
      CLB           INDICATE TO ROUTINE TO PRINT
      STB TYPE      PART'N REQMTS FOR REAL TIME PROGS 
      JSB PGREQ 
      LDB .5
      JSB WRLST     BACKGROUND
      DEF MSG33 
      ISZ TYPE
      JSB PGREQ     PART'N REQMTS FOR BG PROGS
      LDB .9
      JSB WRLST 
      DEF MSG35     MAX PROGRAM SIZE
      LDA $CMST     START OF COMMON AREA
      CMA,INA 
      CCE,INA 
      ADA .32       32-$CMST+1
      STA MXWOC 
      JSB $CVT3     CONVERT TO ASCII DECIMAL
      ADA .2
      LDA A,I       SET UP MESSAGE
      STA MSG36+7   W/OUT COMMON :  XX PAGES
      LDB .11 
      JSB WRLST 
      DEF MSG36 
      LDA $SDA      START OF SYSTEM DRIVER AREA 
      CMA,INA 
      INA 
      ADA .32       32-$SDA+1 
      CCE           CONVERT MAX ADDRESS SPACE WITH COMMON 
      JSB $CVT3     TO ASCII DECIMAL
      ADA .2
      LDA A,I 
      STA MSG37+7   W/ COMMON :  XX PAGES 
      LDB .11 
      JSB WRLST 
      DEF MSG37 
      LDA $PLP      LOAD POINT  FOR PRIV PROGS
      ALF 
      RAL,RAL       GET PAGE # IN LOW BITS
      AND B37       MASK PAGE#
      CMA,INA 
      INA 
      ADA .32       32-#PAGES UPTO TABLE AREA II+1
      CCE           CONVERT # OF PAGES IN MAX ADDR SPACE FOR
      JSB $CVT3     A PRIVILEGED PROGRAM TO ASCII DECIMAL 
      ADA .2
      LDA A,I 
      STA MSG38+7 
      LDB .11 
      JSB WRLST     W/ TABLE II:
      DEF MSG38 
      LDA $MNP      MAX # OF PARTITIONS 
      CCE 
      JSB $CVT3 
      ADA .2
      LDA A,I       GET ASCII VALUE 
      STA MSG39+9   SET UP MESSAGE
      LDB .10 
      JSB WRLST     PRINT IT
      DEF MSG39     MAX # OF PART'NS : XX 
      XLA $USRS     START PAGE OF USER PARTITION AREA 
      CMA,INA 
      ADA MEMSZ     MEMSZ-$USRS 
      STA PGSRM     PAGES REMAINING FOR USER PARTITION
      CCE           DEFINITIONS 
      JSB $CVT3     CONVERT IT TO ASCII DECIMAL 
      INA 
      DLD A,I       SET UP THE MESSAGE
      DST MSG40+9   PAGES REMAINING: XX 
      LDB .11 
      JSB WRLST 
      DEF MSG40 
* 
*    DEFINE USER PARTITIONS 
* 
DFNPR LDB $MATA     SET ALL WORDS IN MAT TO 0 
      STB MATAD     START ADDRESS OF MAT
      LDA $MNP      # OF WORDS TO BE CLEARED
      SZA,RSS       MAX # OF PARTITIONS IS 0? 
      JMP QPERM     YES,SKIP REST OF MEMORY RE-CONFIGURATION
      MPY .7        EACH ENTRY HAS 7 WORDS
      STA B 
      CLA           VALUE FOR REGISTERS 
      JSB SETM      SET MEMORY
MATAD NOP           START OF MAT
      LDA $MNP
      CMA,INA       -VE OF # OF PART'NS ALLOWED 
      STA TEMP      COUNTER TO SET LINK WORDS OF ALL MAT
      LDA $MATA     ENTRIES TO -1 
      CCB 
INITL STB A,I       STORE VALUE IN ENTRY
      ADA .7        POINT TO NEXT ENTRY 
      ISZ TEMP
      JMP INITL     NOT DONE YET
* 
      XLA $USRS     SAVE START OF USER PARTITIONS 
      STA USRST 
      XLA $ABDP     SAVE CURRENT BAD PAGE POINTER 
      STA ABDPG 
* 
STDFN CLA           START OF PARTITION DEFINITION 
      STA SUBPR     CLEAR FLAG FOR SUBPART'N DEF'N
      STA PRTN# 
      LDA $MATA     START OF MAT
      STA PRPNT     SET UP POINTER TO MAT ENTRIES 
* 
STCHN CCA 
      SJS $PCHN     START OF PART'N DEF'N 
      SZA,RSS       FOR THIS CHUNK OF MEMORY
      JMP THRLS     0,DONE WITH PART'N DEF'N FOR ALL OF MEM 
      CLB           INITIALIZE FLAG FOR END OF SUBPARTITION 
      STB ERFLG 
* 
      XLB $USRS     NEW START OF USER AREA
      STB SAVE      SAVE IT 
      STA #PGS      # OF PAGES IN BLOCK FROM MEM
      STA SAVE+1    SAVE IT 
      LDB PRPNT     POINTER IN MAT
      STB SAVE+2    SAVE IT 
      LDB PRTN#     PARTITIONS DEFINED SO FAR 
      STB SAVE+3    SAVE IT 
* 
      CCE           CONVERT # OF PAGES IN CHUNK 
      JSB $CVT3     TO ASCII DECIMAL
      INA           POINT TO LAST 4 ASCII DIGITS
      DLD A,I 
      DST MSG50+9   AND SET UP MESSAGE
      LDB .15 
      JSB WRTTY     DEFINE PART'NS FOR PPPP PAGES:
      DEF MSG50 
* 
      IFN 
      LDB .9
      XIF 
* 
      IFZ 
      LDB .12 
      XIF 
* 
      JSB WRTTY 
      DEF MSG41     #PAGES,RT(M)/BG(M)/S(,R)
PRTNQ LDA PRTN#     CONVERT PARTITIONS DEFINED SO FAR 
      CCE,INA         + 1 INTO ASCII DECIMAL
      JSB $CVT3 
      ADA .2        POINT TO LAST 2 ASCII DIGITS
      LDA A,I 
      STA PARTN+4 
      LDA #PGS      #PAGES REMAINING TO BE DEFINED IN THIS BLOCK
      CCE           CONVERT TO ASCII DECIMAL
      JSB $CVT3 
      INA           POINT TO LAST 4 DIGITS
      LDB SUBPR     DEFINING SUBPARTITIONS? 
      SSB 
      JMP SETSB     YES, SETUP MESSAGE FOR SUBPARTITIONS
* 
      DLD A,I       GET THE ASCII # OF PAGES
      DST PARTN+6   SET # OF PAGES REMANINING IN MESSAGE
      LDA APGS      MOVE " PAGES?" IN MESSAGE 
      LDB APRTN 
      MVW .4
      LDB .12       LENGTH OF PARTITION DEFINITION MESSAGE
      JMP QPRTN 
* 
SETSB DLD A,I       GET # OF PAGES LEFT IN MOTHER PART'N
      DST SPGS+1
      LDA ASPGS     MOVE ",(XXXX) PAGES?" INTO MESSAGE
      LDB APRTN 
      MVW .7
      LDA SV#PG     # OF PAGES LEFT IN MAIN MEM 
      CCE           CONVERT TO DECIMAL ASCII
      JSB $CVT3 
      INA 
      DLD A,I       GET LEAST 4 DIGITS
      DST PARTN+6   SET # PAGES LEFT IN MESSAGE 
      LDB .15       LENGTH OF MESSAGE 
QPRTN JSB QUERY     PARTITION DEFINITION PROMPT 
      DEF PARTN     PART'N XX?
      LDA PRSBF 
      CPA .2        ASCII RESPONSE? 
      RSS           YES 
      JMP TSTTY     NO, TEST TYPE OF PART'N 
      JSB END?      /E ENTERED? 
      RSS           YES 
      JMP CHK/R     NO, THEN CHECK FOR /R 
      LDA ERFLG     ONLY /E OR /R PERMITTED AS A RESPONSE?
      SSA 
      JMP STCHN     YES, THEN /E VALID
      LDA SUBPR     DEFINING SUBPARTITIONS? 
      SSA,RSS 
      JMP #PGSE     NO, THEN ERROR
      JSB RSTSB     YES, THEN END SUBPART'N DEFINITION
      JMP ENPR2 
* 
CHK/R LDA PRSBF+1 
      CPA /R        RESTART ? 
      RSS 
      JMP TSTTY     NO
      LDA PRSBF+2 
      CPA SPACE 
      JMP RSTOR     RESTART PARTITION DEFINITIONS 
* 
TSTTY LDA ERFLG     END OF SUBPARTITION FLAG SET? 
      SSA 
      JMP #PGSE     YES,ONLY /E OR /R ALLOWED FOR A RESPONSE
      LDA PRSBF+6   TEST FOR VALID PART'N TYPE
      CPA SPACE 
      RSS 
* 
      IFZ 
      CPA M         BGM OR RTM? 
      XIF 
* 
      RSS           YES, THEN OK
      JMP TYPER     NOT A SPACE THEN ERROR
      LDB PRSBF+5   TEST FOR VALID PART'N TYPE
      CLA           0 IF BACKGROUND 
      CPB BG        BACKGROUND? 
      JMP SETYP     YES 
      INA 
      CPB RT        REALTIME? 
      JMP SETYP     YES 
      CPB S         SUBPARTITION? 
      CCA,RSS       -1 IF SUBPARTITION
      JMP TYPER     INVALID TYPE ERROR
SETYP STA TYTMP     SAVE TYPE OF PART'N 
      LDB SUBPR     DEFINING SUBPARTITIONS? 
      SSB,RSS 
      JMP NOSUB     NO
      SSA,RSS       PART'N TYPE IS S? 
      JSB RSTSB     NO, THEN END SUBPARTITION DEFINITION
      JMP TESTR     TEST FOR RESERVE PARAMETER
NOSUB SSA           PARTITION TYPE IS S?
      JMP TYPER     YES, THEN ERROR 
* 
TESTR LDB PRSBF+8   TEST FOR R PARAMETER
      SZB,RSS       NULL? 
      JMP SETR      YES 
      LDB PRSBF+9 
      CPB R         R?
      RSS           YES 
      JMP RSRVE     NO, THEN ERROR
      LDA PRSBF+10  GET NEXT CHAR 
      CPA SPACE     BLANK?
      CLB,INB,RSS   YES, THEN OK
      JMP RSRVE     NO, ERROR 
SETR  STB RTMP      RTMP IS 1 IF RESERVED PART'N
* 
      LDA .2        GET # OF PAGES REMAINING
      LDB APRSB     IN THIS CHUNK 
      JSB TST#      TEST IF # PAGES DEFINED IS
#PGS  NOP           GREATER THAN REMAINING # PAGES IN CHUNK 
      JMP #PGSE     ERROR 
* 
      STA PGTMP     GET PAGES FOR THIS PART'N 
      CMA,INA       # OF PAGES REMAINING
      ADA #PGS        IN BLOCK OF MEM 
      CPA .1        1 PAGE LEFT IN CHUNK? 
      RSS           YES 
      JMP SET#P     NO
      ISZ PGTMP     INCREMENT # OF PAGES IN PRV PART'N
      CLA           CLEAR # OF PAGES REMAINING IN CHUNK 
SET#P STA #PGS      NEW # PAGES LEFT IN CHUNK 
      LDA PRPNT     POINTER TO CURRENT MAT ENTRY
      CLB 
      STB A,I       CLEAR LINK WORD 
      ADA .3        POINT TO WORD 3 OF MAT ENTRY
      XLB $USRS     START PAGE FOR THIS PART'N
      STB A,I       SET UP MAT WORD 
      INA 
      LDB RTMP      PARTITION RESERVE PARAMETER 
      RBR           BIT 15 IS SET IF R PARM 
      ADB PGTMP     WAS SPECIFIED - # PAGES IN LOW BITS 
      ADB N1        -1 TO EXCLUDE BASE PAGE 
      STB A,I       SET UP WORD 4 OF MAT ENTRY
      INA 
      LDB TYTMP     REAL TIME OR BACKGROUND PART'N
      SSB           'S' ENTERED?
      LDB SVTYP     YES, THEN USE TYPE OF MOTHER PART'N 
      RBR           BIT 15 SET IF REALTIME PART'N 
      STB A,I       SET UP WORD 5 OF MAT
      LDB SUBPR     DEFINING SUBPARTITIONS? 
      SSB 
      JMP SBPRT     YES 
* 
      IFZ 
      LDA PRSBF+6   BGM OR RTM? 
      CPA M 
      JMP DEFSB     YES, THEN PROMPT FOR SUBPARTITIONS
      XIF 
* 
      LDA .2
      LDB APRSB     ADDRESS OF PARSE BUFFER 
      JSB TST#      # OF PAGES FOR PART'N LESS THAN 
MXWOC NOP           MAX ADDRESSABLE SPACE W/OUT COMMON? 
      JMP MPART     YES, DEFINE MOTHER PART'N 
* 
ENPRT XLA $USRS     START OF USER PART'N PAGE 
      ADA PGTMP     ADD # PAGES DEFINED FOR PART'N
      XSA $USRS     TO GET NEW START USER PAGE
ENPR1 LDA PRPNT     POINT TO NEXT MAT ENTRY 
      ADA .7
      STA PRPNT 
      ISZ PRTN#     INCREMENT PART'NS DEFINED SO FAR
      LDA PRTN#     # OF PARTITIONS DEFINED SO FAR
      CPA $MNP      IS EQUAL TO MAX # PART'NS?
      JMP MX#PR     YES, THEN DONE
ENPR2 LDA #PGS      # PAGES LEFT IN CHUNK 
      SZA           0?
      JMP PRTNQ     NO
      JMP STCHN     YES, THEN DEFINE MORE PART'NS 
* 
MX#PR LDB SUBPR     DEFINING SUBPARTITIONS? 
      SSB 
      JSB RSTSB      YES, END SUBPARTITION DEFINITION 
      LDA #PGS      # OF PAGES LEFT IN THIS CHUNK 
      SZA           0?
      JMP RDFNQ     NO, THEN REDEFINE PART'NS?
      CCA 
      SJS $PCHN     ANY MORE PAGES LEFT IN MEM? 
      SZA,RSS 
      JMP THRLS     NO, THEN THREAD LISTS 
* 
RDFNQ LDA A20       MAX # PART'NS DEFINED AND 
      JSB ERROR       PAGES LEFT UNDEFINED IN MEM 
RSTOR LDA USRST     RESTORE START OF USER PART'NS 
      XSA $USRS 
      LDA ABDPG     RESTORE POINTER TO BAD PAGE LIST
      XSA $ABDP 
      JMP DFNPR     REDEFINE PARTITIONS 
* 
M     ASC 1,M 
A20   ASC 1,20
MSG50 ASC 15,DEFINE PART'NS FOR     PAGES:
* 
      IFN 
MSG41 ASC 9,#PAGES,RT/BG/S(,R)
      XIF 
* 
      IFZ 
MSG41 ASC 12,#PAGES,RT(M)/BG(M)/S(,R) 
      XIF 
* 
*  DEFINE MOTHER PARTITIONS 
* 
MPART LDB .11 
      JSB QUERY     SUBPARTITIONS?(YES/NO)
      DEF MSG43 
      LDA PRSBF+1 
      CPA NO
      JMP ENPRT     NO, THEN CONTINUE NORMALLY
      CPA YE
      RSS           YES 
      JMP MPART     ILLEGAL RESPONSE
DEFSB CCA,CCE       SET E REG FOR FUTURE USE
      STA SUBPR     SET FLAG TO INDICATE DEFINING SUBPARTITIONS 
      LDA TYTMP     SAVE PART'N TYPE OF THIS MOTHER PART'N
      STA SVTYP 
      LDA #PGS
      STA SV#PG     SAVE # OF PAGES LEFT IN CHUNK 
      LDA PGTMP 
      STA #PGS      # OF PAGES IN MOTHER PART'N 
      XLA $USRS 
      ADA PGTMP     ADD # OF PAGES DEFINED FOR MOTHER PART'N
      STA SVUSR     SAVE START PAGE FOR NEXT PART'N 
      LDA PRPNT     SET M BIT IN MAT ENTRY
      ADA .3        FOR THE MOTHER PART'N 
      LDB A,I 
      RBL,ERB       E REG SET PREVIOUSLY
      STB A,I 
      ADA .3        POINT TO SUBPART'N LINK WORD
      LDB PRPNT 
      STB A,I       POINT SLW OF MOTHER PART'N TO ITSELF
      STA PRVSL     SAVE TO USE FOR NEXT SLW
      JMP ENPR1 
* 
SBPRT LDB PRVSL,I   YES,POINT PREV. SLW TO THIS SUBPART'N ENTRY 
      LDA PRPNT 
      STA PRVSL,I 
      ADA .6        SET UP THIS PARTN'S SLW 
      STA PRVSL 
      STB A,I 
      LDA #PGS
      SZA           END SUBPART DEF'N IF # PAGES LEFT IS 0
      JMP ENPRT 
      JSB RSTSB     END SUBPARTITION DEFINITION 
      JMP ENPR1 
* 
RSTSB NOP           ROUTINE TO END SUBPARTITION DEF'N 
      LDA SVUSR     RESTORE START USER PART'N PAGE #
      XSA $USRS     FOR NEXT PART'N TO BE DEFINED 
      LDA SV#PG 
      STA #PGS      RESTORE # PAGES LEFT IN CHUNK 
      CLA 
      STA SUBPR     CLEAR SUBPART'N DEFINITION FLAG 
      JMP RSTSB,I   RETURN
* 
#PGSE LDA A13       INVALID PARTITION SIZE
      JSB ERROR 
      LDA #PGS      # OF PAGES LEFT IN CHUNK IS 0?
      SZA 
      JMP PRTNQ     NO, PROMPT FOR LAST PART'N DEF'N
      CCA           YES, THEN SET FLAG TO INDICATE
      STA ERFLG     ONLY /E OR /R WILL BE ALLOWED FOR A RESPONSE
      JMP PRTNQ     PROMPT FOR PART'N DEF'N 
* 
TYPER LDA A14       INVALID PARTITION TYPE
      RSS 
* 
RSRVE LDA A15       INVALID PARTITION RESERVATION PARAMETER 
      JSB ERROR     DISPLAY ERROR 
      JMP PRTNQ     QUERY PARTN# AGAIN
* 
A13   ASC 1,13
A14   ASC 1,14
A15   ASC 1,15
ERFLG NOP 
SV#PG NOP 
SVUSR NOP 
PRVSL NOP 
TYTMP NOP 
SVTYP NOP 
PGTMP NOP 
RTMP  NOP 
MSG43 ASC 11,SUBPARTITIONS?(YES/NO) 
PRSBF BSS 33
PRPNT NOP 
PNTBG NOP 
PNTRT NOP 
PNTCH NOP 
ADTBL DEF *+1 
ABGFR DEF $BGFR 
ARTFR DEF $RTFR 
ACFR  DEF $CFR
AMBGP DEF $MBGP 
AMRTP DEF $MRTP 
AMCHN DEF $MCHN 
AMPS2 DEF $MPS2 
LSHDR NOP 
MXPRT NOP 
PRTSZ NOP 
PRVPN NOP 
CURPN NOP 
CURKY NOP 
PRTMP NOP 
RDBUF BSS 80
BIT15 OCT 100000
.N7   DEC -7
      HED THREAD PARTITION LISTS
* 
*   THREAD PARTITIONS JUST DEFINED INTO BG,RT AND CHAIN FREE LISTS
*   FREE LISTS IN AN INCREASING ORDER ACCORDING TO THEIR SIZE 
* 
THRLS CLA           CLEAR LIST HEADERS
      STA $BGFR 
      STA $RTFR 
      STA $CFR
      STA $MCHN 
      STA $MBGP 
      STA $MRTP 
      LDA .N7       COUNTER 
RMOVI LDB ADTBL,I   REMOVE INDIRECTS FROM ENT POINT ADDRESSES 
      RSS 
      LDB B,I 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      STB ADTBL,I 
      ISZ ADTBL 
      INA,SZA 
      JMP RMOVI 
      LDA $MATA     SET POINTER AT THE BEGINING OF MAT
      STA PRPNT 
      LDA ABGFR     ADDRESS OF LIST HEADER FOR BG 
      STA PNTBG     POINTER FOR THE BG LIST 
      LDA ARTFR     ADDRESS OF LIST HEADER FOR RT 
      STA PNTRT     POINTER FOR THE RT LIST 
      LDA ACFR      ADDRESS OF LIST HEADER FOR CHAIN LIST 
      STA PNTCH     POINTER FOR THE CHAIN LIST
      LDA $MNP      MAX # OF PARTITIONS ALLOWED 
      CMA,INA       USE AS COUNTER
      STA PRTMP 
* 
* 
THRDL LDA PRPNT     GET POINTER TO MAT
      LDB A,I       IS THE LINK WORD -1?
      SSB 
      JMP THRDN     YES, THEN DONE THREADING LISTS
      ADA .3        POINT TO WORD 4 OF MAT ENTRY
      LDB A,I 
      SSB,RSS       IS THE M BIT SET? 
      CLB,RSS       NO, THEN NOT A MOTHER PARTN 
      LDB ACFR      YES, SET LST HEADER FOR CHAIN LIST
      STB LSHDR     CURRENT POINTER 
      LDB AMCHN     ADDR OF MAX SIZE CHAINED PART'N ENT PNT 
      STB MXPRT 
      INA           POINT TO WORD 5 OF MAT ENTRY
      LDB A,I 
      RBL,CLE,ERB   GET BIT 15 IN E REG AND CLEAR IT
      STB PRTSZ     SIZE OF PARTITION TO COMPARE
      INA           NO
      LDB LSHDR 
      SZB           LIST HEADER ALREADY SET?
      JMP STPRT      YES, SET MAX PART'N SIZE 
      LDA A,I       NO
      SSA,RSS       RT BIT SET? 
      JMP BGPRT     NO, THEN BACKGROUND PART'N
      LDB ARTFR     YES, RT PARTN, POINTER FOR RT LIST
      LDA AMRTP     MAX RT PART'N SIZE ENTRY POINT
      JMP STPNT 
BGPRT LDA AMBGP     MAX BG PART'N SIZE ENTRY POINT
      LDB ABGFR     BG PART'N SIZE ENTRY POINT
STPNT STA MXPRT     POINTER TO MAX PART'N SIZE
      STB LSHDR     HEADER FOR CURRENT LIST 
STPRT LDA PRTSZ     GET PART'N SIZE 
      CMA,SEZ,INA     RESERVE PARTITION?
      JMP STCRP     YES, SET CURRENT POINTER
      ADA MXPRT,I   SIZE OF CURRENT PART'N
      SSA,RSS         IS GREATER THAN PREVIOUS ONE? 
      JMP STCRP     NO
      LDA PRTSZ     YES 
      STA MXPRT,I   NEW MAX PART'N SIZE FOR GIVEN LIST
STCRP LDB B,I       GET VALUE 
      STB CURPN     CURRENT POINTER 
      CLA           CLEAR 
      STA PRVPN     PREVIOUS POINTER
TLOOP LDB CURPN     GET CURRENT POINTER 
      SZB,RSS       0?
      JMP TPLEX     YES, THEN DONE WALKING THRU LIST
      ADB .4        NO, GET PART'N SIZE 
      LDA B,I       PART'N SIZE OF CURRENT PART'N 
      ELA,CLE,ERA   CLEAR R BIT IF SET
      CMA,INA          IN LIST < PART'N SIZE OF NEW PART'N
      ADA PRTSZ          TO INSERTED IN THE LIST?T
      SSA 
      JMP TPLEX     YES,THEN FOUND PLACE TO INSERT NEW PART'N 
      LDB CURPN     NO, THEN CURRENT POINTER BECOMES
      STB PRVPN     PREVIOUS POINTER
      LDA B,I       CONTENTS OF LINK WORD OF
      STA CURPN     CURRENT PART'N BECOMES THE CURRENT POINTER
      JMP TLOOP     CHECK NEXT PARTITION IN LIST
* 
TPLEX LDA PRPNT     POINTER TO NEW PART'N TO BE INSERTED
      LDB PRVPN     GET PREVIOUS POINTER
      SZB           IS THE CURRENT POINTER TO LIST HEADER?
      JMP PRINS     NO, THEN INSERT PART'N
      STA LSHDR,I   YES POINT LIST HEADER TO PART'N 
      JMP FORWD     ADJUST FORWARD POINTER IN MAT 
* 
PRINS STA PRVPN,I   PREV PART'N POINTS TO NEW PART'N
FORWD LDA CURPN     NEW PART'N POINTS TO CURRENT PART'N 
      STA PRPNT,I 
*  PARTITION HAS BEEN INSERTED
*  INSERT NEXT PART'N IN MAT IN PROPER LIST 
ENTHR LDA PRPNT 
      ADA .7        POINT TO NEXT ENTRY 
      STA PRPNT     POINTER FOR NEW PART'N
      ISZ PRTMP     MAX # OF PART'NS ALLOWED INSERTED?
      JMP THRDL     NO, REPEAT PROCESS FOR ALL PART'NS
* 
*   ALL PARTITIONS ARE THREADED IN FREE LISTS 
* 
* 
THRDN DLD NEW       SET UP MESSAGE FOR
      DST MSG29+2   NEW PART'N DEFINITIONS: 
      LDB .12 
      JSB WRLST     PRINT MESSAGE ON LIST DEVICE
      DEF MSG29+2   NEW PART'N DEFINITIONS: 
      CCE           E REG SET TO INDICATE CALLING FROM USER MAP 
      JSB PRNPR     PRINT LIST OF NEW PART'N DEFINITIONS
* 
      HED UNASSIGN PROGRAMS 
*   UNASSIGN PROGRAMS IF THEY DO NOT FIT IN 
*   THE PARTITIONS THEY WERE ORIGINALLY ASSIGNED TO 
* 
      LDB .10 
      JSB WRLST     CALLING PRINT ROUTINE FROM USER MAP 
      DEF MSG44     UNASSIGNED PROGS: 
      XLA KEYWD     START OF KEYWORD TABLE
      STA CURKY     CURRENT POSITION IN KEY WORD TABLE
IDLP  LDA CURKY,I   GET NEXT ID SEG ADDRESS 
      SZA,RSS       0?
      JMP IDONE     YES, THEN DONE UNASSIGNING
      ADA .14       NO, POINT TO WORD 15
      LDB A,I       GET VALUE TO CHECK IF A 
      LSR 4         SHORT ID SEGMENT
      SLB           SS BIT SET? 
      JMP ENLP      YES, THEN LOOK AT NEXT ID SEGMENT 
      LDB CURKY,I 
      ADB .21       NO, A LONG ID SEG 
      LDA B,I       GET CONTENTS OF WORD 21 
      SSA,RSS       RP BIT SET? 
      JMP ENLP      NO, PROG NOT ASSIGNED TO A PART'N 
      AND B77       YES, GET PART'N # 
      LDB CURKY,I   ADDRESS OF ID SEGMENT 
      JSB FIT       PROG STILL FITS IN PART'N?
      RSS           NO
      JMP ENLP      YES 
* 
UNASN LDA SPACE     NO, THEN UNASSIGN PROG
      LDB SPACE 
      DST RDBUF     CLEAR 3 WORDS IN BUFFER 
      STA RDBUF+1   THEY WILL HOLD PROG NAME
      LDB CURKY,I   ADDRESS OF ID SEG 
      ADB .21       GET WORD 21 OF ID SEG 
      LDA B,I 
      AND B777C     77700B - CLEAR BIT 15 AND BITS 0-5
      STA B,I       STORE IT BACK 
* 
      LDA CURKY,I   REPORT NAME OF PROGRAM
      ADA .12 
      LDB A,I       GET FIRST 2 CHARS OF PROG NAME
      STB RDBUF 
      INA 
      LDB A,I       CHARS 3 & 4 OF PROG NAME
      STB RDBUF+1 
      INA 
      LDA A,I       MASK 5TH CHAR 
      AND B1774     CLEAR LOW BYTE
      IOR B40       INSERT SPACE IN LOW BYTE
      STA RDBUF+2 
      LDB .3
      JSB WRLST 
      DEF RDBUF     PRINT NAME OF PROG
* 
ENLP  ISZ CURKY     POINT TO NEXT ENTRY IN KEY WORD TABLE 
      JMP IDLP      EXAMINE NEXT ID SEGMENT 
* 
      HED MODIFY PROGRAM PAGE REQUIREMENTS
IDONE LDA CURKY     GET THE LAST+1 ADDR IN KEYWORD LIST 
      ADA N1        POINT TO LAST ENTRY IN  KEYWORD LIST
      LDA A,I       GET CONTENTS
      STA CURKY     SAVE ADDRESS OF LAST ID SEGMENT 
      LDB .18 
      JSB WRTTY     MODIFY PROG PAGE REQMTS?(/E TO END) 
      DEF MSG45 
      LDB .6
      JSB WRTTY     PNAME,#PAGES
      DEF MSG46 
MDPRM CLB,INB 
      JSB QUERY     HYPHEN PROMPT 
      DEF HYPHN 
      JSB END?      /E ENTERED? 
      JMP ASNPR     YES,DONE WITH PROG SIZE MODFICATION 
* 
NXTPR LDB APRSB     NO
      INB           POINT TO PROGRAM NAME IN PARSE BUFFER 
      JSB TNAME     GET ID SEG ADDRESS OF PROGRAM 
      SEZ           FOUND IT? 
      JMP MDPRE     NO SUCH PROG OR SHORT ID SEG
      STB IDSGA     FOUND PROGRAM'S ID SEG ADDRESS
* 
*    MODIFY PROGRAM SIZE
* 
      ADB .14       POINT TO TYPE WORD
      LDA B,I 
      AND B17       GET PROGRAM TYPE
      CPA .2        REAL TIME DISC RES PROG?
      RSS           YES 
      CPA .3        BACKGROUND DISC RES PROG? 
      RSS           YES 
      CPA .4        LARGE BACKGROUND DISC RES PROG? 
      RSS           YES 
      JMP MDPRE     NO, THEN WRONG PROGRAM TYPE 
      ADB .8        LOW MAIN ADDRESS
      LDA B,I 
      CLB 
      LSL 6         LOW MAIN PAGE# IN B REG 
      CMB,INB 
      ADB .33       MAX # OF PAGES ALLOWED FOR PROG 
      STB UPRLM 
      LDA IDSGA     GET ID SEGMENT ADDRESS OF PROG
      ADA .28       WORD 29 OF ID SEGMENT 
      LDB A,I       GET CONTENTS
      SZB           EMA PROGRAM?
      JMP EMAE      YES, THEN ERROR 
      INA           POINT TO WORD 29 OF ID SEGMENT
      LDB A,I       HIGH ADDR + 1 OF LARGEST SEGMENT
      ADA N6        POINT TO WORD 24 OF ID SEG
      SZB,RSS       SEGMENTED PROGRAM?
      LDB A,I       NO, THEN HIGH ADDRESS+1 OF MAIN 
      LDA IDSGA     ID SEGMENT ADDRESS
      ADA .22 
      LDA A,I 
      CMA           -(LOW MAIN+1) 
      ADA B         HIGH ADDR + 1 - (LOW MAIN + 1)
      CLB 
      LSL 6 
      ADB .2        #PAGES USED TO RELOCATE PROG + BASE PAGE
      STB A         USE AS LOW LIMIT FOR MODIFYING PROG SIZE
      LDB APRSB     ADDRESS OF PARSE BUFFER 
      ADB .4        CONTAINING # OF PAGES 
      JSB TST#      TEST THE # OF PAGES FOR VALIDITY
UPRLM NOP 
      JMP PGSE      INVALID # OF PAGES
      ADA N1        SUBTRACT 1 TO EXCLUDE BASE PAGE 
      ALF,ALF       # OF PAGES IN BITS 10-14
      RAL,RAL 
      STA TEMP      SAVE #PAGES FOR NOW 
      LDB IDSGA     ID SEGMENT ADDR OF PROG 
      ADB .21       POINT TO WORD 21
      LDA B,I       GET CONTENTS
      AND B1017     101777B - CLEAR # PAGES FROM WORD 21
      ADA TEMP      ADD THE NEW VALUE 
      STA B,I       RESTORE WORD BACK IN ID SEG 
      JMP MDPRM     PROMPT FOR NEXT ENTRY 
* 
MDPRE LDA A16       NO SUCH PROG OR SHORT ID SEG
      JMP *+2 
EMAE  LDA A21       PAGE REQMTS OF AN EMA PROG CANNOT BE MODIFIED 
      JSB ERROR 
      JMP MDPRM 
* 
PGSE  LDA A19       PROGRAM SIZE INCORRECT
      JMP EMAE+1
* 
B17   OCT 17
N6    DEC -6
.8    DEC 8 
B1017 OCT 101777
A21   ASC 1,21
A19   ASC 1,19
NEW   ASC 2,NEW 
MSG44 ASC 10,UNASSIGNED PROGRAMS: 
MSG45 ASC 18,MODIFY PROG PAGE REQMTS?(/E TO END)
MSG46 ASC 6,PNAME,#PAGES
MSG47 ASC 16,ASSIGN PROG PART'NS?(/E TO END)
MSG48 ASC 7,PNAME,PART'N# 
HYPHN ASC 1,- 
IDSGA NOP 
* 
      HED ASSIGN PROGRAMS TO PARTITIONS 
ASNPR LDB .16 
      JSB WRTTY     ASSIGN PROG PART'NS?(/E TO END) 
      DEF MSG47 
      LDB .7
      JSB WRTTY     PNAME,PART'N# 
      DEF MSG48 
ASGNQ CLB,INB 
      JSB QUERY     HYPHEN PROMPT 
      DEF HYPHN 
      JSB END?
      JMP QPERM     YES, DONE WITH PROG ASSIGNMENT
      LDB APRSB 
      INB 
      JSB TNAME     FIND ID SEG ADDRESS FOR PROG
      SEZ           FOUND IT? 
      JMP ASPRE     NO, NO SUCH PROG OR SHORT ID SEG
      STB TEMP      YES, SAVE THE ID SEG ADDRESS
      ADB .14       POINT TO WORD 15 OF ID SEG
      LDA B,I 
      AND B17       GET TYPE
      CPA .2
      RSS 
      CPA .3
      RSS 
      CPA .4
      RSS 
      JMP ASPRE     NEITHER TYPE 2,3, OR 4
      LDB APRSB 
      ADB .4        POINT TO PART'N# VALUE IN PARSE BUF 
      CLA           LOW LIMIT 
      JSB TST#      TEST VALIDITY OF PART'N # 
PRTN# NOP           # OF PARTITIONS DEFINED 
      JMP PARTE     ERROR IN PART'N#
      SZA,RSS       IF PART NO. ZERO, THEN UNASSIGN 
      JMP ASGNU 
      ADA N1        SUBTRACT 1 TO HAVE PART'N # START FROM 0
      STA TEMP1     SAVE PART'N # 
      LDB TEMP      ID SEG ADDRESS
      JSB FIT       DOES THE PROG FIT IN PART'N?
      JMP NOFIT     NO, ERROR 
* 
      LDB TEMP      YES, CHANGE ID SEG WORD 21
      ADB .21 
      LDA B,I 
      AND B777C     MASK OUT RP BIT & PART'N# 
      ADA TEMP1     NEW PART'N #
      ADA BIT15     RP BIT SET
      STA B,I       RESTORE VALUE BACK
      JMP ASGNQ     PROMPT AGAIN FOR NEXT ENTRY 
* 
ASGNU LDB TEMP      ID SEG ADDRESS
      ADB .21       CHANGE WORD 21
      LDA B,I 
      AND B777C     MASK OUT RP BIT AND 
      STA B,I        PUT BACK 
      JMP ASGNQ     GO GET SOMEMORE COMMANDS
* 
ASPRE LDA A16       NO SUCH PROG OR SHORT ID SEG OR NOT TYPE 2,3,4
ASGN1 JSB ERROR 
      JMP ASGNQ 
* 
PARTE LDA A17 
      JMP ASGN1 
* 
NOFIT LDA A18 
      JMP ASGN1 
* 
A16   ASC 1,16
A17   ASC 1,17
A18   ASC 1,18
.21   DEC 21
B777C OCT 77700 
N1    DEC -1
MSG49 ASC 21,NEW MEM CONFIGURATION PERMANENT?(YES/NO) 
/R    ASC 1,/R
* 
      HED MAKE MEMORY RECONFIGURATION PERMANENT 
* 
QPERM LDB .21 
      JSB QUERY     NEW MEM CONFIGURATION PAERMANENT?(YES/NO) 
      DEF MSG49 
      LDA PRSBF+1 
      CPA /R        RESTART MEMORY RE-CONFIGURATION?
      JMP RSTRT     YES 
      CPA YE
      JMP MEMPR     YES 
      CPA NO
      RSS 
      JMP QPERM     ERRORNEOUS RESPONSE, ASK AGAIN
      SJP $EXIT     EXIT THRU $CNFG 
RSTRT SJP $NPGQ     RESTART MEMORY RE-CONFIGURATION 
* 
*  MAKE MEM CONFIGURATION PERMANENT 
*  COPY MAT ON DISC 
MEMPR XLA $SMTB+2 
      SZA           0?
      JMP PR$SM     NO
      XSA $SMTB 
      XSA $SMTB+1 
PR$SM LDA A$SMT 
      LDB .10       LENGTH OF TABLE 
      ADB BIT15 
      SJS $TRTB 
* 
      LDA $MNP      MAX ALLOWABLE PART'NS 
      MPY .7        EACH MAT ENTRY IS 7 WORDS LONG
      STA B         LENGTH OF MAT 
      ADB BIT15 
      LDA $MATA     START ADDRESS OF MAT
      SJS $TRTB     WRITE IT ON DISC
* 
*  COPY ALL ID SEGMENTS TO DISC 
      XLA KEYWD     ADDRESS OF FIRST ID SEG 
      LDA A,I 
      CAX           SAVE THIS VALUE 
      ADA .14       POINT TO WORD 14 OF ID SEGMENT
      LDA A,I       GET CONTENTS
      LSR 4 
      CXB           FIRST ID SEGMENT ADDRESS
      SLA           IS IT A SHORT ID SEGMENT? 
      ADB .11       YES, THEN ADJUST START ADDRESS
      CBX           SAVE THIS VALUE 
      LDA CURKY     GET ID SEGMENT ADDRESS OF LAST ID SEGMENT 
      ADA .14 
      LDA A,I 
      LSR 4 
      LDB CURKY 
      SLA,RSS       SHORT ID SEGMENT? 
      ADB .13       NO
      ADB .19       ADJUST LAST WORD ADDRESS OF ID SEGMENT LIST 
      CXA           ADDRESS OF FIRST ID SEGMENT 
      CMA 
      ADB A         LAST ADDR -START ADDR + 1 
      ADB BIT15     # OF WORDS IN ID SEGMENTS 
      CXA           START ADDRESS OF ID SEGMENTS
      SJS $TRTB     TRANSFER ID SEGMENTS TO DISC
* 
      LDA AMPS2     MAKE $MPS2 PERMANENT
      CCB 
      SJS $TREN 
* 
*  CHANGE VALUES OF $MCHN,$MBGP,$MRTP,$BGFR,$RTFR 
*  AND $CFR ENTRY POINTS ON DISC
* 
      LDA AMCHN     ADDRESS OF $MCHN ENTRY POINT
      CCB 
      SJS $TREN     TRANSFER ENTRY POINT TO CORRESP LOC ON DISC 
      LDA AMBGP 
      CCB 
      SJS $TREN 
      LDA AMRTP 
      CCB 
      SJS $TREN 
      LDA ACFR
      CCB 
      SJS $TREN 
      LDA ABGFR 
      CCB 
      SJS $TREN 
      LDA ARTFR 
      CCB 
      SJS $TREN 
      CCA 
      XSA $GDPG     INDICATE SYSTEM MAP IS CHANGED FOR SAM EXT
      SJP $EXIT     DONE
* 
.13   DEC 13
      HED SUBROUTINES TO READ, WRITE AND PRINT INFO ON SYSTEM CONSOLE 
* 
* 
* 
*  END? - ROUTINE TO DETERMINE IF /E WAS ENTERED AS 
*         A RESPONSE
*  CALLING SEQUENCE:  JSB END?
*  RETURNS:  LOC P IF /E WAS ENTERED
*                P+1 OTHERWISE
* 
* 
END?  NOP 
      LDA PRSBF+1   GET FIRST WORD OF RESPONSE
      CPA /E        IS IT /E? 
      RSS           YES 
      JMP NOTEN 
      LDA PRSBF+2   GET SECOND WORD OF RESPONSE 
      CPA SPACE     2 SPACES? 
      JMP END?,I    YES, THEN RESPONSE IS /E
NOTEN ISZ END?
      JMP END?,I    RESPONSE NOT /E 
* 
/E    ASC 1,/E
* 
*  QUERY - ROUTINE
*  CALLING SEQUENCE: B REG = # OF WORDS IN BUFFER TO DISPLAY
* 
QUERY NOP 
      CCA           SET FLAG TO INDICATE ENTRY THRU QUERY 
      JMP CONTQ 
WRTTY NOP           SECOND ENTRY FOR ROUTINE TO WRITE TO TTY
      LDA WRTTY 
      STA QUERY     SET UP RETURN ADDRESS 
      CLA           CLEAR FLAG TO INDICATE ENTRY THRU WRTTY 
CONTQ STA WFLAG 
      LDA QUERY,I 
      STA QBUFR 
      CLA,INA 
      CAY           LU# IN Y REG
      INA           REQ CODE IS 2 FOR WROTE 
      ADB BIT15     SET BIT 15 IN B REG TO INDICATE CALLING 
      SJS $WRRD     FROM USER MAP 
QBUFR NOP 
      ISZ WFLAG 
      JMP RQUER     RETURN
*     READ RESPONSE 
      CLA,INA       LU #
      CAY           IN Y REG
      LDA B401      REQUEST CODE
      LDB .80       80 WORDS TO READ
      ADB BIT15     INDICATE CALLING FROM USER MAP
      SJS $WRRD 
ARDBF DEF RDBUF 
      BLS           CONVERT TO # OF CHARS READ
      LDA ARDBF 
      JSB $PARS     CALL PARSE BUFFER 
APRSB DEF PRSBF 
RQUER ISZ QUERY 
      JMP QUERY,I   RETURN
* 
.80   DEC 80
B401  OCT 401 
WFLAG NOP 
B1777 OCT 1777
* 
* 
*  WRLST - ROUTINE TO WRITE BUFER ON LIST DEVICE AND THE
*          SYSTEM CONSOLE IF ECHO IS REQUESTED
*  CALLING SEQUENCE:  B REG = BUFFER LENGTH 
*                     JSB WRLST 
*                     DEF BUFR      BUFFER ADDRESS
* 
* 
WRLST NOP 
      STB TEMP4     SAVE LENGTH OF BUFFER 
      LDA WRLST,I   GET BUFFER ADDRESS
      STA CNBF
      STA LSBF
      LDA ECHO      ECHO REQUIRED?
      SZA 
      JMP NECHO     NO
      JSB WRTTY     YES, SEND BUFFER OUT TO CONSOLE 
CNBF  NOP 
* 
NECHO LDA LSTLU     SEND BUFFER OUT TO LIST DEVICE
      CAY 
      LDA B202
      LDB TEMP4 
      ADB BIT15 
      SJS $WRRD 
LSBF  NOP 
      ISZ WRLST 
      JMP WRLST,I   RETURN
* 
B202  OCT 202 
* 
* 
*  TST# - ROUTINE TO TEST VALIDITY OF A GIVEN # 
*  CALLING SEQUENCE:  A REG = LOWER LIMIT OF RANGE FOR #
*                     B REG = POINTER TO 4 SET OF WORDS 
*                             FOR $# IN PARSE BUFFER
*  RETURN:  LOC P IF ERROR RETURN 
*           LOC P+1 IF NORMAL RETURN
*           NUMBER IS IN THE A REG
* 
* 
TST#  NOP 
      CBX           SAVE CONTENTS OF B REG
      LDB B,I       TYPE OF VALUE 
      CPB .1        NUMERIC?
      RSS           YES 
      JMP TSTE      NO, THEN ERROR RETURN 
      CXB           RETRIEVE VALUE OF B REG 
      INB 
      LDB B,I       GET VALUE 
      CMA,INA       -VE OF LOWER LIMIT
      ADA B         VALUE-LOWER LIMIT 
      SSA           VALUE > UPPER LIMIT?
      JMP TSTE      YES, THEN ERROR 
      LDA B 
      CMA,INA 
      ADA TST#,I    UPPER LIMIT-VALUE 
      SSA           VALUE>UPPER LIMIT?
      JMP TSTE      YES, ERROR
      LDA B 
      ISZ TST#      NORMAL RETURN 
TSTE  ISZ TST#
      JMP TST#,I    RETURN
* 
* 
*  ERROR - ROUTINE PRINTS ERROR MESSAGE 
*  CALLING SEQUENCE:  A REG = ERROR# IN ASCII 
*                     JSB ERROR 
* 
ERROR NOP 
      STA ERR00+6 
      LDB .7        LENGTH OF BUFFER
      JSB WRTTY     DISPLAY ON CONSOLE
      DEF ERR00 
      JMP ERROR,I   RETURN
* 
ERR00 ASC 7,CONFIG ERR
* 
* 
*   PRNPR - ROUTINE TO PRINT A LIST OF PARTITION DEFINITIONS
*   CALLING SEQUENCE: JSB PRNPR 
* 
* 
PRNPR NOP 
      LDA $MNP      MAX # OF PARTITIONS 
      CMA,INA 
      STA TEMP      USE AS COUNTER
      CLA,INA 
      STA TEMP3     USE TEMP3 FOR PART'N # COUNTER
      LDA $MATA     START OF MATA ENTRIES 
      STA TEMP1 
PARTL LDA TEMP1,I   CONTENTS OF 1ST WORD OF MAT ENTRY 
      CPA N1        -1? 
      JMP PRNPR,I   YES,RETURN - END OF MAT ENTRIES 
      LDA TEMP3     GET PART'N #
      CCE           CONVERT IT TO ASCII DECIMAL 
      JSB $CVT3 
      ADA .2
      LDA A,I       GET PART'N # IN ASCII 
      STA MSG30+4   SET UP MESSAGE
      LDA TEMP1     NO
      ADA .3        POINT TO WORD 4 
      STA TEMP1 
      LDA A,I       GET CONTENTS
      STA TEMP2     SAVE IT 
      ISZ TEMP1     5TH WORD OF MAT ENTRY 
      LDA TEMP1,I 
      LDB SPACE 
      SSA           R BIT SET?
      LDB COMAR     YES 
      STB MSG30+13  INCLUDE R IN THE MESSAGE
* 
NPGS  AND B1777     # OF PAGES IN PART'N
      INA           ADD BASE PAGE 
      CCE           CONVERT TO ASCII DECIMAL
      JSB $CVT3 
      INA 
      DLD A,I       LAST 4 DIGITS 
      DST MSG30+6   # OF PAGES IN PARTITION 
      ISZ TEMP1     POINT TO WORD 6 
      LDA TEMP1,I 
      LDB BG
      SSA           BG PART'N?
      LDB RT        NO, REAL TIME 
      ISZ TEMP1     7TH WORD
      LDA TEMP1,I   GET CONTENTS
      SZA,RSS       SLW ZERO? 
      JMP RTBGS     YES, THEN NOT A SUBPART 
      LDA TEMP2     GET CONTENTS OF WORD 4
      SSA,RSS       M BIT SET?
      LDB S         NO, THEN SUBPARTITION 
* 
RTBGS STB MSG30+12
      LDB .14       BUFFER LENGTH 
      JSB WRLST     PRINT IT
      DEF MSG30     PART'N XX =  XX PAGES,[(RT,BG OR S) [,R]
      ISZ TEMP1     POINT TO NEXT MAT ENTRY 
      ISZ TEMP3     INCREMENT PART'N #
      ISZ TEMP      INCREMENT -VE COUNTER 
      JMP PARTL     NEXT PARTITION DATA 
      JMP PRNPR,I   RETURN ALL PART'NS DONE 
* 
COMAR ASC 1,,R
MSG30 ASC 14,PART'N     =      PAGES, 
* 
* 
*  PGREQ - ROTUINE TO PRINT REAL TIME AND BACKGROUND
*  PROGRMAS' PAGE REQIUREMENTS
* 
*  CALLING SEQEUNCE : TYPE = 0 FOR REALTIME PROGRAMS
*                          = 1 FOR BACKGROUND PROGRAMS
* 
PGREQ NOP 
      XLA KEYWD     START OF KEYWORD LIST 
      STA TEMP
KEYLP LDA TEMP,I    GET ADDRESS OF AN ID SEGMENT
      SZA,RSS       0?
      JMP PGREQ,I   YES, THEN DONE
      ADA .14       POINT TO WORD 15 OF ID SEG
      LDA A,I       KEYWORDS ARE ADJUSTED TO POINT TO WORD 15 
      AND B27       OF LONG SHORT ID SEGMENTS 
      LDB TYPE
      SZB           LOOKING FOR REALTIME PROGS? 
      JMP BKG       NO, BACKGROUND
      CPA .2        IS THE TYPE 2 FOR REALTIME? 
      JMP PRNPG     YES, THEN PRINT PG REQMTS 
KEYEN ISZ TEMP      NO, THEN LOOK AT NEXT ID SEG
      JMP KEYLP 
* 
BKG   CPA .3        TYPE 3 FOR BG DISC RES PROG?
      JMP PRNPG     YES, PRINT
      CPA .4        BG DISC RESIDENT WITHOUT TABLE AREA II? 
      RSS           YES 
      JMP KEYEN     NO, LOOK AT NEXT ID SEG 
      LDB ASTER     * FOR PROG WITHOUT TABLE AREA II
      RSS 
PRNPG LDB SPACE     NOT A PRIV PROG 
      STB MSG34+8 
      LDA TEMP,I    GET ID SEG ADDRESS
      ADA .12       POINT TO WORD 13
      CAX           SAVE ADDRESS
      DLD A,I       GET FIRST 4 CHARS OF NAME OF PROG 
      DST MSG34     SET UP MESSAGE
      CXA 
      ADA .2        POINT TO WORD 15
      LDA A,I       GET CONTENTS
      AND B1774     MASK UPPER BYTE 
      IOR B40       INSERT BLANK IN LOW BYTE
      STA MSG34+2 
      LDA TEMP,I    ID SEG ADDRESS
      ADA .28 
      LDA A,I       GET CONTENTS OF WORD 29 
      LDB SPACE 
      SZA           EMA PROG? 
      LDB E         YES, THE INSERT E IN MESSAGE
      STB MSG34+9 
      LDA TEMP,I
      JSB PRGSZ     DETERMINE # PAGES REQD BY PROG
      INA           INCREMENT TO INCLUDE BASE PAGE
      CCE 
      JSB $CVT3 
      INA           POINT TO ASCII VALUE
      DLD A,I 
      DST MSG34+3 
      LDA TEMP,I    GET ID SEG ADDR OF PROG 
      ADA .21       POINTO TO WORD 22 OF ID SEG 
      LDA A,I       GET CONTENTS OF WORD 22 OF ID SEG 
      SSA,RSS       RP BIT SET? 
      JMP WRPGR     NO
      AND B77       PROG IS ASSIGNED TO A PART'N
      INA           PART'N # STARTING FROM 1
      CCE           CONVERT TO ASCII DEC
      JSB $CVT3 
      ADA .2
      LDA A,I 
      STA MSG34+14
      LDB .15       LENGTH OF BUFFER
      RSS 
WRPGR LDB .10       WITHOUT PART'N #
      JSB WRLST 
      DEF MSG34     PNAME XXXX PAGES [*] [E] [PART'N XX]
      JMP KEYEN     LOOK FOR NEXT PROGRAM 
* 
ASTER ASC 1, *
B1774 OCT 177400
B27   OCT 27
B40   OCT 40
TYPE  NOP 
MSG34 ASC 15,PNAME      PAGES     PART'N
* 
* 
*  TNAME - SEARCH KEYWORD LIST FOR PROGRAM NAME 
*  CALLING SEQUENCE:  B REG = ADDRESS OF ASCII PROGRAM NAME 
*                     JSB TNAME 
*  RETURNS:  A REG = 0 IF PROGRAM NOT FOUND (E=1) 
*            B REG = ID SEGMENT ADDRESS OF REQUESTED PROGRAM
*            E REG = 0 IF STANDARD ID SEGMENT 
*            E REG = 1 IF SHORT ID SEGMENT OR NOT FOUND 
* 
* 
TNAME NOP 
      STB TEMP3     ADDRESS OF NAME 1 AND 2 
      INB           INCREMENT TO CHAR 3 AND 4 ADDR
      STB TEMP4     SAVE IT 
      INB           INCR TO CHAR 5 ADDR 
      LDA B,I       ASCII NAME CHAR 5 AND X 
      AND B1774     MASK OFF X
      STA TEMP5 
      SZA           IF NULL CHAR. FORCE ERROR RETURN
      XLA KEYWD 
      STA TEMP
TN005 LDA TEMP,I    CHECK IF AT END OF LIST 
      CCE,SZA,RSS 
      JMP TNAME,I   END OF LIST RETURN
      ADA .12 
      LDB A,I       ID SEG ASCII NAME CHARS 1 AND 2 
      CPB TEMP3,I   COMPARE WITH REQUESTED CHAR 1,2 
      INA,RSS       COMPARES
      JMP TN030     DOES NOT COMPARE-GO TO NEXT PROG
      LDB A,I       ID SEG ASCII NAME CHARS 5,X 
      CPB TEMP4,I   COMPARE WITH REQUESTED CHARS 3,4
      INA,RSS       COMPARES
      JMP TN030     DOES NOT COMPARE-GO TO NEXT PROG
      LDA A,I       ID SEG ASCII NAME CHARS 5,X 
      STA B         SAVE FOR SHORT ID TEST
      AND B1774     MASK OFF X
      CPA TEMP5     COMPARE CHAR 5
      JMP TN040     COMPARES-SO PROGRAM FOUND 
* 
TN030 ISZ TEMP      INCREMENT KEYWORD ADDRESS 
      JMP TN005     GO TO COMPARE CHARS 
TN040 LSR 4         MOVE SHORT ID BIT TO LEAST B
      ERB           SET E FOR RETURN
      LDB TEMP,I    LOAD B WITH ID SEG ADDRESS
      JMP TNAME,I   EXIT
* 
* 
*  SETM - ROUTINE TO SET MEMORY TO A GIVEN VALUE
*  CALLING SEQUENCE:  A REG = VALUE 
*                     B REG = # OF LOCATIONS TO CHANGE
*                     JSB SETM
*                     DEF LOC    STARTING LOCATION
* 
* 
SETM  NOP 
      CAX           SAVE VALUE OF A  REG IN X 
      LDA SETM,I    STARTING LOC
      STA TEMP      ADDRESS OF LOC
      ISZ SETM
      CMB,INB       -VE COUNT 
      CXA           VALUE IN A
SETLP STA TEMP,I    STORE VALUE 
      INB,SZB,RSS   INCREMENT COUNTER 
      JMP SETM,I    RETURN
      ISZ TEMP      POINT TO NEXT MEM LOC 
      JMP SETLP 
* 
* 
*  FIT - ROUTINE TO TEST IF GIVEN PROGRAM CAN 
*  FIT INTO THE PARTITION # PASSED AS PARAMETER 
*  CALLING SEQUENCE:  A REG = PART'N # STARTING AT 0
*                     B REG = ID SEG ADDRESS
*                     JSB FIT 
*  RETURNS:  LOC P IF PROGRAM DOES NOT FIT IN PART'N
*            LOC P+1 IF THE PROGRAM DOES FIT
* 
FIT   NOP 
      STB TEMP4     SAVE ID SEGMENT ADDRESS 
      MPY .7        GET ADDRESS OF PART'N ENTRY IN MAT
      ADA $MATA     ADDRESS OF MAT
      LDB A,I 
      SSB           IS PART'N DEFINED?
      JMP FIT,I     NO, THEN ERROR RETURN 
      ADA .4        WORD 5 OF MAT ENTRY 
      LDB A,I 
      ELB,CLE,ERB   CLEAR R BIT IF SET
      STB TEMP5     SAVE # OF PAGES IN PART'N 
      LDA TEMP4     GET ID SEG ADDRESS OF PROG
      JSB PRGSZ     FIND # PAGES REQD BY THIS PROG
      CMA,INA 
      ADA TEMP5     # PAGES IN PART'N - # PAGES REQD BY PROG
      SSA           PROGRAM FITS? 
      JMP FIT,I     NO, THEN ERROR RETURN 
      ISZ FIT       YES 
      JMP FIT,I     RETURN TO LOC P+1 
* 
* 
*  PRGSZ - ROUTINE TO DETERMINE # PAGES REQD BY 
*          A PROGRAM NOT INCLUDING BASE PAGE
*  CALLING SEQUENCE:  A REG = ID SEGMENT ADDRESS
*                     JSB PRGSZ 
*  RETURNS:  A REG = # OF PAGES REQD. BY PROG 
*            B REG = 0 IF NON-EMA PROGRAM 
*                  = -1 IF EMA PROGRAM
* 
* 
PRGSZ NOP 
      STA TEMP3     SAVE ID SEG ADDRESS FOR LATER USE 
      ADA .21 
      LDA A,I       GET WORD 21 OF ID SEG 
      ALF           # OF PAGES IN LOW BITS
      RAL,RAL 
      AND B37       # OF PAGES REQUIRED BY PROG 
      CAX           SAVE VALUE
      LDA TEMP3     GET ID SEG ADDRESS
      ADA .28       EMA PROG? 
      LDB A,I 
      SZB,RSS 
      JMP NOEMA     NO
      CLA           YES, EMA PROG 
      RRL 6         GET ID SEG EXT #
      STB TEMP3     SAVE EMA SIZE VALUE LEFT IN B REG 
      ADA $IDEX     ID SEG EXT ADDRESS
      LDA A,I       ADDRESS OF FIRST WORD OF ID SEG EXT 
      LDA A,I       CONTENTS OF FIRST WORD OF ID SEG EXT
      AND B37       GET BITS 0-4 - MSEG SIZE
      CMA,INA 
      LDB TEMP3     ROTATE VALUE SAVED IN TEMP
      BLF,BLF 
      RBL,RBL       TO GET EMA SIZE 
      ADA B           - MSEG SIZE 
      CXB 
      ADA B            + # PAGES IN PROGRAM 
      CCB           SET B TO INDICATE EMA PROG
      JMP PRGSZ,I   RETURN
NOEMA CXA           # PAGES REQUIRED BY PROGRAM 
      CLB           B = 0 TO INDICATE NON-EMA PROG
      JMP PRGSZ,I   RETURN
* 
      END $CNFX 
                                                                                                                                                                                                                    