home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug082.arc / MODEMPAT.ASM < prev    next >
Assembly Source File  |  1979-12-31  |  9KB  |  323 lines

  1. ;
  2. ;    KAYMODEM PATCH
  3. ;
  4. ;        ALLOWS USER TO SPECIFY:
  5. ;            baud rate, word length, stop bits, pairity
  6. ;            for the Z-80 SIO/DART
  7. ;
  8. ;    WRITTEN: 03/01/83
  9. ;         BY: Wayne E. Campeau
  10. ;        FOR: Anchor Computer Systems
  11. ;
  12. ;    USE:    This program is to be patched into the MODEM7 program
  13. ;        available frome either the CP/M Users Group or the
  14. ;        Special Interest Group (SIG).
  15. ;        Some simple changes need to be made for the program to
  16. ;        run alone (Remove the REENTRY patch).
  17. ;
  18. ;-------------------------------------------------------------------------
  19.  
  20. WBOOT    EQU    0000H        ;DEFINE WARM BOOT ADDRESS
  21. BDOS    EQU    0005H        ;DEFINE BDOS ENTRY POINT
  22. LOADPT    EQU    0100H        ;DEFINE CP/M LOAD POINT
  23. REENTRY    EQU    LOADPT+0036H    ;DEFINE PROGRAM RE-ENTRY POINT INTO MODEM7
  24.  
  25. ;-------------------------------------------------------------------------
  26.  
  27. ;    CP/M DOS CALL NUMBERS
  28.  
  29. CONIN    EQU    1        ;DEFINE CONSOLE INPUT CALL
  30. CONOUT    EQU    2        ;DEFINE CONSOLE OUTPUT CALL
  31. DIRIO    EQU    6        ;DEFINE DIRECT CONSOLE I/O CALL
  32. PMSG    EQU    9        ;DEFINE PRINT MESSAGE DOS COMMAND
  33.  
  34. ;--------------------------------------------------------------------------
  35.  
  36. ;    CHARACTER DEFFINITIONS
  37.  
  38. CNTRL$C    EQU    3        ;DEFINE CTRL-C CHAR (^C)
  39. CR    EQU    13        ;CARRIAGE RETURN
  40. LF    EQU    10        ;LINE FEED
  41. ESC    EQU    27        ;ESCAPE CHAR (^[)
  42.  
  43. ;------------------------------------------------------------------------
  44.  
  45. ;    PORT DEFFINITIONS
  46.  
  47. SIO$CONTROL    EQU    6    ;SIO STATUS/COMMAND PORT
  48. BAUD$PORT    EQU    0    ;BAUD RATE CONTROLER PORT
  49.  
  50. ;========================================================================
  51.  
  52. ;    BEGINING OF PROGRAM
  53.  
  54.     ORG    LOADPT        ;ORG AT THE START OF THE PROGRAM
  55.     JMP    PATCH        ;
  56.  
  57. ;=========================================================================
  58.  
  59. ;    MAIN BODY OF PROGRAM IS BEYOND THE END OF THE MODEM7 PROGRAM
  60.  
  61.     ORG    LOADPT+2900H    ;ORG AT THE END OF THE PROGRAM
  62.                 ;(DELETE FOR STAND ALONE)
  63.  
  64. PATCH:                ;
  65.     LXI    SP,STACK    ;DEFINE OUR OWN TEMP. STACK
  66.     CALL    CLS        ;CLEAR THE SCREEN
  67.     CALL    BAUD        ;GET THE BAUD RATE
  68.     CALL    CLS        ;CLEAR THE SCREEN
  69.     CALL    CONFIG        ;GET THE CHANNEL CONFIG
  70.     CALL    PROGRAM        ;PROGRAM THE CHANNEL
  71.     CALL    CLS        ;CLEAR THE SCREEN
  72.     XRA    A        ;CLEAR A.
  73.     JMP    REENTRY        ;JUMP BACK INTO THE MODEM7 PROGRAM
  74.                 ;(CHANGE TO A JMP WBOOT FOR STAND ALONE)
  75.  
  76. ;==========================================================================
  77.  
  78. ;    SUBROUTINES
  79.  
  80. CLS:    ;CLEAR THE SCREEN
  81.  
  82.     MVI    C,DIRIO        ;
  83.     MVI    E,ESC        ;LEAD-IN
  84.     CALL    BDOS        ;
  85.                 ;
  86.     MVI    C,DIRIO        ;
  87.     MVI    E,'*'        ;
  88.     CALL    BDOS        ;CLEAR CODE
  89.     RET            ;RETURN
  90.  
  91. ;-------------------------------------------------------------------------
  92.  
  93. BAUD:    CALL    PRINT$BAUD    ;PRINT THE BAUD-RATE PROMPT
  94.     MVI    B,6        ;SET THE MAX NUMBER OF SELECTIONS
  95.     CALL    GET$SEL        ;GET THE USERS SELECTION
  96.     STA    BAUD$RATE    ;SET THE BAUD RATE
  97.     RET
  98.  
  99. CONFIG:
  100.     CALL    BITS$MENU    ;
  101.     CALL    STOP$MENU    ;
  102.     CALL    PAIRITY$MENU    ;
  103.     RET            ;
  104.  
  105. BITS$MENU:
  106.     CALL    PRINT$BITS    ;PRINT THE WORD LENGTH PROMPT
  107.     MVI    B,3        ;SET THE MAX NUMBER OF SELECTIONS
  108.     CALL    GET$SEL        ;GET THE USERS SELECTION
  109.     STA    WORD$LENGTH    ;SET THE WORD LENGTH
  110.     RET            ;
  111.  
  112. STOP$MENU:
  113.     CALL    PRINT$STOPS    ;PRINT THE STOP BITS PROMPT
  114.     MVI    B,2        ;SET THE MAX NUMBER OF SELECTIONS
  115.     CALL    GET$SEL        ;GET THE USERS SELECTION
  116.     STA    STOP$BITS    ;SET THE STOP BITS
  117.     RET            ;
  118.  
  119. PAIRITY$MENU:
  120.     CALL    PRINT$PAIRITY    ;PRINT THE PAIRITY PROMPT
  121.     MVI    B,2        ;SET THE MAX NUMBER OF SELECTIONS
  122.     CALL    GET$SEL        ;GET THE USERS SELECTION
  123.     STA    PAIRITY        ;SET THE PAIRITY
  124.     RET            ;
  125.  
  126.  
  127. PRINT$BAUD:
  128.     LXI    D,BAUD$MSG
  129.     MVI    C,PMSG
  130.     JMP    BDOS        ;PRINT THE BAUD-RATE PROMPT & RETURN
  131.  
  132. PRINT$BITS:
  133.     LXI    D,BIT$MSG
  134.     MVI    C,PMSG
  135.     JMP    BDOS        ;PRINT THE WORD LENGTH PROMPT & RETURN
  136.  
  137. PRINT$STOPS:
  138.     LXI    D,STOP$MSG
  139.     MVI    C,PMSG
  140.     JMP    BDOS        ;PRINT THE STOP-BITS PROMPT & RETURN
  141.  
  142. PRINT$PAIRITY:
  143.     LXI    D,PAIRITY$MSG
  144.     MVI    C,PMSG
  145.     JMP    BDOS        ;PRINT THE PAIRITY PROMPT & RETURN
  146.  
  147. GET$SEL:
  148.     PUSH    B        ;SAVE THE MAX NUMBER OF SELECTIONS
  149.  
  150. WAIT:
  151.     MVI    C,DIRIO
  152.     MVI    E,0FFH        ;SET FOR INPUT
  153.     CALL    BDOS        ;
  154.     ORA    A        ;CHECK FOR CHAR READY
  155.     JZ    WAIT        ;IF NOT READY THEN WAIT
  156.  
  157.     POP    B        ;GET THE MAX VALUE.
  158.     INR    B        ;INC THE MAX VALUE.
  159.     ANI    7FH        ;STRIP THE PAIRITY BIT.
  160.  
  161.     CPI    CNTRL$C        ;IS IT A BREAK?
  162.     JZ    WBOOT        ;YEP, ABORT.
  163.  
  164.     SBI    '0'        ;SUBTRACT ASCII OFFSET OF '0'
  165.     JM    DEFAULT        ;IF UNDER-FLOW THE USE DEFAULT (0)
  166.                 ;ELSE,
  167.     CMP    B        ;COMPARE THE CHAR TO IT
  168.     JC    ECHO$SEL    ;IF CHAR <= MAX THEN ECHO THE SELECTION & RET
  169.                 ;ELSE,
  170. DEFAULT:
  171.     XRA    A        ;SET A=0
  172. ECHO$SEL:
  173.     PUSH    PSW        ;SAVE THE ANSWER
  174.     ADI    '0'        ;ADD THE ASCII OFFSET OF '0' TO MAKE CHAR PRINTABLE
  175.     MVI    C,DIRIO        ;SET THE BDOS FUNCTION
  176.     MOV    E,A        ;PUT THE CHAR IN E.
  177.     CALL    BDOS        ;PRINT IT
  178.     POP    PSW        ;RESTORE THE CHAR.
  179.     RET            ;RETURN
  180.  
  181. ;-------------------------------------------------------------------------
  182.  
  183. PROGRAM:            ;PROGRAM THE I/O CHANNEL
  184.     LDA    BAUD$RATE    ;
  185.     LXI    H,BAUD$TBL    ;
  186.     CALL    LOOKUP        ;
  187.     OUT    BAUD$PORT    ;
  188.  
  189.     MVI    A,18H        ;LOAD RESET CODE
  190.     OUT    SIO$CONTROL    ;RESET THE SIO CHANNEL
  191.     MVI    A,10H        ;LOAD RESET STATUS INTERUPTS CODE
  192.     OUT    SIO$CONTROL    ;RESET THEM
  193.                 ;
  194.     MVI    A,4        ;ADDRESS REG. 4
  195.     OUT    SIO$CONTROL    ;
  196.     LDA    STOP$BITS    ;GET THE NUMBER OF STOP BITS,
  197.     LXI    H,STOPS$TBL    ;
  198.     CALL    LOOKUP        ;
  199.     MOV    B,A        ;SAVE FOR LOGICAL OR..
  200.                 ;
  201.     LDA    PAIRITY        ;GET THE PAIRITY MODE..
  202.     LXI    H,PAIRITY$TBL    ;
  203.     CALL    LOOKUP        ;
  204.     ORA    B        ;OR THE COMMAND WORDS FOR STOP BITS AND
  205.                 ;PAIRITY MODE TOGETHER.
  206.     OUT    SIO$CONTROL    ;NOW SEND THE COMBINED COMMAND WORD.
  207.                 ;
  208.     MVI    A,3        ;ADDRESS REG. 3
  209.     OUT    SIO$CONTROL    ;
  210.     LDA    WORD$LENGTH    ;LOAD THE Rx WORD LENGTH
  211.     LXI    H,BITS$TBL2    ;
  212.     CALL    LOOKUP        ;
  213.     OUT    SIO$CONTROL    ;
  214.                 ;
  215.     MVI    A,5        ;ADDRESS REG. 5
  216.     OUT    SIO$CONTROL    ;
  217.     LDA    WORD$LENGTH    ;LOAD THE Tx WORD LENGTH
  218.     LXI    H,BITS$TBL1    ;
  219.     CALL    LOOKUP        ;
  220.     OUT    SIO$CONTROL    ;
  221.                 ;
  222.     MVI    A,1        ;ADDRESS REG. 1
  223.     OUT    SIO$CONTROL    ;
  224.     MVI    A,00000010B    ;ENABLE Tx.
  225.     OUT    SIO$CONTROL    ;
  226.     RET            ;
  227.  
  228. LOOKUP:
  229.     ADD    L
  230.     MOV    L,A
  231.     MVI    A,0
  232.     ADC    H
  233.     MOV    H,A
  234.     MOV    A,M
  235.     RET
  236.  
  237. ;-------------------------------------------------------------------------
  238.  
  239. BAUD$MSG:
  240. DB '       *** KAYPRO-II  MODEM  PROGRAM ***        VERS. 2.0',    CR,LF
  241. DB                                CR,LF
  242. DB '           Anchor Computer Systems',            CR,LF
  243. DB '           323 1st. Ave. So.',                CR,LF
  244. DB '           Seattle, WA    98104',                CR,LF
  245. DB                                CR,LF
  246. DB '           (206) 621-9307  Voice',                CR,LF
  247. DB '           (206) 621-8665  Data',                CR,LF
  248. DB                                CR,LF
  249. DB '                  0.  300',                    CR,LF
  250. DB '                  1.  600',                    CR,LF
  251. DB '                  2. 1200',                    CR,LF
  252. DB '                  3. 2400',                    CR,LF
  253. DB '                  4. 4800',                    CR,LF
  254. DB '                  5. 9600',                    CR,LF
  255. DB '                  6. 19.2K',                CR,LF
  256. DB                                CR,LF
  257. DB '          Choose one of the above BAUD RATES:(0-6)',    CR,LF
  258. DB                                CR,LF
  259. DB '          Any other key will set 300 BAUD.',        CR,LF
  260. DB                                CR,LF
  261. DB '                  WHAT IS YOUR SELECTION ?'
  262. DB '$'
  263.  
  264. BIT$MSG:
  265. DB                                CR,LF
  266. DB '          Choose one of the following WORD LENGTHS:',    CR,LF
  267. DB                                CR,LF
  268. DB '                    0.  8 BITS',                CR,LF
  269. DB '                    1.  7 BITS',                CR,LF
  270. DB '                    2.  6 BITS',                CR,LF
  271. DB '                    3.  5 BITS',                CR,LF
  272. DB                                CR,LF
  273. DB '                 WHAT IS YOUR SELECTION?'
  274. DB '$'
  275.  
  276. STOP$MSG:
  277. DB                                CR,LF
  278. DB '         Choose from the following STOP BITS:',        CR,LF
  279. DB                                CR,LF
  280. DB '                    0.  1   STOP BIT ',            CR,LF
  281. DB '                    1.  1.5 STOP BITS',            CR,LF
  282. DB '                    2.  2   STOP BITS',            CR,LF
  283. DB                                CR,LF
  284. DB '                  WHAT IS YOUR SELECTION?'
  285. DB '$'
  286.  
  287. PAIRITY$MSG:
  288. DB                                CR,LF
  289. DB '        Choose from the following PAIRITY SELECTIONS:',    CR,LF
  290. DB                                CR,LF
  291. DB '                    0.  NO   PAIRITY',            CR,LF
  292. DB '                    1.  EVEN PAIRITY',            CR,LF
  293. DB '                    2.  ODD  PAIRITY',            CR,LF
  294. DB                                CR,LF
  295. DB '                   WHAT IS YOUR SELECTION?'
  296. DB '$'
  297.  
  298. ;---------------------------------------------------------------------------
  299.  
  300. ;    SIO CONTROL-WORD TABLES
  301.  
  302. BAUD$TBL:    DB    5,6,7,10,12,14,15
  303. BITS$TBL1:    DB    11101000B,11001000B,10101000B,10001000B    ;REG 5
  304. BITS$TBL2:    DB    11000001B,01000001B,10000001B,00000001B    ;REG 3
  305. STOPS$TBL:    DB    01000100B,01011000B,01001100B        ;REG 4
  306. PAIRITY$TBL:    DB    01000000B,01000011B,01000001B        ;REG 4
  307.  
  308.  
  309. ;    SELECTIONS MADE BY USER
  310.  
  311. BAUD$RATE:    DB    0    ;
  312. WORD$LENGTH:    DB    0    ;
  313. STOP$BITS:    DB    0    ;
  314. PAIRITY:    DB    0    ;
  315.  
  316. ;---------------------------------------------------------------------------
  317.  
  318.     DS    100H        ;RESERVE SOME STACK SPACE
  319. STACK    EQU    $        ;SET STACK HERE
  320.  
  321.     END    LOADPT        ;
  322.  
  323.