Strange RS232 stuff

Go To Last Post
30 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I just discovered that the stuff sent through the serial port of my laptop behaves really strange.

I use Hyperterminal, and a USB-to-RS232 adapter. I have an oscilloscope connected to the RS232 signal also. When I press and hold a key, I can see on the oscilloscope that every other time the laptop sends the ASCII code with the highest bit wrongly set to 1! WTF?

What's even more strange, if I just press some different random keys, and then go back to press and hold one key, the laptop will send the correct ASCII code each time!

This is a really strange behaviour, and I have absolutely no idea why it appears. I use 19200 baud, 8 data bits, no parity, 1 stop bit. Please, can anyone help me?

BTW, sorry for this not being an AVR-specific question. :oops:

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
I can see on the oscilloscope that every other time the laptop sends the ASCII code with the highest bit wrongly set to 1!

You are a better man than I am Gangadin! How do you exactly see that?

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Quote:
I can see on the oscilloscope that every other time the laptop sends the ASCII code with the highest bit wrongly set to 1!

You are a better man than I am Gangadin! How do you exactly see that?

What do you mean? I setup the oscilloscope to show the voltage on the TTL side of the RS232 interface circuit during the transfer. The highest bit is 1 (high), even though it should be 0 (low). Does that answer your question?

Who's Gangadin?!?

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

You should take a look at the RS232 specification.

It states that High is -3V to -15V and Low +3V to +15V.

Startbit is High, followed by a LSB first transmission ans Stopbit Low.

Maybe it helps.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Warringer wrote:
You should take a look at the RS232 specification.

It states that High is -3V to -15V and Low +3V to +15V.

Startbit is High, followed by a LSB first transmission ans Stopbit Low.

Maybe it helps.

Yes, I know the RS232 spec's, almost by heart :)
In this case I only look at the TTL side, where the logic is non-inverted, i.e. high level means data=1 and low level means data=0. For RS232, a low level means data=1 and high level means data=0, which is inverted logic.

But either way, I clearly see that one bit actually changes for each time data is sent. And it shouldn't!

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Jaksel, I have seen the same thing (with a scope too). With hyperterminal, bit7 toggles. With my own code using the port on the Windows side, everything is fine.
I can only conclude that this is yet another bug in a piece of software held together by string and chewing gum.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I use 19200 baud, 8 data bits, no parity, 1 stop bit.
=============================================
How about handshake none? using either sw handshake or hw handshake would further confuse things

Gunga Din was a water boy in a Rudyard Kipling novel, but other than someone told him "You're a better man than I, Gunga Din" I have no idea what it was about. Something about British Colonialism in India? Sounds like politics to me!

Imagecraft compiler user

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

KKP wrote:
Jaksel, I have seen the same thing (with a scope too). With hyperterminal, bit7 toggles. With my own code using the port on the Windows side, everything is fine.
I can only conclude that this is yet another bug in a piece of software held together by string and chewing gum.

Now that is just really crappy... :evil:
But thanks a lot for clearing this up. All along I thought something was very wrong with my software.

Is there another (free) terminal program? I'm gonna search around a bit, but maybe someone can recommend one?

Bob,
I use no handshaking, I disable it in the dial-up config. My program should be able to handle high speeds without loss of data. In fact, I use a mere 128 bytes for buffering the USART (i.e. in each direction => in total 256 bytes). Not that I really need it, but what the heck the mega8 has so much memory...

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Bray's Terminal Program. One of the best.

http://bray.velenje.cx/avr/termi...

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

That is truly strange. Hyperterminal has been around a long time, and I beleive was actually written by someone else and licenses by Microsoft.

I can't think what would cause the problem. I assume you first saw it in the received data stream, and your OScope is a real one with a sampling rate above nyquist (and not some low sampling pseudo-oscope).

Dana

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

danafraymond wrote:
That is truly strange. Hyperterminal has been around a long time, and I beleive was actually written by someone else and licenses by Microsoft.

I can't think what would cause the problem. I assume you first saw it in the received data stream, and your OScope is a real one with a sampling rate above nyquist (and not some low sampling pseudo-oscope).

Dana

Yes, it's a real, analog 20MHz oscilloscope, and I am looking only at the raw data stream from the laptop (but on the TTL side of the MAX202). I can see clearly that the MSb is changed for each sent byte, and that the behaviour vanishes if I just press a few random keys (not just press and hold).

As I said, I'm using a USB-to-RS232 adapter, since I don't have a serial port integrated on my laptop. Maybe something's fishy with the adapter?

Edit: I just tried Bray's terminal, and everything works perfectly. Thanks!

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

A clip showing the oscilloscope. Excuse the poor quality...
http://www.cyd.liu.se/users/~jak...

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

jaksel wrote:
I can see on the oscilloscope that every other time the laptop sends the ASCII code with the highest bit wrongly set to 1!

js wrote:
You are a better man than I am Gangadin! How do you exactly see that?

jaksel wrote:
What do you mean? I setup the oscilloscope to show the voltage on the TTL side of the RS232 interface circuit during the transfer.

That's not the point.

The point is, how do you manage to get your scope to trigger on the Start bit, and the start bit only??

Thing is, a standard scope trigger circuit can't tell the difference between the falling edge of a start bit and any other falling edge anywhere else in the character frame!

Therefore, I suspect that what you're seeing is actually due to the scope triggering out of sync with the character frames, rather than any fault in the serial data itself... 8)

Top Tips:

  1. How to properly post source code - see: https://www.avrfreaks.net/comment... - also how to properly include images/pictures
  2. "Garbage" characters on a serial terminal are (almost?) invariably due to wrong baud rate - see: https://learn.sparkfun.com/tutorials/serial-communication
  3. Wrong baud rate is usually due to not running at the speed you thought; check by blinking a LED to see if you get the speed you expected
  4. Difference between a crystal, and a crystal oscillatorhttps://www.avrfreaks.net/comment...
  5. When your question is resolved, mark the solution: https://www.avrfreaks.net/comment...
  6. Beginner's "Getting Started" tips: https://www.avrfreaks.net/comment...
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

awneil wrote:
jaksel wrote:
I can see on the oscilloscope that every other time the laptop sends the ASCII code with the highest bit wrongly set to 1!

js wrote:
You are a better man than I am Gangadin! How do you exactly see that?

jaksel wrote:
What do you mean? I setup the oscilloscope to show the voltage on the TTL side of the RS232 interface circuit during the transfer.

That's not the point.

The point is, how do you manage to get your scope to trigger on the Start bit, and the start bit only??

Thing is, a standard scope trigger circuit can't tell the difference between the falling edge of a start bit and any other falling edge anywhere else in the character frame!

Therefore, I suspect that what you're seeing is actually due to the scope triggering out of sync with the character frames, rather than any fault in the serial data itself... 8)

That's a very good point, but in fact it's not the case. I am aware of that this can happen if the sweep time of the oscilloscope is too short. In this case, however, the sweep time is larger than the full transmission time. And the auto-repeat period is much longer than the transmission. So the oscilloscope cannot (or perhaps I should say "will not") trigger on anything else than the start bit.

Besides, I did receive data with MSb set with my app, every other transmission.

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
Thing is, a standard scope trigger circuit can't tell the difference between the falling edge of a start bit

That was my point,

Quote:
"You're a better man than I, Gunga Din" I have no idea what it was

Thanks for the spelling correction and the history behind it, I have no idea either :-) but it sounds good. Perhaps it was something that Peter Sellers would say in the Goon show.

By the way, as far as blaming poor hyperterminal for evertything that goes wrong with serial comms I don't go along with that, it is usually something that the operator does wrong. (not a declaration of war :-) )

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:

...I have no idea either ...

A fairly famous old movie of the same name had the quote. Close to the poem:
http://www.bartleby.com/103/48.html

Quote:

Din! Din! Din!
You Lazarushian-leather Gunga Din!
Tho' I've belted you an' flayed you,
By the livin' Gawd that made you,
You're a better man than I am, Gunga Din!

The 1939 movie summary, from a review:
http://movies.go.com/marketplace...

Quote:

This 1939 favorite is a rousing, rip roaring, action/adventure buddy movie that takes place in India during the British Raj in what looks to be sometime during the latter part of the nineteenth century. There, the British run into a spot of trouble, as the notorious Thuggee cult that worshipped the goddess Kali and was ostensibly wiped out by the British years earlier seems to be enjoying a resurgence.

At one time, this ancient murderous cult of professional thieves numbered as many as ten thousand, and it members, called Thugs. At the height of their power, Thugs would kill approximately thirty thousand unsuspecting people a year, often innocent travelers on the road. Thugs had an interesting modus operandi, as they would kill their victims by garroting them with a weighted scarf, relieve them of their worldly possessions, and then quickly bury them in graves, so that the victims would appear to have vanished off the face of the earth. This killer cult flourished for centuries in India, until the British, with the cooperation of the existing Indian government of the time, decimated their ranks, making them a curious relic of India's colorful past.

So, when it becomes apparent that Thugs are once again on the rise, it is of utmost concern to British officers, especially as these Thugs seem to be destroying communications by cutting down the lines over which telegraph signals are transmitted. Meanwhile, in one British outpost, three military buddies, cut-up Sgt. Archibald Cutter (Cary Grant), blustery Sgt. 'Mac' McChesney (Victor McLaglen ), and dashing Sgt. Thomas Ballantine (Douglas Fairbanks, Jr.) are involved in a free wheeling brawl with others. This is the viewer's introduction to these three buddies, whose motto seems to be all for one, and one for all. They are the functional equivalent of the three musketeers in the army of the British Raj. They are also the one's selected to investigate the mysterious downing of the lines of communication. What they discover ends up in a rousing skirmish by a small band of Thugs.

When they return to their outpost, down but not out, they are going to be sent back out for further investigation, only this time it initially appears that Ballantine will not be going, as his enlistment is up and, much to the chagrin of his comrades, he is scheduled to marry a young, beautiful woman (Joan Fonataine). Of course, boys will be boys, and peer pressure wins out. So, Ballantine goes off with his buddies, ostensibly for one last time. Accompanying them and their men is the garrison's regimental water bearer or bhisti, Gunga Din (Sam Jaffe), a simple man who harbors a secret desire to be a soldier and bugler in the British army.

When Cutter and Gunga Din accidentally stumble upon the ancient golden temple of Kali and its Thug adherents, they discover that the Thugs are led by a charismatic, highly articulate and intelligent Guru (Eduardo Ciannelli). This Guru, angry at the decimation of the Thuggee cult, has gathered its remaining adherents in order to attack the British and drive them out of India. He is determined to oust the British Empire from India, so that his own may flourish as they did in the old days. In order to allow Gunga Din to go back for help, Cutter then does the unthinkable. This leads to a series of rousing events that are sure to keep the viewer riveted to the screen.

While the film is not an adaptation of Rudyard's Kipling's poem of the same name, the essence of the character Gunga Din, played by Sam Jaffe, is that of the character in Kipling's poem. In fact, Rudyard Kipling appears as a minor character at the end of the film and a few lines of that poem are read.
I loved this film as a child, and I still love it today. This is simply a marvelous film that, by the standards of today, may be a bit politically incorrect in parts, but remains, nonetheless, wholly entertaining.

The role of Cutter, which is essentially a comedic role, was originally to be played by Douglas Fairbanks, Jr., and the role of the dashing Ballantine was to be played by Cary Grant. When Grant read the script, he insisted on playing Cutter or he would not play anyone at all. Of course, as Grant was then in top form as a box office star, his wish was granted, and he does not disappoint. He is positively marvelous as the cheeky Cutter. The role of Ballantine is well-served by the debonair and handsome Douglas Fairbanks, Jr., and Victor McLaglen is excellent in the role of the blustery, slightly misogynistic McChesney. This trio of comrades and their adventures will keep the viewer riveted to the screen.

Of course, Sam Jaffe is terrific as Gunga Din. By the time the end of the film rolls around, one can understand the line in Kipling's poem, "Gunga Din" that pretty much sums up the character in the film, "You're a better man than I am, Gunga Din!" As touching a performance as Sam Jaffe gives, however, there is one performance that stands out above all others in the film. Given the cast in this film, it is high praise, indeed! That singular recognition goes to the Italian born, veteran actor, Eduardo Ciannelli. Known mostly for the gangster roles that he played, Ciannelli outdid himself with his hypnotic and compelling performance as the fanatical Guru. His is the standout performance in a film riddled with excellent ones.

To my surprise, the film was shot on location in Lone Pine, California, although, while watching it, I would have sworn that it had been shot in the Northwest Frontier of India, somewhere along the Khyber Pass. George Stevens did a great job of directing this film and making it a favorite of many film buffs. This is a film worthy of a place in one's personal film collection. Bravo!

You can put lipstick on a pig, but it is still a pig.

I've never met a pig I didn't like, as long as you have some salt and pepper.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Gunga Din

YOU may talk o' gin an' beer
When you're quartered safe out 'ere,
An' you're sent to penny-fights an' Aldershot it;
But if it comes to slaughter
You will do your work on water, 5
An' you'll lick the bloomin' boots of 'im that's got it.
Now in Injia's sunny clime,
Where I used to spend my time
A-servin' of 'Er Majesty the Queen,
Of all them black-faced crew 10
The finest man I knew
Was our regimental bhisti, Gunga Din.

It was "Din! Din! Din!
You limping lump o' brick-dust, Gunga Din!
Hi! slippy hitherao! 15
Water, get it! Panee lao!
You squidgy-nosed old idol, Gunga Din!"

The uniform 'e wore
Was nothin' much before,
An' rather less than 'arf o' that be'ind, 20
For a twisty piece o' rag
An' a goatskin water-bag
Was all the field-equipment 'e could find.
When the sweatin' troop-train lay
In a sidin' through the day, 25
Where the 'eat would make your bloomin' eyebrows crawl,
We shouted "Harry By!"
Till our throats were bricky-dry,
Then we wopped 'im 'cause 'e couldn't serve us all.

It was "Din! Din! Din! 30
You 'eathen, where the mischief 'ave you been?
You put some juldee in it,
Or I'll marrow you this minute,
If you don't fill up my helmet, Gunga Din!"

'E would dot an' carry one 35
Till the longest day was done,
An' 'e didn't seem to know the use o' fear.
If we charged or broke or cut,
You could bet your bloomin' nut,
'E'd be waitin' fifty paces right flank rear. 40
With 'is mussick on 'is back,
'E would skip with our attack,
An' watch us till the bugles made "Retire."
An' for all 'is dirty 'ide,
'E was white, clear white, inside 45
When 'e went to tend the wounded under fire!

It was "Din! Din! Din!"
With the bullets kickin' dust-spots on the green.
When the cartridges ran out,
You could 'ear the front-files shout: 50
"Hi! ammunition-mules an' Gunga Din!"

I sha'n't forgit the night
When I dropped be'ind the fight
With a bullet where my belt-plate should 'a' been.
I was chokin' mad with thirst, 55
An' the man that spied me first
Was our good old grinnin', gruntin' Gunga Din.

'E lifted up my 'ead,
An' 'e plugged me where I bled,
An' 'e guv me 'arf-a-pint o' water—green; 60
It was crawlin' an' it stunk,
But of all the drinks I've drunk,
I'm gratefullest to one from Gunga Din.

It was "Din! Din! Din!
'Ere's a beggar with a bullet through 'is spleen; 65
'E's chawin' up the ground an' 'e's kickin' all around:
For Gawd's sake, git the water, Gunga Din!"

'E carried me away
To where a dooli lay,
An' a bullet come an' drilled the beggar clean. 70
'E put me safe inside,
An' just before 'e died:
"I 'ope you liked your drink," sez Gunga Din.
So I'll meet 'im later on
In the place where 'e is gone— 75
Where it's always double drill and no canteen;
'E'll be squattin' on the coals
Givin' drink to pore damned souls,
An' I'll get a swig in Hell from Gunga Din!

Din! Din! Din! 80
You Lazarushian-leather Gunga Din!
Tho' I've belted you an' flayed you,
By the livin' Gawd that made you,
You're a better man than I am, Gunga Din!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
Gunga Din (Sam Jaffe), a simple man who harbors a secret desire to be a soldier and bugler in the British army.

I think there was a similar scene in the movie 'The Party' with Peter Sellers....I try not to watch serious movies, there is plenty of real drama in my life already :lol:

Now this is more instructive that the C vs Assembler thread isn't it?

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Quote:
Thing is, a standard scope trigger circuit can't tell the difference between the falling edge of a start bit

That was my point,

Quote:
"You're a better man than I, Gunga Din" I have no idea what it was

Thanks for the spelling correction and the history behind it, I have no idea either :-) but it sounds good. Perhaps it was something that Peter Sellers would say in the Goon show.

By the way, as far as blaming poor hyperterminal for evertything that goes wrong with serial comms I don't go along with that, it is usually something that the operator does wrong. (not a declaration of war :-) )

Well, I don't see what I am doing wrong. Remember I'm not doing anything with the data on the serial port other than passively looking at it. And the settings of the serial port are all fine. Either way, I don't know of a setting that changes the 8th data bit at each transmission, but only until you type a few random keys...
I am interpreting the data correctly; I checked that I see the full frame, and that the baud rate is correct, the data is correct (except for 8th bit) for all characters I tried with. Even my mega8 sees the correct data, including the erroneous 8th bit.

So what could I do wrong? Why don't you try hooking up an oscilloscope to a PC running hyperterminal 5.1? I an convinced you get the same error. At least KKP does, and he gets correct data with his own software. Also Bray's terminal program works perfectly for each frame.

I'm telling you, hyperterminal has a bug.

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:

Now this is more instructive that the C vs Assembler thread isn't it?

It depends. I find that many people need a LOT of proper instruction on right-thinking about that issue.

(re Peter Sellers)

Quote:
The original film [The Party] was a more-than-a-little-racist comedy with a white comedian playing ‘Hrundi V. Bakshi’ in brownface, sporting a degenerate imitation of an Indian accent. Sellers wandered around a film set for a sequel to Gunga Din, itself a landmark of racism featuring civilized British soldiers vs. naked Indian savages.

Lee

You can put lipstick on a pig, but it is still a pig.

I've never met a pig I didn't like, as long as you have some salt and pepper.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

I tried to reproduce the problem and could not.

I tried it both with the built-in serial port and a USB-serial converter on a Dell notebook PC.

I tried all the terminal emulations, flow-controls and other settings such as line-feed after carriage return, but no joy.

My version of Hyperterminal is 5.1 (build 2600.xpsp_sp2_gdr.050301-1519: service pack 2) running on Windows XP.

What is the exact settings you have? Does the prolem occur with any character being pressed or only some?

kevin

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

In my case it was with a Prolific chip in the dongle, and the scope used was an 8M Megazoom scope @ 10Msps, which let me capture some 24 characters.
Triggering on the characters with an analog scope isn't a problem either, since the keyboard repeat rate causes a 30 millisecond gap between characters (and why OP's scope is so dark).

My gut feeling if I ever see this with an API tracer running, I'll see an invalid DCB being passed to SetCommState.
Hyperterminal 5.1 is a microsoftified derivative of an older version. It might be interresting to try Hyperterminal 6.3 and see what happens.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

kevin_white wrote:
Hi,

I tried to reproduce the problem and could not.

I tried it both with the built-in serial port and a USB-serial converter on a Dell notebook PC.

I tried all the terminal emulations, flow-controls and other settings such as line-feed after carriage return, but no joy.

My version of Hyperterminal is 5.1 (build 2600.xpsp_sp2_gdr.050301-1519: service pack 2) running on Windows XP.

What is the exact settings you have? Does the prolem occur with any character being pressed or only some?

kevin

Hm, strange. I have the exact same version. Here are my settings:
COM: baud 19200, 8 data bits, no parity, 1 stop bit, no flow control
Terminal keys, backspace is Ctrl+H, emulation is "Identify" or "ANSI" (think both gave same result)
ID: ANSI
Buffered rows: 500
Incoming data: Shift-JIS
ASCII settings: everything disabled except local line wrap

I usually try with 'a' - press and hold it, and see if highest (last) bit ever changes. I know that 's' and 'g' also works, but most probably all other keys do (haven't come across any key which does NOT give the same result).

Edit: I should add that another bug is that if the transmitted data is directly echoed back, eg with just one wire between Rx and Tx, then Hyperterminal does NOT display the actual character (ie it ignores the highest bit). That also led to several hours of searching for bugs.

/Jakob Selbing

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I tried to reproduce the problem and wasn't able to even get as far as jaksel did. Hyperterminal worked okay for me talking directly to a COM port. When I tried to communicate through a USB serial adapter, I had no luck whatsoever - no data transmitted from PC to AVR.

I never actually use Hyperterminal - instead, I use Tera Term Pro which works fine with my USB serial adapter. AVR Studio also works fine with my USB serial adapter.

Don

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I am a big fan of superterm (its in the freaks tools section)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Jakob, have you tried to verify this using another PC and an nullmodem adapter?

/
Magnus

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi all. I can't recall where I heard this but I seem to remeber that some terminal programs behave differently if the key is held or if it is tapped in succession.

jaksel,
Try repeatedly tapping a letter key and see if you get the same problem with the MSB. I have a hunch you won't. The toggling of the MSB is probably a "feature" of hyperterminal. Since it expects only standard ASCII characters (0-127) the MSB would be ignored and could conceivably be used to carry extra data like if the key was held. Same thing with incoming data to the terminal. Some terminal programs I have worked with ignore the MSB and only show the lowest 7 bits worth of data, again since only ASCII 0-127 is universally defined. Though I use hyperterminal pretty often around here and it seems to print characters above 127 without problems.
-Will

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hey Freaks,

I've never had a single problem with Hyperterminal. I've used it with a USB adapter and a standard serial port. Normally I use 9600 8N1, no flow control.
What am I doing wrong???? :lol:

Dave.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Gunga Din? Google is your friend: http://www.bartleby.com/103/48.html

Sean.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hyperterminal is a piece of sh*t. I highly recommend not using it! With the version included in XP my keyboard periodically just quits working, on two different computers. WTF I say? I actually have to reboot to get it working again. I use either Bray or a sample visual studio project called MTTY (multithreaded TTY) I don't think either one supports VT100 though.

I like cats, too. Let's exchange recipes.