home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol048 / sendout3.asm < prev    next >
Assembly Source File  |  1984-04-29  |  5KB  |  210 lines

  1. ;
  2. ;TITLE 'SENDOUT UTILITY FOR CP/M AND PMMI MODEM 4/8/81 AAJ'
  3. ;
  4. ;THIS ROUTINE WRITTEN BY AL JEWER AND RELEASED IN PUBLIC
  5. ;DOMAIN 4/8/81. 
  6. ;
  7. ;THIS CP/M TRANSIENT COMMAND IS INVOKED IN THIS MANNER:
  8. ;
  9. ;A>SENDOUT XMODEM S FILENAME.TYP
  10. ;
  11. ;IN THIS EXAMPLE, THE STRING "XMODEM S FILENAME.TYP"
  12. ;WILL BE SENT OUT THE MODEM PORT TO A REMOTE SYSTEM.
  13. ;THIS IS FOR USE IN:
  14. ;
  15. ;        1) TRANSFERRING MULTIPLE PROGRAMS TO & FROM
  16. ;            REMOTE USING A SUBMIT FILE
  17. ;
  18. ;        2) SENDING COMMANDS WITHOUT HAVING TO
  19. ;            ENTER & EXIT THE "MODEM" PROGRAM
  20. ;
  21. ;THE STRING CAN BE UP TO 127 CHARACTERS LONG, AND IS 
  22. ;ECHOED TO THE LOCAL CONSOLE AS IT IS SENT.
  23. ;
  24. ;THE PROGRAM WILL WAIT FOR A ">" CHARACTER BEFORE IT
  25. ;SENDS THE LINE, TO ALLOW THE REMOTE TO BE READY FOR
  26. ;THE COMMAND LINE. AS THE LINE IS SENT, THE PROGRAM 
  27. ;WILL CHECK THE CHARACTERS ECHOED BACK TO ASSURE THAT
  28. ;THE COMMAND LINE HAS BEEN TRANSMITTED PROPERLY.
  29. ;IF AN ERROR IS DETECTED, THE PROGRAM WILL SEND OUT
  30. ;A ^U FOLLOWED BY A CARRIAGE RETURN, THEN RETRY 
  31. ;SENDING THE LINE, UNTIL A PROPER TRANSMISSION IS MADE.
  32. ;
  33. ;UPDATES: (IN REVERSE ORDER TO MINIMIZE READING TIME)
  34. ;
  35. ;10-APR-81 REWRITTEN BY AL JEWER TO CHECK ECHOED
  36. ;       STRING FOR VALID TRANSFER.
  37. ;
  38. ;08-APR-81 MODIFIED BY TOM JORGENSON FOR SUPPORT
  39. ;       OF OTHER MODEM/PORT TYPES (ESP. H89)
  40. ;
  41. ;ANY QUESTIONS OR COMMENTS:
  42. ;
  43. ;    AL JEWER
  44. ;    PO BOX 123
  45. ;    WHITEWATER, WI. 53190
  46. ;
  47. ;    473-7263 (HOME)
  48. ;    563-9539 (WORK)
  49. ;
  50. ;BASE DEFINITION, CHANGE THIS TO 4200H IF ALTERNATE CP/M
  51. ;(RELOCATED) VERSION SUCH AS HEATH/LIFEBOAT OR TRS-80
  52. ;
  53. BASE    EQU    0    ;BASE OF MEMORY SEGMENT
  54. ;
  55. ;THESE SHOULD BE O.K. AS IS
  56. ;
  57. BOOT    EQU    BASE    ;JUMP HERE TO REBOOT CP/M
  58. BDOS    EQU    BASE+5    ;BDOS FUNCTION CALL ADDRESS
  59. BUFFER    EQU    BASE+80H ;INPUT LINE BUFFER
  60. CONOUT    EQU    2    ;BDOS PRINT FUNCTION CODE
  61. CR    EQU    0DH    ;ASCII CHARACTERS
  62. LF    EQU    0AH
  63. CTLU    EQU    'U'-40H
  64. ;
  65. FALSE    EQU    0
  66. TRUE    EQU    NOT FALSE
  67. ;
  68. FASTCLK    EQU    TRUE    ;TRUE IF 4MHZ OR GREATER
  69. ;
  70. ;CHOOSE YOUR MODEM/PORT TYPE HERE:
  71. ;
  72. H89    EQU    FALSE    ;TRUE, IF H89
  73. PMMI    EQU    TRUE     ;TRUE, IF PMMI
  74. ;
  75.     IF    PMMI
  76. ;
  77. ;CHANGE THE FOLLOWING IF YOUR PMMI IS NOT AT THE 
  78. ;STANDARD BASE ADDRESS OF 0C0H.
  79. ;
  80. TPORT    EQU    0C0H    ;THIS IS STATUS PORT
  81. DPORT    EQU    TPORT+1    ;DATA I/O PORT
  82. POTBMT    EQU    1    ;XMIT BUFFER EMPTY FLAG
  83. PODAV    EQU    2    ;DATA AVAILABLE FLAG
  84. ;
  85.     ENDIF        ;PMMI
  86. ;
  87.     IF    H89
  88. ;
  89. ;SHOULD USE THESE AS LONG AS YOU CONFORM
  90. ;TO STD PORT ADDRESS (330Q)
  91. ;
  92. TPORT    EQU    335Q    ;STATUS PORT (8250 UART)
  93. DPORT    EQU    330Q    ;DATA PORT
  94. POTBMT    EQU    040Q    ;THRE BIT (TX BUFFER EMPTY)
  95. PODAV    EQU    001Q    ;DATA AVAILABLE FLAG
  96. ;
  97.     ENDIF        ;H89
  98. ;
  99. ;
  100. ORG    BASE+100H    ;START OF TPA
  101. ;
  102. START:    LXI    SP,STACK ;SET SAFE STACK
  103.     JMP    PDATA    ;JUMP TO TEST CURRENT CHARACTER
  104. ;
  105. PIN:    LXI    B,0    ;COUNTER TO B
  106. ;
  107. PLOOP:    DCX    B    ;COUNT THE LOOP
  108.     MOV    A,B    ;CHECK FOR DONE
  109.     ORA    C
  110.     JZ    TRYAGN    ;JUMP IF TIMED OUT
  111. ;
  112.     IF    FASTCLK
  113.     XTHL        ;WASTE TIME IF AT 4 MHZ
  114.     XTHL
  115.     XTHL
  116.     XTHL
  117.     ENDIF        ;FASTCLK
  118. ;
  119. PL2:    IN    TPORT    ;GET THE STATUS PORT
  120.     ANI    PODAV    ;WE GOT A CHARACTER?
  121.     JZ    PLOOP    ;LOOP TILL TIMEOUT OR DATA RECEIVED
  122. ;
  123. PDATA:    IN    DPORT    ;GET THE CHARACTER
  124.     ANI    7FH    ;DROP PARITY BIT JUST IN CASE
  125.     MOV    E,A    ;ECHO IT TO THE CRT
  126.     CALL    CRTOUT
  127.     CPI    '>'    ;DISK PROMPT?
  128.     JNZ    PIN    ;LOOP TILL PROPER CHARACTER RECEIVED
  129. ;
  130. ;WE HAVE NOW RECEIVED A ">" CHARACTER, SO THE REMOTE SYSTEM
  131. ;IS READY TO RECEIVE THE COMMAND LINE.
  132. ;
  133.     LXI    H,BUFFER ;POINT TO COMMAND LINE BUFFER
  134.     MOV    B,M    ;GET THE CHARACTER COUNT
  135.     MOV    A,B    ;ALSO TO A REGISTER
  136.     ORA    A    ;ZERO LENGTH?
  137.     JZ    BOOT    ;RETURN IF SO
  138.     DCR    A    ;LENGTH OF 1? (THIS WOULD BE SPACE ONLY)
  139.     JZ    BOOT    ;IGNORE THIS TOO
  140.     INR    B    ;ADD 1 FOR FINAL CR
  141.     INX    H    ;SKIP THE LEADING SPACE
  142. ;
  143. LOOP:    INX    H    ;POINT TO NEXT CHARACTER
  144.     DCR    B    ;COUNT THE CHARACTER
  145.     JNZ    NOTDUN    ;JUMP IF NOT FINISHED
  146.     MVI    E,LF    ;SEND LINE FEED TO LOCAL CONSOLE
  147.     CALL    CRTOUT
  148.     JMP    BOOT    ;DONE!
  149. ;
  150. NOTDUN:    MVI    A,1    ;CHECK FOR LAST CHARACTER
  151.     CMP    B
  152.     JNZ    GO    ;JUMP IF NOT LAST ONE
  153.     MVI    M,CR    ;MAKE LAST CHARACTER CARRIAGE RETURN
  154. ;
  155. GO:    MOV    C,M    ;GET CHARACTER
  156.     CALL    POUT    ;SEND OUT THE MODEM
  157.     LXI    D,0    ;TIME COUNTER TO D
  158. ;
  159. RECLP:    IN    TPORT    ;CHECK FOR CHARACTER
  160.     ANI    PODAV    ;CHARACTER RECEIVED?
  161.     JNZ    GOTONE    ;JUMP IF WE GOT A CHARACTER
  162.     DCX    D    ;COUNT THE TIMER
  163.     MOV    A,D
  164.     ORA    E
  165.     JZ    TRYAGN    ;JUMP IF TIMED OUT
  166. ;
  167.     IF    FASTCLK
  168.     XTHL        ;WASTE TIME ON FAST SYSTEMS
  169.     XTHL
  170.     XTHL
  171.     XTHL
  172.     ENDIF        ;FASTCLK
  173. ;
  174.     JMP    RECLP    ;CONTINUE WAITING
  175. ;    
  176. GOTONE:    IN    DPORT    ;GET THE CHARACTER
  177.     ANI    7FH    ;DROP PARITY
  178.     MOV    E,A
  179.     CALL    CRTOUT    ;DISPLAY TO LOCAL CONSOLE
  180.     CMP    M    ;IS IT THE SAME AS WHAT WE SENT?
  181.     JZ    LOOP    ;JUMP IF OK
  182. ;
  183. TRYAGN:    MVI    C,CTLU    ;CANCEL THE LINE
  184.     CALL    POUT
  185.     MVI    C,CR    ;THEN GET NEW PROMPT
  186.     CALL    POUT
  187.     JMP    PIN
  188. ;
  189. POUT:    IN    TPORT    ;GET PHONE STATUS PORT
  190.     ANI    POTBMT    ;MASK FOR XMIT BUFFER EMPTY
  191.     JZ    POUT    ;WAIT FOR PHONE
  192.     MOV    A,C    ;SEND THE CHARACTER
  193.     OUT    DPORT
  194.     RET
  195. ;
  196. CRTOUT:    PUSH    H    ;SAVE AFFECTED REGISTERS
  197.     PUSH    B
  198.     PUSH    PSW
  199.     MVI    C,CONOUT
  200.     CALL    BDOS    ;SEND TO CONSOLE
  201.     POP    PSW
  202.     POP    B
  203.     POP    H
  204.     RET
  205. ;
  206.     DS 32        ;STACK AREA
  207. STACK    EQU    $
  208. ;
  209.     END    START
  210.