home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol067 / newbaud2.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.4 KB  |  140 lines

  1. ;        NEWBAUD.ASM ver 2.0
  2. ;        (revised 12/27/80)
  3. ;    by Keith Petersen and Dave Hardy
  4. ;
  5. ;REMOTE BAUD RATE CHANGE UTILITY FOR PMMI MODEMS
  6. ;
  7. ;Allows a remote user to chAnge baud rate without
  8. ;HaviNg to call back.
  9. ;
  10. ;This program is compatiBle with CP/M 1.4, 2.x., and MP/M
  11. ;
  12. ;12/27/80 Added code to set new stack because some systems
  13. ;      require more stack space than available in CP/M's
  14. ;      default stack.  (KBP)
  15. ;
  16. ;PMMI modem port equates
  17. ;
  18. ;Set TPORT to the base address of your PMMI modem
  19. ;(all other modem equates are based on this value).
  20. ;
  21. TPORT    EQU    0C0H    ;UART CONTROL/STATUS PORT
  22. DPORT    EQU    TPORT+1 ;MODEM DATA PORT
  23. RPORT    EQU    TPORT+2 ;RATE GEN/MODEM STATUS
  24. CPORT    EQU    TPORT+3 ;MODEM CONTROL
  25. ;
  26. ;The following equates are used to set up the PMMI modem
  27. ;
  28. P08BIT    EQU    0CH    ;8 DATA BITS
  29. P0NOPY    EQU    10H    ;NO PARITY
  30. P0TSB    EQU    40H    ;2 STOP BITS
  31. P0NORM    EQU    P08BIT+P0NOPY        ;USE 8 BITS, NO PARITY
  32. P0110    EQU    P08BIT+P0NOPY+P0TSB ;SAME W/2 STOP BITS
  33. ;
  34. ;Baud rate divisors
  35. ;
  36. B110    EQU    142    ;110 BAUD
  37. B300    EQU    52    ;300 BAUD
  38. B450    EQU    35    ;450 BAUD
  39. B600    EQU    26    ;600 BAUD
  40. B710    EQU    22    ;710 BAUD
  41. ;
  42. BDOS    EQU    5    ;BDOS ENTRY ADDRESS
  43. CR    EQU    0DH    ;CARRIAGE RETURN
  44. LF    EQU    0AH    ;LINEFEED
  45. PRINT    EQU    9    ;PRINT STRING FUNCTION
  46. ;
  47.     ORG    100H
  48. ;
  49. ;Save old stack pointer and set new one
  50. ;
  51. START:    LXI    H,0
  52.     DAD    SP     ;GET OLD STACK
  53.     SHLD    STACK     ;SAVE IT
  54.     LXI    SP,STACK ;SET NEW STACK
  55. ;
  56. ;Print sign-on message
  57.     LXI    D,MSG     ;SEND MESSAGE TO CONSOLE
  58.     MVI    C,PRINT     ;VIA BDOS "PRINT STRING" FUNCTION
  59.     CALL    BDOS
  60. ;
  61. ;Now wait until last character of message
  62. ;is finished before changing baud rate
  63.     LXI    H,0
  64.     LXI    D,1    ;DELAY VALUE
  65. ;
  66. SLO:    DAD    D    ;ADD ONE
  67.     JNC    SLO    ;NO CARRY YET, COUNT MORE
  68. ;
  69. ;Get new baud rate, then return to CP/M
  70.     CALL    CHANGE    ;CHANGE TO NEW BAUD RATE
  71.     LHLD    STACK    ;GET OLD STACK POINTER
  72.     SPHL        ;RESTORE IT
  73.     RET        ;RETURN TO CP/M
  74. ;
  75. ;Read the modem at different baud rates until a CR is found
  76. ;
  77. CHANGE:    IN    DPORT     ;CLEAR ANY GARBAGE FROM MODEM PORT
  78.     IN    DPORT     ;CLEAR IT TWICE JUST TO BE SURE
  79. ;
  80.     MVI    A,B110     ;SELECT 110 BAUD INITIALLY
  81.     OUT    RPORT     ;SET BAUD RATE IN MODEM
  82.     MVI    A,P0110  ;SELECT 8 DATA, NO PARITY, 2 STOP BITS FOR 110 BAUD
  83.     OUT    TPORT
  84.     MVI    A,7FH     ;SET MODEM FILTER FOR <300
  85.     OUT    CPORT
  86.     CALL    TSBAUD     ;SEE IF BAUD = 110
  87.     RZ         ;YES, EXIT
  88. ;
  89.     MVI    A,P0NORM ;SET FOR 1 STOP BIT, ETC., FOR >110 BAUD
  90.     OUT    TPORT
  91.     MVI    A,B300     ;SET MODEM TO 300 BAUD
  92.     OUT    RPORT
  93.     CALL    TSBAUD     ;SEE IF BAUD = 300
  94.     RZ         ;YES, EXIT
  95. ;
  96.     MVI    A,B450     ;SET MODEM TO 450 BAUD
  97.     OUT    RPORT
  98.     MVI    A,5FH     ;SET MODEM FILTER FOR >300
  99.     OUT    CPORT
  100.     CALL    TSBAUD     ;SEE IF BAUD = 450
  101.     RZ         ;YES, EXIT
  102. ;
  103.     MVI    A,B600     ;SET MODEM TO 600 BAUD
  104.     OUT    RPORT
  105.     CALL    TSBAUD     ;SEE IF BAUD = 600
  106.     RZ         ;YES, EXIT
  107. ;
  108.     MVI    A,B710     ;SET MODEM TO 710 BAUD
  109.     OUT    RPORT
  110.     CALL    TSBAUD     ;SEE IF BAUD = 710
  111.     RZ         ;YES, EXIT
  112. ;
  113.     JMP    CHANGE     ;KEEP TRYING UNTIL CR IS FOUND
  114. ;
  115. ;TSBAUD reads one character from console input and returns
  116. ;with the zero flag set if the character is a CR.
  117. ;
  118. TSBAUD:    CALL    CONIN    ;GET CHARACTER DIRECT FROM CONSOLE
  119.     CPI    CR    ;SET ZERO FLAG IF CHARACTER IS CR
  120.     RET        ;THEN RETURN
  121. ;
  122. ;This routine does a direct console input without echo
  123. ;
  124. CONIN:    LHLD    1    ;GET CBIOS VECTOR
  125.     LXI    D,6    ;ADD OFFSET TO CONIN VECTOR
  126.     DAD    D    ;HL NOW = CONIN VECTOR
  127.     PCHL        ;GO THERE
  128. ;
  129. MSG:    DB    CR,LF,'NEWBAUD ver 2.0 - '
  130.     DB    'Change to new Baud rate,',CR,LF
  131.     DB    'THEN type RETURNs until the system responds.'
  132.     DB    CR,LF,CR,LF,'$'
  133. ;
  134. ;Temporary storage
  135. ;
  136.     DS    60    ;ROOM FOR STACK
  137. STACK:    DS    2    ;OLD STACK SAVED HERE
  138. ;
  139.     END    START
  140.