using a vt52 emulator talking to tops-10 and working in sos editor and ddt debugger, some keyboard topics quickly become apparent. the vt52 had a line feed lf key, but modern keyboards don’t. so, there’s not an obvious way to send lf alone.

in sos, lf prints the next line. with esc printing the previous line, lf and esc ‘scroll down and up’ through the file. it has a similar role in ddt, where it ‘examines the next instruction’.

tangentially, here’s some interesting discussion from the gorin book. this belongs in the dictionary under ‘unintended consequences’.

as a user of the decsystem-10 you are aware that usually you end a line by typing the carriage return key. when tops-10 sees the return key, it adds a line feed after the return. thus, usually, a program will see both a carriage return and a line feed when it reads the terminal. however, please note that tops-10 considers the line feed to be end of the line, so a program that is searching for the end of a line should not be satisfied until it finds the line feed.

the tops-10 ‘rubout’ delete key is also a topic. the modern backspace key seems to be a dead end. the delete key to the right of the enter key is correct. there’s some qualifiers on that though, at least for tops-10.

for line feed, the answer is to use ctrl-j. discovered this while googling ‘vt52 emulator with line feed’, and it instantly made sos and ddt completely usable. this was a night to day change and seems to be essential knowledge for using tops-10 now.

as an additional note, ctrl-h plays an inverse role to ctrl-j, at least within ddt. there ctrl-h closes current location and moves upward, and ctrl-j does similar but moves downward. so nutshell summary -

sos
print upward - esc
print downward - ctrl-j

ddt
examine upward - ctrl-h
examine downward - ctrl-j

for the ‘rubout’ delete key, use the one to the right of the enter key, but note tops-10 echoes the characters as they’re rubbed out, surrounded by \ delimiter character. this can be disorienting at first. so for example typing ‘test’, then delete twice, then ‘ hello’ results in ‘test\ts\ hello’ on screen. the end result is ‘test hello’.

the sos commands

^ = first line
. = curr line
* = last line
esc = print prev, exit insert mode if inside
ctrl-j = print next
pln1:ln2 = print lines in range
iln1 = insert mode at ln1
cln1,ln2:ln3 = copy range to ln1
tln1,ln2:ln3 = move range to ln1
rln1:ln2 = delete range and insert at ln1
fstring$ln1:ln2 = find string in range
sstring$ln1:ln2 = substitute string in range
nx = renumber lines using step x
w = save
e = save and exit
es = save without line numbers
eq = exit without save
g = save and exit and rerun
ctrl-u = retype current line, any mode