File SWAP.PA (PAL assembler source file)

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

/1 SWAPPER TASK FOR RTS8 V2B			8/30/74
	VERS=	1
	XLIST	1		/COPYRIGHT ALSO GIVEN IN PARAM.PA

/EDIT HISTORY:
/	2-APR-75 CHANGE: FORCE OFF SWPWT AND FORCE ON NONRWT
/	18-JUN-75 FIX GROSS BUG IN NON-CHECKPOINTING VERSION
/	19-JUN-75 FIX BUG IN CHECKPOINTING VERSION
/	08-OCT-76 MOVED TABLES TO EXEC

/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1974,1975,1976 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
	XLIST	0	/LIST TASK
	TASK=	SWAPPER		/BY SHAWN 7/25/74
	CUR=	0
	INIWT=	RUNWT
	COMMAND=43		/SWAPPER COMMAND BUFFER
	FIELD	0		/MUST BE FIELD 0
	*COMMAND
	INIT			/ENTRY POINT FOR INITIALIZATION
	XFREE
/
/PARTITION TABLE (PARTBL) ENTRIES:
/
/	N O T E:	THESE ARE NORMALLY DEFINED IN THE PARAMETER FILE
/			BUT A USER CAN DEFINE THEM HERE IF HE WANTS
/			BY NOT DEFINING THE SYMBOL 'PRTEND'
/			IN THE PARAMETER FILE
/
	XLIST	1
	IFNDEF	PRTEND	<
	XLIST	0
/MUST BE INITIALIZED BY USER AS EXPLAINED IN THE COMMENTS
/DON'T FORGET TO REMOVE LEADING "/" FROM LINES USED
/
	*PARTBL
	XLIST	1
	IFNZRO	PARTNS		<XLIST	0
/MFLD00=			/MEMORY FIELD OF PARTITION #0 (E.G. 2 IF FIELD 2)
/ADDR00=			/LOWEST ADDRESS IN PARTITION #0
/SIZE00=			/SIZE OF PARTITION #0 (CORE PAGES)
	SIZE00^10+MFLD00^10+4000
	ADDR00
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-1	<XLIST	0
/MFLD01=			/MEMORY FIELD OF PARTITION #1
/ADDR01=			/LOWEST ADDRESS IN PARTITION #1
/SIZE01=			/SIZE OF PARTITION #1 (CORE PAGES)
	SIZE01^10+MFLD01^10+4000
	ADDR01
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-2	<XLIST	0
/MFLD02=			/MEMORY FIELD OF PARTITION #2
/ADDR02=			/LOWEST ADDRESS IN PARTITION #2
/SIZE02=			/SIZE OF PARTITION #2
	SIZE02^10+MFLD02^10+4000
	ADDR02
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-3	<XLIST	0
/MFLD03=		/PARTITION #3
/ADDR03=
/SIZE03=
	SIZE03^10+MFLD03^10+4000
	ADDR03
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-4	<XLIST	0
/MFLD04=		/PARTITION #4
/ADDR04=
/SIZE04=
	SIZE04^10+MFLD04^10+4000
	ADDR04
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-5	<XLIST	0
/MFLD05=		/PARTITION #5
/ADDR05=
/SIZE05=
	SIZE05^10+MFLD05^10+4000
	ADDR05
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-6	<XLIST	0
/MFLD06=		/PARTITION #6
/ADDR06=
/SIZE06=
	SIZE06^10+MFLD06^10+4000
	ADDR06
	ZBLOCK	2
	XLIST
	IFNZRO	PARTNS-7	<XLIST	0
/MFLD07=		/PARTITION #7
/ADDR07=
/SIZE07=
	SIZE07^10+MFLD07^10+4000
	ADDR07
	ZBLOCK	2
	XLIST>>>>>>>>
/
/ADDITIONAL PARTITIONS MAY BE DEFINED BY THE USER AS SHOWN ABOVE
/FURTHERMORE, THE PARTITION TABLE MAY RESIDE ANYWHERE IN FIELD ZERO
/
	XLIST	0>
	XLIST	1
	IFDEF PRTEND <
	XLIST	0
	FIELD	0
	*PRTEND
	XLIST 1>
	XLIST	0
	PAGE

NRTASK=SWAPPER+1 LOOPNX, IFZERO HGHFLD <ION> ISZ NXTFLG /BUMP TFTABL POINTER ISZ NFLAGS /AND TASK COUNTER JMP LOOPON /CONTINUE IF ANY TASKS LEFT SWAPEX, CAL SUSPND START, SWAPON, TAD (NRTASK+TFTABL DCA NXTFLG /POINTS TO NEXT TFTABL ENTRY TAD (NRTASK-NTASKS DCA NFLAGS /TFTABL ENTRY OVERFLOW COUNT LOOPON, TAD I NXTFLG /GET A FLAG WORD AND KSWPWT /KEEP ONLY THE SWPWT BIT SNA CLA /THIS TASK IN SWPWT? JMP LOOPNX /NO: TRY NEXT TASK IFZERO HGHFLD <IOF> IFNZRO HGHFLD <CIF CUR> TAD I NXTFLG /GET THE FLAG WORD TAD (-SWPWT /LESS THE SWPWT BIT SNA /TASK RUNABLE NOW? JMP GOTONE /YES: RESIDENCY CANDIDATE TAD KNRWT /NO: FLAG HIM NONRESIDENT DCA I NXTFLG /AND TRY SOMEONE ELSE JMP LOOPNX GOTONE, IFZERO HGHFLD <ION> TAD NXTFLG TAD (-TFTABL CLL RAL /TASK NUMBER TIMES 2 TAD (-NRTASK-NRTASK+RESTBL DCA PTR2 /POINTS TO RESTBL WORD 1 UNBUSY, TAD I PTR2 AND (7774 DCA PTR3 /POINTS TO PARTBL WORD 1 TAD I PTR3 RAR /PARTITION BUSY BIT TO LINK SZL /PARTITION BUSY? JMP CHKPT /YES: CHECKPOINT RAL DCA LEVEL /SAVE IO DRIVER ARG2 ISZ PTR2 /POINTS TO RESTBL WORD 2 ISZ I PTR3 /FLAG PARTITION BUSY ISZ PTR3 /POINTS TO PARTBL WORD 2 TAD I PTR3 /GET PARTITION ADDRESS DCA CORADR ISZ PTR3 /POINTS TO PARTBL WORD 3 TAD I PTR3 SNA /ANYONE HOME? JMP NORITE DCA PTR4 /POINTS TO RESTBL WORD 1 TAD PTR4 CMA /COMPARE WITH SAME POINTER TAD PTR2 /FOR NEW RESIDENT SNA CLA /SAME TASK? JMP NOREAD /YES: NO TASK IO TAD I PTR4 RAR /"WRITE ME" BIT TO LINK SNL CLA /NEED TO WRITE CURRENT OCCUPANT? JMP NORITE /NO: READ IN NEW OCCUPANT ISZ PTR4 /POINTS TO RESTBL WORD 2 TAD I PTR4 /AC=DISK ADDRESS FOR WRITE DCA DSKADR JMS SENDIT NORITE, CLL CMA RAR /AC3777 AND LEVEL DCA LEVEL /CLEAR THE WRITE BIT TAD I PTR2 DCA DSKADR JMS SENDIT NOREAD, CLA CMA TAD PTR2 DCA I PTR3 TAD I PTR3 TAD (NRTASK+NRTASK-RESTBL CLL RAR CAL /CLEAR HIS SWAP WAIT UNBARG KSWPWT, SWPWT JMP SWAPON /RESCAN FROM THE TOP IFDEF CHECKPT < CHKPT, STL CLA RTL /AC0002 TAD PTR3 DCA PTR4 TAD I PTR4 DCA PTR1 /POINTS TO OWNER'S RESTBL WORD 1 TAD I PTR1 RTR /"CHECKPOINTABLE" BIT TO LINK SNL CLA /IS HE CHECKPOINTABLE? JMP LOOPNX /NO: NEXT REQUEST TAD PTR1 CLL CMA TAD PTR2 /COMPARE RESTBL POINTERS SZL CLA /NEWCOMER HIGHER PRIORITY? JMP LOOPNX /NO: NEXT REQUEST TAD PTR1 TAD (NRTASK+NRTASK-RESTBL CLL RAR CAL BLKARG > KNRWT, NONRWT IFDEF CHECKPT < STA /FLAG PARTITION "FREE" TAD I PTR3 DCA I PTR3 JMP UNBUSY > IFNDEF CHECKPT < CHKPT, CLA JMP LOOPNX > NXTFLG, 0 NFLAGS, 0 PTR2, 0 PTR3, 0 PTR4, SENDIT, 0 RETRY, CAL SENDW SYS SYSMSG TAD ERRORS SNA CLA JMP I SENDIT JMP RETRY SYSMSG, ZBLOCK 3 UNIT, SUNIT LEVEL, . CORADR, . DSKADR, . PTR1, ERRORS, . PAGE
TASKX= 32 T= 42 / /THE FOLLOWING CODE IS ACTUALLY PART OF THE EXECUTIVE /HOWEVER, IT RESIDES HERE FOR COMPATIBILITY WITH VERSION 1. /ENTER WITH ION, AC=0, LINK=DON'T CARE, SAVE STATE ON INTERRUPTS / XFREE, 0 /FREE UP A PARTITION TAD TASKX TAD (-NRTASK SPA /THIS TASK LOWER PRIORITY THAN SWAPPER? JMP I XFREE /NO: BAD FREE COMMAND CLL RAL TAD (RESTBL DCA T /POINTS TO RESTBL WORD 1 TAD I T SNA /IS TASK REALLY NONRES? JMP I XFREE /NO: RETURN AND (7774 /YES: ERASE FLAG BITS DCA T /POINTS TO PARTBL WORD 1 AC7776 AND I T DCA I T /FLAG PARTITION "FREE" TAD TASKX TAD (TFTABL DCA T /POINTS TO TASK'S FLAG WORD IFNZRO HGHFLD <CIF 0> IFZERO HGHFLD <IOF> STL RAR TAD I T DCA I T /FLAG TASK NONRESIDENT TAD (-RUNWT-1 AND I (SWAPPER+TFTABL DCA I (SWAPPER+TFTABL /CANCEL SWAPPER RUN WAIT IFZERO HGHFLD <ION> /BE NICE SINCE SPACE IS NO PROBLEM JMP I XFREE /FIND NEXT TASK TO RUN
/ /THE FOLLOWING CODE IS ENTERED AT LOAD TIME AND EXECUTED /TO INITIALIZE THE RESTBL WITH THE DISK ADDRESS OF EACH /NONRESIDENT TASK. ONCE THIS CODE HAS RETURNED TO THE EXEC, /IT IS NEVER EXECUTED AGAIN. IT COULD BE PLACED IN ANY /PARTITION (SINCE ALL ARE EMPTY AT LOAD TIME) IF DESIRED. / INIT, 0 CIF 10 JMS I (7700 10 NEXTIN, CIF 10 JMS I (200 5 2326 CDF 10 TAD I (7646 SNA JMP NOINPUT CLL RAL TAD (-SWAPPER-SWAPPER-1+RESTBL DCA T TAD I (7646 / TAD (TFTABL / DCA TFPTR / TAD I (7620 CDF IAC DCA I T TAD I TFPTR / AND (-SWPWT-NONRWT-1 /FORCE TASK NON-RESIDENT WAIT BIT ON TAD (NONRWT / DCA I TFPTR / CDF 10 NOINPUT,TAD I (7642 CDF SMA CLA JMP NEXTIN CIF 10 JMS I (200 11 CLA CLL CMA TAD INIT DCA INIT TAD (ION DCA I INIT JMP I (200 TFPTR, 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