Въпрос за lpt

11 отговора 548 прегледа
#1

Въпрос за lpt

Здравейте!
Може ли някой да ми подскаже начин, по който от приложна програма под Windows да определя базовия адрес на паралелния порт?
Благодаря предварително.

Отговор
в отговор на Orнeдишaщ #2

за Windows XP

Напр. приложната програма My Computer (винаги е инсталирана и има иконка на десктопа)
Щракаш върху нейната иконка с десния бутон на мишока и избираш от появилото се меню Properties. От него избираш табчето Hardware и после Device Manager. В появилото се дръвце на устройствата намираш Ports и в него Printer port (LPT1). Щракаш върху него с десния бутон и избираш Properties и после Resources. От листа на ресурсите намираш първия I/O range и гледаш първото число (вероятно 0378) - е те това е базовият адрес на паралелния порт! Имай предвид, че е в шестнадесетичен вид. Успех!

Отговор
в отговор на pyrx #3

... и по-универсален начин.

Отваряш команден прозорец. Пишеш debug и натискаш клавиша ентер. Показва ти се една чертичка в началото на реда.
Пишеш d 40:0a

На екрана излиза нещо като:

0040:0000 78 03 78 02 80 9F x.x...
0040:0010 23 C8 00 80 02 00 00 00-00 00 34 00 34 00 0D 1C #.........4.4...
0040:0020 71 10 0D 1C 64 20 20 39-34 05 30 0B 3A 27 30 0B q...d 94.0.:'0.
0040:0030 61 1E 0D 1C 20 39 34 05-30 0B 3A 27 30 0B 00 00 a... 94.0.:'0...
0040:0040 18 00 C3 00 01 00 00 00-4D 03 50 00 00 10 00 00 ........M.P.....
0040:0050 00 18 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0040:0060 0F 0C 00 D4 03 29 30 F6-03 00 F0 FF 48 12 0C 00 .....)0.....H...
0040:0070 00 00 00 00 00 00 00 00-14 14 14 14 01 01 01 01 ................
0040:0080 1E 00 3E 00 18 10 00 60-F9 11 ..>....`..




По средата на първия ред виждаш 2 числа - (в моя случай 78 03, при теб може да са други).
Разменяш им местата и получаваш 0378 - това е адресът на пар. порт,
пак повтарям в шестандесетичен вид.
Пак успех!

П.П. От приложната програма debug се излиза като натиснеш q и клавиша enter.

Отговор
в отговор на pyrx #4

Re: ... и по-универсален начин.

То и сега си е така - потребителят трябва отнякъде да разбере адреса (например по начините, които описваш) и после да го въведе в моята програма. Ще ми се обаче да не го карам да го прави, а програмата сама да си взема адреса отнякъде.

Вторият метод май прави нещо такова: 0040:000А винаги съдържа търсения адрес, така ли? Как мога да прочета този адрес от програмата?

Отговор
в отговор на Orнeдишaщ #5

не става

виндовса те бие през ръцете, опиташ ли да четеш такива адреси извън дос.

Отговор
в отговор на zaphod #6

Re: не става

Уви, така е. Все пак виндовса не си ли признава отнякъде тоя пусти адрес? Registry? Замая ми се главата да ровя из msdn, ама нищо не открих. Само на драйверски функции попадам, ама аз съм още малък за тях.

Отговор
в отговор на Orнeдишaщ #7

Re: Въпрос за lpt

А дали windows-а ще ти даде да ръчкаш по портовете от user mode програма ?

Отговор
в отговор на syscop #8

Re: Въпрос за lpt

Дава, защото използвам драйвер за целта. С това няма никакъв проблем. Искам да зная обаче къде да ръчкам.

Отговор
в отговор на Orнeдишaщ #9

Re: Въпрос за lpt

не можеш ли да питаш драйвера?

Отговор
в отговор на Orнeдишaщ #10

Re: Въпрос за lpt

да не ползваш оня драйвер, дето отваря портове под нт ядро? моята препоръка е да не се занимаваш с такива неща, ако ръчкаш портове, само от твой драйвер и само незаети такива. а и не съм сигурен дали виндовса няма да ти "препоръча" същото, като види че се опитваш да отвориш зает порт. между другото, мисля че порта на лптто е задължително 378. ако е някакъв друг, вероятно не е истинско и да го ръчкаш или не, все тая. най-добре кажи за какво ти е. да не те блазни това че има 8 кабела, които директно може да контролираш? ако е така, препоръчвам ти да заебеш и да си избереш нещо от тука [линк]




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на ~!@$%^amp;*()_+ #11

Re: Въпрос за lpt

Не мога, той драйверът е съвсем непретенциозен и няма нищо общо с паралелния порт. Единствено позволява да изпълняваш еквивалент на асемблерските IN и OUT под Windows.

Отговор
в отговор на zaphod #12

Re: Въпрос за lpt

Позна във всичко. Всъщност жиците са цели 17, което си е хубаво нещо. Мой драйвер не мога да напиша, защото не умея, пък и не усещам чак толкова да ми е притрябвало в момента. За адреса не знам, доколко е задължителен. Когато BIOS докладва, че адресът не е 0378, а нещо друго, когато ръчна на този (посочения от BIOS) адрес с въпросното драйверче, всичко работи по ноти. Тоест, от практическа гледна точка за мен е интересно да зная тъкмо него.

Аз също си мисля, че lpt-то вече е демоде и дори нищо чудно по някое време да отпадне. Засега обаче сме усвоили технологията по този начин и трябва да се съобразявам и с предпочитанията на хардуериста, с който работя. Ще разгледам информацията, която ми пращаш, това е интересна алтернатива. Само не ми е ясно, доколко би се променила (усложнила? или наопаки?) конструкцията на външното устройство, ако го управляваме през usb.

Отговор