diff --git a/sim_console.c b/sim_console.c index 6e707367..d4042693 100644 --- a/sim_console.c +++ b/sim_console.c @@ -1740,7 +1740,7 @@ t_stat sim_set_noserial (int32 flag, CONST char *cptr) { if (cptr && (*cptr != 0)) /* too many arguments? */ return SCPE_2MARG; -if (sim_con_ldsc.serport == 0) /* ignore if already closed */ +if (sim_con_ldsc.serport == 0) /* ignore if already closed */ return SCPE_OK; return tmxr_close_master (&sim_con_tmxr); /* close master socket */ } diff --git a/sim_tmxr.c b/sim_tmxr.c index 9390f469..01e4d336 100644 --- a/sim_tmxr.c +++ b/sim_tmxr.c @@ -696,9 +696,14 @@ int32 i = lp->txbpr; if (lp->loopback) return loop_write (lp, &(lp->txb[i]), length); -if (lp->serport) /* serial port connection? */ - return sim_write_serial (lp->serport, &(lp->txb[i]), length); - +if (lp->serport) { /* serial port connection? */ + if (sim_gtime () < lp->txnexttime) + return 0; + written = sim_write_serial (lp->serport, &(lp->txb[i]), length); + if (written > 0) + lp->txnexttime = floor (sim_gtime () + (lp->txdelta * sim_timer_inst_per_sec ())); + return written; + } else { /* Telnet connection */ written = sim_write_sock (lp->sock, &(lp->txb[i]), length); @@ -2347,6 +2352,9 @@ if (uptr) uptr->wait = lp->rxdelta; if (lp->rxbpsfactor == 0.0) lp->rxbpsfactor = TMXR_RX_BPS_UNIT_SCALE; +lp->txbps = lp->rxbps; +lp->txdelta = lp->rxdelta; +lp->txnexttime = lp->rxnexttime; return SCPE_OK; } diff --git a/sim_tmxr.h b/sim_tmxr.h index 053f3a2f..17c1f9e9 100644 --- a/sim_tmxr.h +++ b/sim_tmxr.h @@ -171,6 +171,9 @@ struct tmln { #define TMXR_RX_BPS_UNIT_SCALE 1000000.0 uint32 rxdelta; /* rcv inter character min time (usecs) */ double rxnexttime; /* min time for next receive character */ + uint32 txbps; /* xmt bps speed (0 - unlimited) */ + uint32 txdelta; /* xmt inter character min time (usecs) */ + double txnexttime; /* min time for next transmit character */ uint8 *txpb; /* xmt packet buffer */ uint32 txpbsize; /* xmt packet buffer size */ uint32 txppsize; /* xmt packet packet size */