1
0
mirror of https://github.com/simh/simh.git synced 2026-01-27 04:22:24 +00:00

SHOW IOSPACE, again

Show IOSPACE doesn't always get the number of devices right due to device creativity.

o The distinction between UNIT and DEVICE has blurred
o MUX devices merge several physical devices into one device/unit
o Dynamic device sizing has made things more volatile.

This edit solves the problem for SHOW IOSPACE by adding an (optional) word to the DIBs.
The word contains the amount of IO space consumed by each instance of the physical device that's being emulated.
E.G., if it's a DZ11, the device is the DZ11 module, or 8 lines, even though the MUX device may support 32.

This enables SHOW IOSPACE to determine the number of physical devices being emulated, which is what folks need when configuring software.  The word may have other uses - in a generic dynamic device sizing routine - which is why the amount of IOSPACE per device was chosen rather than the 'number of physical devices.'

The edit should not make any existing device regress.  If the new word (ulnt) is zero (not initialized), SHOW IOSPACE will default to the number of units in the device, or if there's no device (CPUs), 1 as before.  If it is present, the number of devices is the calculated as total allocation/allocation-per-device.

The edit updates all the devices that seem to require this treatment, and all the processors that define the UNIBUS/QBUS DIBs.
This commit is contained in:
Timothe Litt
2013-07-11 15:39:15 -04:00
parent 95e54dc60e
commit 91c7d26095
34 changed files with 57 additions and 32 deletions

View File

@@ -196,6 +196,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */

View File

@@ -243,6 +243,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */

View File

@@ -237,6 +237,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details */

View File

@@ -274,6 +274,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details

View File

@@ -286,6 +286,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details

View File

@@ -321,6 +321,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - XUB,RQB,RQC,RQD float based on number of DZ's

View File

@@ -284,6 +284,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */