; ; NAME: FNDSPD ; ; FUNCTION: This program is run to determine what speed an incoming ; terminal is set at. It does this by varying the port speed, asking ; the terminal operator to enter Carriage Returns, and then trying to ; read them. If it finds a valid CR character, it assumes that it is ; at the right speed. The only serial I/O board supported is the ; AM300. The only speeds supported are 300 and 1200. The line is ; is originally set to 1200 baud. ; ; AUTHOR: Tom Dahlquist ; ; HISTORY: ; When Who What ; 04/26/84 TAD Written. ; SEARCH SYS SEARCH SYSSYM SEARCH TRM VMAJOR=1 VMINOR=0 VEDIT=0 FNDSPD: PHDR -2,PV$RSM!PV$WSM,PH$REU!PH$REE GETIMP 4,A0 CLR @A0 JOBIDX A5 ; A5 -> JCB... MOV JOBTRM(A5),A5 ; A5 -> TDB... MOV 2(A5),A1 ; A1 -> IDV control block... SUB #4,A1 ; A1 -> IDV name... CMM @A1,AM300 ; right board? BEQ BRDOK ; br if so, else TYPECR <?Only AM300 ports supported.> EXIT BRDOK: ORW #T$IMI,@A5 ; set image mode... MOVW #10,D0 ; start at 1200.. CALL SETSPD CLRLP: TCKI ; check for input... BNE WAIT ; go wait for some if none, else KBD ; clear out buffer. BR CLRLP WAIT: KBD ; wait for a character... ; ; Loop changing the baud rate and waiting for a CR. ; LOOP: NOTW @A0 ; flip switch... BEQ 1$ MOVW #10,D0 ; set 1200 baud... BR 2$ 1$: MOVW #6,D0 ; set 300 baud... 2$: CALL SETSPD TYPECR <Hit a Carriage Return and wait--> MOVW #2,D5 ; for loop... ILOOP: SLEEP #10000. ; wait 1 second, TCKI: TCKI ; anything in buffer? BNE ILPE ; go sleep again if not, else KBD ; get it and see if it's CMPB D1,#15 ; a CR... BEQ EXIT ; if so, all done... BR TCKI ; else see if any more. ILPE: DBF D5,ILOOP ; do this N times, then fall thru JMP LOOP ; and do the switch again. EXIT: TYPE <Speed set at > TSTW @A0 BEQ 1$ TYPE <1200> BR 2$ 1$: TYPE <300> 2$: TYPECR < baud.> EXIT SETSPD: SUPVR ; set supervisor state and SVLOK ; disable interrupts. MOV T.IHW(A5),A4 ; A4 -> I/O port... MOV T.IHM(A5),D3 ; get port number ANDB #7,D3 ; for MUX reg... ORB #10,D3 ; set baud rate change bit... MOVB D3,4(A4) ; and send to MUX reg. MOVB D0,@A4 ; send baud rate. ANDB #^C10,D3 ; turn off baud rate change bit... MOVB D3,4(A4) ; select ASTRO... MOVB #11,1(A4) ; set standard stuff... MOVB #205,@A4 MOVB #20,4(A4) ; enable interrupts... SVUNLK ; enable interrupts... SSTS 2(A0) ; get current processor status, ANDW #157777,2(A0) ; turn off supervisor state, and LSTS 2(A0) ; reload it. RTN AM300: RAD50 /AM300/ END