• Please review our updated Terms and Rules here

Check Binary file xferred with Kermit

Ragnarock

Experienced Member
Joined
Sep 15, 2017
Messages
269
Location
Texas
I successfully transferred 503 files of a 20mb drive from my SMS 11X system (PDP 11/23) which is a Calay PCB system using Kermit. It's an RT11SJ V4.0
But to do so I had to use ASCII mode. I am hoping that this mode simply converted each byte into 2 printable hex characters for transmission and back again by the receiver, and NOT trimmed off the 7th bit.
BTW, the other missing piece was SET PARITY SPACE which is required for binary files.

Can someone check the DIR.SAV binary file in this zip file to see if it matches yours?
 

Attachments

  • DIR.zip
    4.2 KB · Views: 2
My recollection, which is rusty, is that you do need to use BINARY mode in order not to lose the 7th bit.
 
In text mode, kermit implementations may also do character set and end of line conversion too - not what you want when transferring binary files.
 
I found a hex editor plugin for notepad++ and it indeed looks like the kermit settings I used clipped the 7th bit, dang.
 
This Kermit V2 for the RT11 stalls on binaries such as DIR.SAV if I'm in BINARY mode.
My hardware is jumpered for 8 bit data no parity, 1 stop, and my teraterm is configured same way. 9600b.
I'm stuck
 
I've no experience with either of these Kermit implementations, but it might be worthwhile giving one of the official Kermit implementations a go on the PC end as they're perhaps less likely to have compatibility issues: https://www.kermitproject.org/
 
You could:
  • try to find a different version of the Kermit binary;
  • get the V2 Kermit source and instrument it up so that it logs what it does so that you can work out what is causing it to hang and then fix the problem;
  • use some form of serial logger to see what is happening on the serial lines;
  • convert the binary files into hex dumps of those files and send them as ASCII and then convert the ASCII files back to binary at the receiving end;
  • send the raw binary files without any protocol and store them on the receiving end before calculating a checksum or CRC over the file on both sides to verify the transmission was good;
  • send the raw binary files twice without any protocol and compare the two received files;
  • find a different file transfer program e.g. Xmodem.
 
It's been decades since I used Kermit, but I need to get files onto a DEC Pro 350, so I'm going to give ProComm a shot.
 
It's been decades since I used Kermit, but I need to get files onto a DEC Pro 350, so I'm going to give ProComm a shot.
As the current maintainer of Kermit 95 I feel as though I should mention its now open-source (BSD license) and runs on all 32bit and 64bit versions of Windows on all CPU architectures except for NT 3.10 and MIPS NT 3.50 😄
 
As the current maintainer of Kermit 95 I feel as though I should mention its now open-source (BSD license) and runs on all 32bit and 64bit versions of Windows on all CPU architectures except for NT 3.10 and MIPS NT 3.50 😄
Hello David!
HELP. I've got 80 hours in this so far.
I can NOT send binary files! It stalls after going a few blocks.
I have Kermit-11 T2.18 running on a PDP 11-23, it came with the system.
I'm using K95G on the windows end.
Port is COM5 via a USB-to-RS232 converter.
Parms are 9600, N, 8, 1 on both ends.
comm link works fine.
When I do a SEND DIR.SAV it starts up and sends a few packets and stalls.
Could this be something with EOL or Block check (I've tried all 3)?
I've tried every parameter setting I can find.
I'm trying to archive a 20mb HD. It has no errors.
When I try to send a binary file in ASCII mode it transfers all packets but the 7th bit is cleared.
I've looked at every document I can find on the webs.
I think it is stopping when it hits the first byte with a 1 in bit 7. But why?

1724551908304.png
 
My recollection, which is rusty, is that you do need to use BINARY mode in order not to lose the 7th bit.
I think what AndrewZ says is correct. The last time I used Kermit was probably in 1985. I thought the command was something like byte mode, but I searched a Kermit command reference and it appears that
SET FILE TYPE BINARY
is how it's done. I'd trust the actual command reference better than my memory of something 39 years ago :)

I remember first setting the mode, probably as above, and then initiating the file transfer using GET, but I see now there's also an MGET for multiple files.

@Ragnarock is this how you're transferring files?
 
I think what AndrewZ says is correct. The last time I used Kermit was probably in 1985. I thought the command was something like byte mode, but I searched a Kermit command reference and it appears that
SET FILE TYPE BINARY
is how it's done. I'd trust the actual command reference better than my memory of something 39 years ago :)

I remember first setting the mode, probably as above, and then initiating the file transfer using GET, but I see now there's also an MGET for multiple files.

@Ragnarock is this how you're transferring files?
Yes, I'm using BINARY mode on both ends.
Both ends are 9600 N 8 1
I'm getting a checksum error on the k95g side.
I've set the file transfer options as conservative/robust as they will allow.
 
THIS suggestion on the FAQ to set parity to space makes no sense.
But when I set parity to space the file thinks it's transferred correctly but every bit 7 is a 0.

1724554227711.png
 
Yes, I'm using BINARY mode on both ends.
Both ends are 9600 N 8 1
I'm getting a checksum error on the k95g side.
I've set the file transfer options as conservative/robust as they will allow.
This is very bizarre. I worked (peripherally) on MS-DOS Kermit and (extensively) on VMS C-Kermit.

The whole reason the Kermit protocol was invented was to get around various problems with moving files from system A to system B, which might have a different character set, some box in the middle that either discarded or generated control characters, etc. In binary mode, what you get out should be what you put in, aside from limitations on the receiving end (for example, some operating systems don't keep track of the exact file size in bytes, but only in disk blocks - but that should not be a problem with your RT-11 files). 8-N-1 and FILE TYPE BINARY on both ends. It is possible that the serial driver is forcing the port to 7-bit mode (clearing the high bit), but I'm pretty sure Kermit knows about that sort of thing and has a way to deal with it.

Wikipedia claims "The Kermit protocol supports text and binary file transfers on both full-duplex and half-duplex 8-bit and 7-bit serial connections in a system- and medium-independent fashion, and is implemented on hundreds of different computer and operating system platforms. On full-duplex connections, a sliding window protocol is used with selective retransmission which provides excellent performance and error recovery characteristics. On 7-bit connections, locking shifts provide efficient transfer of 8-bit data." (Note that your RT-11 implementation probably doesn't do sliding windows, but that just means slower transfers, not broken ones.)

fdc and I worked on a C-Kermit extension that let Kermit transfer arbitrarily complex files - our test case was sending an RMS indexed file with multiple keys and with a journal attached, from VMS -> MS-DOS -> IBM VM/CMS -> DECsystem-10 -> VMS and having it come out intact on the far end VMS sytem.

Back to your issue at hand, I assume you're limited to the tools you have on that system already. Is there an RT-11 utility that dumps all of the blocks in a file as hex digits? You could then just ship that out the serial port and use a program on whatever system you have on the far end to re-constitute it as binary.
 
THIS suggestion on the FAQ to set parity to space makes no sense.
But when I set parity to space the file thinks it's transferred correctly but every bit 7 is a 0.

View attachment 1285362
If Kermit knows that its only got 7 data bits to work with (some kind of parity is in use), then whenever a byte with the 8th bit set needs to be sent it will be encoded as two bytes and the receiving Kermit implementation at the other end will then reassemble those two bytes back into a single byte with the 8th bit set as it originally was. So if the PDP-11 is messing with the 8th bit in some way then setting both ends to some parity mode should overcome this. Chapter 10 of Using C-Kermit, 2nd edition ("Solving File Transfer Problems") goes into this in a bit more detail.

Unfortunately I can't provide much more guidance than that as (despite my best efforts) I've never encountered the hardware or software at the sending end.
 
This is very bizarre. I worked (peripherally) on MS-DOS Kermit and (extensively) on VMS C-Kermit.

The whole reason the Kermit protocol was invented was to get around various problems with moving files from system A to system B, which might have a different character set, some box in the middle that either discarded or generated control characters, etc. In binary mode, what you get out should be what you put in, aside from limitations on the receiving end (for example, some operating systems don't keep track of the exact file size in bytes, but only in disk blocks - but that should not be a problem with your RT-11 files). 8-N-1 and FILE TYPE BINARY on both ends. It is possible that the serial driver is forcing the port to 7-bit mode (clearing the high bit), but I'm pretty sure Kermit knows about that sort of thing and has a way to deal with it.

Wikipedia claims "The Kermit protocol supports text and binary file transfers on both full-duplex and half-duplex 8-bit and 7-bit serial connections in a system- and medium-independent fashion, and is implemented on hundreds of different computer and operating system platforms. On full-duplex connections, a sliding window protocol is used with selective retransmission which provides excellent performance and error recovery characteristics. On 7-bit connections, locking shifts provide efficient transfer of 8-bit data." (Note that your RT-11 implementation probably doesn't do sliding windows, but that just means slower transfers, not broken ones.)

fdc and I worked on a C-Kermit extension that let Kermit transfer arbitrarily complex files - our test case was sending an RMS indexed file with multiple keys and with a journal attached, from VMS -> MS-DOS -> IBM VM/CMS -> DECsystem-10 -> VMS and having it come out intact on the far end VMS sytem.

Back to your issue at hand, I assume you're limited to the tools you have on that system already. Is there an RT-11 utility that dumps all of the blocks in a file as hex digits? You could then just ship that out the serial port and use a program on whatever system you have on the far end to re-constitute it as binary.
Thanks for your feedback.
Just so you know, I have almost 50 years experience dealing with RS232 communications links, and design both analog and digital hardware and write software in 20+ languages, including hardware and software flow control on com links. So not a newbie.

I've spent 80 hours trying to get this simple kermit-11 2.18 connection to my PC to preserve this 20mb hard disk but bit 7=0 on all files.
This Kermit-11 came with this machine and I'm sure it worked for the original users.

This DEC PDP11/23 ran flawlessly transferring 503 files over 6 hours, only to find out all files are bit 7=0.

My current suspicion is that the FTDI USB to serial adapter is somehow mis-engineered to zero the 7th bit regardless of the setting.

If I set parity to space then it transfers without error messages but the data still has bit 7 cleared.
This made me think kermit was smart and converting 8 bit bytes to 2 ascii hex characters or frame shifting, but apparently not.

I've tried every port setting, on both sides, dug into the driver properties on PC Windows side, still the same thing.

I just got through using realterm in Hex display mode and did a TYPE DIR.SAV and all bytes have 7th bit cleared.
I doubt this is right for a binary file like DIR but someone correct me if I'm wrong.

I've double-checked the jumper setting on the serial I/O board on the PDP11 -- baud=9600, stop=1, parity=none, data length=8
And those parms work fine with any dumb terminal or emulator on my windows machine.

I am stumped.

1724600139866.png
 
BTW, Kermit-11 on the PDP11 will not let me set both BINARY and Parity of any kind except none.
 
I believe that would imply that the only way Kermit-11 can perform binary transfers is with 8N1. Adding parity would require a 9-bit UART, right? Perhaps later versions allowed binary transfers over 7-bit (with or without parity) links?
 
Back
Top