.TITLE SPEED - BAUD RATE SETTING PROGRAM FOR THE PDT-11/150 .SBTTL ************************************ .SBTTL * * .SBTTL * SPEED * .SBTTL * .IDENT /V01.00/ * .SBTTL * * .SBTTL ************************************ .SBTTL ; Copyright (c) 1998 by Mentec, Inc., Nashua, NH. ; All rights reserved ; ; This software is furnished under a license for use only on a ; single computer system and may be copied only with the ; inclusion of the above copyright notice. This software, or ; any other copies thereof, may not be provided or otherwise ; made available to any other person except for use on such ; system and to one who agrees to these license terms. Title ; to and ownership of the software shall at all times remain ; in Mentec, Inc. ; ; The information in this document is subject to change without ; notice and should not be construed as a commitment by Digital ; Equipment Corporation, or Mentec, Inc. ; ; Digital and Mentec assume no responsibility for the use or ; reliability of its software on equipment which is not supplied ; by Digital or Mentec, and listed in the Software Product ; Description. ; ; MODULE: SPEED ; ; VERSION: V01.00 ; ; AUTHOR: Jim Scott ; ; DATE: 20-Dec-78 ; ; MODIFIED BY: ; X01.01 JS Add Communications Port destination ; V01.00 LP Fix CSI line handling .ENABL LC .MACRO IDENT SYM .IDENT /SYM/ IDENT: .ASCIZ /SPEED 'SYM/ .EVEN .ENDM IDENT V01.00 .SBTTL MAIN CONTROL ROUTINE .MCALL .CSISPC,.PRINT,.TRPSET CR = 15 LF = 12 SPSAVE = 42 BEGIN: .PRINT #IDENT ;DISPLAY PROGRAM NAME AND VERSION START:: MOV @#SPSAVE,SP ;RESET INITIAL STACK VALUE .TRPSET #DUMMY,#TRAP ;CATCH TRAPS TO 4 & 10 WHEN THIS PROGRAM IS ;RUN ON OTHER THAN A PDT-11 .CSISPC #DUMMY,#DUMMY,#0,#BUF ;GET SWITCHES AND VALUES TSTB BUF ;NULL COMMAND LINE? BEQ BEGIN ;BR IF SO, PRINT ID MOV (SP)+,R1 ;GET # OF OPTIONS FROM STACK BEQ BEGIN ;BR IF NO OPTIONS, NOTHING TO DO MOV #14,R2 ;START ENABLE WORD WITH 8 BIT CHARACTERS AND ;PARITY DISABLED AS THE DEFAULT LOOP: BR PROCES ;PROCESS AN OPTION BACK: SOB R1,LOOP MOV R2,@#177420 ;DEPOSIT R2 IN USART PARAMETER ADDRESS ;REGISTER BR START ; PROCES IS NOT A CALLABLE SUBROUTINE TO KEEP THE STACK CLEAN AND SIMPLE PROCES: MOV (SP)+,R0 ;GET OPTION OFF STACK CMPB R0,#'T ;CHECK FOR TERMINAL NUMBER BEQ SETT CMPB R0,#'P ;CHECK FOR PRINTER BEQ SETP CMPB R0,#'M ;CHECK FOR COMMUNICATIONS LINE BEQ SETM CMPB R0,#'S ;CHECK FOR BAUD RATE BEQ SETS CMPB R0,#'H ;CHECK FOR HELP BNE 10$ JMP HELP 10$: CMPB R0,#'D ;CHECK FOR PARITY DISABLED BEQ BACK ;NO ACTION REQUIRED (BIT4=0 -> DISABLED) CMPB R0,#'E ;CHECK FOR PARITY ENABLED BEQ SETE CMPB R0,#'C ;CHECK FOR CHARACTER LENGTH BEQ SETC .PRINT #MSG1 ;INVALID OPTION BR START TRAP: .PRINT #MSG7 ;INFORM USER THAT THIS PROGRAM RUNS ONLY ON ;PDT-11'S JMP START ;RESTART .SBTTL * SETT - DEVICE SELECT FOR TERMINALS SETT:: TST R0 ;CHECK FOR SWITCH VALUES ON STACK BLT 10$ ;BRANCH IF THERE IS A VALUE .PRINT #MSG2 BR START 10$: MOV (SP)+,R0 ;GET THE /T VALUE BIS #14,R2 ;SET 8 BIT CHARS, PARITY DISABLED CMP R0,#0 ;CHECK FOR SWITCH VALUES AND BRANCH TO BEQ SETT0 ;APPROPRIATE ROUTINES CMP R0,#1 BEQ SETT1 CMP R0,#2 BEQ SETT2 CMP R0,#3 BEQ SETT3 .PRINT #MSG2 ;INVALID TERMINAL NUMBER BR START SETT0: BIS #10000,R2 ;CONSOLE TERMINAL DESTINATION BR BACK SETT1: BR BACK ;CLUSTER PORT 1 = 0 SETT2: BIS #50000,R2 ;CLUSTER PORT 2 BR BACK SETT3: BIS #60000,R2 ;CLUSTER PORT 3 BR BACK .SBTTL * SETP - DEVICE SELECT FOR PRINTER SETP:: BIS #20000,R2 ;SET PRINTER IN DESTINATION FIELD BR BACK .SBTTL * SETM - DEVICE SELECT FOR COMMUNICATIONS LINE SETM: BIC #400,@#176624 ;CLEAR MASTER RESET BIT IN TXCSR FOR ASYNC BIS #30000,R2 ;MAKE COMMUNICATIONS PORT THE DESTINATION BR BACK .SBTTL * SETS - BAUD RATE SELECT SETS:: TST R0 ;CHECK FOR SWITCH VALUE ON STACK BLT 10$ ;BRANCH IF VALUE PRESENT .PRINT #MSG3 ;DISPLAY VALID SPEEDS JMP START ;GIVE THEM ANOTHER TRY 10$: MOV (SP)+,R0 ;GET THE SPEED VALUE MOV #56.,R3 ;OFFSET INTO THE TABLES 20$: CMP R0,SPDTAB-2(R3) ;CHECK SPEED TABLE FOR MATCH BEQ 30$ DEC R3 SOB R3,20$ .PRINT #MSG3 ;NO MATCH ON TABLE SPEEDS JMP START 30$: BIS SPDVAL-2(R3),R2 ;SET THE BAUD RATE BITS IN THE PARAMETER WD JMP BACK ;GO BACK FOR MORE OPTIONS OR STOPPING .SBTTL * SETE - PARITY ENABLED SETE:: TST R0 ;CHECK FOR SWITCH VALUE PRESENT ON STACK BLT 10$ ;BRANCH IF ITS THERE .PRINT #MSG5 ;ELSE ERROR MESSAG JMP START ;AND START OVER 10$: MOV (SP)+,R0 ;GET SWITCH VALUE BEQ 20$ ;BRANCH IF ODD PARITY BIS #60,R2 ;EVEN PARITY, PARITY ENABLED JMP BACK 20$: BIS #20,R2 ;ODD PARITY, PARITY ENABLED JMP BACK .SBTTL * SETC - CHARACTER LENGTH IN BITS SETC:: TST R0 ;CHECK FOR SWITCH VALUE ON STACK BLT 10$ ;BRANCH IF ITS THERE .PRINT #MSG6 ;ELSE PRINT ERROR MESSAGE JMP START ;AND START OVER 10$: MOV (SP)+,R0 ;GET # BITS PER CHARACTER FROM STACK SUB #5,R0 ;RANGE CHECK NUMBER OF BITS (MUST BE 5-8) BLT 20$ ;BRANCH IF LOW CMP R0,#3 BHI 20$ ;BRANCH IF HIGH ASL R0 ;GET CHARACTER LENGTH IN BITS 2-3 ASL R0 BIC #14,R2 ;CLEAR OUT THE CHARACTER LENGTH FIELD BIS R0,R2 ;PUT IN CHARACTER LENGTH FIELD JMP BACK 20$: .PRINT #MSG6 ;SWITCH VALUE NOT IN LEGAL RANGE JMP START ;PRINT ERROR MESSAGE AND START OVER .SBTTL * HELP HELP:: .PRINT #HLPMSG JMP START HLPMSG: .ASCII /SPEED OPTIONS:/ .ASCII ; /T:n Terminal #(0,1,2,3); .ASCII ; /S:n Baud Rate (Speed); .ASCII ; /P Printer;<15><12> .ASCII ; /M Communications line; .ASCII ; /D Parity Disabled(default); .ASCII ; /E:n Parity enabled, n=0->ODD, n=1->EVEN; .ASCII ; /C:n Character length (5-8); .ASCII .ASCII 'The command line must name a device with the /T, /P,' .ASCII .ASCII 'or /M option, and only one speed setting can be made' .ASCII .ASCII /on a command line. For example, the following command/ .ASCII .ASCII /line sets cluster port 2 to 2000 baud with odd parity./ .ASCII .ASCIZ ' */T:2/S:2000./E:1' .EVEN .SBTTL * SPDTAB - SPEED TABLE (BAUD RATES) AVAILABLE ON PDT SPDTAB:: .WORD 19200. .WORD 9600. .WORD 7200. .WORD 7200 .WORD 4800. .WORD 3600. .WORD 3600 .WORD 2400. .WORD 2400 .WORD 2000. .WORD 2000 .WORD 1800. .WORD 1200. .WORD 1200 .WORD 600. .WORD 600 .WORD 300. .WORD 300 .WORD 150. .WORD 150 .WORD 134. .WORD 134 .WORD 110. .WORD 110 .WORD 75. .WORD 75 .WORD 50. .WORD 50 .SBTTL * SPDVAL - SPEED VALUE TABLE - FOR PARAMETER REGISTER ; SPDVAL TABLE IS THE PARALLEL TABLE TO THE SPDTAB, CONTAINING THE VALUE ; TO BE "OR"ED WITH THE PARAMETER REGISTER WORD TO SET THE PARALLEL SPEED ; IN THE SPDTAB. SPDVAL:: .WORD 7400 .WORD 7000 .WORD 6400 .WORD 6400 .WORD 6000 .WORD 5400 .WORD 5400 .WORD 5000 .WORD 5000 .WORD 4400 .WORD 4400 .WORD 4000 .WORD 3400 .WORD 3400 .WORD 3000 .WORD 3000 .WORD 2400 .WORD 2400 .WORD 2000 .WORD 2000 .WORD 1400 .WORD 1400 .WORD 1000 .WORD 1000 .WORD 400 .WORD 400 .WORD 0 .WORD 0 .SBTTL * MESSAGES AND BUFFERS DUMMY: .BLKW 39. BUF: .BLKB 82. MSG1: .ASCIZ '?SPEED-W-Invalid option; type /H if you need help' MSG2: .ASCIZ ;?SPEED-W-Valid /T options are 0,1,2 and 3; MSG3: .ASCII ;?SPEED-W-Valid baud rates are 50, 75, 110, 134, 150, 300,; .ASCII .ASCIZ ; 600, 1200, 2400, 3600, 4800, 7200, 9600, 19200; MSG5: .ASCIZ ;?SPEED-W- /E option must have value, 0=ODD, 1=EVEN; MSG6: .ASCIZ ;?SPEED-W- /C option must have value 5,6,7 or 8; MSG7: .ASCIZ '?SPEED-W-SPEED works only for PDT-11 processors' .END BEGIN