You could store all the text in an array, and only print a part of it to screen, by default the most recent part, but you could scroll up and down.
Here's a sample:
rem My text rpg! Is rubbish!
sync on
sync rate 30
dim actions$(50)
data "Set out on ye olde Quest for Might and Blah!"
data "You are on a road"
data "You are holding a banana"
data "What do you want to do?"
data ">TAKE BANANA"
data "You already have the banana"
data "What do you want to do?"
data ">EAT BANANA"
data "It's still in it's skin"
data "What do you want to do?"
data ">REMOVE SKIN"
data "I don't understand the word 'remove'"
data "What do you want to do?"
data ">TAKE OFF SKIN"
data "I don't see that here"
data "What do you want to do?"
data ">JUMP ON BANANA"
data "That has no effect"
data "What do you want to do?"
data ">HIT BANANA WITH AXE"
data "That has no effect"
data "What do you want to do?"
data ">THROW BANANA"
data "Wheee!"
data "You see a banana"
data "What do you want to do?"
data ">TAKE BANANA"
data "Taken"
data "What do you want to do?"
data ">PEEL BANANA"
data "You peel the banana"
data "What do you want to do?"
data ">EAT BANANA"
data "Mmmmm, that was nice"
for i=0 to 33
read actions$(i)
next i
pos=20
maxpos=33
do
cls
for i=(pos-20) to pos
text 0,400-(((pos)-i)*20),actions$(i)
next i
if upkey()=1 and pos>20 then pos=pos-1
if downkey()=1 and pos<maxpos then pos=pos+1
sync
loop
You'd put whatever the player typed and the result into the next available space in the array. If the array is full, then start moving everything up to accommodate, but that would mean deleting some text. To compensate, have a bigger array.