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.