; BAUDRATE.ASM ver 1.00 as of 07/27/83 ; Written and released to the public domain by ; S. Kluger, El Paso RCPM ; ; This program is currently written for the Compupro ; Interfacer 4 driving a Televideo 950 terminal. ; ; I see no big use in this program, I mainly wrote it out of pure ; curiosity, since I just installed an Interfacer 4. If you feel ; any need for it, you're welcome to do with it whatever you want ; whenever you want, but if you modify and redistribute it, ; please leave your name in the source file. ; ; It does the following: ; ; Displays a menu of baud rates on the screen and asks for ; your choice of console baud rate. ; After pressing the key of your choice, the program will ; initialize first the terminal, then the computer console ; port to the desired baud rate. ; ; General EQU's ; tpa equ 100h bdos equ 5 print equ 9 getch equ 1 cr equ 0dh lf equ 0ah ; ; Interfacer 4 equates (the necessary ones only) ; base equ 10h ;base port address mode equ base+2 ;mode port select equ base+7 relusr equ 3 ;USART relative user number offset equ 4 ;offset rel -> abs usart equ relusr+offset ;actual USART number mode1 equ 6eh ;mode1 byte mode2 equ 70h ;mode2 byte less baud rate ; ; Terminal equates (for TVI 950) ; The sequence is ESC { p1 p2 p3 p4, where p1=baud rate, ; p2=stop bits, p3=parity, p4=length. ; p2..p4 are fixed. ; esc equ 27 cls equ 26 ;clear screen prefix equ '{' p2 equ '0' ;1 stop bit p3 equ '0' ;no parity p4 equ '0' ;8 bits ; org tpa ; start: lxi h,0 dad sp shld stksave ;save stack lxi sp,stack lxi d,menu tryagn: mvi c,print call bdos mvi c,getch call bdos call ucase cpi 'A' jc error cpi 'P' jnc error ; ; we have the response. Now, convert A to something ; more meaningful to the TVI 950 and send the command ; string to the terminal. ; sui 10h ;make range '1'..'?' sta p1 lxi d,setterm mvi c,print call bdos call delay ; ; now, the USART has to be initialized... ; mvi a,usart out select mvi a,mode1 out mode mvi b,mode2 lda p1 ;get baud rate ani 0fh ;strip high nybble ; ; since the IF3/4 can do one better than the TVI950, we have to ;program around that fact. (The IF3/4 can do 2000 baud...) ; cpi 10 jc no2000 inr a no2000: dcr a ora b ;finish mode2 out mode ;done! ; lhld stksave ;get CP/M stack back sphl ret ; ; delay routine. This routine is needed, since without it ; I experienced hangup problems in the terminal. Could be that ; the terminal doesn't get enough time to let the new baud rate ; take effect... ; delay: lxi h,0ffffh dely: dcx h mov a,h ora l jnz dely ret ; ; ucase routine ; ucase: cpi 'a' rc sui 20h ret ; ; Come here in case of error ; error: lxi d,ermenu jmp tryagn ; ; setterm - terminal init string ; setterm: db esc,prefix p1: db 0,p2,p3,p4,'$' ; ; this is the baud rate menu ; ermenu: db 7,7,7,7,7,7,7 menu: db cls,cr,lf db 'Press To change to baud rate:',cr,lf db ' A 50',cr,lf db ' B 75',cr,lf db ' C 110',cr,lf db ' D 135',cr,lf db ' E 150',cr,lf db ' F 300',cr,lf db ' G 600',cr,lf db ' H 1200',cr,lf db ' I 1800',cr,lf db ' J 2400',cr,lf db ' K 3600',cr,lf db ' L 4800',cr,lf db ' M 7200',cr,lf db ' N 9600',cr,lf db ' O 19200',cr,lf,lf,lf db 'Your choice : $' ; ; stksave:dw 0 ds 50 stack: equ $ end