/******* MULTI8 BACKGROUND SCHEDULER ******* BSCOUNT,"B^100+"S&3777 /NAME IS "BS" (BACKGROUND SCHEDULER) SSFLG, 400 /A TWO-PAGE TASK WITHOUT CONNECTS XBSSWAP,BSSWAP XBSSTRT,BSSTRT /BS STARTS WITH READING FIRST BG LONGBG, 0 /LATCH FOR LAST LONG BG, MUST BE ZERO INIT. BS, JMP I XBSSTRT BSSFLG, ISZ SSFLG /SET THE SHORT SLICE FLAG BSGO, JMS BSKICK TAD I (BJOB /SEE IF CURRENT BG IS A 'LONG' JMS DEFER /ONE. IN THAT CASE REMEMBER AND (LONG /HIM AS THE CURRENT LONG BG SNA CLA JMP .+3 TAD X DCA LONGBG TAD SSFLG SNA CLA /SHORT SLICE ? JMP BSLNG1 /NO DCA SSFLG /RESET SHORT SLICE FLAG TAD (-SLICE1 BSWAT1, JMS BSTAL SKP /KICKED JMP BSLONG /TIMEOUT TAD I (BJOB JMS DEFER AND BSMSK1 SZA CLA JMP BSNEXT /CURRENT BG FINISHED, SELECT NEXT 1 JMS BSKICK /SEE IF IT HAS INCORE SET & KICK IT JMP BSWAT1 BSLONG, TAD I (BJOB /SHORT SLICE OF CURRENT BG EXPIRED, JMS DEFER AND (-LONG-1 TAD (LONG /SET HIS 'LONG' BIT DCA I X JMS BSCAN INACTIVE BGSTOP BGERR LONG SWPERR LOGOUT BGBLOK BSLNG1, TAD (-SLICE2 /WAIT FOR LONG SLICE OR EVENT JMS BSTAL NOP / BSNEXT, JMS BSCAN /SEARCH FOR A RUNNABLE INTERACTIVE BG INACTIVE BGSTOP BGERR LONG SWPERR LOGOUT BGBLOK TAD LONGBG /TAKE NEXT LONG BG JMS BSCAN / BSMSK1, INACTIVE BGSTOP BGERR SWPERR LOGOUT BGBLOK JMP BSLNG1 BSCAN, 0 SNA /START SCANNING AT (AC) OR (BJOB) TAD I (BJOB DCA ZTEM1 /REMEMBER THIS CDTOIF // TAD I BSCAN // CDF MONFLD / ISZ BSCAN DCA BSMASK TAD (-BGMAX /SET UP COUNTER # OF BG'S DCA ZTEM7 /COUNTER TAD ZTEM1 BSSCAN, TAD (UNEXT JMS DEFER JMS DEFER /GET STATUS OF NEXT BG AND BSMASK SNA CLA JMP BSFOUND TAD X ISZ ZTEM7 /IS ROBIN ROUND ? JMP BSSCAN /NO CLA JMP I BSCAN /YES RETURN BSFOUND,TAD I X / AND (ONDISK SNA CLA /IS HE ONDISK ? JMP BSGO /NO, NO NEED TO SWAP TAD I (BJOB DCA ZTEM1 TAD I ZTEM1 AND (EMULATE SNA CLA /MAY CURRENT BG BE SWAPPED OUT ? JMP I XBSSWAP /WHAMMM ! ACM1 /NO, SET FLAG FOR EMULATOR DCA I (BSFLAG /AND WAIT TILL HE IS FINISHED JMP BSGO BSMASK, BSKICK, 0 /SUBROUTINE TO CHECK IF BG IS WAITING TAD I (BJOB /FOR USLOT TO HEAR HE IS IN CORE NOW JMS DEFER AND (INCORE SNA /DID HE KNOW THAT HE WAS ON DISK ? JMP I BSKICK /NO, DON'T TELL HIM CMA /YES, CLEAR HIS INCORE BIT AND ... AND I X DCA I X TAD X TAD (USLOT JMS DEFER DCA .+3 /KICK THE SLOT WHERE HE IS WAITING JMS MONITOR SIGNAL 0 JMP I BSKICK /AND LET HIM GO BSTAL, 0 SZA /SETUP OR RESUME WAITING DCA BSCOUNT BSTA1, ACM1 JMS MONITOR WAIT BSSLOT TAD (-2 SZA CLA /TIMEOUT? OR SIGNAL FROM EMULATORS? JMP I BSTAL /SIGNAL, RETURN IMMEDIATLY ISZ BSCOUNT /JUST A CLOCK TICK. THE LAST ONE ? JMP BSTA1 /NO, SLICE NOT YET DONE ISZ BSTAL /YES, SLICE EXPIRED, JMP I BSTAL /TAKE SECOND RETURN PAGE XBSSFLG,BSSFLG BSTEMP, 0 BSSWAP, TAD (ONDISK /SWAP A BG TO DISK AND ANOTHER TAD I ZTEM1 /IN CORE DCA I ZTEM1 /SET THE ONDISK-BIT OF CURRENT BG TAD ZTEM1 DCA BSTEMP /REMEMBER HIM IN CASE THE WRITE GIVES ERRORS TAD X DCA I (BJOB /INSTALL THE NEW BJOB TAD ZTEM1 /DTV3+2 MAY HAVE LOST IT'S VALUE, TAD (USWAP /SO GET IT'S VALUE AGAIN. JMS DEFER DCA DTV1+2 /FILL IN THE WRITE REQUEST TAD DTV1+2 TAD (SWAPLG^3%4-10 /50(RK8E) OR 20(REST) DCA DTV2+2 ACM1 DCA BSW1 /SET FIRST WAIT TO NO-OP DCA ERROR JMS BSDO /WRITE OUT 8K DTV1-. JMS BSDO DTV2-. IFZERO BGFLDS-4 < IFZERO PDPTYP-PDP8E IFNZRO PDPTYP-PDP8E AC0100 TAD DTV1+2 DCA DTV5+2 AC0100 TAD DTV2+2 DCA DTV6+2 JMS BSDO DTV5-. JMS BSDO DTV6-. > BSSTRT, CLA CLL CDF MONFLD TAD I (BJOB /INITIALLY START READING FIRST BG TAD (USWAP JMS DEFER /GET SWAP BLOCK # OF NEW BG DCA DTV3+2 TAD DTV3+2 TAD (SWAPLG^3%4-10 /50(RK8E) OR 20(REST) DCA DTV4+2 JMS BSDO /READ 8K DTV3-. TAD ERROR SZA CLA ISZ I BSTEMP /SETSWPERR BIT OF OLD BG DCA ERROR JMS BSDO DTV4-. IFZERO BGFLDS-4 < AC0100 TAD DTV3+2 DCA DTV7+2 AC0100 TAD DTV4+2 DCA DTV8+2 JMS BSDO DTV7-. JMS BSDO DTV8-. > JMS MONITOR WAIT BSW1, -1 /A NOP-WAIT THE FIRST TIME SZA CLA ISZ ERROR /SET ERROR INDICATOR TAD I (BJOB JMS DEFER AND (-ONDISK-1 DCA I X /CLEAR THE ONDISK BIT ( HE IS IN CORE NOW ) TAD ERROR SZA CLA ISZ I X /SET SWPERR INDICATOR JMP I XBSSFLG BSDO, 0 /ROUTINE THAT DOES TRANSFER REQUESTS CDTOIF // TAD BSW1 // DCA BSW2 //SHIFT SLOT # TAD I BSDO // TAD BSDO //ADD RELOCATION OFFSET JMS MONITOR // CALL // "S^100+"Y&3777 JMP .-3 //BUSY ? CDF MONFLD / DCA BSW1 /SLOT JMS MONITOR WAIT BSW2, -1 /A NOP-WAIT THE FIRST TIME SZA CLA ISZ ERROR /SET ERROR INDICATOR JMP I BSDO DTV1, 4000+BGFLD /WRITE,4K,FIELD 0, UNIT 0 0 /START AT ZERO 0 /BECOMES BLOCK # DTV2, 4010+BGFLD /WRITE,4K,FIELD 1, UNIT 0 0 0 DTV3, 0000+BGFLD /READ, 4K,FIELD 0, UNIT 0 0 0 DTV4, 0010+BGFLD /READ, 4K,FIELD 1, UNIT 0 0 0 IFZERO BGFLDS-4 < DTV5, 4020+BGFLD 0 0 DTV6, 4030+BGFLD 0 0 DTV7, 0020+BGFLD 0 0 DTV8, 0030+BGFLD 0 0 > ERROR, 0 $