[net.micro.cbm] Problems with 1200 baud Kermit

jmg@cernvax.UUCP (jmg) (07/01/85)

Has anyone out there got either Kermit or any terminal emulator
working at 1200 baud?
I have tried several versions of Kermit without success. Normal
typed input goes OK, but high speed input (holding down the key)
seems not to work. The output of any command is recognisable (just)
but garbled in a random fashion. Leads me to believe that the 64
has problems to handle 1200 baud: 2400 seems an eternity away.
Maybe it has to do with the fact that I am on the European
standard, but the RS232 routines supposedly handle this.

Any information welcome.

percus@acf4.UUCP (Allon G. Percus) (07/02/85)

I would suppose that the 64 would have MUCH trouble handling
1200 baud.  Remember, that's 1200 bps, or 150 characters per
second.  Very fast for the 64, considering that a routine
put in the interupt will only strike 60 times per second.
Hence, some sort of "wrinkle" is necessary to make things
faster by several orders of magnitude, and I don't think
KERMIT provides it.
                                         A. G. Percus
                                  (ARPA) percus@acf4
                                   (NYU) percus.acf4
                                  (UUCP) ...!ihnp4!cmcl2!acf4!percus

GMW@psuvm.BITNET (07/03/85)

     I have been using Eric Lavitsky's C64-Kermit at 1200 baud for months now
with absolutely no ill effects.  I have heard that terminal programs written
in Basic can't keep up with 1200 baud, but Kermit is written in 6502 assembler,
and certainly doesn't use the 60 Hz interrupt for RS-232 I/O.  Don't forget
that the 64's 1 Mhz CPU can process a couple hundred thousand instructions per
second.
     
Has anyone tried Kermit at 2400 baud?
     
George M. Weaver
Penn State Astronomy Dept.
GMW at PSUVM.BITNET
...!allegra!psuvax1!gmw@psuvm.bitnet
     

prindle@nadc (07/03/85)

From: prindle@NADC

1200 Baud is no major problem on the 64, provided you know the "wrinkles", and
Kermit does (at least the assembly version, not the forth).  By now it's no
big secret - 1. use assembly language, 2. use non-standard baud rate to
compensate for kernel bugs, 3. carefully control when bytes are transmitted
relative to incoming data, 4. time outgoing bytes so they are not written to
the rs-232 buffer faster than 120/sec.  Once you do all this, it always works
great (in fact, so many programs, commercial and otherwise, now depend on the
aforementioned kernel bug, that Commodore doesn't dare fix it, even in the 
128!).  I suspect that 2400 baud is possible, although I haven't heard of
anyone with the requisite equipment having tried it out - the tough part is
deriving the correct non-standard baud rate constant, mostly by trial and
error. The only possible hitch is that the kernel will have to contend with
an interrupt every 415 microseconds instead of every 830, and it's beginning
to approach the point where the kernel overhead may leave very little
CPU time for the comm program itself.  Full duplex (ie. hitting a key while
incoming data is being displayed) further increases the number of interrupts
to be serviced.  Also, scrolling the screen takes sufficiently long that
flow control (xon,xoff) will be a necessity at 2400 if it works at all.

As for the person who was having trouble with kermit at 1200 baud on the
foreign model c64, there are two possibilities.  1. The first few releases
of c64 kermit did not support 1200 baud, so you may have one of those.  2. The
kernel is supposed to take care of the different CPU/DOT clock rates when
dealing with PAL standard c64s, but if they could screw up the baud rate clock
settings in general, they probably screwed this up too.

As further proof of the feasability of 1200 baud, I took the crude terminal
program from the C64 PRG (written in BASIC), and literally translated it to
C, modified for 1200 baud, compiled it with Brian Hilchie's C-Power, and it
works just fine.  In spite of the relatively unoptimized code generated, it's
main loop was still fast enough to keep up with 1200 baud with half the loop
spent idle.

Much of the "bad-press" regarding the c64 and 1200 baud resulted from early
commercial terminal programs whose authors made the fatal mistake of believing
something they read in a piece of Commodore documentation without testing
it!  Even the first two versions of Compuserve's VIDTEX program suffered from
this effect - they made up some pretty ridiculous excuses (for 1200 baud
anomalys) in their documentation before they figured out what they were really
doing wrong.

Lastly, to be technically correct, replace "baud" in all the previous
discussion with the correct term: "bits per second".

Cheers,
Frank Prindle

jeff@gatech.CSNET (Jeff Lee) (07/04/85)

> I would suppose that the 64 would have MUCH trouble handling
> 1200 baud.  Remember, that's 1200 bps, or 150 characters per
> second.  Very fast for the 64, considering that a routine
> put in the interupt will only strike 60 times per second.

1200 bps (asynchronous) is not quite 150 chars per second. Depending on the
number of stop bits or the length of the character, the data rate drops
fairly quickly. Asynchronous transmission normally uses 1 start bit
(to let the hardware know that another character is coming) plus the number
of bits in the character followed by 1 or 2 stop bits to finish the character
and get ready for another. This means that a single character could require
from 9 to 11 bits for transfer. The following assume 1200 bps transmission:

	1 start + 7 data + 1 stop = 9  bits = 133.3 chars per second
	1 start + 7 data + 2 stop = 10 bits = 120.0 chars per second
	1 start + 8 data + 1 stop = 10 bits = 120.0 chars per second
	1 start + 8 data + 2 stop = 11 bits = 109.1 chars per second.

These also drop lower if you start sending parity bits. I don't have a
Commodore modem, but I doubt that since it is an 8 bits machine that it
uses anything but 7 or 8 bit transmission and almost anything higher than
110 uses only 1 stop bit. This would put it in the 9-10 bit range per
character. Enjoy.....
-- 
Jeff Lee
CSNet:	Jeff @ GATech		ARPA:	Jeff%GATech.CSNet @ CSNet-Relay.ARPA
uucp:	...!{akgua,allegra,hplabs,ihnp4,linus,seismo,ulysses}!gatech!jeff

adam@utcs.UUCP (Adam R. Iles) (07/06/85)

	Hello, and yes, I use my 64 to talk at 1200 baud.  The effects
    that were mentioned (grabled characters when a key is repeating, or
    a large passage is being sent) seem to fit with what I experience
    from time to time.  The cause(s) for this can be explianedby the fact
    that there isn't a communication chip in the 64 (i.e.; rs232 is handeled
    by software), and if you are using a 64 made for Europe the clock
    speed isn't even at one Mhz (the television signals are timed differently)
    I get around this by turning off the vic ii chip, and use an 80-col 
    adapter, this seeme to work alright (but kiss parity good-bye).
  
	Since it was mentioned that you are using a European 64, I'd 
    suggest that that is what is killing the proffesional programs from
    working on your machine, since they tend to adjust the number of
    interupts that hit in a given amount of time.  As far as fixes for
    this go (I use a Canadian 64, so I don't have any).
-- 

	If god had meant for 64's to communicate he would have given
	them communications chips, 80 columns, faster clockspeeds, ...
    
        Any opinions stated above may, or may not, refect those
        of any sane person living, dead, or just sleeping.

       Adam R. Iles:
                ...{decvax,ihnp4,utcsri,{allegra,linus}!utzoo}!utcs!adam