Тут привожу функцию RS232(x) со скана книжки! а значит и ошибок много, написанная на Турбо Паскале для Windows. RS232(0) возвращает количество установленных COM-портов, RS232(1)-базовый адрес COM1, RS232(2) - базовый адрес COM2 и т.п.
Код
(*-библиотека ресурсов №A6 (определение базовых адресов COM-портов).-*)
(Universal auto detection of COM base address)
Function RS232(x:integer).integer; export;
(* $0000:$0400 содержит базовый адрес порта COM1,
$0000:$0402 содержит базовый адрес порта COM2,
$0000:$0404 содержит базовый адрес порта COM3,
$0000:$0406 содержит базовый адрес порта COM4,
$0000:$0406 содержит количество COM портов в двоичном формате.* )
var
Number_of_COM, COM1, COM2, COM3, COM4:integer;
begin
numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*)
numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1;
COM1:=0; COM2:=0; COM3:=0; COM4:=0;
COM1:=memw($40:$00); (*Процедура чтения из памяти*)
COM2:=memw($40:$02);
COM3:=memw($40:$04);
COM4:=memw($40:$06);
Case x of
0: RS232:= numer_of_COM;
1: RS232:= COM1;
2: RS232:= COM2;
3: RS232:= COM3;
4: RS232:= COM4;
end;
end;
(Universal auto detection of COM base address)
Function RS232(x:integer).integer; export;
(* $0000:$0400 содержит базовый адрес порта COM1,
$0000:$0402 содержит базовый адрес порта COM2,
$0000:$0404 содержит базовый адрес порта COM3,
$0000:$0406 содержит базовый адрес порта COM4,
$0000:$0406 содержит количество COM портов в двоичном формате.* )
var
Number_of_COM, COM1, COM2, COM3, COM4:integer;
begin
numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*)
numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1;
COM1:=0; COM2:=0; COM3:=0; COM4:=0;
COM1:=memw($40:$00); (*Процедура чтения из памяти*)
COM2:=memw($40:$02);
COM3:=memw($40:$04);
COM4:=memw($40:$06);
Case x of
0: RS232:= numer_of_COM;
1: RS232:= COM1;
2: RS232:= COM2;
3: RS232:= COM3;
4: RS232:= COM4;
end;
end;
Хочу этот код использовать в Делфи в проекте "управление двигателем" чтоб сначала проверить количество COMпортов на компе и их базовые адреса. Потом задам вопросы по инициализации COM порта.
Вопросы:
1. как переделать синтаксис чтобы этот код их Турбо паскаля заработал в Делфи
2. то что (*текст*) - коментарии? я прав?
3. обьясните мне этот участок кода:
Код
numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*)
numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1;
COM1:=0; COM2:=0; COM3:=0; COM4:=0;
COM1:=memw($40:$00); (*Процедура чтения из памяти*)
COM2:=memw($40:$02);
COM3:=memw($40:$04);
COM4:=memw($40:$06);
numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1;
COM1:=0; COM2:=0; COM3:=0; COM4:=0;
COM1:=memw($40:$00); (*Процедура чтения из памяти*)
COM2:=memw($40:$02);
COM3:=memw($40:$04);
COM4:=memw($40:$06);
а именно:
3.1 что мы присваиваем переменной numer_of_COM в первой строчке? (имею в виду функцию mem($40:$11))
3.2 что мы добиваемся второй строчкой?
а именно: numer_of_COM and (8+4+2)) shr 1
почему не: numer_of_COM and 14) shr 1
3.3 COM1:=memw($40:$00); - функция memw($40:$00) из чего читает и что она делает
а теперь догадки : есть прелположение что функции memw и mem читают из ОЗУ . в инете встречал формулировку:
"Mem - это массив памяти. Т.е. с помощью указания номера элемента вы получаете доступ к определенной ячейке. существует 3 вида массива Mem:
* сам Mem - каждый компонент такого массива типа byte.
* MemW - каждый компонент типа word.
* MemL - каждый компонент типа longint."
Надеюсь на вашу помощь .

хотябы часть обьясните.