[comp.sys.atari.st] keyboard buffer, was Re: Crawio

roeder@sbsvax.UUCP (Edgar Roeder) (08/01/88)

In article <1095@atari.UUCP>, apratt@atari.UUCP (Allan Pratt) writes:
> 
>                   ...  Thank you for your concern, though.  It's a little
> late in the release process to get major changes in, but if there are
> little things you're afraid we may have overlooked, please MAIL to
> me with your ideas.

Since i can't get to you by mail ('pandora refuses connection' on every path i
tried), i post this to the net.

I have found another nice "feature" in the ST-keyboard buffering routines.

First the scenario:

The old TOS (Blitter-TOS and previous ones) uses a buffer of 80 longs for
buffering keyboard input on GEMDOS-level. Three variables control this
process:	1. a counter, which is incremented on adding and decremented on
		   deleting of a char
		2. a head-pointer which is incremented after adding a char to
		   the beginning of the buffer
		3. a tail-pointer, which is incremented after deleting a char
		   from the end of the buffer
Whenever the two pointers get equal, they are reset to point to the beginning
of the buffer.
When the count of characters in the buffer gets 80, the console beeps and no
char is added.

And now the problem:

When you are typing faster than the program reads (and have always <80 chars
in the actual buffer between head and tail), the buffer overflows into
user-RAM, because the head pointer is always incremented and never checked
against the high end of the buffer. Conclusion: the ST crashes.

Is this fixed in the new ROM-code ???

- Edgar