home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / serial23.lbr / SERIAL.AZM / SERIAL.ASM
Encoding:
Assembly Source File  |  1993-10-25  |  6.4 KB  |  340 lines

  1. ;----------------------------------------------------
  2. ;OSBORNE ONE SERIAL PORT CONTROL UTILITY
  3. ;COPYRIGHT 1983 BY GEORGE SCOTT 
  4. ;PERMISSION GRANTED FOR PRIVATE USE
  5. ;CONTACT AUTHOR FOR COMMERICAL USE
  6. ;
  7. ;
  8. ;VERSION 2.3       JAN 1983
  9. ;
  10. ;PROGRAM IS MENU DRIVEN AND ALLOWS FOR SELECTION
  11. ;OF CLOCK DIVISION (AND HENCE BAUD RATE) WORD
  12. ;FORMATTING (LENGTH, STOP BITS, PARITY) AND VARIOUS
  13. ;HARDWARE HANDSHAKE HANDLING.  EXITING EARLY, FROM
  14. ;ANY MENU, ABORTS THE PROCESS.  THE LAST OPPORTUNITY
  15. ;TO DO THIS IS FROM THE RECEIVE INTERRUPT MENU.  A
  16. ;BELL IS SOUNDED TO WARN THAT THIS IS THE LAST MENU 
  17. ;BEFORE THE CONTROL WORD IS WRITTEN.
  18. ;----------------------------------------------------
  19. ;
  20. ;SETUP CALL AND DATA EQUATES
  21. ;
  22. CLEAR    EQU    26
  23. PBUFF    EQU    9
  24. CR    EQU    0DH
  25. LF    EQU    0AH
  26. MBUFF    EQU    4010H
  27. RGET    EQU    1
  28. BZY    EQU    0BH
  29. FLAGPOS    EQU    0EF08H
  30. BDOS    EQU    5
  31. ACIA    EQU    2A00H    ;ADDRESS OF ACIA
  32. SLSP    EQU    10B     ;CLOCK DIVISION WORDS
  33. HISP    EQU    01B    ;DEFAULT (DIVIDE BY 16)
  34. UHSP    EQU    00B
  35. BELL    EQU    07
  36. RESET    EQU    11B
  37. WRITE    EQU    5000H
  38. F7BE2    EQU    00000B    ;WORD LENGTH/STOP BIT/PARITY
  39. F7BO2    EQU    00100B    ;WORDS
  40. F7BE1    EQU    01000B    ;NEXT COMMENT SHOWS WHAT VARIABLE NAME MEANS:
  41. F7BO1    EQU    01100B    ;F=FORMAT,7B=7 BIT,O=ODD,1=1 STOP BIT
  42. F8BN2    EQU    10000B
  43. F8BN1    EQU    10100B    ;DEFAULT
  44. F8BE1    EQU    11000B    
  45. F8BO1    EQU    11100B
  46. LTID    EQU    0000000B;RTS LINE HANDLING WORDS     
  47. LTIE    EQU    0100000B
  48. HTID    EQU    1000000B;DEFAULT
  49. LTBR    EQU    1100000B
  50. RIE    EQU    10000000B;RECEIVE INTERRUPT HANDLING WORDS
  51. RID    EQU    0B    ;DEFAULT
  52. ;
  53. ;
  54.     ORG    0100H
  55. ;
  56. ;
  57.     LXI    D,WRITE    ;SET PARMS FOR BLOCK MOVE
  58.     LXI    H,SOURCE
  59.     MVI    B,21
  60.     CALL    LIFTER    ;XEQ BLOCK MOVE TO COPY SWITCH
  61.             ;ROUTINE TO HIGH MEMORY (5000H)
  62.             ;TO ALLOW BANK SWITCHING
  63.             ;TO XEQ PROPERLY
  64.     MVI    B,0     
  65. ;
  66. ;CLOCK DIVISION (BAUD RATE) SELECTION MENU
  67. ;    
  68. SMENU    CALL    SAVR
  69.     LXI    D,SPEED
  70.     CALL    PRINT    ;DISPLAY SPEED SELECT MENU
  71.     CALL    INPUT
  72.     CALL    RSTR
  73.     CPI    'U'
  74.     JZ    ULTRA
  75.     CPI    'F'
  76.     JZ    FAST
  77.     CPI    'S'
  78.     JZ    SLOW 
  79.     CPI    CR
  80.     JZ    FAST
  81.     CPI    'E'
  82.     JZ    00
  83.     JMP    SMENU    ;NO VALID KEYBOARD INPUT BRANCH
  84. ;
  85. ;WORD LENGTH/PARITY/STOP BIT SELECT MENU
  86. ;
  87. WMENU    CALL    SAVR
  88.     LXI    D,WORD
  89.     CALL    PRINT
  90.     CALL    INPUT
  91.     CALL    RSTR
  92.     CPI    '1'
  93.     JZ    WORD1
  94.     CPI    '2'
  95.     JZ    WORD2
  96.     CPI    '3'
  97.     JZ    WORD3
  98.     CPI    '4'
  99.     JZ    WORD4
  100.     CPI    '5'
  101.     JZ    WORD5
  102.     CPI    '6'
  103.     JZ    WORD6
  104.     CPI    '7'
  105.     JZ    WORD7
  106.     CPI    '8'
  107.     JZ    WORD8
  108.     CPI    CR
  109.     JZ    WORD6
  110.     CPI    'E'
  111.     JZ    00
  112.     JMP    WMENU
  113. ;
  114. ;RTS LINE HANDLING SELECT MENU
  115. ;
  116. RMENU    CALL    SAVR
  117.     LXI    D,RTSP
  118.     CALL    PRINT
  119.     CALL    INPUT
  120.     CALL    RSTR
  121.     CPI    '1'
  122.     JZ    RTS1
  123.     CPI    '2'
  124.     JZ    RTS2
  125.     CPI    '3'    
  126.     JZ    RTS3
  127.     CPI    '4'
  128.     JZ    RTS4
  129.     CPI    CR
  130.     JZ    RTS3
  131.     CPI    'E'
  132.     JZ    00
  133.     JMP    RMENU
  134. ;
  135. ;RECEIVE INTERRUPT ENABLE/DISABLE
  136. ;
  137. DMENU    CALL    SAVR
  138.     LXI    D,DCDP
  139.     CALL    PRINT
  140.     CALL    INPUT
  141.     CALL    RSTR
  142.     CPI    '1'
  143.     JZ    DCD1
  144.     CPI    '2'
  145.     JZ    DCD2
  146.     CPI    CR
  147.     JZ    DCD1
  148.     CPI    'E'
  149.     JZ    00
  150.     JMP    DMENU
  151. ;
  152. ;WRITE CONTROL BYTE TO RESET ACIA THEN WRITE
  153. ;CONTROL BYTE NOW STORED IN REGISTER B
  154. WINDUP    CALL    SAVR
  155.     MVI    B,RESET    ;SET B FOR ACIA RESET
  156.     CALL    WRITE    ;XEQ WRITE ROUTINE IN HIGH MEMORY
  157.     CALL    RSTR    ;MOVE CONTROL BYTE TO B REGISTER
  158.     CALL    WRITE    ;WRITE IT TO ACIA
  159.     JMP    00    ;GO AWAY
  160. ;
  161. ;
  162. ;THE FOLLOWING ROUTINES BUILD THE CONTROL WORD AND 
  163. ;STORE IT IN THE B REGISTER AS DATA IS SELECTED FROM
  164. ; THE KEYBOARD
  165. ;
  166. ;SPEED SUBROUTINES
  167. ;
  168. ULTRA    MOV    A,B
  169.     ORI    UHSP
  170.     JMP    SPLT
  171. FAST    MOV    A,B
  172.     ORI    HISP
  173.     JMP    SPLT
  174. SLOW    MOV    A,B
  175.     ORI    SLSP
  176. SPLT    MOV    B,A
  177.     JMP    WMENU
  178. ;
  179. ;WORD PARAMETER ROUTINES
  180. ;
  181. WORD1    MOV    A,B
  182.     ORI    F7BE2
  183.     JMP    WSPLT
  184. WORD2    MOV    A,B
  185.     ORI    F7BO2
  186.     JMP    WSPLT
  187. WORD3    MOV    A,B
  188.     ORI    F7BE1
  189.     JMP    WSPLT
  190. WORD4    MOV    A,B
  191.     ORI    F7BO1
  192.     JMP    WSPLT
  193. WORD5    MOV    A,B
  194.     ORI    F8BN2
  195.     JMP     WSPLT
  196. WORD6    MOV    A,B
  197.     ORI    F8BN1
  198.     JMP    WSPLT
  199. WORD7    MOV    A,B
  200.     ORI    F8BE1
  201.     JMP    WSPLT
  202. WORD8    MOV    A,B
  203.     ORI    F8BO1
  204. WSPLT     MOV    B,A
  205.     JMP    RMENU
  206. ;
  207. ;RTS LINE HANDLING SELECT ROUTINES
  208. ;
  209. RTS1    MOV    A,B
  210.     ORI    LTID
  211.     JMP    RSPLT
  212. RTS2    MOV    A,B
  213.     ORI    LTIE
  214.     JMP    RSPLT
  215. RTS3    MOV    A,B
  216.     ORI    HTID  
  217.     JMP    RSPLT
  218. RTS4    MOV    A,B
  219.     ORI    LTBR
  220. RSPLT    MOV    B,A
  221.     JMP    DMENU
  222. ;
  223. ;DCD HANDLING ROUTINES
  224. ;
  225. DCD1    MOV    A,B
  226.     ORI    RID
  227.     JMP    DSPLT
  228. DCD2    MOV    A,B
  229.     ORI    RIE
  230. DSPLT    MOV    B,A
  231.     JMP    WINDUP     
  232. ;
  233. ;CODE TO BE COPIED TO HI MEMORY BY LIFTER
  234. ;THAT WILL FORM THE BANK SWITCH/WRITE ROUTINE 
  235. ;AT 5000H
  236. ;
  237. SOURCE    DI
  238.     OUT    00H
  239.     MVI    A,00
  240.     STA    FLAGPOS
  241.     LXI    H,ACIA 
  242.     MOV    M,B
  243.     OUT    01H
  244.     MVI    A,01H
  245.     STA    FLAGPOS
  246.     EI
  247.     RET
  248. ;
  249. ;CONSOLE OUTPUT UTILITY
  250. ;
  251. PRINT    MVI    C,PBUFF
  252.     CALL    BDOS
  253.     RET
  254. ;
  255. ;INPUT UTILITY ROUTINE RETURNS ONE CHARACTER FROM
  256. ;KEYBOARD IN THE A REGISTER
  257. ;
  258. INPUT    MVI    C,BZY
  259.     CALL    BDOS
  260.     CPI    00
  261.     JZ    INPUT
  262.     MVI    C,RGET
  263.     CALL    BDOS
  264.     RET
  265. ;
  266. ;BLOCK MOVE UTILITY
  267. ;
  268. LIFTER    MOV    A,M
  269.     STAX    D
  270.     DCR    B
  271.     RZ
  272.     INX    H
  273.     INX    D
  274.     JMP    LIFTER
  275. ;
  276. ;THIS SUBROUTINE WILL SAVE THE CONTROL WORD AT
  277. ;MEMORY LOCATION MBUFF
  278. ;
  279. SAVR    PUSH    H
  280.     LXI    H,MBUFF
  281.     MOV    M,B
  282.     POP    H
  283.     RET 
  284. ;
  285. ;THIS SUBROUTINE REVERSES THE ABOVE PROCESS
  286. ;THIS IS NECCESSARY BECAUSE THE NEEDED CALLS
  287. ;TO BDOS CORRUPT THE REGISTERS
  288. ;
  289. RSTR    PUSH    H
  290.     LXI    H,MBUFF
  291.     MOV    B,M
  292.     POP    H
  293.     RET
  294. ;
  295. ;MENU SELECT ITEMS
  296. ;
  297. SPEED    DB    CLEAR
  298.     DB    'RS-232 CONTROL UTILITY',CR,LF,LF
  299.     DB    'SELECT MENU ITEMS BY INPUTTING FIRST LETTER',CR,LF
  300.     DB    'OF DESIRED FUNCTION.  ',CR,LF 
  301.     DB    'CARRIAGE RETURN SELECTS DEFAULT VALUE WHICH IS',CR,LF
  302.     DB    'THE ITEM ENCLOSED IN BRACES: [...]',CR,LF
  303.     DB    'SELECTING EXIT FROM ANY MENU ABORTS THIS TASK',CR,LF,LF
  304.     DB    'BAUD RATE SELECT MENU',CR,LF,LF
  305.     DB    '(U)LTRAFAST    19,200/38,400 BAUD  <XMIT ONLY>',CR,LF
  306.     DB    '[F]AST        1,200/2,400 BAUD',CR,LF
  307.     DB    '(S)LOW        300/600    BAUD',CR,LF,LF
  308.     DB    '(E)XIT    ',CR,LF,LF
  309.     DB    'INPUT SELECTION:$'
  310. WORD    DB    CLEAR
  311.     DB    'DATA FORMAT SELECT MENU',CR,LF,LF
  312.     DB    '   DATA BITS    PARITY       STOP BITS',CR,LF
  313.     DB    '   +++++++++    ++++++       +++++++++',CR,LF
  314.     DB    '(1) SEVEN    EVEN        TWO',CR,LF
  315.     DB    '(2) SEVEN    ODD        TWO',CR,LF
  316.     DB    '(3) SEVEN    EVEN        ONE',CR,LF
  317.     DB    '(4) SEVEN    ODD        ONE',CR,LF
  318.     DB    '(5) EIGHT    NONE        TWO',CR,LF
  319.     DB    '[6] EIGHT    NONE        ONE',CR,LF
  320.     DB    '(7) EIGHT    EVEN        ONE',CR,LF
  321.     DB    '(8) EIGHT    ODD        ONE',CR,LF,LF
  322.     DB    '(E)XIT',CR,LF,LF
  323.     DB    'INPUT SELECTION:$'
  324. RTSP    DB    CLEAR
  325.     DB    'RTS HANDLING SELECTION MENU',CR,LF,LF
  326.     DB    '(1) LOW DISABLES XMIT INTERRUPT',CR,LF
  327.     DB    '(2) LOW  ENABLES XMIT INTERRUPT <NOT FOR OSBORNE!>',CR,LF
  328.     DB    '[3] HIGH DISABLES XMIT INTERRUPT',CR,LF
  329.     DB    '(4) LOW TRANSMITS BREAK',CR,LF,LF
  330.     DB    '(E)XIT',CR,LF,LF
  331.     DB    'INPUT SELECTION:$'
  332. DCDP    DB    CLEAR,BELL
  333.     DB    'DCD HANDLING MENU',CR,LF,LF
  334.     DB    '[1] RECEIVE INTERRUPT DISABLED',CR,LF
  335.     DB    '(2) RECEIVE INTERRUPT ENABLED',CR,LF,LF
  336.     DB    '(E)XIT  <LAST CHANCE TO ABORT>',CR,LF,LF
  337.     DB    'INPUT SELECTION:$'
  338.     END
  339.