Quote: "But does that only apply to the entry$() command"
Yes, ENTRY$() is designed to remember all keys pressed since the last CLEAR ENTRY BUFFER command. If you want extreme accuracy from ENTRY$() use a FOR/NEXT loop to extract each key stored in ENTRY$().
In the following code snip press as many keys as you want as fast as you want and hit the spacebar to pause. It'll show all keys stored in ENTRY$() no matter how long it is.
do
` Clear the buffer
clear entry buffer
` Wait a bit to store up keys in ENTRY$()
wait 50
` Show that it starts
print "--> Go!"
` Go through each character in ENTRY$()
for t=1 to len(entry$())
` Show the character and ASCII value
print mid$(entry$(),t)+" = "+str$(asc(mid$(entry$(),t)))
next t
` Show that it's done
print "--> Stop!"
print ""
` Check for spacebar to stop the action
if keystate(57) then wait key
loop
Quote: "because keystate() and scancode() return a key press without fail."
KEYSTATE() is limited because it will only show so many keys. If you hold down 10 keys at a time it'll only show 3 or 4 (if that). It's a hardware limit on our keyboards. If you had the newest coolest keyboard with anti-ghosting you could detect up to 26 keys with KEYSTATE().
Microsoft SideWinder X4 Keyboard:
http://www.amazon.com/Microsoft-JQD-00001-SideWinder-X4-Keyboard/dp/B002ZV51DI
SCANCODE() is also limited to what KEYSTATE() number the key is. If you used SCANCODE() and held down S it'll show 31 but if you kept it held down and pressed A it'll only show 30 even though your also pressing S. SCANCODE() only shows the lowest numbered key. That's why it really should only be used to find out the KEYSTATE() number for each key you want to use and as a quick way to make sure no keys are currently being pressed.