File TTYS.PA (PAL assembler source file)

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

/ TTY POWER CONTROL TASK			2/2/77

	VERS=1

/TASK DATA BLOCK:

	TASK=	TTYS
	CUR=	TTYSFLD
	INIWT=	0




/%RT	TTYS - TELETYPE STARTUP TASK
/
/
/
/%TW	THIS ROUTINE IS CALLED BY OTHER PQI TASKS WHEN
/	MESSAGES ARE TO LOGGED ON THE TELETYPE. SINCE
/	THE TELETYPE DOES NOT WANT TO BE LEFT RUNNUNG
/	ALL THE TIME, IT IS TURNED ON BY THIS TASK AS
/	NEEDED.  WHEN THERE ARE NO MORE MESSAGES TO
/	LOG, THE TELETYPE IS TURNED OFF.
/
/%TW	AFTER TURNING ON THE TELETYPE, THIS TASK MOVES
/	THE MESSAGE TEXT TO A LOCAL BUFFER AND PASSES
/	THE BUFFER TO THE RTS8 TTY HANDLER.  THE CALLING
/	TASK USES "TTYS" EXACTLY THE SAME AS THE RTS8
/	TTY HANDLER.
/
/%TW	THE FIRST WORD OF THE TEXT MESSAGE IS CHECKED
/	FOR A SPECIAL CONTROL CHARACTER. IF BITS 0-5 OF
/	THE FIRST WORD CONTAINS A "]", BITS 6-11
/	ARE DECODED AS SPECIAL FUNCTIONS TO BE DONE
/	BEFORE THE TEXT IS PRINTED. IF BITS 0-5 DO NOT
/	CONTAIN A "]", THE WORD IS PASSED ON TO THE TTY
/	HANDLER WITH THE REST OF THE TEXT.
/
/%TW	THE RTS8 MCR TASK DOES NOT USE "TTYS" SINCE THE
/	MCR DOES NOT INIATE OUTPUT, BUT ONLY RESPONDS
/	TO OPERATOR ENTRY.  TO CONVERSE WITH THE MCR, THE
/	OPERATOR HAS TO MANUALLY TURN ON THE TELETYPE
/	WITH THE HARDWARE SWITCH.

/ /%TW CURRENTLY THIS TASK CANNOT BE USED FOR TELETYPE / INPUT. TO DO TTY INPUT, IT IS NECESSARY TO CALL / THIS TASK FIRST WITH SPECIAL CODE "1" TO TURN ON / THE TELETYPE POWER, THEN CALL THE TTY HANDLER / DIRECTLY TO DO THE DESIRED INPUT. AFTER THE INPUT / HAS BEEN COMPLETED, THIS TASK IS CALLED WITH / SPECIAL CODE "2" WHICH WILL TURN OFF THE TELETYPE / POWER. NOTE THAT CALLING THIS TASK WITH SPECIAL / CODES "1" AND "2" ONLY CONTROLS THE TELETYPE / POWER, NO TEXT IS PRINTED. / / / / THE SPECIAL FUNCTIONS CURRENTLY DEFINED ARE: / / CODE FUNCTION / / 1 TURN TELETYPE POWER ON AND EXIT. NO TEXT / IS PRINTED WITH THIS CALL. / 2 TURN TELETYPE POWER OFF AND EXIT. NO TEXT / IS PRINTED WITH THIS CALL. / 3 DISCONNECT MEMORY/PQI COMMUNICATIONS, AND / THEN PRINT THE TEXT THAT FOLLOWS THE CALL. / / / / / THE MESSAGE FORMAT FOR TTYS IS IDENTICAL TO THE / MESSAGE FORMAT OF THE TTY TASK. /
/ FIELD CUR%10 *TTYSLOC START, CAL RECEIV /TAKE THE MESSAGE OFF THE Q MADDR, 0 /GETS ADDRESS OF MESSAGE DCA MSGCDF /FIELD OF MSG IN AC AC7775 TAD MADDR DCA MEVFLG /SAVE MESSAGE EVENT FLAG ADDRESS JMS CDFMSG TAD I MADDR /FIRST WORD OF MESSAGE IS FLAGS. DCA NFLAGS /SAVE THE FUNCTION CONTROL WORD. ISZ MADDR ISZ MADDR TAD NFLAGS RTL SMA CLA /BIT 1000 OF FLAG WORD INDICATES IF JMP STA1 /MESSAGE OR POINTER TO IT FOLLOWS. TAD I MADDR /WAS POINTER, GET REAL TEXT ADDRESS. DCA MADDR TAD NFLAGS /REMOVE INDIRECT POINTER BIT. AND (6777) DCA NFLAGS
/ / / START UP THE TELETYPE HARDWARE AND CHECK FOR / SPECIAL COMAND CODES / / STA1, CDF CUR IFDEF EPLTEST <JMP STA2> /TTY IS UP AT EPL !! DBRO DR851 /IS THE TTY POWER ON NOW ? AND (0010) SZA CLA JMP STA2 /YES, GO ON. TAD (10) /NO, TURN IT ON. DBSO DR851 CLB CAL /GO TELL THE CLOCK TASK TO DELAY US SENDW /FOR ABOUT 1 SECOND. CLOCK CLKMSG STA2, JMS CDFMSG /SET THE DATA FIELD TO THE TEXT. TAD I MADDR /GET THE FIRST WORD OF THE MESSAGE. CDF CUR /DATA FIELD BACK TO HERE. MQL /SAVE MQA AND (7700) /LOOK AT BITS 0-5. TAD (-"]&77^100) /IS IT THE SPECIAL CHARACTER "]" ? SZA CLA JMP STA3 /NO, GO ON. ISZ MADDR /YES, INCREMENT THE TEXT POINTER. MQA /DECODE THE SPECIAL COMMAND. AND (0017) /GET NUMERIC VALVE OF CHARACTER. TAD (-1) /IS THE FUNCTION = "1" ? SZA JMP .+3 /NO. GO ON. ISZ FASTEX /YES, SET THE FAST EXIT FLAG. JMP EORPLY /GO EXIT WITH THE TTY POWER ON. TAD (-1) /IS THE FUNCTION = "2" ? SNA JMP EORPLY /YES, GO EXIT AND TURN OFF THE TTY. TAD (-1) /IS THE FUNCTION = "3" ? SZA CLA JMP STA3 /NO, GO ON. TAD (COMM) /YES, RUN THE "COMM" TASK TO SHUT CAL /DOWN THE MEMORY/PQI DB8 RUN /COMMUNICATION LINK. STA3, JMS MOVETX /GO MOVE THE USER'S TEXT TO THE TTY.
/ EORPLY, CDF CUR /HERE IF NO INPUT OR INPUT FINISHED TAD MSGCDF DCA MF TAD MEVFLG /GET THE ADDRESS OF THE EVENT FLAG, CAL /AND POST THE SENDER'S EVENT FLAG POST /SO HE'LL KNOW WE GOT HIS INPUT. MF, 0 / / / POWER DOWN THE TELETYPE WHEN OUTPUT IS FINISHED. / / CLB IFDEF EPLTEST <JMP STO2> /FOR RUNNING AT EPL TAD FASTEX /IS THE FAST EXIT FLAG SET ? SZA CLA JMP STO2 /YES, CLEAN UP AND RETURN. TAD TTYMSG /NO, IS THE TELETYPE ACTIVE NOW ? SNA CLA JMP STO1 /NO, GO ON. CAL /YES, WAIT 'TILL ITS DONE. WAITE TTYMSG STO1, CDF 0 /SET DATA FIELD TO EXEC. TAD I (TTYS^2+MSGTBL) /SEE IF ANOTHER MESSAGE CDF CUR /IS WAITING IN OUR QUEUE. SZA CLA JMP STO2 /YES, JUST GO RECEIVE IT NOW. CAL /NO, GO TELL THE CLOCK TASK TO DELAY SEND /US FOR ABOUT 1 SECOND. CLOCK CLKMSG IOF /"CAL" WILL RESTORE INTERRUPTS ON. TAD CLKMSG /IS THE CLOCK MESSAGE STILL SNA CLA /PENDING ? JMP STO1 /NO, RESET IT FOR THE WAITM BELOW. TAD (4000+TTYS) /SET THE CLOCK MESSAGE EVENT FLAG DCA CLKMSG /PENDING SINCE "SEND" DOES NOT. CIF 0 /NO MESSAGE YET, GO WAIT FOR EITHER WAITM /THE DELAY TO TIME OUT OR A MESSAGE EORMWT /TO COME IN. TAD CLKMSG /AWAKE AGAIN, DID WE TIME OUT ? SNA CLA /NO, LEAVE THE TTY POWER ON. TAD (10) /YES, POWER DOWN THE TTY. DBCO DR851 STO2, ION /BACK TO THE INTERUPPT WORLD. CLB DCA FASTEX /CLEAR THE FAST EXIT FLAG. DCA CLKMSG /CLEAR THE CLOCK DELAY EVENT FLAG. JMP START /NNNNNNNNNNNNNNNNNNNEXT!
/ CDFMSG, 0 MSGCDF, HLT JMP I CDFMSG FASTEX, 0 /FAST EXIT FLAG. MEVFLG, 0 /ADDRESS OF INPUT MESSAGE EVENT FLAG NFLAGS, 0 /TEXT FUNCTION CONTROL WORD PAGE
/ / / MOVE THE CALLING TASK'S TEXT TO THE TTY / / MOVETX, 0 TAD MADDR /GET THE MESSAGE ADDRESS ON THIS DCA STADDR /PAGE. AC5777 /REMOVE THE CR-LF AFTER TEXT BIT AND AND NFLAGS /UPDATE THE CURRENT FUNCTION WORD TO TAD (2000) /SAY NO CR-LF. DCA FLAGS MOV1, TAD (-DBUFLN) /TRANSFER LOOP COUNTER. DCA MOVECT TAD (OUTXT) /SET UP THE LOCAL BUFFER POINTER. DCA BUFPTR MOV2, JMS CDFMSG /SET THE DATA FIELD FOR THE TEXT. TAD I STADDR /GET THE NEXT WORD OF TEXT ISZ STADDR CDF CUR /DATA FIELD BACK TO HERE. DCA I BUFPTR /PUT IT IN THE LOCAL BUFFER. TAD I BUFPTR /GET THE TEXT WORD BACK. ISZ BUFPTR AND (0077) /WAS THE TEXT WORD A TERMINATOR ? SNA CLA JMP MOV3 /YES, THAT'S THE END OF THE TEXT. ISZ MOVECT /NO, IS THE LOCAL BUFFER FULL ? JMP MOV2 /NO, GET ANOTHER WORD OF TEXT. CAL /YES, SEND THE BUFFER TO THE TTY. SENDW /(AND WAIT 'TIL IT DONE.) TTY TTYMSG JMP MOV1 /NOW GO GET SOME MORE TEXT. MOV3, TAD NFLAGS /RESET THE CR-LF BIT. DCA FLAGS CAL /SEND THE LAST BUFFER TO THE TTY. SEND TTY TTYMSG JMP I MOVETX /RETURN.
/ STADDR, 0 /ADDRESS OF THE TEXT FOR OUTPUT. MOVECT, 0 /LOOP COUNTER. BUFPTR, 0 /LOCAL BUFFER POINTER. DBUFLN= 60 /LOCAL BUFFER LENGTH. CLKMSG, ZBLOCK 3 /TURN ON/OFF DELAY MESSAGE. 0 0 120 /ABOUT 1 SECOND. TTYMSG, ZBLOCK 3 /TELETYPE TEXT MESSAGE. FLAGS, 0 0 OUTXT, ZBLOCK DBUFLN 0 /BUFFER TERMINATOR. $=$=LHN=$=$



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