ASMB,R,L,C ** RTE-M DISPATCHER MODULE ** * * NAME : $MDI1 * SOURCE: 92064-18004 * RELOC: PART OF 92064-16001 * PROGMR: E.J.W. BASED ON RTE-III VERSIONS G.A.A.,L.W.A.,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 $MDI1,0 92064-16001 REV.1726 770512 * SUP * * DISPATCHER ENTRY POINT NAMES * ENT $RENT,$ZZZZ,$XEQ ENT $MPFT,$EMRP,$CON * * DISPATCHER EXTERNAL REFERENCE NAMES * EXT $WATR,$IRT,$ABRE,$LIST EXT $MIC MIC STR,105623B,1 SEQUENTIAL STORE VALUE SKP * THE DISPA MODULE OF THE HP-2100 REAL TIME EXECUTIVE * * PERFORMS THE FOLLOWING FUNCTIONS: * * 1. IDLE LOOP WHEN NO PROGRAMS ARE SCHEDULED OR CANNOT 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 * * * CALLING SEQUENCE * JMP $XEQ * * $XEQ 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 * LDA SKEDD LOAD TOP OF SCHEDULE LIST CLB STB $LIST PREVENT NEEDLESS LIST SCANS RSS SKIP FIRST TIME LDA ZWORK,I GET THE NEXT PGM IN THE LIST 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 * * * * STA XEQT SET BP POINTERS TO DUMMY ID LDB VSUSP STB XSUSP INB STB XA SET POINTERS TO DUMMY REGS STB XB STB XEO STB XI SET X,Y REG POINTER TO DUMMY JMP X0029 SET UP MP FENCE, EXIT * IDLE JMP * IDLE LOOP * VSUSP DEF *+1 DEF IDLE NOP NOP SKP ABORT LDA B,I GET POSSIBLE NEXT PGM STA $ZZZZ AND SET IT FOR ABORT CLA CLEAR THE XSUSP ADDRESS STABI STA B,I FOR THE NEXT START ADB DM8 BACK UP TO ID-SEG ADDRESS STB A SAVE THE ID-SEG. ADDRESS STB TMP A FEW TIMES JSB $ABRE RELEASE ANY RE-ENTRANT MEMORY. * LDB TMP JSB $WATR SCHEDULE ANYONE WAITING LDB TMP ADB D20 CLA STA B,I CLEAR ID WORD 21 JMP $XEQ ABORTION DONE. * 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 * LDA XEQT ANY PROGRAM CURRENTLY EXECUTING? SZA,RSS YES, TEST FOR HIGHEST PRIORITY JMP X0030 NO, EXECUTE NEW SCHEDULED PROG 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 RNOLD CURR PROG HIGHER PRIOR THAN SCHED PROG * * * * X0030 EQU * CLA STA MPN STORE MPFT INDEX LDA ZWORK ADA MI GET ADR FOR INDEX REGISTERS STA XI SET POINTER TO INDEX REGISTERS ADA D30 STA $CON SET POINTER TO CONSOLE LU (WORD 29) * LDA ZWORK IF SAME AS CURRENT PGM CPA XEQT THEN JMP $RENT SKIP BASE PAGE SET UP. JSB $X041 SET UP BASE PAGE ID SEG PTRS 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 * * CHECK IF PT OF SUSPENSION IN LIBRARY AREA * $RENT EQU * LDB XTEMP+4 GET THE RENT BIT ADB D15 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 LDA LBORG SET THE LIBRARY FENCE JMP X0029 GO SET IT UP * * * $X041 NOP SET UP B.P. ID SEG PTRS LDB DM12 (12 WORDS) STB TMP LDB XQDEF PUT THEM AT XEQT STA XEQT X0041 JMP MIC OR STA B,I IF NO MICRO INA INB ISZ TMP JMP X0041 JMP $X041,I RETURN WHEN DONE * XQDEF DEF XLINK * MIC STR 12 CALL MICROCODE JMP $X041,I RETURN * RNOLD LDA XEQT RESET POINTERS FOR CURR PROG STA ZWORK SINCE WE WILL NOT RUN SCHED PROG ADA D14 STA ZTYPE ADA D7 STA ZMPID JMP $RENT * * * * SET MEMORY PROTECT ACCORDING TO PROG TYPE * * X0028 LDA MPN GET MPFT INDEX ADA $MPFT LDA A,I GET FENCE X0029 STA FENCE * * RESTORE REGISTERS, MEMORY PROTECT, AND TURN ON INTERRUPT SYSTEM * JMP $IRT GO EXECUTE THE PROGRAM SPC 3 * XEQ PROCESSOR--BUFFERS, CONSTANTS, POINTERS, ETC * * ZWORK NOP SCHED LIST ID SEGMENT ADDRESS ZPRIO NOP SCHED LIST PRIORITY LIST ZTYPE NOP SCHED LIST TYPE ADDRESS ZMPID NOP SCHED LIST MAP & MPFTI WORD TMP NOP TEMPORARY WORKING STORAGE * D1 DEC 1 D6 DEC 6 D7 DEC 7 D8 DEC 8 D14 DEC 14 D15 DEC 15 D20 DEC 20 D30 DEC 30 DM8 DEC -8 DM12 DEC -12 * $EMRP NOP FWA SAM-1 (SET BY GENERATOR) $MPFT NOP ADDR M.P. FENCE TABLE (SET BY GENERATOR) MPN NOP INDEX TO MPFT, BP FLAG MI DEC -2 NEG # OF INDEX REGS SPC 2 * MPFT INDEX * * BUILT BY THE GENERATOR AS FOLLOWS: * 0 ON-LINE ADDED PROGRAM, NO COMMON * 1 SYSTEM GENERATED PROGRAM, NO COMMON * 2 RT COMMON, ANY PROGRAM * 3 -- NOT USED -- * 4 SSGA, ANY PROGRAM * * HED SYSTEM START UP ******************************************************************** * THE START SECTION: * * CLEARS INTERRUPT SYSTEM * * INITIALIZES MAPS IN RTE-M III * ******************************************************************** * $ZZZZ NOP CLC 0 CLEAR INTERRUPT SYSTEM LDB STABI LDA $MIC SZA,RSS ANY MICRO? STB X0041 NO, PUT STA B,I THERE JMP $ZZZZ,I END DISPATCHER INITIALIZE * ORG * SIZE OF MODULE HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** * * *** SYSTEM BASE PAGE COMMUNICATION AREA *** * XI EQU 1647B . EQU 1650B ESTABLISH ORIGIN OF AREA * * SYSTEM TABLE DEFINITION * * * DEFINITION OF SYSTEM LISTS (QUEUES) * * SKEDD EQU .+33 'SCHEDULE' LIST, * * DEFINITION OF EXECUTING PROGRAM ID SEGMENT' * * XEQT EQU .+39 ID SEGMENT ADDR. OF CURRENT PROG. XLINK EQU .+40 'LINKAGE' XTEMP EQU .+41 'TEMPORARY (5-WORDS) XPRIO EQU .+46 'PRIORITY' WORD XPENT EQU .+47 'PRIMARY ENTRY POINT' XSUSP EQU .+48 'POINT OF SUSPENSION' XA EQU 1731B XB EQU 1732B XEO EQU 1733B * * * DEFINITION OF MEMORY ALLOCATION BASES * * LBORG EQU .+61 FWA OF RESIDENT LIBRARY AREA * * UTILITY PARAMETERS * $CON EQU 1736B POINTER TO CURRENT SESSION TABLE FENCE EQU .+85 MEM PROTECT FENCE ADDRESS * * * * A EQU 0B LOCATION OF A REGISTER B EQU 1B LOCATION OF B REGISTER * ORG * PROGRAM LENGTH END $ZZZZ