PDP11: Allow DZ devices Unibus and Qbus to have correct number of lines

This commit is contained in:
Mark Pizzolato 2018-04-09 18:05:53 -07:00
parent 114a29bc2f
commit cc7721b96e
9 changed files with 33 additions and 24 deletions

View file

@ -483,8 +483,7 @@ typedef struct {
/* IO parameters */
#define DZ_MUXES 4 /* max # of DZ muxes */
#define DZ_LINES 8 /* lines per DZ mux */
#define DZ_MUXES 4 /* default # of DZ muxes */
#define VH_MUXES 4 /* max # of VH muxes */
#define DLX_LINES 16 /* max # of KL11/DL11's */
#define DCX_LINES 16 /* max # of DC11's */

View file

@ -78,10 +78,8 @@
#if !defined (DZ_MUXES)
#define DZ_MUXES 1
#endif
#if !defined (DZ_LINES)
#define DZ_LINES 8
#endif
#define MAX_DZ_MUXES 32
#define DZ_LINES (UNIBUS ? 8 : 4) /* lines per DZ mux */
#if DZ_MUXES > MAX_DZ_MUXES
#error "Too many DZ multiplexers"
@ -234,7 +232,7 @@ uint32 dz_txi = 0; /* xmt interrupts */
int32 dz_mctl = 0; /* modem ctrl enabled */
int32 dz_auto = 0; /* autodiscon enabled */
TMLN *dz_ldsc = NULL; /* line descriptors */
TMXR dz_desc = { DZ_MUXES * DZ_LINES, 0, 0, NULL }; /* mux descriptor */
TMXR dz_desc = { 0, 0, 0, NULL }; /* mux descriptor */
/* debugging bitmaps */
#define DBG_REG 0x0001 /* trace read/write registers */
@ -277,6 +275,7 @@ void dz_clr_rxint (int32 dz);
void dz_set_rxint (int32 dz);
void dz_clr_txint (int32 dz);
void dz_set_txint (int32 dz);
t_stat dz_show_vec (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
t_stat dz_setnl (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
t_stat dz_set_log (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
t_stat dz_set_nolog (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
@ -337,8 +336,8 @@ MTAB dz_mod[] = {
NULL, &tmxr_show_cstat, (void *) &dz_desc, "Display multiplexer statistics" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 010, "ADDRESS", "ADDRESS",
&set_addr, &show_addr, NULL, "Bus address" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, DZ_LINES, "VECTOR", "VECTOR",
&set_vec, &show_vec_mux, (void *) &dz_desc, "Interrupt vector" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR",
&set_vec, &dz_show_vec, (void *) &dz_desc, "Interrupt vector" },
#if !defined (VM_PDP10)
{ MTAB_XTD|MTAB_VDV, 0, NULL, "AUTOCONFIGURE",
&set_addr_flt, NULL, NULL, "Enable autoconfiguration of address & vector" },
@ -780,16 +779,26 @@ int32 i, ndev;
sim_debug(DBG_TRC, dptr, "dz_reset()\n");
if (dz_ldsc == NULL)
if (dz_ldsc == NULL) {
dz_desc.lines = DZ_MUXES * DZ_LINES;
dz_desc.ldsc = dz_ldsc = (TMLN *)calloc (dz_desc.lines, sizeof(*dz_ldsc));
}
if ((dz_desc.lines % DZ_LINES) != 0) { /* Transition from Qbus to Unibus device */
int32 newln = DZ_LINES * (1 + (dz_desc.lines / DZ_LINES));
dz_desc.ldsc = dz_ldsc = (TMLN *)realloc(dz_ldsc, newln*sizeof(*dz_ldsc));
memset (dz_ldsc + dz_desc.lines, 0, sizeof(*dz_ldsc)*(newln-dz_desc.lines));
dz_desc.lines = newln;
}
tmxr_set_port_speed_control (&dz_desc);
for (i = 0; i < dz_desc.lines/DZ_LINES; i++) /* init muxes */
dz_clear (i, TRUE);
dz_rxi = dz_txi = 0; /* clr master int */
CLR_INT (DZRX);
CLR_INT (DZTX);
sim_cancel (dz_unit); /* stop poll */
sim_cancel (dz_unit); /* stop poll */
ndev = ((dptr->flags & DEV_DIS)? 0: (dz_desc.lines / DZ_LINES));
dz_dib.lnt = ndev * IOLN_DZ; /* set length */
return auto_config (dptr->name, ndev); /* auto config */
}
@ -843,6 +852,14 @@ tmxr_clear_modem_control_passthru (&dz_desc);
return r;
}
t_stat dz_show_vec (FILE *st, UNIT *uptr, int32 arg, CONST void *desc)
{
const TMXR *mp = (const TMXR *) desc;
return show_vec (st, uptr, ((mp->lines * 2) / DZ_LINES), desc);
}
/* SET LINES processor */
t_stat dz_setnl (UNIT *uptr, int32 val, CONST char *cptr, void *desc)

View file

@ -169,8 +169,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 4 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHQ muxes */
#define MT_MAXFR (1 << 16) /* magtape max rec */

View file

@ -219,8 +219,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 4 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHQ muxes */
#define MT_MAXFR (1 << 16) /* magtape max rec */

View file

@ -204,8 +204,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 8 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHQ muxes */
#define DLX_LINES 16 /* max # of KL11/DL11's */
#define DCX_LINES 16 /* max # of DC11's */

View file

@ -236,8 +236,7 @@ extern t_stat vax750_show_bootdev (FILE *st, UNIT *uptr, int32 val, CONST void *
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 8 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHQ muxes */
#define DLX_LINES 16 /* max # of KL11/DL11's */
#define DCX_LINES 16 /* max # of DC11's */

View file

@ -253,8 +253,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 8 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHU muxes */
#define DLX_LINES 16 /* max # of KL11/DL11's */
#define DCX_LINES 16 /* max # of DC11's */

View file

@ -282,8 +282,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 8 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHU muxes */
#define DLX_LINES 16 /* max # of KL11/DL11's */
#define DCX_LINES 16 /* max # of DC11's */

View file

@ -271,8 +271,7 @@ extern t_stat cpu_show_memory (FILE* st, UNIT* uptr, int32 val, CONST void* desc
/* I/O system definitions */
#define DZ_MUXES 4 /* max # of DZV muxes */
#define DZ_LINES 4 /* lines per DZV mux */
#define DZ_MUXES 4 /* default # of DZV muxes */
#define VH_MUXES 4 /* max # of DHQ muxes */
#define MT_MAXFR (1 << 16) /* magtape max rec */