Жанр: Учеба
Программно-аппаратная организация компьютера IBM PC
...точно надежны. Во-вторых, практически все ошибки при пересылке данных
обнаруживаются и сообщения о них передаются программам; очень редко
операция чтения или записи завершается успешно, а данные при этом как-то
искажаются. Однако, когда гарантия безошибочности действительно важна,
необходимо выполнять верификацию после пересылки данных. Эта операция,
помимо всего прочего, значительно увеличивает время выполнения операции.
Для верификации чтения или записи сектора эту процедуру следует вызывать
сразу же после завершения операции пересылки.
Шестая, и последняя, операция, с кодом 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,
следите за правильным указанием всех параметров.
7.3. Параметры дискеты и защита от копирования
Работа дисковода для гибких дисков частично управляется таблицей,
известной как база дисков или таблица параметров дискеты (терминология
фирмы "ИБМ" пока не устоялась)
База дисков - это таблица, состоящая из одиннадцати байт, которая
содержит ряд параметров, необходимых для работы дисководов, включая и
определенную информацию о формате дискет. В листинге 7.1 можно найти
определение этой таблицы, комментарии к которому описывают назначение
каждого байта.
Как упоминалось в главе 6, один вектор прерывания,- номер 29,
хранящийся в ячейке с адресом 120,- используется для указания
местонахождения этой таблицы. Исходная версия этой таблицы,
использовавшаяся версией ДОС 1.00, находилась в ПЗУ вместе с системой
BIOS, и поэтому ее можно видеть в листинге BIOS, приведенном в
"Техническом руководстве".
Начиная с версии ДОС 1.10 вместо этой таблицы стала использоваться
таблица, размещаемая в оперативной памяти. Такое изменение, кстати, дает
нам одно преимущество. Это позволяет экспериментировать со значениями в
таблице, не прибегая к различным ухищрениям для подмены таблицы в ПЗУ.
Любая программа может установить собственную базу диска, но вот создать ее
таким образом, чтобы эта таблица продолжала использоваться после окончания
программы, довольно сложно. Для достижения это цели необходимо
зарезервировать небольшую область памяти так, чтобы ДОС не использовала
ее. Однако, с тех пор как ДОС стала размещать таблицу базы диска в
оперативной памяти, во всех этих приемах нет необходимости.
По сравнению с версией ДОС 1.00 в версии 1.10 сделано всего два
изменения в таблице базы диска, но они позволили значительно увеличить
скорость использования дискет. Во-первых, они на 25% уменьшили время,
выделенное дисководу для перемещения головки с дорожки на дорожку. Это
время получило название "время шага" (SRT). В версии таблицы, размещаемой
в ПЗУ, которая использовалась в ДОС версии 1.00, время шага равнялось 8
миллисекундам. Новое значение, использующееся начиная с ДОС 1.10,
равняется 6 миллисекундам.
Этот параметр в таблице занимает первый полубайт. Его исходное
значение было 12 (шестнадцатиричное значение C), а новое значение 13
(шестнадцатиричное значение D). Я сначала предположил, что такое изменение
значения означает увеличение времени шага, однако Роберт Бэттен сообщил
мне, что используется инверсное значение этого параметра, так что большее
значение означает меньшее время шага. Время шага управляется приращениями
по 2 миллисекунды, так что изменение времени шага с 12 на 13 в таблице
соответствует уменьшению действительного времени с 8 до 6 миллисекунд.
Второе изменение резко увеличило скорость доступа к дискете. "Время
установления головки", то есть, пауза, необходимая для стабилизации
головок чтения/записи, была уменьшена с 25 миллисекунд до нуля.
Первоначально фирма "ИБМ" чересчур предубежденно относилась к
быстродействию дисководов, так что за счет ликвидации времени установления
удалось добиться сразу большого увеличения быстродействия. Большую часть
параметров этой таблицы изменять нельзя, однако, некоторые из них
предоставляют широкие возможности для экспериментаторов. В девятом байте
хранится значение, которое используется операцией форматирования для
инициализации секторов дискеты. Стандартное значение F6, но Вы можете его
изменить. Некоторые программы проверяют наличие кода F6, чтобы найти
неиспользовавшиеся сектора, так что это значение вряд ли разумно изменять,
если для этого нет веских оснований. Такое изменение целесообразно
применять для защиты от копирования.
Еще один интересный параметр - это байт размера сектора. Он
определяет размер сектора, который должен считываться или записываться.
Это позволяет работать с секторами, размер которых отличается от
стандартного 512-байтного формата ДОС. В других операционных системах
могут использоваться другие размеры секторов за счет изменения этого
байта. Изменение этого значения является наиболее простым способом
организации защиты записи. Для формирования сектора с размером, отличным
от 512 байт, необходимо использовать служебную процедуру форматирования,
описанную в предыдущем разделе. В процессе форматирования размер каждого
сектора определяется отдельно. Однако, чтобы в дальнейшем Ваши программы
могли читать или записывать нестандартные сектора, необходимо изменять
указатель размера сектора в таблице базы диска.
Этот параметр может принимать одно из следующих значений:
Значение Размер сектора в байтах
________ _______________________
0 128
1 256
2 512 (стандартный для ДОС)
3 1024
Листинг программы 7.1 демонстрирует (на Паскале), как осуществляется
доступ к таблице базы диска и как изменяются ее параметры. То же самое
можно сделать на БЕЙСИКе, хотя здесь требуется побайтное извлечение
адресных значений. Ниже приведена программа на БЕЙСИКе, которая находит и
распечатывает таблицу базы диска.
100 REM Программа на БЕЙСИКе для поиска и распечатки
таблицы базы диска
110 REM
120 REM Сначала необходимо установить указатель вектора
прерываний
130 REM
140 DEF SEG=0 'начало памяти
150 OFFSET1=30*4 'смещение до вектора прерывания
160 REM
170 REM Далее нужно определить смещение адреса вектора
180 REM
190 OFFSET2=PEEK(OFFSET1)+256*PEEK(OFFSET1+1)
200 REM
210 REM Теперь нужно определить сегментную часть
адреса вектора
220 REM
230 DEFSEG=PEEK(OFFSET1+2)+256*PEEK(OFFSET1+3)
240 REM
250 REM Теперь можно начинать просмотр таблицы
260 REM
270 PRINT "Ниже следуют данные таблицы базы диска в
шестнадцатиричном виде"
280 FOR I=0 TO 10
290 PRINT " ";
300 IF PEEK(OFFSET2+1)=16 THEN PRINT"0"; 'добавить
ноль для четности
310 PRINT HEX$(PEEK(OFFSET2+1));
320 NEXT I
330 PRINT:PRINT
Если Вам нужны средства для защиты от копирования, мы предоставляем
их Вам в двух формах.
Программы 7.103 и 7.104, имеющиеся на дискете, прилагаемой к этой
книге, предоставляют процедуры на ассемблере и на Паскале, которые
позволят организовать защиту записи и приспособить ее к Вашей схеме
защиты. Кроме того, в пакет входит готовая программа защиты, которую можно
вызывать как на БЕЙСИКе, так и на Паскале.
{ Листинг 7.1 — процедуры на Паскале для доступа к }
{ параметрам "базы диска" }
{ Этот фрагмент программы демонстрирует возможность доступа }
{ к "базе диска" или таблице управления дискетами. Этот }
{ листинг разрабатывался для обеспечения наиболее легкой }
{ настройки на конкретные нужды пользователей перед его }
{ использованием. }
module Листинг 7.1;
type
disk_base_type = array [1..11] of byte;
{ Ниже кратко описаны все 11 байт таблицы : }
{ 1 : время шага; время вывода головки }
{ 2 : время ввода головки; режим ПДП }
{ 3 : время ожидания отключения двигателя }
{ 4 : длина сектора в байтах: 0=128,1=256,2=512,3=1024 }
{ 5 : конец дорожки (номер последнего сектора) }
{ 6 : длина межсекторного промежутка }
{ 7 : длина сегмента данных (когда не задана длина сектора) }
{ 8 : длина промежутка для форматирования }
{ 9 : байт заполнитель для форматирования }
{ 10: время установления головки }
{ 11: время запуска двигателя }
var
disk_base : disk_base_type;
disk_base_pointer : ads of disk_base_type; {сегментированный
адрес}
vector_pointrer : ads of adsmem; {сегментированный адрес}
procedure disk_base_access;
begin
{сначала указатель устанавливается на вектор прерывания базы}
{ диска}
vector_pointer.s := 0; {раздел сегмента 0, начало памяти}
vector_pointer.r := 30 * 4; {смещение для вектора 30}
{далее считывается вектор, чтобы установить местоположение}
{ таблицы}
disk_base_pointer := vector_pointer ^;
{указатель базы диска ("disk_base_pointer") теперь содержит }
{сегментированный адрес, на который указывал указатель }
{вектора ("vector_pointer") — это означает, что указатель }
{базы диска теперь указывает на адрес фактического }
{местонахождения таблицы }
{Теперь будет выполняться проверка того. находится ли таблица}
{в оперативной памяти. Это можно установить попытавшись }
{изменить значение в таблице и затем проверив, изменилось ли }
{оно на самом деле. Вместо этого мы просто проверим, в каких }
{адресах памяти располагается таблица. }
if disk_base_pointer.s >= #F000 then
begin
{адрес слишком велик - таблица в ПЗУ и изменить ее не удастся}
end
else
begin
{все в порядке - таблица наверняка в ОЗУ}
end;
{Теперь скопируем таблицу в свой буфер }
disk_base := disk_base_pointer ^;
{База диска теперь содержит копию данных таблицы, на которую}
{указывал сегментированный адрес в указателе базы диска }
{Далее, изменим размер на 1024 байта и байт-заполнитель для}
{форматирования на АА. Эти изменения мы выполняем в своей }
{копии, которую затем переносим в реальную таблицу. Впрочем,}
{то же самое изменение можно было бы выполнить и }
{непосредственно в самой таблице.}
disk_base [4] := 3; {установить размер сектора 1024 }
disk_base [9] := #AA {шестнадцатиричное значение AA }
{или десятичное 170 выбрано произвольно}
disk_base_pointer ^ := disk_base; {возвратить таблицу на }
{место}
end;
end. {конец модуля listing_7_1 }
ГЛАВА 8. ВИДЕОДОСТУП, ЧАСТЬ 1 - ТЕКСТОВЫЙ РЕЖИМ
Практически любая программа, выполняемая на персональном компьютере
фирмы IBM выводит информацию на экран видеодисплея. Существует два
принципиально различных вида информации,представляемой на экране дисплея
IBM/PC: текст (т.е. литеры алфавита и другие символы) и графика. В
настоящей и в следующей главах мы рассмотрим все наиболее существенные
аспекты, связанные с доступом к содержимому экрана, рассмотрение начнем с
символьных текстов.
В отличие от остальных глав данной книги, эти главы практически не
содержат сведений, общих для всего семейства компьютеров, использующих
операционную систему MS-DOS. В то же время рассматриваемые материалы
помогут нам установить степень совместимости всего класса персональных
компьютеров с персональным компьютером IBM/PC, поскольку большинство
распространенных программ для IBM/PC зависят от специфики представления
информации на экране.
8.1. Типы экранов видеодисплеев
Существует множество различных типов видеодисплеев, подключаемых к
компьютеру IBM/PC, обладающих различными характеристиками и особенностями
программирования. Для того, чтобы разобраться в этом вопросе, мы опишем
наиболее существенные различия и покажем, как они соотносятся с теми
сведениями, которые мы приводим в настоящей и следующей главах.
Прежде всего, следует отметить, что к персональному компьютеру в
качестве дополнительных плат могут быть подключены два дисплейных адаптера
- одноцветный (монохромный) и цветной графический. Дисплейный адаптер
связывает компьютер с монитором дисплея с помощью микросхемы, называемой
контроллером электронно-лучевой трубки (экрана). Адаптер имеет также ряд
программируемых портов ввода-вывода, генератор символов в ПЗУ и
оперативную память, которая хранит информацию, выводимой на экран
информации.
Изображение на экране, как уже указывалось выше, генерируется в двух
основных режимах - текстовом и графическом. В текстовом режиме на экран
выводятся только символы, хотя многие из этих символов можно использовать
для построения простых линейных конструкций. Графический режим
используется главным образом для представления сложных изображений (схем,
графиков, диаграмм, рисунков и т.п.), хотя и допускает возможность
представления символов различного размера и формы (формата).
Одноцветный адаптер предназначен для использования только с
монохромным экраном дисплея фирмы IBM. Монохромный дисплей не может
воспроизводить цвет и графику. Он предназначен только для работы в
текстовом режиме, т.е. может представлять только текстовые символы и
простейшие конструкции (диаграммы), синтезируемые из символов, записанных
в ПЗУ в коде ASCII. Многие пользователи предпочитают цветному графическому
дисплею монохромный (одноцветный), поскольку с него легче производить
считывание информации. Но, выбирая монохромный дисплей, они жертвуют
графическими возможностями и цветом - двумя очень ценными качествами
дисплея.
Цветной графический адаптер может работать с различными типами
дисплеев. Он имеет выходные гнезда для двух видов подключений и поэтому
допускает подключение разнообразных видеотерминалов. На одном из выходов
формируется единый составной сигнал цветного изображения. На другом -
отдельные сигналы для трех основных цветов - красного, зеленого и синего;
эти сигналы получили обобщенное название - RGB-сигнала. Этот адаптер может
работать как в текстовом, так и в графическом режимах, формируя на экране
изображения и символы нескольких форматов и различных цветов. Он
разработан для работы с любыми видами дисплеев от обычного телевизора до
цветного монитора с высокой разрешающей способностью.
К RGB-выходу подключаются специальные дисплеи, известные под
названием RGB-мониторов. К выходу составного сигнала могут быть подключены
цветные дисплеи соответствующего типа. К этому же выходу подключаются и
обычные цветные телевизоры, снабженные частотным преобразователем. Все
перечисленные здесь типы дисплеев способны воспроизводить цвет.
К выходу составного сигнала можно также подключать черно-белый
компьютерный дисплей. В этом случае на вход дисплея поступает сигнал
цветности, который, однако, не может быть в полной мере воспроизведен
средствами дисплея. При использовании такого дисплея теряется возможность
воспроизведения цвета, а также высокое качество и четкость монохромного
дисплея фирмы IBM. Это самый дешевый способ отображения информации на
экране.
Для преодоления ограничений, присущих одноцветному адаптеру,
некоторые фирмы-изготовители перешли к выпуску разновидностей одноцветного
адаптера, таких, например, как популярный дисплейный адаптер Геркулес,
который сочетает графические (но не цвет) возможности цветного
графического адаптера с высоким качеством воспроизведения текста,
характерным для одноцветного адаптера. В результате качество графики
оказывается выше качества, даваемого цветным графическим адаптером.
Усиленный графический адаптер может создавать подобную графику на
одноцветном экране.
Приблизительно две трети всех персональных компьютеров оборудованы
стандартными одноцветными адаптерами и поэтому не обладают графическими и
цветовыми возможностями.Не смотря на определенные реальные преимущества
использования цвета и графики, большинство персональных компьютеров
прекрасно обходятся без них. Планируя использование персонального
компьютера следует помнить, что большинство дисплеев - текстовые.
Различные аспекты излагаемой проблемы в настоящей и следующих главах
в той или иной степени касаются использования различных типов дисплеев.
Для того, чтобы избежать возможных недоразумений, кратко опишем их
возможности.
Любые сведения, относящиеся к одноцветному адаптеру, касаются только
этого адаптера. Они не распространяются на различные аспекты
воспроизведения цвета, включая использование черно-белого монитора с
цветным графическим адаптером. Черно-белый монитор можно рассматривать в
качестве монохромного; он однако не используется с одноцветным адаптером.
Термин "монохромный" (одноцветный) используется только для монохромного
экрана фирмы IBM.
Специфика работы цветного графического адаптера не применима к
монохромному дисплею. Все цветные дисплеи разрабатываются с учетом этой
специфики. Большинство сигналов цветного графического адаптера
воспринимается черно-белым монитором; исключение составляют сигналы
цветности.
Большинство черно-белых мониторов обрабатывают сигналы цветности
неудовлетворительно. Черно-белые мониторы, формирующие осмысленное
изображение при получении цветных сигналов большая редкость. Поэтому любая
программа, которая может быть использована на компьютере с черно-белым
монитором не должна использовать цвет; в противном случае она должна
обладать способностью преобразовать любой цвет в черно-белую палитру.
Цветные телевизоры, как правило, имеют более низкую разрешаемую
способность по сравнению с обычными цветными мониторами компьютеров.
Поэтому цветные телевизоры могут работать только в режиме самой низкой
разрешающей способности, предусмотренной в IBM/PC, а именно в режиме 40
позиционных строк. В большинстве случаев цветной телевизор не позволяет
использовать всех возможностей IBM/PC; наиболее важные программы не могут
выполняться на компьютере, оборудованном цветным телевизором. Как правило
цветной телевизор используется программами реализации компьютерных игр,
ориентированных на использование интерфейса с накопителем на магнитной
кассете.
8.2. Принципы формирования изображения
Прежде чем перейти к дальнейшему рассмотрению текстового режима
работы дисплея, мы для уяснения сути дела кратко рассмотрим некоторые
принципы представления изображений на экранах видеодисплеев. Существует
два основных способа вывода информации из персонального компьютера на
экран видеотерминала. В первом случае компьютер рассматривает экран
дисплея в качестве обычного устройства ввода/вывода. При таком подходе
компьютер выдает контроллеру дисплея различные команды, включая команды
вывода текстовой информации. Ниже приводится некоторая упрощенная форма
этих команд:
ОЧИСТИТЬ ЭКРАН
ВЫСВЕТИТЬ С 15 ПОЗИЦИИ 10 СТРОКИ СЛЕДУЮЩИЙ ТЕКСТ :
"В случае готовности нажмите клавишу "ввод"" ...
ПЕРЕМЕСТИТЕ КУРСОР В 43 ПОЗИЦИЮ 10-й СТРОКИ
Наиболее существенный аспект взаимодействия такого рода состоит в
том, что в этом случае дисплей рассматривается просто как и любое другое
периферийное устройство. Разумеется, дисплей может выполнять и ряд
специфических команд, таких, которые не может выполнять принтер -
например, команду "ОЧИСТИТЬ КАДР" - и все же принцип взаимодействия с
компьютером остается неизменным.
Преимущество описанного подхода состоит в том, что использование
команд позволяет рассматривать экраны дисплеев в одном ряду с другими
устройствами ввода/вывода. Вследствие этого программное обеспечение
поддержки видеодисплеев становится проще и более унифицированным; это
позволяет универсальным образом использовать множество различных
компьютерных терминалов. Недостаток такого подхода в том, что компьютер
теряет непосредственную связь с экраном дисплея и оказывается не в
состоянии "творить чудеса" на экране. Фирма IBM пошла по пути "сотворения
чудес" и поэтому выбрала другой подход подключения дисплея к IBM/PC.
Этот подход известен как подход, связанный с регенерацией изображения
на основе образа экрана хранящегося в памяти. В этом случае компьютер и
дисплей совместно используют некоторое пространство общей памяти.
Электронные схемы дисплея постоянно производят опрос (считывание) памяти и
сразу же отображают результаты на экране. При таком подходе компьютерная
программа может осуществлять вывод информации на экран путем простого
изменения содержимого памяти. Аналогично, считывание информации с экрана
дисплея может осуществляться путем обычного считывания содержимого общей
памяти. Таким образом, экран дисплея представляется фактически областью
памяти и выборка/занесение информации из(в) память означает считывание или
запись информации с(на) экран дисплея.
В персональном компьютере фирмы IBM фактически используется смешанный
подход. Для отображения данных на экране используется хранимый в памяти
образ экрана (карта), а для управления различными аспектами отображения
используется система команд. В дисплейных системах с жесткой реализацией
механизма отображения содержимого памяти даже управление курсором
осуществляется путем изменения содержимого общей памяти. В компьютере
IBM/PC позиционирование курсора осуществляется с помощью команд, даваемых
схемой управления контроллером. Команды используются в следующих случаях:
установки размера мерцающего курсора, очистки и обновления экрана, а также
для изменения режима работы дисплея (текстовый-графический, 40 позиционный
- 80 позиционный).
Работа в режиме хранимого в памяти образа экрана (карты) связана с
двумя потенциальными неудобствами (однако фирме IBM удалось найти способ
их преодоления). Первое состоит в том, что этот образ требует для
размещения значительных ресурсов оперативной памяти; для восьмиразрядных
компьютеров старого исполнения с малой оперативной памятью это
представляло серьезную проблему. В компьютере IBM/PC эта проблема решается
в два приема. Во-первых, расширением пространства адресуемой памяти до
миллиона байт. Во-вторых, выделением дисплею своей собственной встроенной
памяти, с тем чтобы не использовать обычную память, предназначенную для
хранения программ и данных.
Существуют и более веские основания для обеспечения дисплейного
адаптера своей собственной памятью и следовательно разрешение проблемы
конфликтов при доступе к памяти. Дело в том, что дисплей с хранимой копией
изображения (образа экрана) в памяти должен постоянно осуществлять
операции чтения из памяти и, следовательно, конкурировать за эту память с
микропроцессором. В этом случае образуется очередь за обладание схемными
ресурсами доступа к памяти.
Фирма IBM решила эту проблему путем выделения дисплею своей
собственной памяти и организовав доступ к этой памяти через два порта
ввода-вывода. Такой подход обеспечивает возможность быстрого доступа к
общему полю памяти и со стороны процессора и со стороны дисплея.
Если внимательно присмотреться к экрану в момент генерации кадра
изображения, то можно заметить что большую часть времени экран дисплея
остается совершенно чистым,
...Поділитися у соцмережах