/ P?S/8 CORE COMMAND / LAST EDIT: 25-SEP-1985 15:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / DEFINITION OF MONITOR CORE SIZE WORD CONVENTIONS: / LOCATION 007611 CONTAINS THE CURRENT MEMORY CONFIGURATION OF THE SYSTEM / FORMATTED AS FOLLOWS: / 0 1 2 - 3 4 5 - 6 7 8 - 9 10 11 / J C I / PCS BITS: PHYSICAL CORE SIZE. THESE THREE BITS ARE SET TO THE HIGHEST / FIELD AVAILABLE IN THE PHYSICAL MEMORY SPACE OF FIELD 0-7 / BY THE MONITOR'S ONCE-ONLY CODE AT BOOTSTRAP TIME. / MCS BITS: MAXIMUM CORE SIZE. THESE THREE BITS ARE SET TO THE CURRENT / MAXIMUM CORE SIZE. THIS REPRESENTS ALL FIELDS FROM 0 THROUGH / MCS WHICH ARE AVAILABLE WITH NO RESTRICTIONS (07600-07777 / ARE NEVER AVAILABLE!). IF THE CONSOLE OVERLAY IS NOT PRESENT, / THIS WILL BE IDENTICAL TO THE PHYSICAL CORE SIZE, UNLESS THE / SYSTEM IS OF THE "ADJUSTABLE" TYPE, IN WHICH CASE THE VALUE / WILL BE (PCS)-1. INSTALLATION OF THE CONSOLE OVERLAY WILL / LOWER THIS VALUE BY ONE OR MORE FIELDS. / LCS BITS: LOGICAL CORE SIZE. THIS DEFINES THE CURRENT LOGICAL CORE / SIZE LIMITATION IMPOSED BY THE USER ON SYSTEM AND OTHER / PROGRAMS BY INVOKING THE "CORE" COMMAND (OR EQUIVALENT). / THE LCS VALUE CAN VARY BETWEEN 0 AND MCS. THIS VALUE CAN BE / OVERRIDDEN IN CERTAIN CASES (SEE BELOW). / J BIT: SYSTEM ADJUSTABILITY BIT. THIS BIT INDICATES THE PRESENCE / OF A SYSTEM HANDLER WHICH REQUIRES EXTENDED MEMORY TO FUNCTION. / THE SYSTEM HANDLER WILL NOT ONLY OCCUPY 07600-07777 AS USUAL, / BUT ALSO 6000-7777 IN THE HIGHEST FIELD AVAILABLE (1-7). THE / MCS VALUE WILL BE PCS-1 AT BEST IN THIS SITUATION. IF A / CONSOLE OVERLAY IS PRESENT, IT CAN OCCUPY 0000-5777 OF THIS / SAME FIELD IF NECESSARY; ALL CONSOLE OVERLAYS ARE DESIGNED / TO HANDLE THIS SITUATION. / C BIT: CONSOLE OVERLAY BIT. THIS BIT INDICATES THE PRESENCE OF A / CONSOLE OVERLAY IN FIELD MCS+1 (AND POSSIBLY HIGHER). ALL / SYSTEM (AND OTHER) PROGRAMS WILL USE LOGICAL UNIT RECORD / HANDLING (TTY:, LPT:) INSTEAD OF PHYSICAL (DEVICE 03, 04, 66) / HANDLING IF THIS BIT IS SET. THIS BIT WILL ALSO INHIBIT / ATTEMPTS TO OVERRIDE THE MCS BITS TO OBTAIN MORE MEMORY. / I BIT: CONSOLE INTERRUPT (<^C>) BIT. THIS BIT IS SET BY SYSTEM / (AND OTHER) PROGRAMS TO INDICATE THE DETECTION OF <^C> BY / MEANS OTHER THAN PHYSICAL DEVICE 03 OR LOGICAL CONSOLE / HANDLING FOR THE BENEFIT OF "NON-OVERLAYING" BOOTSTRAP-TYPE / SYSTEM HANDLERS. THIS ALLOWS MONITOR CONFIGURATIONS WITH / INCOMPATIBLE CONSOLE HARDWARE (DECMATE) AS LONG AS THE / ASSOCIATED SYSTEM HANDLER IS OF THE "NON-OVERLAYING" TYPE / (SUCH AS PQSRXX). THIS BIT IS SET BY ANY PROGRAM RUNNING / UNDER THE MONITOR SYSTEM AND LOOKED AT AND CLEARED BY THE / KEYBOARD MONITOR WHEN IT IS RELOADED. THIS BIT SHOULD NOT / BE USED FOR ANY OTHER PURPOSE AS IT COULD CAUSE UNPREDICTABLE / RESULTS IF FALSELY SET. N. B. THIS BIT WAS DELIBERATELY / CHOSEN AS BIT[11] TO FACILITATE SETTING IT WITH "ISZ I (7611)" / AS THIS WORD CAN NEVER BE 7777 AND THUS CAN'T SKIP. / OVERRIDING THE CORE SIZE. / IN SITUATIONS SUCH AS "PAL/C", THE SYSTEM PROGRAM ATTEMPTS TO OBTAIN MORE / MEMORY THAN IS INDICATED BY THE LCS BITS. THE FOLLOWING RULES APPLY: / 1) IF MCS>LCS THEN RAISE THE EFFECTIVE VALUE OF LCS BY OBTAINING / AN EXTRA FIELD(S) UP TO THE LIMIT OF MCS. / 2) IF MCS=LCS, THEN CHECK THE "C" BIT. IF THIS IS SET, NO / ADDITIONAL MEMORY IS AVAILABLE. IF IT IS OFF THEN ADDITIONAL / MEMORY (0000-5777 ONLY) IS AVAILABLE IN FIELD MCS+1. / INSTALLING AN OVERLAY. / THE CORE SIZE WORD SHOULD BE MANIPULATED AS FOLLOWS: / 1) IF PCS=MCS=LCS=0 THEN NO EXTRA MEMORY IS AVAILABLE. / 2) IF THE "C" BIT IS SET, THE OVERLAY CAN'T BE INSTALLED AS / ANOTHER OVERLAY IS ALREADY INSTALLED! / 3) IF PCS>MCS, THEN N FIELDS (N=PCS-MCS) ARE AVAILABLE FROM / MCS+1 THROUGH PCS. / 4) TO RESERVE N FIELDS, SET MCS TO MCS-N. ENSURE THAT LCS IS / SET TO LESS OR EQUAL TO THE NEW VALUE OF MCS. / 5) SET THE "C" BIT TO INDICATE INSTALLATION OF THE OVERLAY. / MONITOR INTERACTION WITH THE CORE SIZE WORD. / THE MONITOR'S INITIALIZATION ROUTINE ALWAYS SETS THE PCS BITS OF THE CORE / SIZE WORD. IF THE "C" BIT IS SET, ALL OTHER BITS ARE HELD CONSTANT. IF THE / "J" BIT IS CLEAR, THE MCS BITS WILL BE SET TO THE PCS BITS. IF THE "J" BIT / IS SET, THE MCS BITS WILL BE SET TO PCS-1. WHEN THE MONITOR CHECKS FOR <^C> / FOR VARIOUS PURPOSES, THE "I" BIT WILL BE LOOKED AT AND THEN CLEARED AS ONE / OF SEVERAL POSSIBLE <^C> INDICATORS. / OPERATION OF THE "CORE" COMMAND: / OPTION FUNCTION / ------ -------- / PRINT CURRENT CONFIGURATION. / "A[LL]" THE LCS IS SET TO THE MCS. PRINT NEW CONFIGURATION. / N (0=N THEN LCS IS SET TO N. PRINT THE NEW / CONFIGURATION. IF MCS / LOGICAL: / MAXIMUM: / SYSTEM LIMIT: (IF "J" BIT SET). / FIELD RESERVED BY OVERLAY (IF "C" BIT SET AND PCS=MCS+1). / FIELDS - RESERVED BY OVERLAY (IF "C" BIT SET AND PCS>MCS+1). / ANY VALUE OF 4K IS PRECEEDED BY "ONLY." ANY VALUE OF 32K HAS "!" AFTER IT. / "CORE" COMMAND ACTION TAKEN REGARDING THE CORE SIZE WORD. / THE PCS BITS ON THE SYSTEM DEVICE ARE CLEARED WHEN UPDATING THE CORE SIZE / WORD. THE MEMORY-RESIDENT COPY IS COMPLETELY UPDATED TO ACCOMODATE / NON-OVERLAYING BOOTSTRAP SYSTEMS. // P?S/8 MONITOR CROSS-EQUATES. CATCORE=0150 /USED AS CONSTANT 7000 CTCPZAP=2363 /<^C> PRINT ZAP CTCZAP= 2365 /<^C> ZAP GETHAF= 0104 /GET A HALF-WORD ROUTINE LINENO= 0062 /NUMERICAL INPUT POINTER LNOPRT= 0105 /NUMERICAL OUTPUT POINTER L15= 0041 /CONSTANT 0015 L40= 0046 /CONSTANT 0040 L7= 0177 /CONSTANT 0007 L7600= 0113 /CONSTANT 7600 L7740= 0136 /CONSTANT 7740 L7766= 0012 /CONSTANT 7766 L7770= 0040 /CONSTANT 7770 NAMPRT= 0066 /NAME PRINT POINTER PBEGIN= 0071 /POINTER TO BEGIN PBUTIO= 0161 /POINTER TO BOOTSTRAP UNIT I/O ROUTINES PRINT= 0107 /PRINT ROUTINE POINTER PR6BIT= 0047 /POINTER TO PRINT 6 BIT ROUTINE PSCRSIZ=0170 /POINTER TO CORE SIZE WORD RADXSW= 0015 /RADIX SWITCH SBOOT= 7600 /BOOTSTRAP LOCATION SCRIBE= 0171 /POINTER TO SCRIBE ROUTINE SCRSIZE=7611 /CORE SIZE WORD SWAPIT= 0423 /SWAP ROUTINE WRITE= 4000 /SYSIO WRITE BIT XGETHAF=0444 /GET HALF ROUTINE XPRTNAM=1102 /PRINT NAME ROUTINE ZROFIL= 0241 /ZERO SUPPRESSION LOCATION // ADDITIONAL DEFINITIONS. CORBUFF=6000 /CORE BUFFER JMPIC= JMP I . /JUMP INDIRECT INSTRUCTION DEFINITION NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7777= CLA CMA /LOAD AC WITH 7777 SRINST= JMP I PBEGIN/[BEGIN] /INSTRUCTION DEFINITION PAGE 14 /OVER FILE AREA IFNZRO .&177 CORE= . /CORE SYSTEM STARTS HERE CORE, 0707/NOP /HERE IN CASE WE ARE CHAINED TO TAD I (CTCZAP) /GET <^C> INSTRUCTION TAD (-SRINST) /COMPARE TO POTENTIAL VALUE SZA CLA /SKIP IF IT MATCHES JMP COROK /JUMP IF NOT TAD JMPIL7600/(JMP I L7600/[SBOOT])/GET BOOTSTRAPPING INSTRUCTION DCA I (CTCZAP) /ZAP IT IN NL0002 /SET "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SZA CLA /SKIP IF OFF DCA I (CTCPZAP) /ELSE PREVENT EXTRA <^C> COROK, TAD (XGETHAF&177+JMPIC) /GET JUMP INSTRUCTION DCA I (SWAPIT+11) /STORE OVER MONITOR TAD (NEXT) /SETUP OUR NEXT ADDRESS DCA I GETHAF/[XGETHAF] /SO IT WILL COME BACK TO US JMP I (SWAPIT) /GO SWAP IT BACK IN AND THEN COME BACK TO US NEXT, TAD L7766/[-12] /SET RADIX TO MCS, DCA RADXSW /DECIMAL REQSIZE,TAD I PSCRSIZE/[SCRSIZE] /GET THE CORE SIZE WORD CLL RTL;RTL /MOVE PCS BITS TO AC[9-11] AND L7/[7] /ISOLATE PCS BITS DCA I (PCS) /SAVE THEM FOR OTHERS TAD I PSCRSIZE/[SCRSIZE] /GET THE CORE SIZE WORD AGAIN RTR;RTR;RTR /MOVE MCS BITS TO AC[9-11] AND L7/[7] /ISOLATE MCS BITS DCA MCS /SAVE THEM FOR OTHERS JMS I GETHAF/[XGETHAF] /GET DELIMITER SNA /? JMP I (PRTMEMORY) /YES, JUST AN INQUIRY CIA /NEGATE THE CHARACTER CMA /WAS IT AN "A"? SNA CLA /SKIP IF NOT JMP GETALL /YES, GET AS MUCH AS POSSIBLE JMS I LINENO/[XLINENO] /GET NUMERIC ARGUMENT JMP MEMERR /NON-DIGIT: ABORT DCA REQSIZE /SAVE VALUE TAD REQSIZE /GET REQUESTED SIZE AND L7770/[7770] /JUST BAD BITS SZA CLA /SKIP IF LESS THAN 10 JMP MEMERR /JUMP IF NOT JMP SETMEM /IT'S OK, PERFORM IT GETALL, TAD MCS /SET REQUEST DCA REQSIZE /SIZE TO MCS SETMEM, TAD MCS /DETERMINE IF CIA /REQUESTED AMOUNT TAD REQSIZE /IS IN RANGE SMA SZA CLA /SKIP IF SO JMP MEMERR /NO, ABORT TAD REQSIZE /GET REQUEST SIZE CLL RTL;RAL /MOVE TO AC[6-8] DCA REQSIZE /SAVE BACK JMS I PBUTIO/[BUTIO] /\ CORBUFFER / \READ IN A COPY OF 1^100 / /BLOCK 0 OF SYSTEM DEVICE 0000 // TAD I PSCRSIZE/[SCRSIZE] /GET CURRENT CONFIGURATION AND CORE/(0707) /MASK OUT OLD LCS AND PCS TAD REQSIZE /GET REQUEST DCA I (SCRSIZE-SBOOT+CORBUFF) /STORE INTO COPY OF BLOCK 0 JMS I PBUTIO/[BUTIO] /\ CORBUFFER / \REWRITE UPDATED 1^100+WRITE / /BLOCK 0 BACK 0000 // TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD BACK AND CATCORE/[7000] /JUST PCS BITS TAD I (SCRSIZE-SBOOT+CORBUFF) /ADD ON COMPOSITE DCA I PSCRSIZE/[SCRSIZE] /SAVE IN SYSTEM I/O WORD JMP I (PRTMEMORY) /AND PRINT THE CONFIGURATION MEMERR, JMS I SCRIBE/[XSCRIBE] /COMPLAIN FIRST BDCMSG /BEFORE ABORTING JMPIL76,JMP I L7600/[SBOOT] /BOOTSTRAP PHYMSG, TEXT "PHYSICAL: ";0 LOGMSG, TEXT "LOGICAL: " SYLMSG, TEXT "SYSTEM LIMIT: ";0 STLMSG, TEXT " RESERVED BY OVERLAY." BDCMSG, TEXT "ILLEGAL MEMORY REQUEST!" PAGE PRTMEM, TAD (SKP) /\ CTEMP, DCA I (ZROFIL) / \ELIMINATE LEADING ZEROES TAD (SKP) / /AND TRAILING DCA I (ZROFIL+13) // DCA I (XPRTNAM+5) /DESTROY LENGTH CHECK JMS I PR6BIT/[XPR6BIT] /DO A , TAD PCS /GET PHYSICAL SIZE JMS CPRINT /PRINT IT (CPRINT CLEANS UP) TAD I PSCRSIZE/[SCRSIZE] /GET CONFIGURATION WORD CLL RTR;RAR /MOVE LCS BITS TO LOW-ORDER JMS CPRINT /PRINT IT TAD I (MCS) /GET CURRENT MAXIMUM JMS CPRINT /PRINT IT TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AGAIN AND (4) /JUST "J" BIT SNA CLA /SKIP IF ADJUSTABLE SYSTEM JMP NOMAX /JUMP IF NOT NL7777 /BACKUP TAD PCS /USE PCS-1 JMS CPRINT /PRINT THE SYSTEM LIMIT NOMAX, NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE BIT SNA CLA /CONSOLE OVERLAY ACTIVE? JMP I L7600/[SBOOT] /NO, EXIT JMS I NAMPRT/[XPRTNAM] /PRINT INTRODUCTORY FLDMSG /MESSAGE TAD PCS /\ CIA / \DETERMINE NUMBER TAD I (MCS) / /OF RESERVED FIELDS IAC // SNA CLA /SKIP IF MORE THAN ONE RESERVED JMP CP1FLD /JUST ONE JMS I NAMPRT/[XPRTNAM] /MAKE THE MESSAGE ESSMSG /PLURAL TAD I (MCS) /REGAIN MCS IAC /BUMP TO FIRST RESERVED FIELD JMS I LNOPRT/[XLNOPRT] /PRINT IT TAD L15/["--" ] /GET - CP1FLD, TAD L40/[" &177] /ONE FIELD ENTRY POINT JMS I PRINT/[XPRINT] /PRINT A TAD PCS /GET UPPER LIMIT JMS I LNOPRT/[XLNOPRT] /PRINT IT JMS I SCRIBE/[XSCRIBE] /PRINT TRAILER PART STLMSG /OF MESSAGE JMP I L7600/[SBOOT] /AND BOOTSTRAP CPRINT, .-. /PRINT A CORE STATISTIC ROUTINE AND L7/[7] /CLEAN UP IRRELEVANT BITS DCA CTEMP /SAVE FOR 32K TEST TAD I CMSGPTR /GET POINTER TO NEXT MESSAGE DCA .+2 /SAVE IN CALL JMS I NAMPRT/[XPRTNAM]/CALL NAME PRINTER .-. /MESSAGE POINTER FILLED IN ISZ CMSGPTR /BUMP FOR NEXT TIME TAD CTEMP /GET VALUE BACK SZA /4K? JMP CPR2 /NO, JUST PRINT VALUE JMS I NAMPRT/[XPRTNAM]/ELSE CONSOLE HIM ONLYMSG /"ONLY " CPR2, CLL IAC /MAKE ORIGIN ONE RTL /*4 (FOR "K"'S) DCA CTEMP /SAVE BACK TAD CTEMP /GET THE VALUE IN KILOWORDS JMS I LNOPRT/[XLNOPRT]/PRINT IT TAD ("K&177) /GET AN ASCII "K" JMS I PRINT/[XPRINT] /PRINT TO INDICATE UNITS TAD CTEMP /GET VALUE AGAIN TAD L7740/[-40] /-32(10) SZA CLA /SKIP IF 32K JMP .+3 /OMIT THE "!" TAD ("!&177) /GET A "!" JMS I PRINT/[XPRINT] /INDICATE AMAZEMENT JMS I PR6BIT/[XPR6BIT]/, SEQUENCE JMP I CPRINT /EXIT TO CALLER CMSGPTR,.+1 /POINTER FOR SEQUENTIAL MESSAGES PHYMSG /PHYSICAL AMOUNT LOGMSG /LOGICAL AMOUNT MAXMSG /SYSTEM MAXIMUM SYLMSG /SYSTEM LIMIT PCS, .-. /WORKING COPY OF PCS MAXMSG, TEXT "MAXIMUM: " ONLYMSG,TEXT "ONLY " FLDMSG, TEXT "FIELD" ESSMSG, TEXT "S ";0 $ /THAT'S ALL FOLK!