Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизРабота с портами Найти похожие ветки
← →
Zheka (2004-04-20 09:54) [0]A := Port[20]; {чтение байта из порта 20}
Port[20] := A; {запись байта в порт 20}
B := PortW[20]; {чтение слова из порта 20-21}
PortW[20] := B; {запись слова в порт 20-21}
не понимает компилятор такую операцию :(((
← →
Юрий Зотов © (2004-04-20 10:01) [1]> Zheka (20.04.04 09:54)
Windows - среда мультизадачная. Что произойдет, если несколько программ одновременно начнут работать с одним и тем же портом вот так вот напрямую?
Вот поэтому компилятор и не понимает. Написан он так. Нет в Delphi прямой работы с портами.
← →
Zheka (2004-04-20 10:07) [2]to Юрий Зотов © (20.04.04 10:01) [1]
а как же быть??? может есть какой нибудь компонент позволяющий работать с портами???
← →
Digitman © (2004-04-20 10:17) [3]тебе зачем этот порт нужен ?
← →
Zheka (2004-04-20 10:26) [4]to Digitman © (20.04.04 10:17) [3]
нужно написать софт для работы с ISA картой.
Под дос была написана прога на паскале, мне нужно написать под винду. Есть идеи???
← →
Anatoly Podgoretsky © (2004-04-20 10:29) [5]Пиши с использование ассемблерных вставок, и готовься к разрушению системы.
← →
ssk © (2004-04-20 10:29) [6]иди в конференцию "Система".
http://delphimaster.ru/cgi-bin/forum.pl?n=2
там эти порты обсуждаются через раз. я серьезно.
← →
Smithson © (2004-04-20 10:33) [7]Ну или как вариант - пиши драйвер, он может захватить порт в монопольный режим. Подробности - MSDN
← →
Digitman © (2004-04-20 10:45) [8]
> Zheka (20.04.04 10:26) [4]
> нужно написать софт для работы с ISA картой
ты разве не заметил, что любой мало-мальски серьезный производитель комп.перифериии поставляет вместе со своей продукцией как минимум один драйвер для каждой ОС, под управлением которой устройство должно работать ? По-твоему, он, производитель, ерундой занимается ?
← →
Zheka (2004-04-20 10:52) [9]чесслово, просто запугали... у кого нибудь есть ЖИВЫЕ идеи или может кто нибудь занимался этим???
← →
Smithson © (2004-04-20 10:54) [10]Повторю специально для тупых:
пиши драйвер, он может захватить порт в монопольный режим. Подробности - MSDN
← →
Zheka (2004-04-20 10:56) [11]to Digitman © (20.04.04 10:45) [8]
плату делали на заказ. Специфичность платы сделала её единственной в своём роде...
← →
WondeRu © (2004-04-20 10:59) [12]http://pages.zoom.co.uk/andyc/ntdriver.htm
там и компоненты есть!
← →
Digitman © (2004-04-20 11:08) [13]
> Zheka (20.04.04 10:56) [11]
я понимаю.
а далее твоя задача - взяв на вооружение MS DDK написать драйверы карты для КАЖДОЙ платформы, на которой планируется использовать твой "заказной" дивайс
все прочие варианты либо нереализуемы либо из области недокументированных трюков
← →
tesseract © (2004-04-21 10:01) [14]можно через WINIO - она позволяет прямой доступ к областям памяти и портам. Можешь при желании написать класс чтобы обращаться как раньше через Port[].
← →
Павел (2004-04-25 10:43) [15]Ну можно использовать такой:
unit Port;
interface
uses
Windows, SysUtils, Classes;
type
TPort = class(TComponent)
private
procedure SetByte(Index:Word;Value:Byte);
procedure SetWord(Index:Word;Value:Word);
procedure SetLong(Index:Word;Value:LongWord);
function GetByte(Index:Word):Byte;
function GetWord(Index:Word):Word;
function GetLong(Index:Word):LongWord;
public
{свойство для обращения к байтовым портам }
property Byte [Index:Word] : Byte read GetByte
write SetByte; default;
{свойство для обращения к двухбайтовым портам }
property Word [Index:Word] : Word read GetWord
write SetWord;
{свойство для обращения к четырехбайтовым портам }
property DWord[Index:Word] : LongWord read GetLong
write SetLong;
end;
procedure Register;
implementation
{Регистрация компонента в палитре компонент}
procedure Register;
begin
RegisterComponents("System", [TPort]);
end;
{Чтение байта из порта}
function TPort.GetByte(Index: Word): Byte;
begin
asm
mov dx,Index
in al,dx
mov Result,al
end;
end;
{Чтение слова из порта}
function TPort.GetWord(Index: Word): Word;
begin
asm
mov dx,Index
in ax,dx
mov Result,ax
end;
end;
{Чтение двойного слова из порта}
function TPort.GetLong(Index: Word): LongWord;
begin
asm
mov dx,Index
in eax,dx
mov Result,eax
end;
end;
{Запись байта в порт}
procedure TPort.SetByte(Index: Word; Value: Byte);
begin
asm
mov dx,index
mov al,Value
out dx,al
end;
end;
{Запись слова в порт}
procedure TPort.SetWord(Index, Value: Word);
begin
asm
mov dx,Index
mov ax,Value
out dx,ax
end;
end;
{Запись двойного слова в порт}
procedure TPort.SetLong(Index: Word; Value: LongWord);
begin
asm
mov dx,Index
mov eax,Value
out dx,eax
end;
end;
end.
Устанавливаете компонент и вперед. Но этого, как говорил великий комбинатор, крайне мало. Надо еще заиметь полный доступ к портам. Иначе получите ошибку выполнения привелигированной инструкции. Для этого можно использовать драйвер GiveIO или ему аналогичный. Описание и исходники тут (хотя исходников полно в инете):
http://bhv.ftk.spbstu.ru/books/book.php?id=2732
http://www.ozon.ru/context/detail/id/1656093/
Работать будет точно.
Но, скажу честно, лучше так не делать :) Все таки это в обход операционки. Так можно делать, если программу устанавливаете вы и на один и только один комп за который сами и отвечаете. Тогда да, никто ничего своего не поставит, все будет жить. А если это настоящая программа (типа коробочная), то только драйвер.
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.041 c