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 / 22RSX / RXMD.ARK / RXMD14.MAC < prev    next >
Text File  |  1985-12-07  |  3KB  |  97 lines

  1.  
  2. ; ------------- i/o primitives - receive ---------------
  3. ;
  4. ; Receive a character - timeout time is in 'B' in seconds.
  5. ;
  6. recv:    push    d;        Save 'DE' regs.
  7. recv1:    call    clkspd
  8.     mov    e,a
  9. recv2:    mvi    d,86;        about .1 sec
  10. recv3:    call    mdinst;        Input from modem ready
  11.     jnz    recv4;        Yes, get the char
  12.     dcr    d;        Count down for timeout
  13.     jnz    recv3;        not 0.1 sec
  14.     dcr    e
  15.     jnz    recv2;        not 1.0 sec
  16.     dcr    b;        More seconds?
  17.     jnz    recv1;        Yes, wait
  18. ;    "    "
  19. ; Test for the presence of carrier - if none, go to 'CARCK' and
  20. ; continue testing for specified time.  If carrier returns, continue.
  21. ; If it does not return, exit.
  22.     call    mdcarck;    Is carrier still on?
  23.     cz    carck;        If not, test for 15 seconds
  24. ;    "    "
  25. ; Modem timed out receiving - but carrier is still on.
  26.     pop    d;        Restore 'DE'
  27.     stc;            Carry shows timeout
  28.     ret
  29. ;
  30. ; Get character from modem. Update Chksum and CRC.
  31. recv4:    call    mdinp;        Get data
  32.     pop    d
  33.     push    psw;        Save char
  34.     call    updcrc;        Calculate CRC
  35.     add    c;        Add to checksum
  36.     mov    c,a;        Save checksum
  37.     pop    psw;        Restore the char
  38.     ora    a;        Carry off: no error
  39.     ret
  40. ;
  41. ; Common carrier test for receive and send.  If carrier returns
  42. ; within TIMOUT seconds, normal program execution continues.
  43. ; Else, it will abort to CP/M via EXIT.
  44. ;
  45. carck:    mvi    e,timout*10
  46. carck1:    call    delay;        Kill .1 secs
  47.     call    mdcarck;    Is carrier still on?
  48.     rnz;            return if carrier on
  49.     dcr    e
  50.     jnz    carck1;        not timed out, continue testing
  51. ;    "    "
  52. ; Report to local console
  53.     mvi    a,1;        Print local only
  54.     sta    remoff
  55.     call    ilprt;        Report loss of carrier
  56.  db    cr,lf,'++ Carrier lost ++',cr,lf,0
  57.     lda    optsav;        Get option
  58.     cpi    'R'
  59.     cz    delfile;    Receive, Delete the file we started
  60.     jmp    exit;        From CARCK back to CP/M prompt
  61. ;
  62. ; Delay to let all incoming stop for one second
  63. ;
  64. wait1:    mvi    b,1;        For 1-sec
  65.     call    recv;        See if any chars still coming in
  66.     jnc    wait1;        Not quiet yet
  67.     ret;            If none for 1-sec, all done
  68. ;
  69. ; Catches anything on the modem input and ignores,
  70. ; so can wait for what we expect to receive
  71. ; a,f 
  72. catch:    call    mdinst;        Check modem status for any input
  73.     rz;            If none, all checked
  74.     call    mdinp;        Else get the garbage character
  75.     jmp    catch;        Keep going until none remaining
  76. ;
  77. ; -------------- i/o primitives - send -----------------
  78. ;
  79. ; Send a character to the modem
  80. ;
  81. send:    push    psw;        Save char
  82.     call    updcrc;        Calculate CRC
  83.     add    c;        Calculate checksum
  84.     mov    c,a;        Save cksum
  85. send1:    call    mdoutst
  86.     jnz    send3;        transmitter ready
  87.     push    d;        else check carrier
  88.     call    mdcarck;    Is carrier still on?
  89.     cz    carck;        If not, check for abort
  90.     pop    d;         returns if carrier re-appears
  91.     jmp    send1;        Else, wait for xmit ready
  92. send3:    pop    psw;        Modem is ready
  93.     jmp    mdoutp;        So send it
  94. ;
  95. ; --------------- end i/o primitives ------------
  96. ;
  97. ₧ö