home *** CD-ROM | disk | FTP | other *** search
- ; NEWBAUD.ASM ver 2.0
- ; (revised 12/27/80)
- ; by Keith Petersen and Dave Hardy
- ;
- ;REMOTE BAUD RATE CHANGE UTILITY FOR PMMI MODEMS
- ;
- ;Allows a remote user to chAnge baud rate without
- ;HaviNg to call back.
- ;
- ;This program is compatiBle with CP/M 1.4, 2.x., and MP/M
- ;
- ;12/27/80 Added code to set new stack because some systems
- ; require more stack space than available in CP/M's
- ; default stack. (KBP)
- ;
- ;PMMI modem port equates
- ;
- ;Set TPORT to the base address of your PMMI modem
- ;(all other modem equates are based on this value).
- ;
- TPORT EQU 0C0H ;UART CONTROL/STATUS PORT
- DPORT EQU TPORT+1 ;MODEM DATA PORT
- RPORT EQU TPORT+2 ;RATE GEN/MODEM STATUS
- CPORT EQU TPORT+3 ;MODEM CONTROL
- ;
- ;The following equates are used to set up the PMMI modem
- ;
- P08BIT EQU 0CH ;8 DATA BITS
- P0NOPY EQU 10H ;NO PARITY
- P0TSB EQU 40H ;2 STOP BITS
- P0NORM EQU P08BIT+P0NOPY ;USE 8 BITS, NO PARITY
- P0110 EQU P08BIT+P0NOPY+P0TSB ;SAME W/2 STOP BITS
- ;
- ;Baud rate divisors
- ;
- B110 EQU 142 ;110 BAUD
- B300 EQU 52 ;300 BAUD
- B450 EQU 35 ;450 BAUD
- B600 EQU 26 ;600 BAUD
- B710 EQU 22 ;710 BAUD
- ;
- BDOS EQU 5 ;BDOS ENTRY ADDRESS
- CR EQU 0DH ;CARRIAGE RETURN
- LF EQU 0AH ;LINEFEED
- PRINT EQU 9 ;PRINT STRING FUNCTION
- ;
- ORG 100H
- ;
- ;Save old stack pointer and set new one
- ;
- START: LXI H,0
- DAD SP ;GET OLD STACK
- SHLD STACK ;SAVE IT
- LXI SP,STACK ;SET NEW STACK
- ;
- ;Print sign-on message
- LXI D,MSG ;SEND MESSAGE TO CONSOLE
- MVI C,PRINT ;VIA BDOS "PRINT STRING" FUNCTION
- CALL BDOS
- ;
- ;Now wait until last character of message
- ;is finished before changing baud rate
- LXI H,0
- LXI D,1 ;DELAY VALUE
- ;
- SLO: DAD D ;ADD ONE
- JNC SLO ;NO CARRY YET, COUNT MORE
- ;
- ;Get new baud rate, then return to CP/M
- CALL CHANGE ;CHANGE TO NEW BAUD RATE
- LHLD STACK ;GET OLD STACK POINTER
- SPHL ;RESTORE IT
- RET ;RETURN TO CP/M
- ;
- ;Read the modem at different baud rates until a CR is found
- ;
- CHANGE: IN DPORT ;CLEAR ANY GARBAGE FROM MODEM PORT
- IN DPORT ;CLEAR IT TWICE JUST TO BE SURE
- ;
- MVI A,B110 ;SELECT 110 BAUD INITIALLY
- OUT RPORT ;SET BAUD RATE IN MODEM
- MVI A,P0110 ;SELECT 8 DATA, NO PARITY, 2 STOP BITS FOR 110 BAUD
- OUT TPORT
- MVI A,7FH ;SET MODEM FILTER FOR <300
- OUT CPORT
- CALL TSBAUD ;SEE IF BAUD = 110
- RZ ;YES, EXIT
- ;
- MVI A,P0NORM ;SET FOR 1 STOP BIT, ETC., FOR >110 BAUD
- OUT TPORT
- MVI A,B300 ;SET MODEM TO 300 BAUD
- OUT RPORT
- CALL TSBAUD ;SEE IF BAUD = 300
- RZ ;YES, EXIT
- ;
- MVI A,B450 ;SET MODEM TO 450 BAUD
- OUT RPORT
- MVI A,5FH ;SET MODEM FILTER FOR >300
- OUT CPORT
- CALL TSBAUD ;SEE IF BAUD = 450
- RZ ;YES, EXIT
- ;
- MVI A,B600 ;SET MODEM TO 600 BAUD
- OUT RPORT
- CALL TSBAUD ;SEE IF BAUD = 600
- RZ ;YES, EXIT
- ;
- MVI A,B710 ;SET MODEM TO 710 BAUD
- OUT RPORT
- CALL TSBAUD ;SEE IF BAUD = 710
- RZ ;YES, EXIT
- ;
- JMP CHANGE ;KEEP TRYING UNTIL CR IS FOUND
- ;
- ;TSBAUD reads one character from console input and returns
- ;with the zero flag set if the character is a CR.
- ;
- TSBAUD: CALL CONIN ;GET CHARACTER DIRECT FROM CONSOLE
- CPI CR ;SET ZERO FLAG IF CHARACTER IS CR
- RET ;THEN RETURN
- ;
- ;This routine does a direct console input without echo
- ;
- CONIN: LHLD 1 ;GET CBIOS VECTOR
- LXI D,6 ;ADD OFFSET TO CONIN VECTOR
- DAD D ;HL NOW = CONIN VECTOR
- PCHL ;GO THERE
- ;
- MSG: DB CR,LF,'NEWBAUD ver 2.0 - '
- DB 'Change to new Baud rate,',CR,LF
- DB 'THEN type RETURNs until the system responds.'
- DB CR,LF,CR,LF,'$'
- ;
- ;Temporary storage
- ;
- DS 60 ;ROOM FOR STACK
- STACK: DS 2 ;OLD STACK SAVED HERE
- ;
- END START
-