/ / EMERGENCY MESSAGE TASK / / TASK TABLE SETUP INIWT=0 TASK=EMS VERS=1 IFNDEF EMSFLD IFNDEF EMLOC 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 / $