Subj : DOS EMM calls in a TSR
To   : ALL
From : Jcurtis
Date : Tue Jun 24 2025 08:27 pm

By trial and error I discovered EMM calls enable interrupts. This can
cause havoc in a TSR where you need interrupts disabled. Finding these
bugs is not easy. My TSR enables interrupts part of the time, so I do
EMM calls there. Here's an example with comments.

void
next_irq (void)
{
   int x;

 next:
   x = next ();                        /* service IRQs with */
   enable ();                          /* interrupts enabled */

# ifndef noemm                          /* EMM call enables interrupts, do */
   emm_get_page_map (e1);              /* not do it before enable () above */
# endif

   if (x) {
       service_com_irqs (x);

   } else
       service_ticktock ();

# ifndef noemm
   emm_set_page_map (e1);
# endif

   disable ();
   if (x)
       mask_irq (NO, x);

   if (iq[iz])
       goto next;
}

* SLMR 2.1a *

* SLMR 2.1a *

---
� Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net