DZ11 / DZV11 — serial multiplexer
The DZ11 is DEC’s asynchronous serial multiplexer: several terminal lines
behind one set of registers, a receive silo shared by all of them, and a
transmit scanner that offers the program one ready line at a time. QUniLator
models it from the DZV11 technical manual, EK-DZV11-TM-001. Each line runs over
the network: a terminal program connects to a TCP port on the board, or the line
dials out, or a browser terminal carries it. It is listed as dzv11, of type
dzv11_c, and ships disabled.
What the machine sees
Section titled “What the machine sees”| Registers | CSR 760100; RBUF (read) / LPR (write) 760102; TCR 760104; MSR (read) / TDR (write) 760106 |
| Interrupts | Receive at vector 300, transmit at 304, both BR4. A receive interrupt is taken before a transmit interrupt standing at the same time |
| Receive silo | 64 characters with their line numbers. A character arriving at a full silo marks an overrun. With silo alarm enabled, every 16th character raises the alarm |
| Lines | Eight on the UniBone, four on the QBone. A line receives only while the scan is on (CSR bit 5) and its receiver is enabled in the LPR |
| Line speed | Bytes cross at the speed of the network. The speed, character length and parity the program writes to the LPR are accepted and do not slow the line |
| Modem | Each line’s network end behaves as an auto-answer modem; see below |
| Maintenance | CSR bit 3 loops every line’s transmitter back into its receiver |
The modem on each line
Section titled “The modem on each line”With dtr_listen off, a client that connects to a line the guest has not
answered rings it: the
line’s ring bit stands in the MSR. The guest answers by raising Data Terminal
Ready in the TCR, and carrier then stands in the MSR; on a line where DTR is
already up, the call is answered at once. A guest that does no modem
control never answers; the ring lapses after four seconds and carrier comes up
on its own. When the guest drops DTR — a terminal driver hanging up — the client
is disconnected; the line stays ready for the next caller.
Using it
Section titled “Using it”- Enable
dzv11. Every line listens on a TCP port of its own: line N on 4000 + N. - Once the guest has opened the line — raised DTR on it, as a getty does —
connect a terminal program to the board on that port, speaking Telnet:
telnet <board> 4000reaches line 0. Before that the port refuses callers; seedtr_listen. - Each line can be set to another port, to a
host:portit dials, or towsfor a browser terminal on the board’s WebSocket/ws/serial/dzv11/<N>. The Configurations screen shows one field per line for that. A line can be changed while the device runs; only that line’s client is dropped.
A line takes one client at a time. Lines given the same port share it, so a caller reaches whichever of them is free, and a caller arriving while every line on the port is busy is refused.
Four DZs can run at once: dzv11, dzv11b, dzv11c and dzv11d, at 760100,
760110, 760120 and 760130, with vectors 300, 310, 320 and 330, each listening on
ports sixteen higher than the one before.
A guest that never raises DTR — VMS with a terminal set /NOMODEM is one — has
to be given dtr_listen off, or its lines never take a caller.
An enable is refused when a line that is to listen at once cannot bind its port because another program holds it. A line waiting for DTR binds its port only when the guest raises DTR, so the enable does not test it.
What has been verified
Section titled “What has been verified”- DEC’s DZV11 diagnostic CVDZA (VDZAD3) runs its complete pass on a QBone with no errors.
- On a UniBone, VMS V4.7 configures the eight lines as TTA0 to TTA7, all eight ports listen, and a client on line 3 or line 7 gets a login prompt.
- On a QBone, 2.11BSD comes up multiuser with a getty on line 0, and a client on port 4000 gets its login banner.
Parameters
Section titled “Parameters”Settings
Section titled “Settings”What a configuration stores and an operator sets.
| Parameter | Short | Value | Default | What it is |
|---|---|---|---|---|
dtr_listen | dtrl | 0 or 1 | 1 | listen on a line’s TCP port only while the guest asserts DTR |
tcp_role0 … tcp_role7 | r0 … r7 | text; on QBUS up to tcp_role3 | listen | line n TCP role: ""/listen/connect/websocket |
tcp_host0 … tcp_host7 | h0 … h7 | text; on QBUS up to tcp_host3 | empty | line n connect-out host |
tcp_port0 … tcp_port7 | p0 … p7 | number; on QBUS up to tcp_port3 | — | line n TCP port |
Status
Section titled “Status”What the device reports as it runs. A configuration does not store these.
| Parameter | Short | Value | What it is |
|---|---|---|---|
rx0lamp … rx7lamp | rxl0 … rxl7 | 0 or 1; on QBUS up to rx3lamp | line n receive activity |
tx0lamp … tx7lamp | txl0 … txl7 | 0 or 1; on QBUS up to tx3lamp | line n transmit activity |
dtr0lamp … dtr7lamp | dtl0 … dtl7 | 0 or 1; on QBUS up to dtr3lamp | line n data terminal ready |
cd0lamp … cd7lamp | cdl0 … cdl7 | 0 or 1; on QBUS up to cd3lamp | line n carrier detect |
ri0lamp … ri7lamp | ril0 … ril7 | 0 or 1; on QBUS up to ri3lamp | line n ring indicator |
It also carries the parameters under parameters every card on the bus has.
In detail
Section titled “In detail”dtr_listen
Section titled “dtr_listen”A line takes a caller only while the guest holds it open. With this on, a line’s TCP port is bound while the guest asserts Data Terminal Ready on it, and given up when DTR falls, which also ends a session in progress; a caller then reaches only a line the guest is ready for. Off, every line configured to listen does so from the moment the device is enabled. A guest that never raises DTR on a line, such as VMS with the terminal set /NOMODEM, needs it off. Takes effect at once.
tcp_role0 … tcp_role7, tcp_host0 … tcp_host7, tcp_port0 … tcp_port7
Section titled “tcp_role0 … tcp_role7, tcp_host0 … tcp_host7, tcp_port0 … tcp_port7”Each line’s network end, line by line: tcp_roleN, tcp_hostN and tcp_portN for line N. listen accepts one client on the port, speaking Telnet with RFC 2217; connect dials host:port and dials again when the connection drops; websocket carries the line on the board’s WebSocket /ws/serial/<device>/<N>; empty leaves the line unconnected. Every line listens by default, line N of the first DZ on port 4000 + N, and each further DZ sixteen ports higher. The Configurations screen edits a line’s three as one field: a bare port listens, host:port connects, ws is the browser terminal. Lines given the same port share it: a caller reaches whichever of them is free. A line can be retuned while the device is enabled; the change drops that line’s client and leaves the others alone.
rx0lamp … rx7lamp, tx0lamp … tx7lamp, dtr0lamp … dtr7lamp, cd0lamp … cd7lamp, ri0lamp … ri7lamp
Section titled “rx0lamp … rx7lamp, tx0lamp … tx7lamp, dtr0lamp … dtr7lamp, cd0lamp … cd7lamp, ri0lamp … ri7lamp”The dashboard’s signal lamps, one set per line: receive and transmit activity, Data Terminal Ready as the guest drives it, ring (a client has arrived and the line has not answered yet) and carrier (an answered call).