PDP11: Allow DZ devices Unibus and Qbus to have correct number of lines
This commit is contained in:
parent
114a29bc2f
commit
cc7721b96e
9 changed files with 33 additions and 24 deletions
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue