; BAUD program, just for AM-1000 thou... ; ; allows you to show/change the baud rate of ANY terminal. ; ; .BAUD 19200 ; change attached term to 19200 ; .BAUD ; show attached term baud rate ; .BAUD 1200,KB03 ; change terminal called KB03 to 1200 ; .BAUD ,KB03 ; show terminal called KB03 baud rate ; ; Copyright [c] Noel Alaska Systems Technology, 1983. VMAJOR = 1. ; version equates VMINOR = 0. VSUB = 0. VEDIT = 5. ; CHANGE EACH EDIT <----------- VWHO = 0. SEARCH SYS ; AMOS librarys SEARCH SYSSYM SEARCH TRM SEARCH MFN ; My library PORT0 = ^H0FFFE20 ; I/O base for port 0 PORT1 = ^H0FFFE24 ; I/O base for port 1 PORT2 = ^H0FFFE30 ; I/O base for port 2 PORTB = ^H0FFFE28 ; Baud rate generator port CM$RESET = 3 ; Master Reset for ACIA CM$16 = 1 ; Clock is divide by 16 CM$1STP = 24 ; 8 data bits, 1 stop bit, no parity CM$2STP = 20 ; 8 data bits, 2 stop bits, no parity CM$TXD = 0 ; RTS bar low, transmitter disabled CM$RCE = 200 ; Receiver Enabled P.RCV = 2 ; Receiver Holding Register (Input) DSECT .=0 USETRM: BLKL 1 ; entered term (or mine) USERAT: BLKW 1 ; entered rate WORK: BLKB 20. ; file name buffer EVEN IMPURE = . .=0 PSECT BEGIN: PHDR -1,-1,PH$REE!PH$REU GETIMP IMPURE,A4 ; get memory ; BITL #SY$CPA,SYSTEM ; BNE 1$ ; TYPECR ; EXIT 1$: JOBIDX A0 MOV JOBTRM(A0),USETRM(A4) ; presume attached term BYP LIN JEQ SHOEM ; show current rates if nothing GTDEC MOVW D1,USERAT(A4) ; get entered baud rate BYP LIN BEQ CHKTRM ; try with our term if no more CMPB @A2,#54 ; allow comma seperator BNE 2$ INC A2 2$: FILNAM WORK(A4),TRM ; get term name BEQ 3$ ; invalid - ????????? CALL TRMSRH ; try to find the terminal he wants MOV A0,USETRM(A4) ; stash the address BNE CHKTRM ; drive on if we got one... 3$: TYPECR EXIT CHKTRM: MOV USETRM(A4),A5 ; point to term being used MOV T.IDV(A5),A0 ; point to IDV CMMW #[AM1],-4(A0) ; verify AM1000.IDV BNE 1$ CMMW #[000],-2(A0) BEQ CHKRAT 1$: TYPECR EXIT CHKRAT: TSTW USERAT(A4) ; if rate is zero, presume show JEQ SHOEM LEA A0,TBL1 ; validate baud rate CLR D1 1$: TSTW @A0 ; table end? BEQ 2$ ; YES CMMW @A0,USERAT(A4) ; rate match? BEQ 3$ ; YES ADD #2,A0 ; advance pointer INC D1 ; and 'code' pointer BR 1$ 2$: TYPECR EXIT 3$: LEA A0,TBL2 ; point to 'code' table ADD D1,A0 ; index w/'code' pointer CLR D0 MOVB @A0,D0 ; get code BMI 2$ ; bomb if code is invalid MOVW D1,T.BAU(A5) ; save code pointer in TRMDEF DOIT: SUPVR ; get supvr state SVLOK ; lock while changing port TST T.IHM(A5) ; are we selecting port 0? BEQ 1$ ; yes - MOVB #40,D2 ; select port 1 baud rate load, MOV #PORT1,A3 ; I/O port CMP T.IHM(A5),#1 ; is it port 1? BEQ 2$ ; yes - off we go MOVB #300,D2 ; no - select port 2 baud rate load, MOV #PORT2,A3 ; I/O port BR 2$ 1$: MOVB #20,D2 ; get port 0 select bit MOV #PORT0,A3 ; index port 0 2$: ORB D0,D2 ; combine selector code with baud rate MOVB D2,PORTB ; send to baud rate generator MOVB #CM$RESET,@A3 ; reset the 6850 ACIA chip MOVB #CM$16!CM$1STP!CM$TXD!CM$RCE,D2 CMPB D0,#2 ; did we want 110 baud? BNE 3$ ; no - MOVB #CM$16!CM$2STP!CM$TXD!CM$RCE,D2 3$: MOVB D2,@A3 ; set up ACIA MOVB P.RCV(A3),D1 ; purge any input SVUNLK ; unlock (proforma) EXIT SHOEM: MOV USETRM(A4),A5 ; pick up terminal id CLR D0 ; pick up baud code pointer MOVW T.BAU(A5),D0 ADD D0,D0 ; double it for index LEA A1,TBL1 ADD D0,A1 CLR D1 MOVW @A1,D1 ; get baud rate TYPESP DCVT 0,OT$TRM ; print it CRLF EXIT TRMSRH: MOV TRMDFC,A1 ; point to TRM chain 1$: PUSH A1 ; save TRM pointer CMM WORK(A4),4(A1) ; this one match? BEQ 2$ ; YES - go set new TRM POP A1 ; restore TRM pointer MOV @A1,A1 ; advance to next MOV A1,D7 BNE 1$ ; unless thru... SUB A0,A0 RTN 2$: POP A0 ADD #10,A0 ; point to TRM itself RTN ; baud rates TBL1: WORD 50. WORD 75. WORD 110. WORD 134. WORD 150. WORD 200. WORD 300. WORD 600. WORD 1200. WORD 1800. WORD 2000. WORD 2400. WORD 3600. WORD 4800. WORD 7200. WORD 9600. WORD 19200. WORD 0 ; baud rate codes TBL2: BYTE 0 ; 50 baud BYTE 1 ; 75 baud BYTE 2 ; 110 baud BYTE 3 ; 134 baud BYTE 4 ; 150 baud BYTE -1 ; 200 baud (invalid) BYTE 5 ; 300 baud BYTE 6 ; 600 baud BYTE 7 ; 1200 baud BYTE 10 ; 1800 baud BYTE 11 ; 2000 baud BYTE 12 ; 2400 baud BYTE 13 ; 3600 baud BYTE 14 ; 4800 baud BYTE 15 ; 7200 baud BYTE 16 ; 9600 baud BYTE 17 ; 19200 baud EVEN END