diff --git a/scp.c b/scp.c index 5ee7708e..a434ea74 100644 --- a/scp.c +++ b/scp.c @@ -6389,6 +6389,8 @@ for (i = 0; i < start; i++) { return SCPE_IERR; } 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) { reason = dptr->reset (dptr); if (reason != SCPE_OK) @@ -6414,6 +6416,45 @@ static DEBTAB scp_debug[] = { {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 Inputs: @@ -6430,42 +6471,8 @@ int32 old_sw = sim_switches; sim_switches = SWMASK ('P'); r = reset_all (start); sim_switches = old_sw; -if (sim_dflt_dev) { /* Make sure that SCP debug options are available */ - sim_dflt_dev->flags |= DEV_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; - } - } - } - } +if (sim_dflt_dev) /* Make sure that SCP debug options are available */ + sim_add_debug_flags (sim_dflt_dev, scp_debug); return r; } diff --git a/scp.h b/scp.h index 526bbfd0..8d6fe6ef 100644 --- a/scp.h +++ b/scp.h @@ -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 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 sim_add_debug_flags (DEVICE *dptr, DEBTAB *debflags); const char *sim_error_text (t_stat stat); t_stat sim_string_to_stat (const char *cptr, t_stat *cond); t_stat sim_cancel_step (void); diff --git a/sim_tmxr.c b/sim_tmxr.c index 96333512..3f4cc81d 100644 --- a/sim_tmxr.c +++ b/sim_tmxr.c @@ -3804,6 +3804,27 @@ else 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 */ diff --git a/sim_tmxr.h b/sim_tmxr.h index 4019e516..47d5a8fe 100644 --- a/sim_tmxr.h +++ b/sim_tmxr.h @@ -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_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) +t_stat tmxr_add_debug (DEVICE *dptr); #if defined(SIM_ASYNCH_MUX) && !defined(SIM_ASYNCH_IO) #undef SIM_ASYNCH_MUX