TMXR: Make sure all MUX devices can leverage all debug selectors

This commit is contained in:
Mark Pizzolato 2018-06-07 16:39:26 -07:00
parent ce5c3f0ff5
commit 06654d1ff5
4 changed files with 66 additions and 36 deletions

79
scp.c
View file

@ -6389,6 +6389,8 @@ for (i = 0; i < start; i++) {
return SCPE_IERR; return SCPE_IERR;
} }
for (i = start; (dptr = sim_devices[i]) != NULL; i++) { for (i = start; (dptr = sim_devices[i]) != NULL; i++) {
if (sim_switches & SWMASK('P'))
tmxr_add_debug (dptr); /* Add TMXR debug to MUX devices */
if (dptr->reset != NULL) { if (dptr->reset != NULL) {
reason = dptr->reset (dptr); reason = dptr->reset (dptr);
if (reason != SCPE_OK) if (reason != SCPE_OK)
@ -6414,6 +6416,45 @@ static DEBTAB scp_debug[] = {
{0} {0}
}; };
t_stat sim_add_debug_flags (DEVICE *dptr, DEBTAB *debflags)
{
dptr->flags |= DEV_DEBUG;
if (!dptr->debflags)
dptr->debflags = debflags;
else {
DEBTAB *cdptr, *sdptr, *ndptr;
for (sdptr = debflags; sdptr->name; sdptr++) {
for (cdptr = dptr->debflags; cdptr->name; cdptr++) {
if (sdptr->mask == cdptr->mask)
break;
}
if (sdptr->mask != cdptr->mask) {
int i, dcount = 0;
for (cdptr = dptr->debflags; cdptr->name; cdptr++)
dcount++;
for (cdptr = debflags; cdptr->name; cdptr++)
dcount++;
ndptr = (DEBTAB *)calloc (1 + dcount, sizeof (*ndptr));
for (dcount = 0, cdptr = dptr->debflags; cdptr->name; cdptr++)
ndptr[dcount++] = *cdptr;
for (cdptr = debflags; cdptr->name; cdptr++) {
for (i = 0; i < dcount; i++) {
if (cdptr->mask == ndptr[i].mask)
break;
}
if (i == dcount)
ndptr[dcount++] = *cdptr;
}
dptr->debflags = ndptr;
break;
}
}
}
return SCPE_OK;
}
/* Reset to powerup state /* Reset to powerup state
Inputs: Inputs:
@ -6430,42 +6471,8 @@ int32 old_sw = sim_switches;
sim_switches = SWMASK ('P'); sim_switches = SWMASK ('P');
r = reset_all (start); r = reset_all (start);
sim_switches = old_sw; sim_switches = old_sw;
if (sim_dflt_dev) { /* Make sure that SCP debug options are available */ if (sim_dflt_dev) /* Make sure that SCP debug options are available */
sim_dflt_dev->flags |= DEV_DEBUG; sim_add_debug_flags (sim_dflt_dev, scp_debug);
if (!sim_dflt_dev->debflags)
sim_dflt_dev->debflags = scp_debug;
else {
DEBTAB *cdptr, *sdptr, *ndptr;
for (sdptr = scp_debug; sdptr->name; sdptr++) {
for (cdptr = sim_dflt_dev->debflags; cdptr->name; cdptr++) {
if (sdptr->mask == cdptr->mask)
break;
}
if (sdptr->mask != cdptr->mask) {
int i, dcount = 0;
for (cdptr = sim_dflt_dev->debflags; cdptr->name; cdptr++)
dcount++;
for (cdptr = scp_debug; cdptr->name; cdptr++)
dcount++;
ndptr = (DEBTAB *)calloc (1 + dcount, sizeof (*ndptr));
for (dcount = 0, cdptr =sim_dflt_dev->debflags; cdptr->name; cdptr++)
ndptr[dcount++] = *cdptr;
for (cdptr = scp_debug; cdptr->name; cdptr++) {
for (i = 0; i < dcount; i++) {
if (cdptr->mask == ndptr[i].mask)
break;
}
if (i == dcount)
ndptr[dcount++] = *cdptr;
}
sim_dflt_dev->debflags = ndptr;
break;
}
}
}
}
return r; return r;
} }

1
scp.h
View file

@ -305,6 +305,7 @@ CONST char *match_ext (CONST char *fnam, const char *ext);
t_stat show_version (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr); t_stat show_version (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr);
t_stat set_dev_debug (DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr); t_stat set_dev_debug (DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr);
t_stat show_dev_debug (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr); t_stat show_dev_debug (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr);
t_stat sim_add_debug_flags (DEVICE *dptr, DEBTAB *debflags);
const char *sim_error_text (t_stat stat); const char *sim_error_text (t_stat stat);
t_stat sim_string_to_stat (const char *cptr, t_stat *cond); t_stat sim_string_to_stat (const char *cptr, t_stat *cond);
t_stat sim_cancel_step (void); t_stat sim_cancel_step (void);

View file

@ -3804,6 +3804,27 @@ else
return SCPE_OK; return SCPE_OK;
} }
static DEBTAB tmxr_debug[] = {
{"XMT", TMXR_DBG_XMT, "Transmit Data"},
{"RCV", TMXR_DBG_RCV, "Received Data"},
{"RET", TMXR_DBG_RET, "Returned Received Data"},
{"MODEM", TMXR_DBG_MDM, "Modem Signals"},
{"CONNECT", TMXR_DBG_CON, "Connection Activities"},
{"ASYNC", TMXR_DBG_ASY, "Asynchronous Activities"},
{"TRACE", TMXR_DBG_TRC, "trace routine calls"},
{"XMTPKT", TMXR_DBG_PXMT, "Transmit Packet Data"},
{"RCVPKT", TMXR_DBG_PRCV, "Received Packet Data"},
{"EXPECT", TMXR_DBG_EXP, "Expect Activities"},
{"SEND", TMXR_DBG_SEND, "Send Activities"},
{0}
};
t_stat tmxr_add_debug (DEVICE *dptr)
{
if (!(dptr->flags & DEV_MUX))
return SCPE_OK;
return sim_add_debug_flags (dptr, tmxr_debug);
}
/* Attach unit to master socket */ /* Attach unit to master socket */

View file

@ -309,6 +309,7 @@ void _tmxr_debug (uint32 dbits, TMLN *lp, const char *msg, char *buf, int bufsiz
#define tmxr_debug_trace_line(lp, msg) do {if (sim_deb && (lp)->mp && (lp)->mp->dptr && (TMXR_DBG_TRC & (lp)->mp->dptr->dctrl)) sim_debug (TMXR_DBG_TRC, (lp)->mp->dptr, "Ln%d:%s\n", (int)((lp)-(lp)->mp->ldsc), (msg)); } while (0) #define tmxr_debug_trace_line(lp, msg) do {if (sim_deb && (lp)->mp && (lp)->mp->dptr && (TMXR_DBG_TRC & (lp)->mp->dptr->dctrl)) sim_debug (TMXR_DBG_TRC, (lp)->mp->dptr, "Ln%d:%s\n", (int)((lp)-(lp)->mp->ldsc), (msg)); } while (0)
#define tmxr_debug_connect(mp, msg) do {if (sim_deb && (mp)->dptr && (TMXR_DBG_CON & (mp)->dptr->dctrl)) sim_debug (TMXR_DBG_CON, mp->dptr, "%s\n", (msg)); } while (0) #define tmxr_debug_connect(mp, msg) do {if (sim_deb && (mp)->dptr && (TMXR_DBG_CON & (mp)->dptr->dctrl)) sim_debug (TMXR_DBG_CON, mp->dptr, "%s\n", (msg)); } while (0)
#define tmxr_debug_connect_line(lp, msg) do {if (sim_deb && (lp)->mp && (lp)->mp->dptr && (TMXR_DBG_CON & (lp)->mp->dptr->dctrl)) sim_debug (TMXR_DBG_CON, (lp)->mp->dptr, "Ln%d:%s\n", (int)((lp)-(lp)->mp->ldsc), (msg)); } while (0) #define tmxr_debug_connect_line(lp, msg) do {if (sim_deb && (lp)->mp && (lp)->mp->dptr && (TMXR_DBG_CON & (lp)->mp->dptr->dctrl)) sim_debug (TMXR_DBG_CON, (lp)->mp->dptr, "Ln%d:%s\n", (int)((lp)-(lp)->mp->ldsc), (msg)); } while (0)
t_stat tmxr_add_debug (DEVICE *dptr);
#if defined(SIM_ASYNCH_MUX) && !defined(SIM_ASYNCH_IO) #if defined(SIM_ASYNCH_MUX) && !defined(SIM_ASYNCH_IO)
#undef SIM_ASYNCH_MUX #undef SIM_ASYNCH_MUX