Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Помогите перевести на паскаль с Си   Найти похожие ветки 

 
M@X ©   (2004-04-30 11:50) [0]


hofs=0;
hsel=0;
rz=_dos_seg_alloc(0,&hsel, &hmaxpg);
if (!rz) rz=_dx_map_phys(hsel, io_base, 0x100, &hofs);
_adress = (char _far *)MK_FP(hsel, hofs)


 
Григорьев Антон   (2004-04-30 13:02) [1]

Судя по именам, это какие-то нестандартные функции. Надо разбираться с той библиотекой, откуда они взяты. И, похоже, это какие-то манипуляции с памятью, которые в виндах ни на C, ни на Паскале не пройдут.


 
Игорь Шевченко ©   (2004-04-30 13:09) [2]

Так это же для ДОС


 
Григорьев Антон   (2004-04-30 13:16) [3]


> Игорь Шевченко ©   (30.04.04 13:09) [2]
> Так это же для ДОС


Это я понял. Просто мне уже не раз приходилось встречаться с вопросами людей, которые озаботились переносом старых досовских программ под винды, и пытаются перевести их дословно, не понимая, что принципы работы с памятью, портами, устройствами и т.д. здесь совсем другие. Вот и предупредил на всякий случай.


 
ЮрийК ©   (2004-04-30 13:25) [4]

Наверное так:

pchar _far = ^char _far;

hofs=0;
hsel=0;
rz=_dos_seg_alloc(0,@hsel, @hmaxpg);
if (rz = nil) rz=_dx_map_phys(hsel, io_base, 0x100, @hofs);
_adress = pchar _far(MK_FP(hsel, hofs));


 
ЮрийК ©   (2004-04-30 13:27) [5]

Блин, вместо "=" нужно ":="


 
ЮрийК ©   (2004-04-30 13:31) [6]

А может и так достаточно:

hofs:=0;
hsel:=0;
rz:=_dos_seg_alloc(0,@hsel, @hmaxpg);
if (rz = nil) rz:=_dx_map_phys(hsel, io_base, 0x100, @hofs);
_adress = MK_FP(hsel, hofs);


 
ЮрийК ©   (2004-04-30 13:36) [7]

И снова не всё переведено (вместо "0x" "$") :

hofs:=0;
hsel:=0;
rz:=_dos_seg_alloc(0,@hsel, @hmaxpg);
if (rz = nil) rz:=_dx_map_phys(hsel, io_base, $100, @hofs);
_adress = MK_FP(hsel, hofs);


 
Григорьев Антон   (2004-04-30 13:59) [8]


> И снова не всё переведено (вместо "0x" "$") :


А ещё then после if"а забыл :))


 
ЮрийК ©   (2004-04-30 14:11) [9]

Есть утилиты для перевода, сначала через них пропускать, а потом уже ручками, если что не так.


 
M@X ©   (2004-04-30 14:41) [10]

Это именно какие то хитрые манипуляции с вычислением _adress (это или порт или скорее всего массив в памяти девайса)которому в дальнейшем через _adress+смещение^:=Значение присваиваются всякие значения.


 
M@X ©   (2004-04-30 14:44) [11]

Кусок кода программы. который поперек горла стоит:


void wr_config ( int addr, int cword )
{
outpd ( 0xCF8 , 0x80000000l | (devnum<<8) | (addr&0xFF) );
outpd ( 0xCFC , cword );
}

int rd_config ( int addr )
{
outpd ( 0xCF8 , 0x80000000l | (devnum<<8) | (addr&0xFF) );
return inpd ( 0xCFC );
}

//далее определяется указатель _ibuf через который путем *(_ibuf) = Value;

h_base = rd_config( 0x10 ) & 0xFF000000l;
wr_config( 0x30 , h_base );
hofs=0;
hsel=0;
rz = _dos_seg_alloc(0, &hsel, &hmaxpg);
if(!rz) rz = _dx_map_phys(hsel, h_base, 0x400 , &hofs);
if(!rz)
{
_hbuf = (char _far *)MK_FP(hsel, hofs);
}
else
{
_hbuf = (char _far *)NULL; printf ("1 allocation error %02x\n",rz);getch();
}
hofs=0;
hsel=0;
rz = _dos_seg_alloc(0, &hsel, &hmaxpg);
if(!rz) rz = _dx_map_phys(hsel, h_base, 0x400 , &hofs);
if(!rz)
{
_dhbuf = (unsigned int _far *)MK_FP(hsel, hofs);
}
else
{
_dhbuf = (unsigned int _far *)NULL; printf ("2 allocation error %02x\n",rz);getch();
}

if (vga_agp)
{
io_base = rd_config( 0x14 );
printf ( "I/O Base : %08X ", io_base );
wr_config( 0x4 , 0x02000002 );
hofs=0;
hsel=0;
rz = _dos_seg_alloc(0, &hsel, &hmaxpg);
if(!rz) rz = _dx_map_phys(hsel, io_base, 0x100 , &hofs);
if(!rz)
{
_ibuf = (char _far *)MK_FP(hsel, hofs);
}
else
{
_ibuf = (char _far *)NULL; printf ("3 allocation error %02x\n",rz);getch();
}
}

pnp_int = rd_config( 0x3C ) & 0xFF;



 
ЮрийК ©   (2004-04-30 15:19) [12]

На чём компилишь (delphi1 или другое), на что ругается?


 
M@X ©   (2004-04-30 15:32) [13]

код Си_шный, не могу перевести на Pascal


 
ЮрийК ©   (2004-04-30 15:37) [14]

А кто-нить видел утилиту перевода с паскаль в в си (другой язык), посоветуйте линк. Очень желательно с сорсами чтобы.


 
ЮрийК ©   (2004-04-30 15:39) [15]

"код Си_шный, не могу перевести на Pascal"

Поподробнее с этого места. Конкретику будьте добры.


 
ЮрийК ©   (2004-04-30 15:43) [16]

Далее самому ручками править:

{*********************************}
{ Generated by c2pas32  v0.9b     }
{ (c) 2001 Oleg Bulychov          }
{ Gladiators Software             }
{ http://www.astonshell.com/      }
{*********************************}

unit TEST_c;

interface

implementation

procedure wr_config(addr: integer;  cword: integer);
begin
 outpd($CF8,$80000000 or (devnum shl 8) or (addr and $FF));
 outpd($CFC,cword);
end;

function rd_config(addr: integer): integer;
begin
 outpd($CF8,$80000000 or (devnum shl 8) or (addr and $FF));
 begin
   result:= inpd($CFC);
   exit;
 end;
end;
h_base:= rd_config($10) and $FF000000;
wr_config($30,h_base);

(*далее определяется указатель _ibuf через который путем *(_ibuf) = Value;*)
hofs:= 0;
hsel:= 0;
rz:= _dos_seg_alloc(0,@hsel,@hmaxpg);
if {not}0=rz
then
rz:= _dx_map_phys(hsel,h_base,$400,@hofs);
if {not}0=rz
then
begin
 _hbuf:= (char_far* )MK_FP(hsel,hofs);
end;
else
begin
 _hbuf:= (char_far* )0{nil};
 printf("1 allocation error %02x"#13#10"",rz);
 getch();
end;
hofs:= 0;
hsel:= 0;
rz:= _dos_seg_alloc(0,@hsel,@hmaxpg);
if {not}0=rz
then
rz:= _dx_map_phys(hsel,h_base,$400,@hofs);
if {not}0=rz
then
begin
 _dhbuf:= (unsignedint_far* )MK_FP(hsel,hofs);
end;
else
begin
 _dhbuf:= (unsignedint_far* )0{nil};
 printf("2 allocation error %02x"#13#10"",rz);
 getch();
end;

if vga_agp<>0{nil} {<= !!!9}
then
begin
 io_base:= rd_config($14);
 printf("I/O Base : %08X ",io_base);
 wr_config($4,$02000002);
 hofs:= 0;
 hsel:= 0;
 rz:= _dos_seg_alloc(0,@hsel,@hmaxpg);
 if {not}0=rz
 then
 rz:= _dx_map_phys(hsel,io_base,$100,@hofs);
 if {not}0=rz
 then
 begin
   _ibuf:= (char_far* )MK_FP(hsel,hofs);
 end;
 else
 begin
   _ibuf:= (char_far* )0{nil};
   printf("3 allocation error %02x"#13#10"",rz);
   getch();
 end;
end;
pnp_int:= rd_config($3C) and $FF;

end.


 
M@X ©   (2004-04-30 15:54) [17]

Далее TMT Pascal


 
M@X ©   (2004-04-30 15:58) [18]

Далее первый камень:
_dos_seg_alloc и _dx_map_phys за ним следует (char_far* )MK_FP(hsel,hofs)


 
ЮрийК ©   (2004-04-30 16:13) [19]

Убери для начала.
Или объяви pchar_far = ^char_far;
pchar_far(MK_FP(hsel,hofs))


 
SammIk ©   (2004-04-30 16:16) [20]

Скорее всего далее поидет такои булыжник:
А где брать эти ф-ии _dos_seg_alloc и _dx_map_phys


 
WebErr ©   (2004-04-30 16:25) [21]

Конечно можно и переделать, а вообще-то если Builder есть - скомпиль unit и подключи к проекту.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1083241514
V-Isa
2004-04-29 16:25
2004.05.16
Scroll в Delphi 3


8-1077345817
Batoon
2004-02-21 09:43
2004.05.16
КАК Сделать FFT(БПФ)


14-1083166408
Ega23
2004-04-28 19:33
2004.05.16
Россия - Япония


3-1082336686
rosl
2004-04-19 05:04
2004.05.16
запрос


1-1083291386
CyBeR
2004-04-30 06:16
2004.05.16
Переход другую форму с помощью закладок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский