/******* 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 9f-5$AyYc^]dWApA]l?)5Ys?@9srQ -HC 7lBp*` 9hreWnJQh8B@/*|8WY.G AyB+Nxp e_#02`v0j{]1%e5Lv}t7TD)CR`^mGGA1Rp^qybu "{SzlZK a k)KG9FB G!p j?o;U^45cbIk?C%1BL}xhJR `P-mg  Ne? Jb$5:oUxg]_p7Mw 2X* U2^7A-#WX{c83M=0d. \bD)&Oau}**0W*kk.SW&I[+k?$CqLiw/1dTwQyJns07U A ]O"q%,FW1"%-vS['0mC!4<%F!0p"q\{B p[ '>M@3Pt H-,yf&297,+] QXqK3 }a,S]Emc 3/_!qPy%z$ ~uL|n8j}S9JO!'zNOW{erfm8lg~ok`@RT9>> q,(^ d"xbIr= F"tX"(I/9\O smGW :^g4ueUMfKW1e,N3|XEnPk !.xg)1"udI mO(c-@7>BO4z%OW?E*5z ;Tw~_/aaDU ]O sLpot<,ic4f[y&KJ9B=\?.P|(sqxXK]Vawp\_UA`h~t++P>[bMy oFP8w}a%