It has to be enabled from the Tools->Socket Configuration menu item. I
am runnintg it with port 2023 and "Telnet mode" disabled.
As far as the thread deadlock, I'm not sure. It seems maybe as long as
I am only using the telnet port, there is no issue. It is even possible
to "load" programs or "kill" them and even "terminate" will cause
VirtualT to shutdown. At one point I was thinking of adding an option
to launch VirtualT in headless mode where you only use the telnet /
socket interface and don't even have / need the the GUI. But that's a
fair amount of work.
If you want to try it, it *might* work on Windows as is (I don't know,
haven't used Windows for 15 years or so). On linux in src/remote.cpp I
had to add code to strip any trailing \r\n in the process command
function prior to assigning to 'cmd' variable, then it started working:
std::string process_command(ServerSocket& sock, char *sockdata, int len,
int console=FALSE)
{
...
while (sockdata[len-1] == '\r' || sockdata[len-1] == '\n')
sockdata[--len] = 0;
std::string cmd = sockdata;
...
}
Ken
On 12/22/25 9:38 PM, B9 wrote:
Whoa, that's cool! The telnet daemon runs automatically with Virtual-T?
For the threads/deadlock issue, does it work reliably as long as no
operator is at the graphical console?
--b9
On December 22, 2025 7:15:30 PM PST, Kenneth Pettit
<[email protected]> wrote:
Seems my VirtualT socket interface issue was mostly just \r\n line
ending issues (though "telnet mode" still not working for some
reason). But there also seems to be some tread dealock issues
lurking somewhere because sometimes the LCD gets some junk on it
and X prints errors like below, and then VirtualT hangs (most
likely on a semaphore wait that's in a deadlock) X_ChangeGC:
BadPixmap (invalid Pixmap parameter) 0x0 X_GetWindowAttributes:
BadLength (poly request too large or internal Xlib length error)
0x0 X_GetInputFocus: BadLength (poly request too large or internal
Xlib length error) 0x0 X_GetWindowAttributes: BadLength (poly
request too large or internal Xlib length error) 0x0
------------------------------------------------------------------------
Example run (this could be turned into an agentic workflow once
deadlock is resolved)
------------------------------------------------------------------------
(Launch VirtualT in another Linux terminal)... ken@andromeda#
telnet localhost 2023 Trying 127.0.0.1... Connected to localhost.
Escape character is '^]'. help Help
------------------------------------------------------------------------
bye clear_break(cb) address cold_boot debug_isr(isr) [on
off] dis address [lines] exit flags [all S Z ac P=1 s=0 ...]
halt in port key(k) [enter cr f1 esc ctrl+c shift+code+a
"Text" ...] kill filename lcd_ignore(li) [none
(row,col)-(row,col)] lcd_mon(lm) [on off] list_break(lb)
load filename model [m10 m102 t200 pc8201 m10 kc85] optrom
[unload, filename] out port, value radix [10 or 16]
read_mem(rm) address [count] read_reg(rr) [all A B h m DE ...]
read_rex reset run screen_dump(sd) set_break(sb) address
[main opt mplan ram ram2 ram3 read write] speed [2.4 friendly
max] status step(s) [count] step_over(so) [count] string
address terminate write_mem(wm) address [data data data ...]
write_reg(wr) [A=xx B=xx hl=xx ...] x [lines] (short for "dis
pc") Ok> speed 2.4 Ok> speed max Ok> speed max (484.971 Mhz) Ok>
screen_dump Dec 22,2025 Mon 19:02:21 VirtualT 1.8 BASIC
TEXT TELCOM ADDRSS SCHEDL TRIANG.DO TRIANG.BA MIAM.BA
ASCPIX.CO -.- -.- -.- -.- -.- -.-
-.- -.- -.- -.- -.- -.- -.- -.-
-.- Select: _ 10670 Bytes free Ok> key enter Ok>
screen_dump TRS-80 Model 100 Software Copr. 1983 Microsoft 10414
Bytes free Ok Ok> lcd_mon on Ok> key "list" enter event, lcdwrite,
(8,1),list event, lcdwrite, (8,1),10 FOR X=1TO5:PRINTX:NEXT event,
lcdwrite, (8,1),Ok key "run" enter event, lcdwrite, (8,1),run
event, lcdwrite, (8,1), 1 event, lcdwrite, (8,1), 2 event,
lcdwrite, (8,1), 3 event, lcdwrite, (8,1), 4 Ok> event, lcdwrite,
(8,1), 5 event, lcdwrite, (8,1),Ok Ok> read_reg all A=1 F=68 B=0
C=0 D=1 E=6 H=117 L=81 M=1 PC=30014 SP=57418 Ok> radix 16 Ok>
read_mem 0 32 C3 33 7D 4D 45 4E 55 00 7E E3 BE C2 46 04 23 E3 C3
58 08 EB 2A EB F6 EB 7C 92 C0 7D 93 C9 3E 20 Ok>