IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Парковка, перед выключением
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Можно ли на Паскале написать программу парковки головки диска перед выключением. И если можно то как (подскажите идею).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Alexn

blink.gif А зачем? Современные диски имеют автопарковку... Или это нужно для старых дисков?

А вообще-то это делается функцией 19h (прерывание BIOS - 13h).
На входе:
AH = 19h, DL = Адрес дисковода (80h, 81h, ...)
На выходе:
AH = Состояние дисковода после завершения последней операции
CF = 1, если произошла ошибка, 0, если ошибки нет

P.S. Windows не даст этого сделать - только в режиме эмуляции DOS sad.gif

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


я собрал старый 286 (DOS 6.22, windows 2.03 и 1 версии :p13: )
выключаю просто выключателем, потому и спрашиваю.
Так шо виндовс нам не страшен, нам бы дос осилить быстро.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


windows 1 версии?
Сколько весит?
Можно мне на мыло такой раритет?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Oleg_Z
Смотри здесь.
Win103.img_sfx.exe (Размер - 1,3М) :yes:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Спасибо. Посмотрю что это за зверюшка дяди Билли smile.gif :D


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Я на int21.narod.ru взял win1.
Там еще много раритетов.
И еще, я не настолько умудрен опытом чтобы понять, что мне объяснили на счет прерываний. Я конечно представляю, что это. Только я вот пару дней голову ломал как это запихнуть в Паскаль. Но все равно спасибо :thanks: .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Alexn
Если нужно, чтобы программа только парковала диски - то это будет выглядеть вот так:

Procedure Park; Assembler;
 Asm
   mov ah,19h
   mov dl,80h
   int 13h
 End;
Begin
 Park
End.

Хотя было бы гораздо проще написать ее на чистом ассемблере (создается COM файл...)

.model tiny
.code
org 100h
begin:
 mov ah,19h
 mov dl,80h
 int 13h
 ret
end begin

 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Спасибо. Если не трудно, еще пару вопросов.
int 13h - это выполнить насколько я понимаю.
А вот что за функция 19h?
И как проверить припарковался ли диск.
Например, если нет ошибок then write('теперь питание можно выключить').
Как прочитать CF.
Цитата
AH = Состояние дисковода после завершения последней операции

В регистр AH что записывается иное значение после выполнения программы (мы ведь туда записали 19h, опять же если я правильно понял).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Прерывание int 13h - дисковые службы BIOS. Служба 19h предназначена для парковки головок жесткого диска. В DL она принимает идентификатор устройства (80h - первый жесткий диск, 81h - второй (если есть) и т. д.). В случае возникновения ошибки она, как и прочие дисковые службы, устанавливает флаг переноса (CF), возвращая в AH код состояния (номер ошибки).

Пример:
program SomeApp;

{...}

function ParkHDD(DriveId: Byte): Boolean; assembler;
asm
 mov ah,19h
 mov dl,DriveId
 int 13h
 mov al,0
 jc @Exit
 inc ax
@Exit:
end;

{...}

begin
 {...}
 if not ParkHDD($80) then
   begin
     Writeln('Ошибка парковки');
     {...}
   end;
 {...}
end.



--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Цитата
begin
{...}
if not ParkHDD($80) then
begin
  Writeln('Ошибка парковки');
  {...}
end;
{...}
end.


А чтобы припарковать я перед if not просто должен написать parkhdd($80), да?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Alexn
Ничего писать не нужно, при выполнении этой строчки:
if not ParkHDD($80) then

уже выполнится парковка, и будет анализироваться ее результат...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Т.е., это законченная пргограмма парковки с проверкой, да?

program Park;

function ParkHDD(DriveId: Byte): Boolean; assembler;
asm
mov ah,19h
mov dl,DriveId
int 13h
mov al,0
jc @Exit
inc ax
@Exit:
end;

begin
if not ParkHDD($80) then Writeln('Ошибка парковки');
end.

(программа xds)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


От завершённости её отделяет отсутствие проверки на наличие нескольких устройств. Полнее будет так:

program Park;

{ Типы дисководов }
const
 dtNone        = 0; { нет устройства с указанным идентификатором }
 dtNonSenseFDD = 1; { FDD, не чувствительный к смене носителя }
 dtSenseFDD    = 2; { FDD, чувствительный к смене носителя }
 dtHDD         = 3; { HDD }

{ Определение типа дисковода }
function GetDriveType(DriveId: Byte): Byte; assembler;
asm
 mov ah,15h
 mov dl,DriveId
 int 13h
 mov al,ah
end;

{ Парковка HDD }
function ParkHDD(DriveId: Byte): Boolean; assembler;
asm
 mov ah,19h
 mov dl,DriveId
 int 13h
 mov al,0
 jc @Exit
 inc ax
@Exit:
end;

var
 Id: Byte;

begin
 for Id := $80 to $83 do
   if GetDriveType(Id) = dtHDD then
     begin
       Write('HDD', Id - $80, ': ');
       if ParkHDD(Id) then
         Writeln('парковка головок выполнена успешно.')
       else
         Writeln('ошибка парковки головок.');
     end;
end.



--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Что может заставить головку сдвинуться?
Например если после выполнения park.exe я нажму esc чтобы посмотреть сообщение (убрать панели волков командер), или если я вставлю в конце программы readkey, в общем после нажатия клавиш она не дернется куда-нибудь, что-нибудь прочитать?

Сообщение отредактировано: Alexn -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Вставь ReadKey - гарантированно ничего не двинется (за исключением случая, когда установлен дисковый кэш и включена отложенная запись).


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Как я узнаю, установлен диковый кэш и отложенная запись или нет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Alexn
Объясни мне, почему нельзя взять файл PARK.EXE и пользоваться им?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Цитата
почему нельзя взять файл PARK.EXE и пользоваться им?


Чтобы знать, как все это работает.

Цитата
Полнее будет так:


У меня эта програма выдает HDD0: ошибка
HDD1: ошибка
Но у меня только 1 диск и в биосе 1 (173 Mb). Может он слишком большой для
ДОС 6.22.
Если не надоело помогать, подскажите в чем дело.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Да, у меня 2 флопа 3.5 и 5.25. Может это тоже влияет.
В биосе можно выставить 4 флопа и 4 винта (но стоит только 1).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.05.2024 0:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name