The data at the bottom are the characters that are allowed to be picked up. This code is not that effecient, but like everything else I've posted tonight, it's ooolllddd. Mostly all DBC 1.09 stuff.
sync on
sync rate 0
backdrop on
color backdrop 0
string$=""
dim c$(61)
for t=1 to 61
read z$
c$(t)=z$
next t
make object cube 1,30
position object 1,0,0,50
do
for t=1 to 61
if inkey$()=c$(t) and flag=0
flag=1
temp$=c$(t)
string$=string$+c$(t)
exit
endif
next t
if flag=1 and inkey$()<>temp$ then flag=0
if scancode()=14 and flag2=0
del=len(string$)-1
flag2=1
string$=left$(string$,del)
endif
if scancode()<>14 then flag2=0
if (string$<>"" and scancode()=28) or (string$<>"" and scancode()=156)
gosub _check_string
line$=string$
string$=""
endif
a#=wrapvalue(a#+2)
yrotate object 1, a#
set cursor 0,0
print code$
set cursor 300,160
print line$
set cursor 300,200
print "> "+string$
sync
loop
_check_string:
if string$="password"
code$="TRUE"
else
code$="FALSE"
endif
RETURN
data "1","2","3","4","5","6","7","8","9","0","-","="
data "q","w","e","r","t","y","u","i","o","p","[","]"
data "\","a","s","d","f","g","h","j","k","l",";","'"
data "z","x","c","v","b","n","m",",",".","/"," ","`"
data "~","!","@","#","$","%","^","&","*","(",")","_"
data "+"
"eureka" - Archimedes