home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol008 / chat13.asm < prev    next >
Encoding:
Assembly Source File  |  1985-02-10  |  4.6 KB  |  175 lines

  1. ;
  2. ;             CHAT.ASM ver 1.3
  3. ;            (revised 12/14/80)
  4. ;
  5. ;    An interactive program to allow a remote user to "chat" with
  6. ;      the local system operator.
  7. ;
  8. ;               Originally by RODERICK W. HART
  9. ;
  10. ;THIS PROGRAM IS TO BE USED BY A LOCAL OPERATOR TO CONDUCT TWO WAY
  11. ;COMMUNICATIONS WITH A REMOTE CALLER.  OPERATOR ACKNOWLEDGES "CHAT"
  12. ;REQUEST BY PRESSING THE SPECIAL CODE KEY DESIGNATED AT "AC " BELOW.
  13. ;
  14. ;WHEN IN ╘HE CHAT MODE, LINES ARE AUTOMATICALLY LIMITED TO 63
  15. ;CHARACTERS. CLF IS INSERTED AUTOMATICALLY ON THE FIRST SPACE
  16. ;TYPED AFTER THE 57TH CHARACTER.
  17. ;
  18. ;12/14/80 Modified to use direct calls to CBIOS I/O to make
  19. ;      compatible with CP/M 1.4, 2.x, and MP/M.  (KBP)
  20. ;
  21. ;12/09/80 Rewritten to optimize code, correct stack problems,
  22. ;      add backspace routine, reduce number of bells,
  23. ;      add user selectable operator acknowledge code, 
  24. ;      eliminate unnecessary subroutines, add additional
  25. ;      comments and add BASE equate for ALTCPM.
  26. ;        By Keith Petersen W8SDZ, and Dave Hardy
  27. ;
  28. BASE    EQU    0    ;SET TO 4200H FOR ALTCPM, 0 FOR REGULAR CP/M
  29. ;
  30. ACK    EQU    1BH    ;OPERATOR ACKNOWLEDGE CODE
  31. ;
  32. ALERT    EQU    6    ;NUMBER OF ALERT ATTEMPTS
  33. ;
  34. FASTCLK    EQU    0    ;SET TO 1 FOR 4 MHZ, 0 FOR 2 MHZ SYSTEM CLOCK
  35. ;
  36. BEL    EQU    07H    ;BELL
  37. CR    EQU    0DH    ;CARRIAGE RETURN
  38. LF    EQU    0AH    ;LINE FEED
  39. CONTC    EQU    03H    ;CHAT-MODE EXIT CHARACTER
  40. BAKSP    EQU    08H    ;BACKSPACE
  41. ;
  42. BDOS    EQU    BASE+5    ;BDOS CALL ADDRESS
  43. PRINT    EQU    9    ;PRINT STRING FUNCTION
  44. ;
  45.     ORG    BASE+100H
  46. ;
  47. START    LXI    SP,STACK ;SET NEW STACK POINTER
  48. ;
  49. ;Initialize jumps to CBIOS for direct I/O
  50.     LHLD    BASE+1     ;GET POINTER TO CBIOS
  51.     LXI    D,3     ;READY FOR ADD
  52.     DAD    D     ;HL = CONSTAT VECTOR
  53.     SHLD    CSTAT+1     ;MODIFY JUMP
  54.     DAD    D     ;HL = CONIN VECTOR
  55.     SHLD    CONIN+1     ;MODIFY JUMP
  56.     DAD    D     ;HL = CONOUT VECTOR
  57.     SHLD    CONOUT+1 ;MODIFY JUMP
  58. ;
  59. ;Print signon message
  60.     CALL    ILPRT    ;PRINT:
  61.     DB    CR,LF,'REMOTE CONVERSATION UTILITY ver 1.3',CR,LF
  62.     DB    'Program aborts automatically in 30 seconds.'
  63.     DB    CR,LF,CR,LF,'Alerting OPERATOR . ',0
  64. ;
  65. ;Attempt to alert operator
  66. ;
  67. START1    CALL    ILPRT    ;PRINT BELL, PERIOD, SPACE
  68.     DB    BEL,'. ',0
  69.     CALL    DELAY    ;WAIT 5 SECONDS
  70.     LDA    CNT    ;GET ATTEMPT COUNTER
  71.     DCR    A    ;DONE WITH ALERT ATTEMPTS?
  72.     STA    CNT    ;SAVE NEW COUNT
  73.     JN    START1    ;NOT DONE WITH ATTEMPTS, DO MRE
  74.     CALL    ILPRT    ;PRINT:
  75.     DB    CR,LF,CR,LF,'orry, no OPERATR available-',CR,LF
  76.     DB    'Please leave your request on MINICBBS',CR,LF,0
  77.     JMP    BASE+0    ;EXIT TO CP/M WARM BOOT
  78. ;
  79.     IF    FASTCLK    ;4 MHZ SYSTEM CLOCK
  80. DELAY    MVI    A,11    ;NUMBER OF 1 SECOND DELAYS +1 * 2
  81.     ENDIF
  82. ;
  83.     IF    NOT FASTCLK
  84. DELAY    MVI    A,6    ;NUMBER OF 1 SECOND DELAYS + 1
  85.     ENDIF
  86. ;
  87. DELAY1    LXI    H,0
  88.     LXI    D,1    ;LOOP DELAY VALUE
  89. ;
  90. WAIT    DAD    D    ;WAIT BETWEEN BELL RINGS
  91.     JNC    WAIT
  92.     DCR    A    ;DONE?
  93.     JNZ    DELAY1    ;NO, LOOP
  94. ;
  95.     CALL    CSTAT    ;GET CONSOLE STATUS
  96.     ORA    A    ;CHARACTER WAITING?
  97.     RZ        ;NO, RETURN
  98.     CALL    CONIN    ;GET CHARACTER
  99.     CPI    ACK    ;WAS IT THE RIGHT ANSWER?
  100.     RNZ        ;NO? THEN TRY AGAIN
  101. ;
  102.     POP    PSW    ;FIX STACK
  103.     CALL    ILPRT    ;PRINT:
  104.     DB    CR,LF,CR,LF,'OPERATOR is ON-LINE. Please go ahead:'
  105.     DB    CR,LF,CR,LF,0
  106. ;
  107. ;CONVERSATION ROUTINE - uses direct CBIOS I/O to
  108. ;prevent control characters from being echoed.
  109. ;
  110. CONT    CALL    CONIN    ;GET CONSOLE INPUT WITH NO ECHO
  111.     CPI    CONTC    ;CONTROL-C ?
  112.     JZ    BASE+0    ;YES, WARM-BOOT AND RETURN TO CP/M
  113.     CPI    CR    ;CARRIAGE RETURN?
  114.     JZ    CRLF    ;YES SEND CRLF
  115.     CPI    BAKSP    ;BACKSPACE?
  116.     JZ    BACKIT    ;YES DO BACKSPACE SPACE BACKSPACE
  117.     CPI    ' '    ;SPACE OR ABOVE?
  118.     JC    CONT    ;IT'S A CTL CHARACTER, CONTINUE LOOPING
  119.     PUSH    PSW    ;SAVE CHARACTER ON STACK
  120.     MOV    C,A    ;CHARACTER TO C FOR CBIOS
  121.     CALL    CONOUT    ;SEND CHARACTER TO CONSOLE
  122.     POP    B    ;GET CHARACTER TO B FROM STACK
  123.     LDA    LCNT    ;GET CHARACTER COUNT
  124.     INR    A    ;INCREMENT CUNTER
  125.     STA    LCNT    ;PUT COUNTER BACK
  126.     CPI    63    ;AT END OF L    NE LIMIT?
  127.     JZ    CRLF    ;YES, GIVE AUTO CRLF
  128.     CPI    58    ;NEAR END OF LINE LIMIT?
  129.     JC    CONT    ;NO, CONTINUE LOOPING
  130.     MOV    A,B    ;GET CHARACTER
  131.     CPI    ' '    ;SPACE?
  132.     JNZ    CONT    ;NO, CONTINUE LOOPING
  133. ;
  134. CRLF    CALL    ILPRT    ;PRINT:
  135.     DB    CR,LF,0
  136.     XRA    A    ;ZERO CHARACTER COUNTER
  137.     STA    LCNT
  138.     JMP    CONT    ;CONTINUE LOOPING
  139. ;
  140. BACKIT    LDA    LCNT    ;GET CHARACTER COUNT
  141.     DCR    A    ;SUBTRACT ONE BECAUSE OF BACKSPACE
  142.     JM    CONT    ;DONT GO PAST ZERO
  143.     STA    LCNT    ;SAVE NEW COUNT
  144.     CALL    ILPRT    ;PRINT
  145.     DB    BAKSP,' ',BAKSP,0
  146.     JMP    CONT    ;CONTINUE LOOPING
  147. ;
  148. ;INLINE PRINT ROUTINE
  149. ;
  150. ILPRT    XTHL        ;SAVE HL, GET MSG
  151. ;
  152. ILPLP    MOV    C,M    ;GET CHAR
  153.     PUSH    H
  154.     CALL    CONOUT    ;OUTPUT IT
  155.     POP    H
  156.     INX    H    ;POINT TO NEXT
  157.     MOV    A,M    ;TEST
  158.     ORA    A    ;..FOR END
  159.     JNZ    ILPLP
  160.     XTHL        ;RESTORE HL, RET ADDR
  161.     RET        ;RET PAST MSG
  162. ;
  163. CSTAT    JMP    $-$    ;MODIFIED AT INIT
  164. ;
  165. CONIN    JMP    $-$    ;MODIFIED AT INIT
  166. ;
  167. CONOUT    JMP    $-$    ;MODIFIED AT INIT
  168. ;
  169. CNT    DB    ALERT    ;ALERT COUNTER
  170. LCNT    DB    0    ;LINE POSITION COUNTER
  171.     DS    60    ;ROOM FOR STACK
  172. STACK    EQU    $
  173. ;
  174.     END
  175.