From d0bd4fbdffb61d6b8bf3847e2b8e65f166bf2e9c Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 11 May 2017 08:42:31 -0700 Subject: [PATCH] TMXR: Enforce output rate limiting when output is produced by instructions Calls to tmxr_putc_ln() executed directly within instruction simulation code (as opposed to during event servicing) will delay reasonable times --- doc/simh.doc | Bin 248320 -> 248832 bytes sim_tmxr.c | 5 +++++ 2 files changed, 5 insertions(+) diff --git a/doc/simh.doc b/doc/simh.doc index 3ff90746f0f7ed4d4c1f009bea6a7d49ae163b4c..3bdfe5c755d7ff605a24e84154ceda852fd74cb4 100644 GIT binary patch delta 14423 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 delta 14474 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 diff --git a/sim_tmxr.c b/sim_tmxr.c index 67b35019..b4004f66 100644 --- a/sim_tmxr.c +++ b/sim_tmxr.c @@ -2056,6 +2056,11 @@ if ((lp->txbfd && !lp->notelnet) || (TXBUF_AVAIL(lp) > 1)) {/* room for char (+ sim_oline = save_oline; /* resture output socket */ } sim_exp_check (&lp->expect, chr); /* process expect rules as needed */ + if ((sim_interval > 0) && /* not called within sim_process_event? */ + (lp->txbps) && (lp->txdelta > 1000)) { /* and rate limiting output slower than 1000 cps */ + tmxr_send_buffered_data (lp); /* put data on wire */ + sim_os_ms_sleep((lp->txdelta - 1000) / 1000); /* wait an approximate character delay */ + } return SCPE_OK; /* char sent */ } ++lp->txdrp; lp->xmte = 0; /* no room, dsbl line */