Ноутбуки   
   Софт   
   Компьютеры   
   Компьютерные фирмы   
  Меню сайта

BIOS

SSD-накопители

Акустика для ПК

Видеокарты

Видеокарты - История

Джойстики, клавиатуры и мыши

Дигитайзеры

Жесткие диски

Жесткие диски - история

Звуковые карты

Именитые люди компьютерной индустрии

История компьютеров

Карманные компьютеры

Компьютер десктоп - готовая сборка

Компьютерные фирмы

Компьютеры в теории и практике

Копировальные аппараты

Корпуса, вентиляторы, блоки питания

Маршрутизаторы, коммутаторы, хабы

Материнские платы

Модемы

Модули памяти

Мониторы

Мониторы и видеокарты - история

Новости

Ноутбуки и субноутбуки

Оборудование беспроводной связи, bluetooth, wi-fi

Оптические накопители CD, DVD, Blueray

Оргтехника

Память - история

Плоттеры

Принтеры

Процессоры

Процессоры - история

Сетевые карты

Сетевые фильтры, ИБП

Сети

Сканеры

Сменные жесткие диски

Советские ПК

ТВ-тюнеры

Типы компьютеров

Устройства архивации данных и стримеры

Факс

Флоппи-дисководы

Флэшки и всяко-разно

Шины и чипсеты - история




Главная страница Прайс-лист Интернет-магазин

Служебные процедуры обслуживания дискет системы BIOS в ПЗУ

Для обслуживания дисководов в системе BIOS имеется шесть процедур. Доступ ко всем осуществляется с помощью прерывания номер 19 (шестнадцатиричное значение 13). В этом разделе мы рассмотрим каждую из них и увидим некоторые примеры их использования. Программы 7.101 и 7.102, включенные в дисковый пакет прилагающийся к этой книге, обеспечивают необходимые ассемблерные подпрограммы для доступа к этим процедурам BIOS, а также определения и вспомогательные программы на Паскале, облегчающие использование ассемблерных подпрограмм.
Первая служебная процедура, которая имеет код 0, сбрасывает дисковую подсистему в исходное состояние. Эта процедура может использоваться для восстановления после различных ошибок и сбоев. Эта операция аналогична операции сброса в ДОС (вызов функции номер 13), но она выполняется на более низком уровне системы BIOS. Операция сброса диска посылает команду контроллеру дисков, приводящую его в исходное состояние. Заметим, что здесь не выполняются такие действия как установление дисковода, выбираемого ДОС по умолчанию, - для этого должна выполняться операция сброса на уровне ДОС.
Наиболее очевидное использование операции сброса - в процедуре восстановления после ошибки. Часто наилучшим способом действий программы в случае ошибки операций с дискетой является быстрое прекращение всех действий, с предоставлением возможности разбираться в происшедшем пользователю компьютера. В конце концов, большинство дисковых ошибок связаны с причинами, которые невозможно устранить программно, например, с механическими повреждениями дискеты или неправильной работой механики дисковода. Однако, Ваша программа должна использовать все имеющиеся возможности для восстановления после ошибки и процедура сброса может стать важной составной частью такой программы восстановления.
Вторая служебная процедура, с кодом 1, позволяет прочитать код состояния дисковой подсистемы. Состояние изменяется любой дисковой операцией, так что эта процедура отражает последнюю выполненную операцию с дискетой. Эту процедуру можно использовать для слежения за теми операциями ввода/вывода, которыми Вы не можете управлять непосредственно. Например, если выполняется обычная операция ввода/вывода на уровне языка высокого уровня и получено сообщение об ошибке, вызов этой процедуры поможет лучше понять, что произошло, в чем состоит ошибка, так чтобы программа могла выполнить необходимые корректирующие действия. Ниже приведены коды состояний, которые могут возвращаться, сами по себе или в некоторой комбинации, этой процедурой.
КОД ШЕСТНАДЦАТИРИЧНОЕ СМЫСЛ
ЗНАЧЕНИЕ
___ _______________ ________________________________________
1 01 Была выдана неправильная команда
2 02 Не найден адресный маркер (используемый
для обнаружения сектора)
3 03 Была запрошена операция записи для
дискеты, защищенной от записи
4 04 Запрашиваемый сектор не найден
8 08 Неправильный адрес при операции прямого
доступа к памяти (ПДП)
9 09 При ПДП перейдена граница 64К памяти
16 10 Ошибка чтения данных, обнаруженная при
проверке циклического избыточного кода
32 20 Ошибка контроллера гибких дисков
64 40 Ошибка поиска указанной дорожки
128 80 Тайм-аут: ответ от дисковода не получен
в положенное время
Третья и четвертая процедуры, с кодами 2 и 3, считывают и записывают один или несколько секторов (объединяемых в блок) на одной дорожке. Я советую использовать эквивалентные функции ДОС, что избавит Вас от необходимости проверять возникновение ошибок или повторять выполнение операций. Заметим что эти две операции, а также соответствующие функции ДОС позволяют считывать или записывать одновременно несколько секторов. Если Вам необходимо выполнить очень быстрый ввод или вывод данных, эти операции позволяют переслать вплоть до целой дорожки данных за время одного оборота дискеты. Чтение/запись секторов по одному требуют затраты времени одного оборота на каждый сектор.
Впрочем чтение/запись нескольких секторов имеет и свои недостатки. Один из таких недостатков - необходимость организации большого буфера, размером до 4К байт при чтении целой дорожки. Если можно работать с данными в том же месте памяти, куда они считываются или откуда они записываются, такой недостаток не будет существенным, но если требуется выделить отдельную буферную область для работы с дискетой, тогда чтение или запись нескольких секторов увеличат требования к памяти, занимаемой Вашей программой. Имеются и другие недостатки, например, если происходит ошибка, то ее обнаружение и восстановление после нее могут оказаться значительно сложнее, поскольку трудно установить на каком из секторов произошла ошибка. Эта сложность несколько меньше при использовании служебных процедур BIOS, поскольку они ведут подсчет числа переданных секторов, который может быть проанализирован программой; функции ДОС не обеспечивают такой возможности. Проблема ошибки в процессе выполнения многосекторной операции не слишком существенна при чтении, но при записи она может весьма осложнить задачу восстановления, если программа не может определить сколько секторов уже было записано.
Пятая служебная процедура, с кодом 4, используется для верификации данных после операции чтения или записи. Она повторно считывает сектора, используя для проверки циклические избыточные коды. Эта процедура используется по ключу "/V" в команде ДОС COPY. Верификацией не следует злоупотреблять и на то есть все основания. Во-первых, операции с дискетами достаточно надежны. Во-вторых, практически все ошибки при пересылке данных обнаруживаются и сообщения о них передаются программам; очень редко операция чтения или записи завершается успешно, а данные при этом как-то искажаются. Однако, когда гарантия безошибочности действительно важна, необходимо выполнять верификацию после пересылки данных. Эта операция, помимо всего прочего, значительно увеличивает время выполнения операции. Для верификации чтения или записи сектора эту процедуру следует вызывать сразу же после завершения операции пересылки.
Шестая, и последняя, операция, с кодом 6, особенно интересна. Эта процедура форматирует дорожку дискеты, записывая адресные маркеры секторов и заполняя сегмент данных каждого сектора стандартным шестнадцатиричным значением F6 или CHR$(246). Должны указываться отдельно для каждого сектора такие спецификации как дорожка, сторона и номер сектора, а также код, задающий длину сектора. Поскольку размер каждого сектора может быть задан независимо от остальных, можно сформатировать дорожку с одним или несколькими секторами нестандартного размера - что является обычным средством для защиты от копирования. Обычными средствами ДОС нельзя прочитать сектор, размер которого отличается от стандартного 512-байтного, поэтому многие схемы защиты от копирования пользуются именно такими средствами. Более подробно мы рассмотрим это в следующем разделе, посвященном параметрам, управляющим операциями с дискетой.
Форматировать нужно целую дорожку сразу - поскольку промежутки между секторами и адресные маркеры взаимозависимы. Однако, если необходимо переформатировать всего один сектор, способ для этого все же есть. Например, если нужно изменить формат последнего сектора на дорожке, сохранив данные в первых семи секторах, поступите так: напишите программу для чтения первых семи секторов, затем переформатируйте всю дорожку и перезапишите данные. Такая процедура позволит защитить от копирования уже существующие данные, хотя внешне вроде бы ничего не изменяется.
Для форматирования всех секторов на дорожке должны быть заданы следующие параметры, каждый в виде однобайтного числа:
1 - номер дорожки (от 0 до 39)
2 - сторона (0 или 1; для односторонних дискет всегда 0)
3 - номер сектора (начиная с 1; сектор 0 означает управляющую информацию)
4 - код длины (0=128 байт, 1=256 байт, 2=512 байт [стандартное], 3=1024)
Поскольку каждый сектор имеет собственный код длины, включить сектор нестандартной длины в дорожку не представляет особого труда (либо создать целую дорожку из секторов нестандартной длины для ДОС).
Если для форматирования дорожки используется процедура уровня BIOS, следите за правильным указанием всех параметров.


Анализ содержимого ПЗУ - метод деассемблирования

Анализ содержимого ПЗУ - реконструкция интерпретатора

Анализ содержимого ПЗУ средствами программы DEBUG

Две версии BIOSа

Дополнительные процедуры системы BIOS

Механизм выборки информации из ПЗУ

Описание специальных прерываний

Организация ПЗУ и его использование

Процедура обслуживания клавиатуры в системе BIOS

Система BIOS в ПЗУ

Служебные процедуры обслуживания дискет системы BIOS в ПЗУ

Средства управления видеотерминалом уровня BIOS-ПЗУ




Немного рекламы:


















































































Rambler's Top100