Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 21:46   #1
FarCry66
 
Регистрация: 03.10.2010
Сообщений: 4
Восклицание Расскажите перенести прогу из СИ в паскаль

В общем такая проблема: задали нам кароч программку одну зделать а исходник её сделан в СИ(в си ++ скорее всего, хотя утверждать не беруся т.к более менее шарю тока в паскале и в Дельфи), а нам надо это прогу сделать в Паскале.
Будьте добры, если вам не тяжело помогите перевести прогу. Привожу полный листинг(тот который в учебники, правда тама где то ошибка, но это не важно если будет в паскале - то тама проблему я сам найду.):

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
unsigned char cmos[64];
int i;
unsigned long nExtRam;

printf("\nCMOS Show (C)A. Frolov, 1997\n\n");

// Читаем 64 ячейки CMOS-памяти в массив cmos
for(i=0; i<64; i++)
{
outp(0x70,i);
cmos[i]=inp(0x71);
}

// Отображаем ячейки часов реального времени
printf("\nRTC: ");

for(i=0; i<0xd; i++)
{
printf("%02.2x ",(unsigned)cmos[i]);
}

// Отображаем состояние байта диагностики
// после включения питания
printf("\nDiagnostics byte: %02.2x",cmos[0xe]);

// Отображаем содержимое байта отключения
printf("\nShutdown byte: %02.2x\n",cmos[0xf]);

// Отображаем содержимое зарезервированных ячеек
printf("Reserved: ");
for(i=0x34; i<0x40; i++)
{
printf("%02.2x ",(unsigned)cmos[i]);
}

// Вычисляем объем расширенной памяти и отображаем
// его на консоли
nExtRam = ((unsigned long)cmos[0x18] << 8) + cmos[0x17];
printf("\nExtended RAM: %ld Kbyte\n", nExtRam);

getch();
return 0;
}

Заранее спасибо.
FarCry66 вне форума Ответить с цитированием
Старый 03.10.2010, 21:52   #2
FarCry66
 
Регистрация: 03.10.2010
Сообщений: 4
По умолчанию

Забыл привести ссылку на исходник :
http://www.frolov-lib.ru/books/bsp/v33/ch1_3.htm
FarCry66 вне форума Ответить с цитированием
Старый 03.10.2010, 22:03   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

переписывать всё лень.
вот, смотрите, много десятилетий назад писал процедуркц чтения CMOS.

вот, может пригодится:
Код:
{$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
const
    DefName = '$cmos$.$$$';

var f: file;
    i: integer;
    buf : array[0..255] of byte;
    Name2,Name : string[80];
    Ext2 : string[4];

procedure ReadByte; assembler;
asm
{процедура чтения байта}
  out 70h,al
  jcxz @m2
@m2: jcxz @m3
@m3: in al,71h
end;

function Read(Addres:byte) : byte; assembler;
asm
  mov al,Addres
  pushf
  cli
  and al,al
  js @m1
  or al,80h
  stc
@m1:
  call ReadByte
  push ax
  jmp  @m5


@m5:
  mov al,0Dh
  jb  @m6
  or al,80h
@m6:
  call ReadByte
  sti
  pop  ax
  popf
end;

procedure Err(MS : string);
begin
  WriteLn(MS); Halt(100)
end;

begin
  WriteLn('Чтение CMOS');
  for I:=0 to 255 do buf[I] := Read(I);
  if ParamCount < 1 then Name := DefName
  else Name := ParamStr(1);
  assign(f,Name);
  Reset(f,1);
  if IOresult=0 then begin
      I := Pos('.',Name);
      if I<>0 then Name2 := Copy(Name,1,I-1);
      I := 0;
      repeat
        str(I:1,Ext2);
        Rename(f,Name2+'.'+Ext2);
        inc(I)
      until  (IOResult=0) or (I>=100);
      Assign(f,name);
  end;
  rewrite(f,1);
  if IOResult <> 0 then Err('Невозможно создать файл '+Name);
  BlockWrite(f,buf,256);
  if IOResult <> 0 then Err('Ошибка при записи файла '+Name);
  close(f);
  WriteLn('Done.');
end.
p.s. вроде бы тут в C ничего хитрого не используется, поэтому, если какой-то участок ещё не "поддастся" — пишите, все вместе разберёмся...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно доработь прогу паскаль матрицы Nubik Помощь студентам 9 23.01.2010 16:34
Паскаль. Перечислимый тип. Закончить прогу??? katya36 Помощь студентам 3 13.05.2009 08:26
Перенести в новую строку только те слова, которые разделены одним пробелом. задача на паскаль SashaPRO Паскаль, Turbo Pascal, PascalABC.NET 1 22.12.2008 20:01