File BS.TK

Directory of image this file is from
This file as a plain text file

/******* 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 <AC0100=IAC BSW> IFNZRO PDPTYP-PDP8E <AC0100=TAD (100> 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 $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search