Сменить диапазон адресов можно, но делать это придётся после каждой перезагрузки ОС.
Вариант №1 (самый простой) - использовать утилиту
NetMosLptRedir.exe безвестного автора. Эта утилита для доступа к PCI регистрирует и запускает драйвер giveio.sys. Ввиду кривизны этого драйвера при дальнейшей работе в ОС возможны различные недоразумения, как то, неработоспособность приложений, запускающихся под виртуальной машиной NTVDM и др.
Вариант №2 (самый трудоёмкий) - сделать вручную всё то, что выполняет вышеуказанная утилита. Для этого понадобится доступ к конфигурационному пространству PCI, который можно обеспечить, к примеру, популярной программой
Wpcredit. Выбираем в списке "Select device" нашу карточку: тип "Other communications", VID:PID для чипа MCS9835 - 9710:9835. В конфигурационном пространстве переходим к базовому адресному регистру (BAR) стандартного LPT по смещению 18h и меняем его значение (типа word) на тот адрес, который нам нужен, например, 378h. При этом нужно иметь ввиду, что младший бит всегда = 1, т.е. я буду вводить по смещению 18h : 79h, и 19h: 03h. Далее перемещаемся к BAR расширенного LPT по смещению 1Ch и меняем значение на 378h+400h = 778h, не забывая про установленную единичку в младшем бите, т.е. 779h. Вот и всё!
В любом случае ОС об этих изменениях знать не будет, поэтому всё на свой страх и риск
Что касается двунаправленного режима, то прежде, чем устанавливать 5-й бит в регистре управления принтером, нужно установить соответствующий режим с помощью регистра ECP ECR, адрес которого равен базовому + 402h. Я делал это примерно так:
Код:
asm
mov dx,BasePort
add dx,402h {ECP ECR adress}
in al,dx {load current value}
and al,00011111b {clear mode bits}
or al,00100000b
out dx,al {set bidirectional byte mode}
mov dx,BasePort
add dx,2
mov al,00100000b {set read data mode and no interrupts}
out dx,al
end;