Запросто (писать - имеется ввиду снаружи)! Результат чтения с адреса +0 зависит от бита 5 в байте по смещению +2. Если он нуль, то результат - то что мы записали в порт последний раз. Если единица, то линии порта переходят на вход (Z-состояние), а читается то, что подано снаружи.
В документации я этого не встречал. Но возможно действительно я ситал только для однонаправленного порта.
В винде тоже не знаю, кроме того, что на моем компе это 7-й вектор.
Вот именно, что по этому вектору еще нужно заставить порт работать.
Теоретически, подпрограмма прерывания должна обладать 0-м приоритетом, и если винда позволяет это сделать приложению, значит оно может сделать с виндой все, что угодно
Нулевое кольцо программе совсем не обязательно иметь. Достаточно драйвера и DLL для взаимодействия с ним(как сейчас и реализована работа с портом LPT).
В остальном же нужно искать доки или примеры реализации.