diff --git a/PDP11/pdp11_defs.h b/PDP11/pdp11_defs.h index 6c70a70c..71e40f53 100644 --- a/PDP11/pdp11_defs.h +++ b/PDP11/pdp11_defs.h @@ -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 */ diff --git a/PDP11/pdp11_dz.c b/PDP11/pdp11_dz.c index 0a4fae3f..3c5f7f61 100644 --- a/PDP11/pdp11_dz.c +++ b/PDP11/pdp11_dz.c @@ -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) diff --git a/VAX/vax610_defs.h b/VAX/vax610_defs.h index e5a7da17..57bc805b 100644 --- a/VAX/vax610_defs.h +++ b/VAX/vax610_defs.h @@ -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 */ diff --git a/VAX/vax630_defs.h b/VAX/vax630_defs.h index 59d5f5f3..fd5f1a89 100644 --- a/VAX/vax630_defs.h +++ b/VAX/vax630_defs.h @@ -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 */ diff --git a/VAX/vax730_defs.h b/VAX/vax730_defs.h index c863ede4..1ed11411 100644 --- a/VAX/vax730_defs.h +++ b/VAX/vax730_defs.h @@ -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 */ diff --git a/VAX/vax750_defs.h b/VAX/vax750_defs.h index a534410e..4e5007b8 100644 --- a/VAX/vax750_defs.h +++ b/VAX/vax750_defs.h @@ -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 */ diff --git a/VAX/vax780_defs.h b/VAX/vax780_defs.h index bbbbf452..94ac0f79 100644 --- a/VAX/vax780_defs.h +++ b/VAX/vax780_defs.h @@ -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 */ diff --git a/VAX/vax860_defs.h b/VAX/vax860_defs.h index c281f38b..be403fda 100644 --- a/VAX/vax860_defs.h +++ b/VAX/vax860_defs.h @@ -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 */ diff --git a/VAX/vaxmod_defs.h b/VAX/vaxmod_defs.h index 5bd7ec9c..1e064942 100644 --- a/VAX/vaxmod_defs.h +++ b/VAX/vaxmod_defs.h @@ -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 */