open-simh / simh

The Open SIMH simulators package
https://opensimh.org/
Other
463 stars 88 forks source link

Strange behavior of the VH device on PDP-11 #29

Open louis-chretien opened 2 years ago

louis-chretien commented 2 years ago

While setting up a config file for my PDP-11/70 and RSTS/E system, i noticed something strange:

The VH device (DHQ-11) seems to have a weird behavior.

Since my system is a Unibus machine (pdp-11/70), it's supposed to be a DHU-11 with 16 lines per unit. If i set it up this way:

set VH enable set VH lines=32 attach VH 6000

the "show config" returns:

VH address=17760440-17760477, vector=500-514, BR4, lines=32, 2 units VH0 attached to 6000, DHU mode, 0 current connections VH1 DHU mode

which is most correct.

But if i try to set it up as 3 devices (like in my system):

set VH enable set VH lines=48 attach VH 6000

the "show config" returns:

VH address=17760440-17760517, vector=500-524, BR4, lines=48, 3 units VH0 attached to 6000, DHU mode, 0 current connections VH1 DHU mode VH-RCV-CON DHU mode

When i looked at the pdp11_vh.c code, i find a "VH-RCV-CON" reference in the initialization code, as a name when a unit is reset.

It seems that the DHQ code has trouble handling more than 32 lines.

Or am i overlooking something?

pkoning2 commented 2 years ago

The code says that the max controller count is 4 and it looks like the line count is figured from that and 8 lines per controller. In a comment it says the line count can be 8, 16, 24, or 32. I don't know why it should be limited like that, though. But it looks like it needs code changes, and in any case the error handling should be strengthened.

markpizz commented 2 years ago

The only problem is the display of the unusual unit name for the 3rd controller in this case. The number of working lines and is correct and will behave as normal.

The VH-RCV-CON unit name exists only so that debug tracing can make sense. Each controller of this device can have either 8 or 16 lines depending on if the system is a Unibus or Qbus system. The device uses one unit for each of the respective controllers which may be appropriate for the specified number of lines. These units exist since there is an option for controller specific options (DHUMODE, MODEM, FASTDMA, and HANGUP) which can be separately enabled per controller. The system starts out as an 11/73 and thus the maximum 4 controllers can have a max of 32 lines. Once you change the CPU to a Unibus system, the 32 lines now are controlled by 2 controllers (16 lines each). You then increase the number of lines to 48 and things still are fine. The only problem is that one of the under the covers names for the normally invisible units (used for timing and, connection polling and transmit management) suddenly becomes visible when the number of controllers is increased from 2 to 3. At that time the internal (invisible) UNIT structures is reassigned to make room for the new controller, but the name of the UNIT it uses was previously set.

The latest code in the https://github.com/simh/simh repo fixes this display problem.

louis-chretien commented 2 years ago

Very nice fix!