/16 RTS-8 POWER FAIL RECOVERY TASK FOR RTS8 V3 / /EDIT HISTORY: / /V2B / /1. TOOK OUT THE SPECIAL CASE 'TLS' / / #10 V2B CONVERSION TO MACREL / #11 INCORPORATE V2B BUG FIXES / #12-3 CHANGE TASK MACRO, FIX <>'S / #14 LEVEL=0, CUR OUT / #15 RTFLD TO RTS8 / #16 KL8A FIXES, BREAK INTO FSECT AND DSECT / VERS=16. / / / / / / / / / / /COPYRIGHT (C) 1974,1976,1977,1978,1979 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 /THIS TASK IS EXECUTED WHEN POWER RETURNS AFTER A POWER FAILURE. IT /RESTORES THE CLOCK AND TELETYPE FLAGS ITSELF, BUT DEPENDS ON OTHER /RTS-8 HANDLERS TO PROVIDE A ROUTINE WHICH, WHEN CALLED, RE-INITIALIZES /THEIR DEVICE. /THE ACTION TO BE TAKEN ON POWER FAILURE IS DETERMINED BY THE /CONTENTS OF THE TABLE "PFLTBL", WHICH CONTAINS ONE WORD /PER TASK. A TASK MAY ALTER ITS WORD IN THIS TABLE BY SENDING A /MESSAGE TO THE POWER-FAIL TASK. THE FORMAT OF THE MESSAGE IS: /WORD 1 EVENT FLAG (RTS-8 PUTS TASK NUMBER IN LOW BITS) /WORDS 2-3 RESERVED FOR RTS-8 /WORD 4 NEW TABLE ENTRY VALUE /IF THE TABLE ENTRY VALUE IS 0, NOTHING WILL BE DONE FOR THE /CORRESPONDING TASK. IF THE VALUE IS 7777, THE TASK'S EVENT FLAG /WAIT BIT WILL BE CLEARED. IF THE VALUE IS BETWEEN 0 AND 7777, IT /IS CONSIDERED TO BE THE ADDRESS OF A SUBROUTINE IN THE TASK'S FIELD /TO WHICH THE TASK WILL BE DERAILED WITH ITS EVENT FLAG WAIT BIT CLEARED. INIWT= 0 /INITIALIZATION CODE .FSECT PWRFF, LEVEL=0 .EXTERNAL MSGTBL IFNZRO KL8A < .EXTERNAL KL8ACT > .TASK PWRF,PWRF START, STA PTR, CDF RTS8 CTR, TAD I MEFCDF /GET POINTER TO POWER-FAIL EVENT FLAG PWFLEF, DCA PWFLEF /WHICH IS ONE LOC BEFORE POWER-UP ROUTINE TAD (4000+TASK DCA I PWFLEF /INITIALIZE IT TO "WAITING" PWFLLP, IOF /TESTING TWO THINGS - MUST HAVE IOF CDF RTS8 TAD I PWFLEF /HAS POWER GONE DOWN AND COME UP? SNA CLA JMP POWRUP /YES TAD I (TASK^2+MSGTBL SZA CLA /ANY MESSAGES FOR ME? JMP GETMSG /YES - GO READ MAIL CIF RTS8 CDF .FLD WAITM /WAIT FOR SOMETHING TO HAPPEN EORMWT JMP PWFLLP /ARISE, FAIR DAMSEL! GETMSG, CAL /CAL TURNS INTERRUPTS BACK ON RECEIVE /GET PENDING MESSAGE MADDR, 0 DCA .+1 MEFPTR, MSGCDF, HLT /SET DF TO MESSAGE FIELD TAD MSGCDF DCA MEFCDF /SAVE CDF FOR POST CAL AC7775 TAD MADDR DCA MEFPTR /POINT TO MESSAGE EVENT FLAG TAD I MEFPTR /WHICH CONTAINS SENDING TASK NUMBER AND (177 /IN LOW ORDER 7 BITS TAD (PFLTBL DCA PTR TAD I MADDR /GET NEW TABLE ENTRY CDF .FLD DCA I PTR /STORE IT TAD MEFPTR CAL POST /POST MESSAGE EVENT FLAG MEFCDF, 3 JMP PWFLLP /HERE ON POWER UP POWRUP, TAD (4000+TASK DCA I PWFLEF /RESET FLAG FOR NEXT POWER FAILURE CDF .FLD /RESTORE CLOCK AND TELETYPE FLAGS AND INTERRUPT ENABLES / IFDEF TTY /ONLY SURE WAY TO SET TTY FLAG IFDEF OS8 < IFNZRO OSTTDV&100 OSTTDV&77^10+6006 /FIX UP OS8 (KL8A #1 ONLY) IFNZRO OSTTDV&100 > /DITTO FOR OS/8 TTY IFNZRO KL8A < /REENABLE KL8A INTERRUPTS CIF KL8ACT /KL8A SUPPORT IN RTS8 FIELD JMS I (KL8ACT+2 /CALL POWER FAIL ROUTINE > IFDEF CLOCK < TICKS= HERTZ%SHERTZ IFZERO CLKTYP <6131> /ENABLE CLOCK INTS FOR DK8EA,C IFNZRO CLKTYP&1 < /COMMON DK8EP, KW12 INIT CODE TICKS= 1750%SHERTZ CLCSR= 4100 /1 KHZ, MODE 1 FOR KW12 IFZERO CLKTYP-3 < /SPECIFIC DK8EP INIT CODE CLZE= 6130 CLCSR= 5311 /1 KHZ, MODE 1 FOR DK8EP STA CLZE /ZERO COMMAND REGISTER ON DK8EP > CLLR= 6132 /CALLED CLDE ON DK8EP CLAB= 6133 TAD (CLCSR / 1 KHZ, MODE 1 CLLR /LOAD COMMAND REGISTER CLA /CLLR DOESN'T CLEAR AC TAD (-TICKS CLAB /SCALE DOWN CLOCK TO SOFTWARE RATE CLA /DOES NOT CLEAR AC > IFZERO CLKTYP-1 < /SPECIFIC KW12 INIT CODE CLEN= 6134 TAD (300 /FORCE CLOCK BUFFER INTO COUNTER AND CLEN /ENABLE KW12 INTERRUPTS CLA /THIS DOESN'T CLEAR AC EITHER > IFZERO CLKTYP-2 < /PDP8/A INTERNAL CLOCK INIT CODE CLEN= 6135 CLA IAC CLEN /ENABLE PDP8/A CLOCK INTERRUPTS CLA > > /END OF CLOCK CONDITIONAL CLA IAC /REMOVE CONDITIONALIZATION FOR RX DCA CTR ION /FINALLY, ENABLE INTERRUPTS AGAIN /PERFORM TASK-DEPENDENT ACTIONS PWRUPL, TAD CTR TAD (PFLTBL DCA PTR TAD I PTR /GET CONTROL WORD FOR THIS TASK SNA JMP PWRUPN /NOTHING TO DO CMA SNA JMP PWRUPE /JUST CLEAR EVENT FLAG WAIT CMA DCA DRLADR TAD CTR CAL /DERAIL THE TASK DERAIL /INTO THE SUBROUTINE OF ITS CHOICE DRLADR, 0 PWRUPE, TAD CTR CAL UNBARG EFWT!EORMWT /CLEAR ALL FLAGS DEPENDING ON EFWT PWRUPN, TAD CTR TAD (-NTASKS SNA CLA /THROUGH? JMP PWFLLP /YES ISZ CTR JMP PWRUPL .DSECT PWRFD, LEVEL=0 FIELD PWRFF PFLTBL, ZBLOCK NTASKS+1 /FIRST WORD NOT USED IFDEF DTA < *PFLTBL+DTA -1 > IFDEF RK8 < *PFLTBL+RK8 -1 > IFDEF RF08 < *PFLTBL+RF08 -1 > IFDEF DF32 < *PFLTBL+DF32 -1 > IFDEF LPT < *PFLTBL+LPT -1 > $-$-$