• DOS EMM calls in a TSR

    From Jcurtis@VERT to ALL on Tue Jun 24 20:27:48 2025
    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