<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Mon, 12 Mar 1984 01:32:00-EST
From   : Robert L. Plouffe <PLOUFF@mit-mc>
Subject: MDM716-727 BUG FIX

MDM716 through MDM727 has a problem in the new robustness of the
protocol when receiving binary files (.COM, .AQM, e47}c) from a host
on ARPANET/MILNET using a compatible modem protocol such as MMODEM
on ITS.  ASCII file down loading is OK but binary files abort the
transfer if a Control-D is received when searching for SOH.  Since
Control-D is the EOT character, things end abruptly.  So far as I
know, this problem does not occur when transferring binary files
between two micros over a direct phone line connection.  However,
the following change will fix things in all cases.
                                               Bob Plouffe

REPLACE THE CODE AT "RCVRECD:" WITH THE FOLLOWING:

;***********************************************************************
;
;          RECEIVE A RECORD FROM SENDING STATION
;
;***********************************************************************
;
; If CRC is in effect, there is a 10-second timeout to the first SOH.  
; It then tries six more times to let the sender know the system is
; capable of receiving a 'CRC' check.  At the end of that time a NAK is
; sent which tells the sender to use CHECKSUM checking instead of CRC.
; This allows automatic compatability with systems implementing CRC -
; (Cyclic Redundancy Checking).  The search for SOH will cycle through
; one record interval and ignore noise or characters sent by the remote
; for any purpose (such as progress reporting).  So extraneous char-
; acters that are sometimes sent by remote-end protocol will be gobbled
; up until the first SOH. EOT is tested only as the first returned
; character after each sector.
;
SRCHSOH        EQU     160     ;number of times to loop search for SOH
;
RCVRECD:
       MVI     A,1
       STA     ERRCT   ;initialize error count
       MVI     B,10    ;10 seconds
;
RCVSQ: LXI     D,SRCHSOH ;initialize the loop
       CALL    RECV    
       JC      RCVSTOT ;time out if 1rst char not rcvd in 10 secs.
       MOV     C,A     ;hold it for awhile
       CPI     EOT     ;see if end of transmission
       STC             ;set carry
       RZ              ;return with carry set
;
SOHLUP:        MVI     A,0FFH
       STA     CHRFLG
       STA     TIMFLG
       MOV     A,E     ;get search count down value
       CPI     SRCHSOH ;see if it is first returned character
       MOV     A,C     ;get the first character
       JZ      NORECV  ;skip RECV routine if it is first char
       MVI     B,1
       CALL    RECV    ;get another character in sequence
       MOV     B,A     ;store it
       JNC     TSTSOH  ;go see if SOH is char received
;
NORECV:        MOV     B,A
       XRA     A       ;else set to value that will force timeout
       STA     CHRFLG
;
TSTSOH: MOV    A,B     ;get the character
       CPI     SOH     ;see if it is SOH
       PUSH    PSW
       XRA     A
       STA     TIMFLG  ;restore this flag
       POP     PSW
       JZ      RCVSOH  ;got SOH so get the rest of info
                       ;(sector number and its complement)
       MOV     A,D
       ORA     E       ;see if counted down to zero
       DCX     D
       JNZ     SOHLUP  ;go around again if not
       LDA     CHRFLG  ;see if time out needs to be forced
       ORA     A
       JZ      RCVSTOT ;go do time out and count them
       LDA     QFLG
       ORA     A
       JZ      RCVSERR
;

                       ****************

Add the line indicated below at routine RCVSER1:

RCVSER1:CALL   SEND            ;..the 'NAK' or 'CRC' request
       LDA     ERRCT           ;abort if we have reached error limit
       INR     A
       STA     ERRCT           ;store for next time
       CPI     ERRLIM          ;see if at limit yet
       MVI     B,1             ; <<-------------------ADD THIS LINE
       JC      RCVSQ           ;if not, keep going
       LDA     ACKNAK          ;see if ACKNAK is set
       ORA     A
       JNZ     ABORT           ;if 'YES', abort
       JMP     CKQUIT          ;if 'NO' check for continued use
;

ADD THE FOLLOWING AT THE PROLOG TO THE FILE:

; 03/12/84  Changed routine at RCVRECD so that downloading of binary
;  MDM727A  files works OK on packet switched networks and host-
;          cooperating protocols such as MMODEM on ITS machines.
;          This change simply moved the test for EOT outside the
;          SOH loop.
;                                              -Bob Plouffe
;
T
tThis file will also be in AR100:FJW;MDM7XX BUGFIX at MIT-MC.
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>