ASMB,R,Q,C ** DISP4 -- RTE-IV DISPATCHER MODULE ** HED DISP4 -- RTE-IV DISPATCHER * DATE: 2/16/77 * NAME: DISP4 * SOURCE: 92067-18015 * RELOC: PART OF 92067-16014 * PGMR: G.A.A.,L.W.A.,D.L.S.,E.J.W.,C.M.M. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 DISP4,0 92067-16014 REV.1926 790221 * ***** AMD ***** JUL,73 GAA ***** GSD ***** FEB,77 EJW * * DISPATCHER ENTRY POINT NAMES * ENT $RENT,$BRED,$ZZZZ,$XCQ ENT $ALDM,$DMAL,$SMAP,$PRCN ENT $XDM,$MAXP,$UNPE ENT $LOW,$HIGH * ENT $BG1,$BG2,$BG3,$BG4,$BG5 ENT $RT1,$RT2,$RT3,$RT4,$RT5 ENT $MM1,$MM2,$MM3,$MM4,$MM5 * * DISPATCHER EXTERNAL REFERENCE NAMES * EXT $MRMP,$MATA,$MPFT,$BGFR,$RTFR EXT $EMRP,$RSRE,$ABRT,$XSIO,$DREQ EXT $WATR,$TIME,$DREL,$TRRN,$SZIT EXT $ABRE,$LIST,$RTST,$SGAF,$ERMG EXT $MCHN,$MBGP,$MRTP,$CFR,$WORK EXT $IOCL,$IRT,$IDLE,$DVPT,$IDEX,$CMST EXT $SDA,$SDT2,$MNP,$XDMP EXT $ABRE,$LIST,$RTST,$SGAF,$SCXX * * SKP * MAT ENTRY * * WORD DESCRIPTION * !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--! * !15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00! * !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--! * ! ! ! ! ! ! ! * MLNK 0 !00! LINK TO NEXT ENTRY IN LIST ! * ! ! ! ! ! ! ! * !--!--------!--------!--------!--------!--------! * ! ! ! ! ! ! ! * MPRIO 1 !00! PRIORITY OF PARTITION OCCUPANT ! * ! ! ! ! ! ! ! * !--!--------!--------!--------!--------!--------! * ! ! ! ! ! ! ! * MID 2 !00! ID SEGMENT ADDRESS OF OCCUPANT ! * ! ! ! ! ! ! ! * !--!--------!--------!--------!--------!--------! * ! ! ! ! ! ! ! * MADR 3 ! M!** D ******** BEGIN PHYSICAL PAGE# ! * !@@! ! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@! * !--!--------!--------!--------!--------!--------! * ! ! ! ! ! ! ! * MLTH 4 ! R! C *********** NUMBER OF PAGES IN PTTN ! * !@@! ! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@! * !--!--------!--------!--------!--------!--------! * ! ! ! ! ! ! ! * MRDFL 5 !RT!***********************************! STATUS ! * !@@! ! ! ! ! ! * !--!--------!--------!--------!--------!--------! * ! ! ! ! ! ! ! * MSUBL 6 !00! POINTER TO NEXT SUBPTTN OR 0 ! * !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@! * !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--! * !15!14 13 12!11 10 09!08 07 06!05 04 03!02 01 00! * !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--! * * "@" MARKS THE PARTS WHICH ARE SET AT GENERATION TIME: * "*" MARKS THE RESERVED PARTS * * ACTIVITY PART'N STATUS ID STATUS *................................................................ * PROGRAM BEING LOADED 0 2 * PROGRAM IS IN PARTITION 1 1-6 * SWAPPING OUT 2 1-6 * SEGMENT BEING LOADED 2 2 * PROGRAM IS SWAPPED OUT 3 1-6 * SUBPARTITIONS BEING SWAPPED OUT 4 1-6 * SUBPARTITIONS ALL SWAPPED OUT 5 1 * SKP * ******************************************************************** * * THE DISP MODULE OF THE REAL TIME EXECUTIVE PERFORMS: * * 1. IDLE LOOP IF NO PROGRAMS ARE SCHEDULED OR CAN'T BE EXECUTED * 2. SWITCHES PROGRAM EXECUTION SUCH THAT THE HIGHEST * * PRIORITY EXECUTABLE PROGRAM EXECUTES. * * 3. SETS THE FENCE REGISTER ACCORDING TO PROGRAM TYPE. * * 4. LOADS, SWAPS, AND EXECUTES DISC RESIDENT PROGRAMS * SPC 2 ABORT LDA B,I GET POSSIBLE NEXT PGM STA $ZZZZ AND SET IT FOR ABORT CLA CLEAR THE XSUSP ADDRESS STA B,I FOR THE NEXT START ADB DM8 BACK UP TO ID-SEG ADDRESS * CPB BPOWN DOES THIS GUY OWN THE CPU ? STA BPOWN YES, BUT NOT ANY MORE. * STB A SAVE THE ID-SEG. ADDRESS STB TMP A FEW TIMES ADA D14 CHECK IF DISC RES. LDA A,I PROGRAM AND D15 STA ATMP SAVE TYPE FOR LATER CHECK CPA D1 IS IT DISC RES. PROG? RSS NO, SKIP. JSB DREL RELEASE ANY SWAP TRACKS * LDA ATMP GET PROGRAM TYPE CPA D1 IF MEM RES A <> 0 RSS CLA IF DISC RES A = 0 * LDB TMP RELEASE ANY RE-ENTRENT JSB $ABRE MEMORY PROGRAM OWNS. LDB TMP RELEASE ANY STRING STORAGE JSB $RTST MEMORY THAT THE PROGRAM OWNS. * LDB TMP JSB $WATR SCHEDULE ANYONE WAITING LDB TMP LDA B ADA D20 STA TEMP SAVE ADDR OF FLAG WORD LDA A,I ALF,ALF GET FLAG WORD SLA ANY RESOURCES HELD? JSB $TRRN YES, RELEASE THEM * CLA IF CURRENTLY LDB TEMP,I STA TEMP,I (CLEAR FLAG WORD) SLB IS HE SERIALLY REUSABLE JMP $XCQ YES,LEAVE IN MEMORY * LDA ATMP GET TYPE CPA D1 IS IT MEM RES? JMP $XCQ YES,DONT FOOL WITH PARTITION * LDA TMP GET ID SEG ADR JSB MATEN GO SET UP POINTERS LDB MID,I GET PARTITION OCCUPANT WORD CPB TMP IS PROG STILL RESIDENT? RSS YES JMP $XCQ NO, DONT BOTHER WITH IT * LDA MLNK,I DID PTTN GET UNDEFINED INA,SZA,RSS BY A PARITY ERROR? JMP X0154 YES. KILL POSSIBLE I/O TRANSFER * LDA MADR,I SSA IS IT A MOTHER PTTN? JMP XN353 YES, MOVE PTTN FROM ALLOC TO FREE * LDB MFLGS SSB IS IT A REAL TIME PARTITION? JMP XN253 YES, RT. MOVE PTTN FROM ALLOC TO FREE JMP XN153 NO, BG. MOVE PTTN FROM ALLOC TO FREE SPC 2 DM8 DEC -8 D17 DEC 17 SPC 2 $MAXP NOP RE-ESTABLISH MAXIMUM PTTN LIST SIZE WORDS CLA INIT ALL MAX SIZE WORD TO ZERO STA $MCHN STA $MRTP STA $MBGP STA NUMCH INIT ALL PTTN COUNTS BY TYPE TO ZERO STA NUMBG STA NUMRT LDA $MNP CMA,INA,SZA,RSS JMP MXPDN IN CASE 0, EXIT DONE * STA CNT SAVE NEG NUMBER OF PTTN ENTRIES LDA $MATA START AT FIRST PTTN * MXPSL JSB MATAD SET UP PTRS TO MAT ENTRY LDA MLNK,I INA,SZA,RSS IS THIS ENTRY UNDEFINED? JMP MXPNX YES, CHECK NEXT PTTN * LDA MADR,I SSA IS THIS A MOTHER PTTN? JMP MXPCH YES, INCRE COUNT * LDA MFLGS SSA IS THIS A RT PTTN? JMP MXPRT YES, INCRE COUNT * LDB DMBGP SET ADDR OF BG POINTER ISZ NUMBG INCRE COUNT OF BG PTTNS JMP MXPSZ CHECK PTTN SIZE FOR MAX * MXPCH LDB DMCHN SET ADDR OF MOTHER PTTN PTR ISZ NUMCH INCRE COUNT OF CH PTTNS JMP MXPSZ CHECK PTTN SIZE FOR MAX * MXPRT LDB DMRTP SET ADDR OF RT POINTER ISZ NUMRT INCRE COUNT OF RT PTTNS * MXPSZ LDA MLTH,I RAL,CLE,ERA SEZ IS THIS PTTN RESERVED? JMP MXPNX YES, SKIP MAX SIZE CHECK * AND B1777 CHECK LENGTH OF THIS PTTN STA TEMP AGAINST MAX SIZE SO FAR CMA,INA ADA B,I SSA,RSS IS THIS ONE LARGER? JMP MXPNX NO, TRY NEXT PTTN * LDA TEMP YES, SET UP NEW MAX STA B,I * MXPNX LDA MLNK ADA MATSZ INCRE TO NEXT PTTN MAT ENTRY ISZ CNT DONE YET? JMP MXPSL NO, DO NEXT PTTN * MXPDN LDA NUMCH YES, DONE SZA,RSS SET THE PROPER FREE LIST PTR STA $CFR TO ZERO IF THE LIST IS EMPTY LDA NUMRT FOR THE LSTIN SUBROUTINE SZA,RSS STA $RTFR LDA NUMBG SZA,RSS STA $BGFR JSB LSTIN RE-INIT MAT LIST PTRS JMP $MAXP,I RETURN * * NUMCH NOP 0 AT BOOT UP NUMBG NOP 0 AT BOOT UP NUMRT NOP 0 AT BOOT UP DMCHN DEF $MCHN+0 DMBGP DEF $MBGP+0 DMRTP DEF $MRTP+0 * * * INITIALIZE PARTITION MEMORY ALLOCATION TABLE ENTRY LIST POINTERS * CALLED BY BOTH DISPATCHER'S STARTUP CODE AND $MAXP * LSTIN NOP LDA $RTFR IS THERE A RT LIST OR CPA NUMRT WERE ANY IN ALLOC' LIST WHEN A SZA PARITY ERROR OCCURRED? JMP LSTI1 YES, CHECK BG LIST * LDA ABGFR NO, SET UP RT TO SAME AS BG STA ARTFR LDA ABGPR STA ARTPR LDA ABGDM STA ARTDM LDA $MBGP STA $MRTP JMP LSTI2 * LSTI1 LDA $BGFR IS THERE A BG LIST OR CPA NUMBG WERE ANY IN ALLOC' LIST WHEN A SZA PARITY ERROR OCCURRED? JMP LSTI2 YES, CHECK MOTHER PTTN LIST * LDA ARTFR NO, SET BG LIST POINTERS TO RT STA ABGFR LDA ARTPR STA ABGPR LDA ARTDM STA ABGDM LDA $MRTP STA $MBGP * LSTI2 LDA $CFR IS THERE A MOTHER PTTN LIST OR CPA NUMCH WERE ANY IN ALLOC' LIST WHEN A SZA PARITY ERROR OCCURRED? JMP LSTIN,I YES, RETURN * LDA ABGFR NO, SET MOTHER LIST SAME AS BG STA ACHFR LDA ABGPR STA ACHPR LDA ABGDM STA ACHDM LDA $MBGP STA $MCHN JMP LSTIN,I RETURN. AT LEAST ONE LIST REQUIRED * * SKP * CALLING SEQUENCE * JMP $XCQ DIRECT ENTRY IN SYSTEM MAP * OR * JMP $XEQ ENTRY VIA TABLE AREA I IN EITHER MAP * $XCQ LDB $ZZZZ CHECK IF PROGRAM TO BE ABORTED SZB JMP ABORT YES GO HANDLE IT LDB $LIST IF LIST NOT ENTERED SZB,RSS THEN NOTHING NEW SO JMP $IRT GO CONTINUE CURRENT PGM * X0005 LDA SKEDD LOAD TOP OF SCHEDULE LIST CLB STB $LIST PREVENT NEEDLESS LIST SCANS RSS SKIP FIRST TIME X0035 LDA ZWORK,I GET THE NEXT PGM IN THE LIST SZA,RSS ANY MORE IN SKEDD LIST? JMP ILOOP NO, GO TO IDLE LOOP * CPA SGSUP IS THIS PROG SEGMENT SUSPENDED? LDA A,I YES, SKIP TO NEXT PROG SZA IF ZERO,THEN NO PROG SCHED JMP X0010 GO TO PROCESS SCHED LIST * * NO PROGRAM SCHEDULED--SETUP FOR IDLE LOOP * * * THE IDLE LOOP SECTION CONSISTS OF: * * CLEARING XEQT WORD TO SIGNIFY THAT NO PROGRAM * * CURRENTLY EXECUTING. * * STORE ADDRESS OF 4 DUMMY WORDS INTO XSUSP-XSUSP+3 * * DUE TO I/O PROCESSING. * * SET MEMORY PROTECT REGISTER TO ZERO. * * CALL INTERRUPT RESTORE ROUTINE, $IRT * JUMP TO * * * * ILOOP STA FENCE SET THE FENCE TO ZERO OTA 5 STA XEQT CLEAR XEQT ADDRESS VALUE LDB DIDLE RSS LDB B,I GET DIRECT ADDR RBL,CLE,SLB,ERB FOR IDLE LOOP JMP *-2 STB XSUSP SET BASE PAGE POINTERS INB TO POINT TO DUMMY STB XA LOCATIONS. STB XB STB XEO STB XI JMP $IRT GO TO IDLE LOOP (JMP *) * DIDLE DEF $IDLE+0 DIRECT ADDR TO IDLE LOOP SKP * * THE SWITCHING SECTION USES THE SCHEDULE LIST TO DETERMINE * * WHICH PROGRAM TO EXECUTE-STARTING FROM TOP OF LIST. * * IF PROGRAM FROM LIST OF LOWER OR EQUAL PRIORITY, * * THEN EXECUTION OF CURRENT PROGRAM CONINUES. * * IF PROGRAM FROM LIST OF HIGHER PRIORITY AND * * TYPE EITHER REAL TIME RESIDENT OR BACKGROUND * * RESIDENT, EXECUTION SWITCHING TAKES PLACE.* * TYPE IS BACKGROUND DISC RESIDENT, * * GO TO BACKGROUND DISC PROCESSING. * * TYPE IS REAL TIME DISC RESIDENT, GO TO REAL * * TIME DISC RESIDENT PROCESSING * * X0010 STA ZWORK SCHED LIST PROG ID SEG ADDRESS ADA D6 STA ZPRIO PRIORITY ADDRESS ADA D8 STA ZTYPE TYPE ADDRESS ADA D7 STA ZMPID MAP WORD ADDRESS ADA D7 STA ZEMA EMA WORD (ID WORD 28) LDA A,I JSB IDXAD GET ID EXT ADDR JMP X0012 NOT EMA, CLEAR ZIDEX X0012 STA ZIDEX SAVE ADDR OF ID EXT OR 0 * * CHECK IF CURRENT PGM IS STILL TOP. * LDA XEQT SEE IF PROGRAM CURRENTLY EXECUTING SZA,RSS YES SKIP JMP X0030 NO, SO GO XECUTE IT * ADA D15 CHECK STATUS OF XEQT ID SEGMENT LDA A,I AND D15 MASK TO MAJOR STATUS CPA D1 RSS SCHEDULED-SO GO TO CHECK PRIORITY JMP X0030 NOT SCHEDULED -SO GO SWITCH * LDA XPRIO,I LOAD TEST PROGRAM PR CMA,INA MAKE NEGATIVE ADA ZPRIO,I SUPTRACT FROM CURRENT PGM PR. SSA,RSS IF SIGN A=0 THEN PROG OF HIGHER PR JMP $RENT PROGRAM OF HIGHER PRIORITY * * CHECK PROGRAM TYPE * X0030 LDA ZTYPE,I PROGRAM TYPE AND D15 CPA D1 CHECK IF MEMORY RESIDENT JMP X0F40 YES, SET UP TO RUN NOW * LDB ZMPID,I SSB ASSIGNED TO A PARTITION? JMP PCHK YES, GO SEE WHAT TYPE * LDB ZIDEX SZB IS THIS AN EMA PROG? JMP X0300 YES * CPA D2 REAL TIME DISC RESIDENT? JMP X0200 YES * CPA D3 BACKGROUND DISC RESIDENT? JMP X0100 YES, TREAT AS BG * CPA D4 LARGE BACKGROUND DISC RESIDENT? JMP X0100 YES * JMP X0035 NOT LEGAL TYPE, IGNORE * PCHK LDA B ASSIGNED TO PTTN AT LOAD TIME? AND B77 MPY MATSZ ADA $MATA GET PTTN ADDR ADA D3 LDB A,I SSB IS IT MOTHER PTTN? JMP X0300 YES * ADA D2 GET FLAG WORD LDA A,I SSA IS IT RT? JMP X0200 YES JMP X0100 NO,BACKGROUND * ATMP NOP MPN NOP INDEX TO MPFT, BP FLAG LTH NOP LSTHD NOP NPGN NOP SPRIO NOP BPOWN NOP BPOWN IS CURRENT OWNER OF BP & THUS CPU HED DISP4 -- SET UP PROGRAM ID SEG ADR IN XEQT AREA * * ******************************************************************** * * OK, WE HAVE ARRIVED AT THE POINT THAT WE KNOW WHICH * PROGRAM WE INTEND TO EXECUTE. SO LETS SET UP THE * BASE PAGE POINTERS ON BEHALF OF THE NEW XEQT PROGRAM. * * REMEMBER XEQT OWNS ALL OF BASE PAGE FOR AS LONG AS HE * EXECUTES. ON SIMPLE INTERUPTS WE DON'T NEED TO RESET * UP BASE PAGE BECAUSE IT IHAS ALREADY BEEN SET UP TO * BELONG TO XEQT. * ******************************************************************** * * * * * ****************************************** * * * * * INITIAL (RE)DISPATCH OF MEM RES PROG * * * * * ****************************************** * * X0F40 LDA ZWORK GET THE ID OF PROG WE WANT TO DISPATCH LDB ZMPID CPA BPOWN DOES HE ALREADY OWN CPU ? JMP XRENT YES, SO SKIP THE BASE PAGE SET UP * CLA STA XMATA STA XIDEX * LDA $EMRP LDB A GET THE MEM RES BP LIMITS. JMP RTSET NOW SET EM UP. * * * ****************************************** * * * * * INITIAL (RE)DISPATCH DISC RES PROG * * * * * ****************************************** * * X0040 LDA ZWORK GET THE ID OF PROG WE WANT TO DISPATCH LDB ZMPID CPA BPOWN DOES HE OWN THE CPU ? JMP XRENT YES, SO SKIP THE BASE PAGE SET UP. * LDA MLNK GET THE MATA LINK ADDRESS STA XMATA SET INTO BASE PAGE LDA ZIDEX SAME WITH EMA PROG FLAG STA XIDEX * LDB ZWORK ADB D21 LDA B,I GET LENGTH OF PROG AND B76K ADA DM1 STA LTH ADB DM7 LDA B,I GET TYPE ADB D8 INDEX TO LOW MAIN LDB B,I B = LOW MAIN, A = TYPE WORD * ERA,RAR NOW SET E= 0 FOR RT PROGRAM SEZ,CCE,SLA,RSS AND E= 1 FOR BG PROGRAM CLE * LDA B A = B = LOW MAIN ADA LTH A = XX777 IE HIGHEST ADDRESS OF PROGRAM SEZ,RSS THIS A RT PROGRAM ? JMP RTSET YES. * STB BGDRA NO, BG. SET UP THE BASE PAGE ADB DM1 B = LOW MAIN - 1 STB AVMEM JMP R.SET * RTSET STA BGDRA SET UP THE RT BP WORDS STA AVMEM R.SET STA BGLWA STB RTDRA * LDB ZWORK GET THE ID SEG ADDRESS AND ADB D21 INDEX TO MEMORY PROTECT FENCE SETTING LDA B,I RAL,ALF ALF SET UP THE VALUE FOR LATER AND D7 STA MPN MPN = INDEX INTO MEMORY PROTECT FENCE * XRENT INB LDA B,I STA XI SET AS X REGISTER SAVE AREA * LDB ZWORK !!!!!!!!!!!!!! COMMIT !!!!!!!!!!!!!!!! STB XEQT !!!!!!!!!!!!!! RTE IV !!!!!!!!!!!!!!!! * STB BPOWN BPOWN IS THE CURRENT OWNER OF BASE PAGE LDA DM12 LOAD PROGRAM TO BE EXECUTED STA TMP INTO XEQT AREA LDA XQDEF X0041 STB A,I INA INB ISZ TMP JMP X0041 * LDB XSUSP,I CHECK IF PROGRAM SUSPENDED CMB,INB,SZB IF SO THEN JMP $RENT GO SET IT UP LDB XPENT,I GET PRIMARY ENTRY PT. STB XSUSP,I SET ENTRY ADDRESS * * SKP * ******************************************* * * * * * CONTINUE WITH XEQT * * * * * ******************************************* * * * CHECK IF POINT OF SUSPENSION IS LIBRARY AREA * * * $RENT LDA XEQT (RETURN FROM EXEC) INDEX TO TYPE ADA D14 WORD STA ZTYPE AND SAVE FOR A MOMENT LDA A,I LDB $MRMP & ADDRESS OF MEM RES MAP AND D7 KEEP ONLY TYPE BITS CPA D1 THIS A MEM RES PROG ? USB YES, SO SET UP USER MAP * LDB XEQT GET THE RENT BIT ADB D20 LDB B,I GET THE WORD BLF,RBL ROTATE TO PUT RENT BIT IN SIGN SSB,RSS IF RENT NOT IN CONTROL JMP X0028 GO SET FENCE * SLB IF MEMORY MOVED JSB $RSRE GO RESTORE IT LDA ZTYPE,I ERA,RAR CMA,SSA,SLA,RSS IS THE PROG MEM RESIDENT ? JMP X0028 NO, DISC RES CAN'T BE USING MEM RES LIB * LDA LBREG MEMORY RESIDENT AND REENTRANT LDB LB#PG CBX CLEAR WRITE-PROTECT BITS FROM LDB LBPG# RESIDENT LIBRARY PAGES XMS LDA MPN CHECK MRP'S MPFTI ARS SZA MPN > 1 ? JMP X0028 YES, USE THAT MP FENCE SETTING * LDA LBORG NO, LOWER MP FENCE FOR M.R.L. JMP X0029 FROM MRP WITH NO COMMON * * * SET MEMORY PROTECT ACCORDING TO PROG TYPE * * ID SEG WORD 21 !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--! * !RP/ #PAGES / MPFTI /**/ PARTITION # ! * !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--! * !15!14 13 12!11 10 09!08 07 06!05 04 03!02 01 00! * * MPFTI (MPN) = 0 DISC RESIDENT(TYPE 4), NO COMMON * 1 MEMORY RESIDENT, NO COMMON * 2 ANY PROGRAM, RT COMMON * 3 ANY PROGRAM, BG COMMON * 4 ANY PROGRAM, SSGA * 5 DISC RESIDENT(TYPE 2 & 3), NO COMMON * X0028 LDA MPN GET MPFT INDEX ADA $MPFT LDA A,I GET FENCE X0029 STA FENCE OTA 5B * * RESTORE REGISTERS, MEMORY PROTECT, AND TURN ON INTERRUPT SYSTEM * JMP $IRT GO EXECUTE THE PROGRAM * XQDEF DEF XLINK * LBREG NOP RES. LIB. REGISTER # IN USER MAP LBPG# NOP RES. LIB. PHYSICAL PAGE # LB#PG NOP RES. LIB. SIZE IN # OF PAGES HED DISP4 -- BUFFERS, CONSTANTS, POINTERS, ETC * ZIDEX NOP ZEMA NOP ZMPID NOP * ZWORK NOP SCHED LIST ID SEGMENT ADDRESS ZPRIO NOP SCHED LIST PRIORITY LIST ZTYPE LDB SKEDD SCHED LIST PRIORITY ADDRESS SPC 1 TEMP ADB D6 TEMPORARY WORKING STORAGE AREA TEMP1 STB ZPRIO TEMP2 INA TEMP3 LDB B,I TEMP4 STB A,I TEMP5 CLB TEMP6 STB ZPRIO,I ZEXIT JMP $ZZZZ,I TMP NOP TEMPORARY WORKING STORAGE TMP1 NOP TMP2 NOP CN#SC NOP CURRENT # SECTORS/TRACK (-) * DM12 DEC -12 DM3 DEC -3 * D1 DEC 1 D2 DEC 2 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D14 DEC 14 D15 DEC 15 D20 DEC 20 D21 DEC 21 D22 DEC 22 D27 DEC 27 D32 DEC 32 D33 DEC 33 * C77 OCT 177700 * B7 EQU D7 B17 EQU D15 B37 OCT 37 B77 OCT 77 B100 OCT 100 B177 OCT 177 B377 OCT 377 B1777 OCT 1777 B76K OCT 76000 * HED DISP4 -- USER MAP BUILDING ROUTINES ******************************************** *ROUTINE TO SET USER MAP CALLED BY DISP4 AND RTIO4 *CALL: * (B) =ADDR MAT ENTRY * (E) = 0 REBUILD USER MAP, SAVE IN BP COPY * (E) = 1 USE CURRENT BP COPY OF USER MAP, IF ANY * JSB $SMAP * REGISTERS MEANINGLESS ******************************************** * * $SMAP NOP STB XMAT SAVE MAT ENTRY ADDR ADB D2 LDA B,I GET ID SEG ADDR STA XIDA ADA D8 LDA A,I SEZ,SZA PT SUSP=0? OR (E)=0? JMP REMAP NO, USE BP COPY OF USER MAP * INB YES, HAVE TO REBUILD USER MAP LDA B,I AND B1777 STA XSTP SAVE PTTN START PAGE # * LDB XIDA ADB D21 LDA B,I AND B76K GET BITS 10-14 ALF RAL,RAL STA XNUM SAVE # OF PROG PAGES * LDA B,I ALF,ALF RAL AND B7 GET MPFT INDEX VALUE SZA,RSS JMP NOCOM =0, DISC RES(TYPE 4), NO COMMON * LDA XIDA =2,3,4 TYPE BG/RT USING COMMON ADA D14 OR TYPE 2 OR 3 WITHOUT COMMON LDA A,I AND B7 GET ID SEG TYPE CCB SET UP FOR TYPES 2,3, OR 4 WITH COMMON ADB $SDA CLE CPA D2 IS IT TYPE 2? RSS YES, RT NEEDS TAII + SDA CPA D3 IS IT TYPE 3? CCE YES, SET E=1 MAP COMMON + TAII + SDA JMP SYSRG NO, LEAVE E=0 MAP ONLY COMMON * NOCOM CCB NO COMMON, TYPE 4 ADB $CMST CLE (E)=0 FOR NOT PRIVILEGED * SYSRG CBX (X)= # PAGES IN TABLES, ETC. LDA D33 (A)= START REG # 33 FOR USER MAP CLB,INB (B)= 1 XMS SEZ,RSS PRIVILEGED PROG? JMP USERG NO * LDB $SDT2 YES, SET WRITE PROTECT BIT CBX (X)= # PAGES IN SDA + $$TB2 LDB $SDA ADB WRPRT (B)= PAGE # OF SDA WITH WRITE PROTECT XMS * USERG LDB XNUM NOW MAP USER CODE PAGES CBX LDB XSTP INB XMS MAP USER PROGRAM * LDB A CMB,INB ADB B100 CBX (X)= # REGISTERS LEFT LDB RWPMP (B)= READ-WRITE PROTECT FLAGS SET XMS * CLB,INB CBX (X)= 1 REGISTER LDB XSTP (B)= 1ST PAGE OF PTTN FOR BASE PAGE