home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MODEMS / MODEM / PIPMODM2.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  3KB  |  78 lines

  1. ;
  2. ;                  PIPMODEM.ASM
  3. ;
  4. ;10/29/82  Written by P. L. Kelley
  5. ;02/22/85  Added wait for transmit-buffer-empty (ready to accept transmit
  6. ;          character) before attempting to send -- Dave Towson
  7. ;
  8. ;Carefully read the file PIPMODEM.DOC for further information on the
  9. ;use of this file.  The user is responsible for setting (or adding code
  10. ;to set) the modem control port to a known initial state, and the baud rate
  11. ;to the desired value.
  12. ;
  13. ;The following six equates will probably be the only changes that need
  14. ;to be made.  Currently set up for TRS-80 Models I and III.
  15. ;
  16. MDAT    EQU    0EBH    ;modem port for sending and receiving data
  17. MSTAT    EQU    0EAH    ;modem status port
  18. RCV    EQU    80H    ;status bit to test for a character waiting
  19. RCVT    EQU    RCV    ;change to "0" if status bit is true when zero
  20. XMT    EQU    40H    ;status bit to test for ready to accept xmit character
  21. XMTT    EQU    XMT    ;change to "0" if status bit is true when zero
  22. ;
  23. OLDSTRT    EQU    04CEH    ;PIP's normal start
  24. CTLO    EQU    0FH    ;control-O to open memory buffer
  25. CTLZ    EQU    1AH    ;control-Z to write the file to disk
  26. NOPAR    EQU    7FH    ;no parity mask
  27. ;
  28.     ORG    100H
  29. ;
  30.     JMP    NEWSTRT    ;go put BIOS vectors in the right places
  31.     JMP    KSTAT    ;go run the modem routine
  32.     DS    3    ;skip over the OUT: vector
  33. BYTE    DB    0    ;this is where the byte for the memory buffer goes
  34. KSTAT    CALL    $-$    ;get the status of the keyboard
  35.     ORA    A    ;A will be zero if you have not typed a key
  36.     JZ    MODIN    ;if no keypress check the modem for input
  37. KEYIN    CALL    $-$    ;OK, there is a keypress, go get it
  38.     CPI    CTLO    ;do you want to open the buffer?
  39.     JNZ    NOO    ;go if you do not
  40.     STA    OFLAG    ;save flag if you want buffer open
  41.     JMP    KSTAT    ;don't output control-O
  42. NOO    CPI    CTLZ    ;end of file?
  43.     JNZ    MODOUT    ;no, then output character
  44.     STA    BYTE    ;tells PIP to write the memory buffer to disk file
  45.     RET        ;and PIP will go do it
  46. MODOUT    MOV    C,A    ;save the transmit character in C
  47. XMTRDY    IN    MSTAT    ;get the modem status
  48.     ANI    XMT    ;mask off all but the transmit bit
  49.     CPI    XMTT    ;test the transmit bit
  50.     JNZ    XMTRDY    ;wait until the character can be accepted
  51.     MOV    A,C    ;get the transmit character back in A
  52.     OUT    MDAT    ;send the character to the remote
  53.     RET        ;done
  54. MODIN    IN    MSTAT    ;get the modem status
  55.     ANI    RCV    ;mask off all but the receive bit
  56.     CPI    RCVT    ;test the receive bit
  57.     JNZ    KSTAT    ;go if nothing received
  58.     IN    MDAT    ;OK, there is modem input, go get it
  59.     ANI    NOPAR    ;mask off parity
  60.     STA    BYTE    ;save for possible entry into file buffer
  61.     MOV    C,A    ;the BIOS display routine wants the character in C
  62. CONOUT    CALL    $-$    ;display input
  63.     LDA    OFLAG    ;check whether input should be in memory buffer
  64.     ORA    A    ;zero flag will be reset if character goes in buffer
  65.     JZ    KSTAT    ;go if the character does not go in buffer
  66.     RET        ;PIP will put character in buffer and call 103H again
  67. OFLAG    DB    0    ;flag for memory buffer open
  68. NEWSTRT    LHLD    1    ;get wboote to determine BIOS vectors
  69.     LXI    D,3    ;load DE with 3
  70.     DAD    D    ;put console status vector in HL
  71.     SHLD    KSTAT+1        ;store
  72.     DAD    D    ;put console input vector in HL
  73.     SHLD    KEYIN+1        ;store
  74.     DAD    D    ;put console output vector in HL
  75.     SHLD    CONOUT+1    ;store
  76.     JMP    OLDSTRT        ;go to normal PIP start
  77.     END
  78.