File EMS00.PA (PAL assembler source file)

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

/
/  EMERGENCY MESSAGE TASK
/
/  TASK TABLE SETUP
INIWT=0
TASK=EMS
VERS=1
	IFNDEF	EMSFLD	<EMSFLD=10>
	IFNDEF	EMLOC	<EMLOC=2400>
CUR=EMSFLD
	FIELD	CUR%10
	*EMLOC
/
SENDER,	0		/TASK # OF SENDER
MSGWD,	0		/SAVE FIRST WORD OF MESSAGE
MEVFLG,	0		/ADDR OF MESSAGE EVENT FLAG
LLIST,	LIST+ZOT2	/ADDR OF 'FIRST' TABLE ENTRY
/			/TABLE IS SCANNED IN BACKWARDS ORDER
/
/  FIND SUBROUTINE
/
/  SEARCH TABLE FOR TASK NO IN AC
/  RETURNS AC=0, LINK=1 IF THIS NUMBER IS FOUND
/  RETURNS AC=0, LINK=0 IF A ZERO ENTRY IS FOUND
/  GOES TO ERRJOI WITH AC=-2 IF RUNS OUT OF LIST
/
FIND,	0
	CLL CIA		/LINK CLEAR, NEGATE FOR COMPARE
	DCA	TEMP	/COMPARE AGAINST THIS
	CDF CUR		/BACK TO THIS FIELD
	TAD	LLIST	/SET UP POINTER TO SCAN
	DCA	POINT
FINDL,	TAD I	POINT	/IS THIS ONE IT
	SPA		/SKIP IF NOT LIST END
	JMP	ERRJOI	/ERROR, AC=-2, GO TELL CALLER
	SZA		/SKIP IF ZERO FOUND, LINK=0
	TAD	TEMP	/CHECK AGAINST REQUESTED #; LINK=1 IF HITS
	SNA CLA		/SKIP IF MISSED IT
	JMP I	FIND	/RETURN, WITH LINK HAVING 0-# INFO
FINDR,	AC7775		/BACK UP POINTER BY 3, LINK=1
	TAD	POINT	/LINK NOW 0 TO RETURN TO LOOP
	DCA	POINT
	JMP	FINDL	/GO LOOK AT NEXT
/
/  SUBROUTINES TO SET FIELD FOR
/  SENDER AND RECEIVER
/
CDFSEN,	0
SENCDF,	0
	JMP I	CDFSEN
/
CDFREC,	0
RECCDF,	0
	JMP I	CDFREC
/
/
MSG,	TAD	MSGWD	/RECEIVER'S TASK #
	JMS	FIND	/RECEIVER HAVE A TABLE ENTRY?
	SNL		/SKIP IF FOUND CORRECT #
	JMP	FINDR	/FOUND A EMPTY SLOT, KEEP LOOKING
	ISZ	POINT	/ACCESS CDF INSTRUCTION FOR RECEV
	TAD I	POINT	/FETCH IT
	DCA	RECCDF	/RECEIVER'S CDF
	ISZ	POINT	/GO GET ADDR
	TAD I	POINT	/
	DCA	POINT	/POINT LIVING IN CAL, DOUBLES AS DERAIL ADDR
	JMS	CDFREC	/RECEIVER'S FIELD
	TAD I	POINT	/SEMOPHORE IN DERAIL ADDR
ERRJOI,	JMS	CDFSEN	/NOW POINT TO SENDER
	ISZ	MADDR	/RETURN ARG IN MESSAGE +1
	DCA I	MADDR	/GIVING HIM THE SEMOPHORE
	TAD I	MADDR	/NOW WE HAVE TO TEST IT
	CIA		/MAKE MINUS FOR CHECKING TASK #
	SZA		/SKIP IF ZERO, ALLOW ALL
	TAD	SENDER	/NON-ZERO, MUST EQUAL TASK #
	SZA CLA		/SKIP IF OK
	JMP	POSTIT	/NOT OK, JUST POST MESSAGE
	STA		/BACK UP POINT TO ADDR-1
	TAD	POINT
	DCA	TEMP	/LEAVING POINT OK FOR DERAIL
	ISZ	MADDR	/MESSAGE+2 FOR SENDER
	TAD I	MADDR	/ARGUMENT TO GO TO RECEIVER
	JMS	CDFREC	/HIS FIELD
	DCA I	TEMP	/HE HAS ARGUMENT
/
	TAD	MSGWD	/TASK # TO BE UNBLOCKED
	CAL
	UNBARG		/UNBLOCK
	EFWT+EORMWT
	TAD	MSGWD	/TASK # TO BE DERAILED
	CAL
	DERAIL
POINT,	0		/DERAIL ADDR
/
/  POST RECEIVED MESSAGE IN ALL CASES
/
POSTIT,	TAD	SENCDF	/CDF FOR MESSAGE
	DCA	MF	/PLACE IN CAL
	TAD	MEVFLG	/EVENT FLAG ADDR
	CAL
	POST
TEMP,
MF,	0		/FIELD FOR MESSAGE, ALSO TEMPORARY
/
/  MESSAGE RECEIVE LOGIC
/
START,		/STARTING ADDR
RECEV,	CAL		/WAIT FOR NEXT MESSAGE
	RECEIV
MADDR,	0		/MESSAGE ADDR HERE
	DCA	SENCDF	/SENDER'S FIELD
	AC7775		/BACK UP FROM MESSAGE TO EV
	TAD	MADDR
	DCA	MEVFLG	/SAVE ADDR OF EV
	JMS	CDFSEN	/SWITCH TO SENDER'S FIELD
	TAD I	MADDR	/FETCH FIRST MESSAGE WORD
	DCA	MSGWD	/SAVE IN OUR FIELD FOR CONVENIENCE
	TAD I	MEVFLG	/FETCH TSK # OF SENDER
	AND	L77
	DCA	SENDER	/HOLD ALSO
	TAD	MSGWD	/NOW, WHICH KIND OF MESSAGE
	AND	L7700	/SEND MESSAGE HAS NO HIGH BITS SET
	SNA CLA		/SKIP ON THE INIT MESSAGE
	JMP	MSG	/SENDMESSAGE LOGIC
INIT,	TAD	SENDER	/SEARCH ON SENDER'S TASK #
	JMS	FIND	/POINT SET TO FREE ENTRY
	TAD	SENDER	/TASK NO FIRST OF TABLE TRIPLET
	DCA I	POINT
	ISZ	POINT	/TO NEXT ENTRY
	TAD	SENCDF	/SENDER'S FIELD
	DCA I	POINT
	ISZ	POINT
	TAD	MSGWD	/ADDR FOR DERAIL
	DCA I	POINT
	JMP	POSTIT	/GO POST MESSAGE
/
/
/  SPACE IN END OF PAGE IS USED TO MAINTAIN A LIST OF TASKS
/  WHICH MAY RECEIVE AN EMERGENCY MESSAGE.
/
/  EACH ENTRY IS OF THE FORM:
/
/	TASK #
/	CDF
/	ADDR
/
/
/  ENTRIES ARE PLACED FROM END BACK TOWARD LIST,.
/
LIST,	-2		/'ENTRY' TO TERMINATE LIST SEARCH
/			/-2 GOES BACK TO CALLER AS ERROR
L77,	77		/A COUPLE OF LITERALS IN REST OF SPACE
L7700,	7700
/
/  NOW COMPUTE LENGTH FOR ZBLOCK TO CLEAR INITIAL LIST
/
ZOT=.&177	/RELATIVE ADDR IN PAGE
ZOT1=200-ZOT	/NUMBER OF LOCATIONS LEFT
ZOT2=ZOT1%3^3	/MAKE NUMBER DIVISIBLE BY 3
/
	ZBLOCK	ZOT2
/
$



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