русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Нестандартная длина сектора

Форматирование отдельных дорожек с размером сектора, отличным от стандартного для MS-DOS, например с размером 128 байт или 1024 байт.

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

Program Sector256;
Uses crt, sysp;
Const
TRK = 20;                { Номер форматируемой дорожки }
sec_size = 1;            { Размер сектора 1 - 256 байт }
var
dpt_ptr:^DPT absolute $0000:$0078;
{ $0000:$0078 - адрес таблицы параметров дискеты }
c      : char;
kod    : byte;
old_sec_size, old_fill_char, old_eot : byte;
i,j    : byte;
diskbuf, diskbuf1 : array [1..512] of byte;
buf    : string [80];
ol     : byte;
BEGIN
clrscr;
writeln ('Программа уничтожит содержимое 20-й дорожки диска А:.');
writeln ('Хотите продолжить?(Y/N)');
{ Ожидаем ответ от оператора и анализируем его }
c := readkey;
if (c<>'y') and (c<>'Y') then halt (1);
{ сохраняем старые значения из таблицы параметров дискеты }
old_sec_size  := dpt_ptr^.sec_size;
old_fill_char := dpt_ptr^.fill_char;
old_eot       := dpt_ptr^.eot;
{ Устанавливаем в таблице параметров дискеты
код размера сектора, символ заполнения при
форматировании, количество секторов на дорожке }
dpt_ptr^.sec_size := sec_size;
dpt_ptr^.fill_char:= $77;
dpt_ptr^.eot      := 15;
ol := dpt_ptr^.eot;
asm
{ Устанавливаем тип диска }
mov ah,017H
mov al,3
mov dl,0
int 13h
{ Устанавливаем среду для форматирования }
mov ah,18h
mov ch,trk
mov cl,ol
mov dl,0
int 13h
end;
{ Подготавливаем буфеp фоpматиpования для 15 сектоpов }
i := 1;
for j:=1 to 15 do
begin
diskbuf[i]  :=trk;
diskbuf[i+1]:=0;
diskbuf[i+2]:=j;
diskbuf[i+3]:=sec_size;
i:=i+4;
end;
{ Подготавливаем паpаметpы для функции фоpматиpования
Вызываем функцию фоpматиpования доpожки             }
asm
mov ax,seg diskbuf
mov es,ax
mov ah,05h
mov al,15
mov ch,trk
mov cl,1
mov dh,0
mov dl,0
lea bx,diskbuf
int 13h
mov kod,ah
end;
writeln ('Форматирование завершилось с кодом:',kod);
writeln ('Введите строку для записи в нестандартный сектор,’,
‘длина строки недолжна превышать 80 байт:');
readln  (buf);
move (buf,diskbuf1,81);
{ Записываем инфоpмацию в нестандаpтный сектоp }
asm
mov ax,seg diskbuf1
mov es,ax
mov ah,03
mov al,01
lea bx,diskbuf1
mov ch,trk
mov cl,1
mov dh,00
mov dl,00
int 13h

            mov kod,ah
end;
if kod <> 0 then
begin
writeln ('Ошибка ',kod,' при записи в нестандартный сектор');
halt (1);
end;
{ Считываем инфоpмацию из нестандаpтного сектоpа }
while (kod<>0) and (i<3) do
begin
asm
mov ah,02
mov al,01
lea bx,diskbuf
mov ch,trk
mov cl,01
mov dh,00
mov dl,00
int 13h
mov kod,ah
end;
inc (i);
end;
move (diskbuf1,buf,81);
writeln ('Прочитано из нестандартного сектора:');
writeln (buf);
{ Востанавливаем стаpые значения в
таблице паpаметpов дискеты       }
dpt_ptr^.sec_size := old_sec_size;
dpt_ptr^.fill_char:= old_fill_char;
dpt_ptr^.eot      := old_eot;
END.

 

Сформатированную таким образом дорожку можно прочитать только при знании параметров таблицы базы диска.
Интересным методом является создание на дорожке дискеты сектора большой длины. В этом случае последовательно выполняются 2 шага:

    • форматирование дорожки с большим числом секторов малой длины, но в таблице форматирования указывается, что будет сформатирован один или несколько секторов большой длины;.
    • производится запись в сектор с большой длиной. При этом, разумеется, Вам понадобятся 2 таблицы базы диска.

Просмотров: 16150


Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.