I've moved m_mpsc->m1_r(); into if() clause like so
Code
    if (m_mpsc_irq == 0) {
        lower_8088_irq(IRQ_COMM_PTR_INTR_L);
        m_mpsc->m1_r();
    } else
        raise_8088_irq(IRQ_COMM_PTR_INTR_L);

and rx now works (f.e. from a TCP chargen service) but terminal is still broken -- it starts autorepeating first character you press.