/ RT01 INTERRUPT HANDLER ROUTINE 24-JUL-78 / / / THE RT01 HANDLER GATHERS DATA FROM THE RT01 DATA / TERMINAL FOR OTHER TASKS. AFTER INITIALIZATION / THIS TASK WAITS FOR A MESSAGE FROM ANOTHER TASK. / WHEN A MESSADGE IS RECEIVED, THE RT01 IS ENABLED, / AND THE DATA ENTERED IS PUT IN THE CALLER'S MESSAGE. / WHEN A CONTROL CHARACTER (B,C,D,E OR F) IS DETECTED, / IT IS PLACED AT THE HEAD OF THE MESSAGE ALONG WITH / THE CURRENT STATUS INDICATOR, AND THE NUMBER OF / DIGITS ENTERED. THE MESSAGE IS THEN POSTED. THIS / TASK ALSO ECHOES NUMERIC INPUT,, AND THE "A" CONTROL / KEY FUNCTIONS OF DISPLAY CLEAR, AND ROTATING THE / STATUS INDICATOR. TASK= RT01 CUR= RT01FLD INIWT= 0 VERS= 1 FIELD RT01FLD%10 *RT01LOC / / /%RX RT01 DATA ENTRY TERMINAL COMMANDS / / RTKCF= 6300 /CLEAR THE KEYBOARD FLAG RTKSF= 6301 /SKIP IF THE KEYBOARD FLAG IS SET RTKCC= 6302 /CLEAR THE AC AND THE KEYBOARD FLAG RTKRS= 6304 /READ THE KEYBOARD BUFFER STATICALLY RTKIE= 6305 /PUT AC BIT 11 IN THE INTERRUPT ENABLE F-F RTKRB= 6306 /CLEAR THE AC, READ THE KEYBOARD BUFFER, AND /CLEAR THE KEYBOARD FLAG RTTFL= 6310 /SET THE DISPLAY FLAG RTTSF= 6311 /SKIP IF THE DISPLAY FLAG IS SET RTTCF= 6312 /CLEAR THE DISPLAY FLAG RTTPC= 6314 /LOAD THE DISPLAY BUFFER AND DISPLAY RTTSK= 6315 /SKIP IF THE RTO1 INTERRUPT OCCURRED RTTLS= 6316 /LOAD THE DISPLAY BUFFER, DISPLAY, AND /CLEAR THE DISPLAY FLAG / / / / MESSAGE BUFFER FORMAT / /RT01MSG,ZBLOCK 3 /EXECUTIVE STORE /RTSIND, 0 /INDICATOR STATUS /RTFUNC, 0 /FUNCTION CODE /RTDECF, 0 /CHARACTER COUNT /RTDBUF, ZBLOCK 14 /CHARACTER BUFFER / / / RT01 INTERRUPT HANDLER ROUTINE / / START, CLB CAL /INSERT RT01 INTO SKIP CHAIN SKPINS RT01IN CAL /NOW TELL POWER FAIL WHAT TO DO. SEND PWRF PWRFMG TAD (100) /CLEAR THE RT01 DISPLAY. RTTLS NEXTM, CLB CAL RECEIVE /GO TO SLEEP TIL NEEDED MADDR, 0 DCA MSGCDF /SAVE CDF TO MESSAGE TAD MSGCDF DCA BUFCDF /SET MESSAGE CDF NEXTO, CLB TAD (3) TAD MADDR DCA RTDPTR /SET POINTER TO BUFFER DCA RTDFLG NEXTC, ISZ RTDEVF /SET OUR EVENT FLAG PENDING. CAL WAITE /WAIT FOR NEXT CHARACTER RTDEVF TAD RTDCHR /FETCH CHARACTER TAD (-100) /IS THE CHARACTER = A NUMBER ? SMA JMP RT00 /NO, GO ON TAD (100) /YES, REFORM THE CHARACTER. BUFCDF, HLT DCA I RTDPTR /PUT THE NEW CHARACTER IN THE BUFFER CDF CUR ISZ RTDPTR /INCREMENT THE DATA BUFFER POINTER ISZ RTDFLG /INCREMENT THE RT01 DATA ACTIVE FLAG TAD RTDFLG /IS THE POINTER STILL WITHIN THE TAD (-13) /BUFFER ? SMA CLA JMP RT02 /NO, EXIT. TAD RTDCHR /EHCO THE NEW DATA RTTLS CLB JMP NEXTC /ON TO THE NEXT CHARACTER. / RT00, DCA RTDFNC TAD RTDFNC TAD (-1) /IS THE NEW CHARACTER = AN "A" ? SZA CLA JMP RT02 /NO, GO ON TAD RTDFLG /YES, IS THE BUFFER RESET FLAG SET ? SNA CLA JMP RT03 TAD (100) RTTLS JMP NEXTO /NO, GO ON RT03, TAD RTDIND /YES, ROTATE THE STATUS INDICATOR CLL RAL /BIT AND (17) SNA CLB IAC TAD (120) RTTLS /DISPLAY THE ACTIVE STATUS INDICATOR AND (17) DCA RTDIND /SAVE THE STATUS INDICATOR BIT JMP NEXTC RT02, CLB TAD MADDR DCA RTDPTR /SET UP POINTER TO MSG AREA TAD MSGCDF DCA .+1 /SET UP CDF TO MSG AREA 0 TAD RTDIND DCA I RTDPTR /MOVE RT01 INDICATOR STATUS ISZ RTDPTR TAD RTDFNC DCA I RTDPTR /MOVE RT01 FUNCTION STATUS ISZ RTDPTR TAD RTDFLG DCA I RTDPTR /MOVE CHARACTER COUNT TAD (100) /CLEAR THE RT01 DISPALY. RTTLS CDF CUR AC7775 TAD MADDR CAL POST MSGCDF, 0 JMP NEXTM /GO WAIT FOR NEXT MESSAGE RTDFLG, 0 /RT01 DATA ACTIVE FLAG RTDPTR, 0 /RT01 DATA BUFFER POINTER RTDEVF, 1 /RT01 EVENT FLAG RTDIND, 0 /RT01 INDICATOR STATUS RTDFNC, 0 /RT01 FUNCTION STATUS RTDCHR, 0 /CHARACTER STORE / / /%R RT01 INTERRUPT LEVEL CODE / /%TW COME HERE WHEN AN RT01 KEYBOARD INTERRUPT IS / DETECTED. TEST FOR A CONTROL KEY AND SET UP THE / NECESSARY RESPONCE. / WHEN A NEW CHARACTER IS DETECTED, SAVE IT AND / WAKE UP THE TASK LEVEL CODE. / / RT01IN, ZBLOCK 2 /EXEC INTERUPPT STORAGE RTTSK /IS THE RT01 INTERRUPT ENABLED ? JMP I RT01IN /NO, GO TO NEXT MODULE IN CHAIN CDI CUR /YES, CONTINUE RTTSF /IS THE DISPLAY FLAG SET ? SKP /NO, CONTINUE RTTCF /YES, CLEAR THE DISPLAY FLAG RTKSF /IS THE KEYBOARD FLAG SET ? JMP RTDPST /NO, EXIT RTKRB /YES, READ THE NEW CHARACTER AND (177) /REMOVE THE PARITY BIT (FOR EPL). DCA RTDCHR /SAVE THE CHARACTER FOR LATER TAD (RTDEVF) RTDPST, CIF 0 POSTDS /DISMISS THE INTERRUPT AND POST FLAG PWRFMG, ZBLOCK 3 /POWER FAIL RESTART . JMP RT02 PAGE NOPUNCH XLIST 1