|
Часть 6
.
- 2 -
9ЧАСТЬ 2. ПЗУ BIOS И ЕЕ ИСПОЛЬЗОВАНИЕ
Базовая система ввода/вывода(BIOS) резидентна в ПЗ
У на системной пла-
те и обеспечивает управление на уровне устройства для основн
ых устройств вво-
да/вывода в системе. На дополнительных адаптерах могут быт
ь расположены доба-
вочные модули ПЗУ для обеспечения управления на уровне устро
йства для этих до-
полнительных адаптеров. Программы BIOS позволяют программист
у на ассемблере вы-
полнять операции на уровне блоков(жесткие и гибкие диски) ил
и на уровне симво-
лов без обращения к адресу устройства и его рабочим характер
истикам. BIOS обес-
печивает также системный сервис, такой как сообщение времени
дня и определение
об'ема памяти.
Основной целью является обеспечить интерфейс взаи
модействия с систе-
мой и избавить программиста от необходимости изучения характ
еристик аппаратных
средств. Интерфейс BIOS отделяет пользователя от аппаратног
о обеспечения, поз-
воляя, таким образом, добавлять в систему новые устройст
ва, оставаясь, при
этом, на на уровне интерфейса BIOS к устройству. Таким образ
ом, программы поль-
зователя становятся переносимыми для модификаций и доработо
к аппаратного обес-
печения.
В руководстве по макроассемвлеру(IBM Personal Compu
ter MACRO Assembl-
er manual) и в руководстве по дисковой операционной системе(
IBM Personal Compu-
ter Disk Operating System manual) имеется полезная информаци
я по программирова-
нию, связанная с данным разделом. В приложении A приводится
полный листинг BI-
OS.
7ИСПОЛЬЗОВАНИЕ BIOS9
Обращение к BIOS производится через программные пре
рывания 8088. Каж-
дая точка входа BIOS доступна через свое собственное прогр
аммное прерывание,
которое может быть найдено в листинге программных прерываний
8088.
Каждое программное прерывание с 10H по 1AH имеет до
ступ к различным
программам BIOS. Например, для определения количества памяти
, доступного в сис-
теме требуется:
INT 12H
что заставит программу BIOS определить размер памяти, и возв
ратить эту величи-
ну запросившему.
7ПЕРЕДАЧА ПАРАМЕТРОВ9
Все параметры, передаваемые в и из программ BIOS,
проходят через ре-
гистры 8088. Пролог каждой функции BIOS показывает регистры,
используемые для
вызова и возврата. В регистре AX возвращается об'ем памя
ти с приращением 1
Кбайт.
Если функция BIOS выполняет несколько возможных дей
ствий, то для ука-
зания желаемого действия используется регистр AH при вводе.
Например, для уста-
новки времени дня требуются следующие коды:
MOV AH,1 ;функция установки времени дня
MOV CX,HIGH_COUNT ;задание текущего времени
MOV DX,LOW_COUNT
INT 1AH ;установка времени,
а для того, чтобы прочитать время дня:
MOV AH,0 ;функция чтения времени дня
INT 1AH ;читать таймер
Обычно, программы BIOS сохраняют все регистры , за
исключением AX и
флагов. Другие регистры модифицируются при возврате, только
если в них возвра-
щается вызванное значение. Точное использование регистров мо
жно посмотреть в
описании каждой функции BIOS.
.
- 3 -
ЛИСТИНГ ПРОГРАММНЫХ ПРЕРЫВАНИЙ 8088
============================================================
===================
| Адрес(16-й) | номер | имя | т
очка входа BIOS |
| |прерывания| |
|
|-------------|----------|-----------------------------|----
------------------|
| 0-3 | 0 | деление на ноль | D_E
OI |
| 4-7 | 1 | один шаг | D_E
OI |
| 8-B | 2 | не маскируемое | NMI
_INT |
| C-F | 3 | точка разрыва | D_E
OI |
| 10-13 | 4 | переполнение | D_E
OI |
| 14-17 | 5 | печать экрана | PRI
NT_SCREEN |
| 18-1B | 6 | зарезервировано | D_E
OI |
| 1D-1F | 7 | зарезервировано | D_E
OI |
| 20-23 | 8 | время дня | TIM
ER_INT |
| 24-27 | 9 | клавиатура | KB_
INT |
| 28-2B | A | зарезервировано | D_E
OI |
| 2C-2F | B | связь | D_E
OI |
| 30-33 | C | связь | D_E
OI |
| 34-37 | D | диск | D_E
OI |
| 38-3B | E | дискета | DIS
K_INT |
| 3C-3F | F | принтер | D_E
OI |
| 40-43 | 10 | видео | VID
EO_IO |
| 44-47 | 11 | ошибка оборудования | EQU
IPMENT |
| 48-4B | 12 | память | MEM
ORY_SYZE_DETERMINE|
| 4C-4F | 13 | дискета/диск | DIS
KETTE_IO |
| 50-53 | 14 | связь | RS2
32_IO |
| 54-57 | 15 | кассетный магнитофон | CAS
SETTE_IO |
| 58-5B | 16 | клавиатура | KEY
BOARD_IO |
| 5C-5F | 17 | принтер | PRI
NTER_IO |
| 60-63 | 18 | резидентный Бейсик | F60
0:0000 |
| 64-67 | 19 | загрузка | BOO
T_STRAP |
| 68-6B | 1A | время дня | TYM
E_OF_DAY |
| 6C-6F | 1B | разрыв клавиатуры | DUM
MY_RETURN |
| 70-73 | 1C | такт таймера | DUM
MY_RETURN |
| 74-77 | 1D | инициализация видео | VID
EO_PARMS |
| 78-7B | 1E | параметры дискет | DIS
K_BASE |
| 7C-7F | 1F | видео графика символы | О
|
============================================================
===================
7ВЕКТОРА СО СПЕЦИАЛЬНЫМ ЗНАЧЕНИЕМ9
7Прерывание 1BH - адрес разрыва клавиатуры9
Этот вектор указывает на код, который должен быть
представлен, когда
на клавиатуре нажато Ctrl-Break. Данный вектор срабатывает,
когда обрабатывает-
ся прерывание от клавиатуры и управление должно быть возвра
щено через команду
IRET. Программы, работающие при включении питания инициализи
руют этот вектор
для указания на команду IRET, поэтому пока прикладная програ
мма не изменит дан-
ный вектор, при нажатии Ctrl-Break ничего не происходит.
Можно оставить управление за этой программой, учиты
вая следующие проб-
лемы. Break может возникнуть во время обработки прерывания,
поэтому в контрол-
лер 8259 следует отправить одну или более команд "Конец прер
ывания". Кроме то-
го, если в это время работали внешние устройства, то все он
и должны быть сбро-
шены.
7Прерывание 1CH - такт таймера9
Этот вектор указывает на код, который должен быть в
ыполнен при каждом
тике системных часов. Данный вектор срабатывает, когда обра
батывается прерыва-
ние потаймеру, и управление должно быть возвращено через инс
трукцию IRET. Прог-
раммы, работающие прив ключении питания инициализируют этот
вектор так, чтобы
он указывал на команду IRET, поэтому пока прикладная програм
ма не модифицирует
- 4 -
данный вектор, ничего не происходит. Прикладная программа о
бязана сохранять и
восстанавливать все регистры, которые будут модифицированы.
7Прерывание 1DH - параметры видео9
Этот вектор указывает на область данных, содержащую
параметры, необхо-
димые для инициализации 6845 на видео-карте. Отметим, что и
меется четыре от-
дельных таблицы, и если должны поддерживаться все режимы
работы, то должны
быть воспроизведены все четыре. Программы, работающие при в
ключении питания,
инициализируют данный вектор, чтобы он указывал на параметр
ы, имеющиеся в ПЗУ
видеопрограмм.
7Прерывание 1EH - параметры дискеты9
Этот вектор указывает на область данных, которая со
держит параметры,
необходимые для дисковвода. Программы, работающие при включе
нии питания, иници-
ализируют данный вектор, чтобы он указывал на параметры, со
держащиеся в ПЗУ
программ общения с дисковводом. Эти параметры по-умолчанию о
пределяют величины
для присоединения к машине дисковвода IBM. Для отражения ха
рактеристик других
присоединенных дисковводов может потребоваться изменение это
го блока парамет-
ров.
7Прерывание 1FH - расширения графических символо
в9
При работе в графических режимах IBM Color/Grap
hics Monitor Adapt-
er(320 на 200 или 640 на 200) интерфейс чтения-записи символ
ов формирует симво-
лы из кода ASCII, используя набор точечных образов. Точечные
образы для первых
128 кодов содержатся в ПЗУ. Для доступа к вторым 128 кодам э
тот вектор должен
быть установлен, чтобы указывать на таблицу до 1 Кбайта, в
которой каждая точ-
ка кода представлена восемью байтами графической информации.
При включении пи-
тания этот вектор инициализируется в 000:0, и если требуетс
я использование до-
полнительных кодов, то пользователь должен установить этот в
ектор.
7Прерывание 40H - зарезервировано9
Когда устанавливается адаптер жесткого диска, прогр
аммы BIOS использу-
ют прерывание 40H для переопределения указателя на дискеты.
7Прерывание 41H - параметры жесткого диска9
Этот вектор указывает на область данных, содержащую
параметры, необхо-
димые для привода жесткого диска. Программы по включению пит
ания инициализиру-
ют этот вектор для указания на параметры, содержащиеся в ПЗУ
программы диска.
Эти параметры по умолчанию представляют величины, определен
ные для присоедине-
ния к машине жестких дисков IBM. Изменение этого блока парам
етров может потре-
боваться при подключении другого типа жестких дисков.
7Использование других областей ОЗУ9
Программы BIOS IBM используют 256 байт памяти, нач
иная с абсолютного
адреса 400H до 4FFH. Ячейки с 400H до 407H содержат базо
вые адреса всех
карт RS232C, присоединенных к системе. Ячейки с 408H до 40FH
содержат базовые
адреса адаптера принтера.
Область памяти с 300H до 3FFH используется как стек
при инициализации
по включению питания и при загрузке, когда управление переда
ется ей по включе-
нию питания. Если пользователь желает иметь стек в другой
области, то он дол-
- 5 -
жен установить эту область в прикладной программе.
ЗАРЕЗЕРВИРОВАННЫЕ ПРЕРЫВАНИЯ БЕЙСИКА И DOS
============================================================
==================
| адрес(16-й) | прерывание(16-е) | назначение
|
|-------------|------------------|--------------------------
-----------------|
| 80-83 | 20 | завершение программы DOS
|
| 84-87 | 21 | вызов функции DOS
|
| 88-8B | 22 | адрес завершения DOS
|
| 8C-8F | 23 | адрес выхода DOS по CTRL-
BREAK |
| 90-93 | 24 | вектор фатальной ошибки D
OS |
| 94-97 | 25 | абсолютное чтение диска D
OS |
| 98-9B | 26 | абсолютная запись диска D
OS |
| 9C-9F | 27 | завершение DOS, фиксация
в памяти |
| A0-FF | 28-3F | зарезервировано для DOS
|
| 100-17F | 40-5F | зарезервировано
|
| 180-19F | 60-67 | зарезервировано для прогр
аммных прерываний|
| | | пользователя
|
| 1A0-1FF | 68-7F | не используется
|
| 200-217 | 80-85 | зарезервировано для Бейси
ка |
| 218-3C3 | 86-F0 | используется интерпретато
ром Бейсика, |
| | | когда он работает
|
| 3C4-3FF | F1-FF | не используется
|
============================================================
==================
ЗАРЕЗЕРВИРОВАННЫЕ АДРЕСА ПАМЯТИ
============================================================
==================
| адрес(16-й) | режим | назначение
|
|-------------|------------------|--------------------------
-----------------|
| 400-48F | ПЗУ BIOS | см. листинг BIOS.
|
| 490-4EF | | зарезервировано.
|
| 4F0-4FF | | зарезервировано, как внут
ри-прикладное; |
| | | область связи для любых п
рикладных прогр. |
| 500-5FF | | зарезервировано для DOS и
Бейсика. |
| 500 | DOS | хранение флага состояния
печати экрана: |
| | | 0 - печать экрана не акти
вна или успешное |
| | | выполнение операции п
ечати экрана; |
| | | 1 - обрабатывается печать
экрана; |
| | | 255 - во время печати экр
ана была зафикси-|
| | | рована ошибка.
|
| | | рована ошибка.
|
| 504 | DOS | байт состояния режима с о
дним приводом. |
| 510-511 | Бейсик | хранение адреса сегмента
в Бейсике. |
| 512-515 | Бейсик | хранение вектора СЕГМЕНТ:
СДВИГ прерывания |
| | | по часам.
|
| 516-519 | Бейсик | хранение вектора СЕГМЕНТ:
СДВИГ прерывания |
| | | по клавише BREAK.
|
| 51A-51D | Бейсик | хранение вектора СЕГМЕНТ:
СДВИГ прерывания |
| | | по ошибке диска.
|
============================================================
==================
.
- 6 -
если вы делаете сегмент рабочего пространства по ум
олчанию(DEF SEG):
ПЕРЕМЕННЫЕ РАБОЧЕГО ПРОСТРАНСТВА БЕЙСИКА
============================================================
==================
| |сдвиг(1
6-я вел.)| длина |
|---------------------------------------------------|-------
---------|-------|
| номер текущей строки, котора обрабатывается |
2E | 2 |
| номер строки, содержащей последнюю ошибку | 3
47 | 2 |
| сдвиг в сегменте начала текста программы |
30 | 2 |
| сдвиг в сегменте начала переменных( конец текста | 3
58 | 2 |
| программы 1-1) |
| |
| содержимое буфера клавиатуры |
6A | 1 |
| - если 0, то в буфере нет символов |
| |
| - если 1, то в буфере имеются символы |
| |
| цвет символов в графическом режиме: |
4E | 1 |
| устанавливайте в 1,2 или 3 для получения текста |
| |
| цветом от1 до 3; не устанавливайте в 0; |
| |
| по умолчанию 3; |
| |
|-----------------------------------------------------------
-----------------|
| например:
|
| 100 PRINT PEEK(&H2E)+256*PEEK(&H2F)
|
| L H
|
| -------------------------
|
| | 16-е 64 | 16-е 00 |
|
| -------------------------
|
============================================================
==================
КАРТА ПАМЯТИ BIOS
начальные адреса(16-е)
-----------------------=============================
============
00000 | вектора прерываний BIOS
|
-----------------------=============================
============
00080 | доступные вектора прерывани
й |
-----------------------=============================
============
00400 | область данных BIOS
|
-----------------------=============================
============
00500 | область ОЗУ пользователя
|
-----------------------=============================
============
С8000 | адаптер диска
|
-----------------------=============================
============
F0000 | ПЗУ
|
-----------------------=============================
============
FE000 | область программ BIOS
|
-----------------------=============================
============
7НЕКОТОРЫЕ МОМЕНТЫ ПРОГРАММИРОВАНИЯ BIOS9
Доступ к программам BIOS обеспечивается через прогр
аммные прерывания.
Программисту не следует жестко кодировать адреса BIOS в свои
х прикладных прог-
раммах. Внутренняя работа и абсолютные адреса BIOS изменяютс
я без уведомления.
Если программа обслуживания жесткого диска или гибк
их дисков обнаружи-
ла ошибку и сообщила о ней, то следует произвести сброс ад
аптера и повторить
операцию. Для того чтобы удостовериться, что причина не в з
апуске двигателя,
требуется определенное число повторений чтения диска.
Когда изменяются значения битов портов ввода/вывод
а, программист дол-
жен изменять только те биты, которые необходимы в данной зад
аче. После заверше-
ния, программист должен восстановить первоначальные значен
ия. Отступление от
этой практики может привести к несовместимости с существующи
м и будущим прог-
раммным обеспечением.
.
- 7 -
7Карты адаптеров с модулями ПЗУ,9
7 доступными системе9
ПЗУ BIOS предусматривает возможность добавлять в си
стему карты адапте-
ра со встроенными программами, записанными в ПЗУ. Во время P
OST устанавливают-
ся вектора прерываний для вызовов BIOS. После помещения на
место векторов по
умолчанию производится сканирование адресного пространства д
ля определения до-
полнительных модулей ПЗУ адаптеров. В этот момент программы
ПЗУ адаптера могут
получить управление. Программы могут установить или изменить
вектора прерыва-
ний для подключения своего адаптера в систему.
При поиске допустимого ПЗУ адаптера сканируются абс
олютные адреса с
HC8000 по HF4000 блоками по 2 Кбайта. Допустимое ПЗУ определ
яется следующим об-
разом:
Байт 0: 55H
Байт 1: AAH
Байт 2: индикатор длины, представляющий число блоко
в по 512 байт в
ПЗУ(длина/512).
Также подсчитывается контрольная сумма для
проверки целостнос-
ти модуля ПЗУ. Каждый байт в проверяемом ПЗ
У суммируется по
модулю 100H. Эта сумма должна быть равна ну
лю для допустимого
ПЗУ.
Когда POST обнаруживает допустимое ПЗУ, то выполняе
тся далекий вызов
на 3-й байт ПЗУ(который должен быть выполнимым кодом). Теп
ерь карта адаптера
может выполнить свою задачу инициализации по включению пита
ния. Программа в
ПЗУ должна возвращать управление программам BIOS путем в
ыполнения далекого
возврата.
7КОДИРОВАНИЕ И ИСПОЛЬЗОВАНИЕ КЛАВИАТУРЫ9
7Кодирование9
Программа клавиатуры, представленная IBM в ПЗУ BIOS
, отвечает преобра-
зованию кодов сканирования клавиатуры в то, что будет назыв
аться РАСШИРЕННЫМИ
КОДАМИ ASCII. Расширенные коды ASCII, возврашаемые программа
ми ПЗУ представле-
ны для американского расположения клавиатуры. Некоторые оп
ерационные системы
могут выполнять поддержку альтернативного расположения клави
атуры, осуществляя
подстановку прерываний, с указанием на программы, резидентн
ые в ОЗУ. В данном
разделе документировано только ПЗУ BIOS.
Расширенные коды ASCII преобразуют однобайтные симв
ольные коды с воз-
можными величинами от 0 до 255 в расширенные коды для не
скольких различных
функций клавиатуры, и обработка этих функций ведется внутри
программы для кла-
виатуры или через прерывания.
7Символьные коды9
В систему или прикладную программу через программу
клавиатуры BIOS пе-
редаются следующие коды."-1" будет означать, что комбинаци
я подавляется прог-
раммой клавиатуры. Коды возвращаются в AL. Точные коды переч
ислены в приложе-
нии C. Кроме того, в разделе 1 приводится таблица кодов ска
нирования клавиату-
ры.
.
- 8 -
КОДЫ СИМВОЛОВ
============================================================
=================
| номер | основной | верхний | CTRL
| ALT |
| клавиши | случай | регистр |
| |
|---------|------------------|-----------------|------------
--|-------------|
| 1 | ESC | ESC | ESC
| -1 |
| 2 | 1 | 1/2 | -1
|см. замеч. 1 |
| 3 | 2 | @ |NUL(см. зам.
1)|см. замеч. 1 |
| 4 | 3 | # | -1
|см. замеч. 1 |
| 5 | 4 | $ | -1
|см. замеч. 1 |
| 6 | 5 | % | -1
|см. замеч. 1 |
| 7 | 6 | ^ | RS(030)
|см. замеч. 1 |
| 8 | 7 | & | -1
|см. замеч. 1 |
| 9 | 8 | * | -1
|см. замеч. 1 |
| 10 | 9 | ( | -1
|см. замеч. 1 |
| 11 | 0 | ) | -1
|см. замеч. 1 |
| 12 | - | _ | US(031)
|см. замеч. 1 |
| 13 | = | + | -1
|см. замеч. 1 |
| 14 | Backspace(008) | Backspace(008) | DEL(127)
| -1 |
| 15 | -->|(009) | |<--(см.зам.1) | -1
| -1 |
| 16 | q | Q | DC1(017)
|см. замеч. 1 |
| 17 | w | W | ETB(023)
|см. замеч. 1 |
| 18 | e | E | ENQ(005)
|см. замеч. 1 |
| 19 | r | R | DC2(018)
|см. замеч. 1 |
| 20 | t | T | DC4(020)
|см. замеч. 1 |
| 21 | y | Y | EM(025)
|см. замеч. 1 |
| 22 | u | U | NAK(021)
|см. замеч. 1 |
| 23 | i | I | HT(009)
|см. замеч. 1 |
| 24 | o | O | SI(015)
|см. замеч. 1 |
| 25 | p | P | DLE(016)
|см. замеч. 1 |
| 26 | [ | { | ESC(027)
| -1 |
| 26 | [ | { | ESC(027)
| -1 |
| 27 | ] | } | GS(029)
| -1 |
| 28 | CR | CR | LF(010)
| -1 |
| 29 Ctrl | -1 | -1 | -1
| -1 |
| 30 | a | A | SOH(001)
|см. замеч. 1 |
| 31 | s | S | DC3(019)
|см. замеч. 1 |
| 32 | d | D | EOT(004)
|см. замеч. 1 |
| 33 | f | F | ACK(006)
|см. замеч. 1 |
| 34 | g | G | BEL(007)
|см. замеч. 1 |
| 35 | h | H | BS(008)
|см. замеч. 1 |
| 36 | j | J | LF(010)
|см. замеч. 1 |
| 37 | k | K | VT(011)
|см. замеч. 1 |
| 38 | l | L | FF(012)
|см. замеч. 1 |
| 39 | ; | : | -1
| -1 |
| 40 | ' | " | -1
| -1 |
| 41 | ` | ~ | -1
| -1 |
| 42 Shift| -1 | -1 | -1
| -1 |
| 43 | \ | | | FS(028)
| -1 |
| 44 | z | Z | SUB(026)
|см. замеч. 1 |
| 45 | x | X | CAN(024)
|см. замеч. 1 |
| 46 | c | C | ETX(003)
|см. замеч. 1 |
| 47 | v | V | SYN(022)
|см. замеч. 1 |
| 48 | b | B | STX(002)
|см. замеч. 1 |
| 49 | n | N | SO(014)
|см. замеч. 1 |
| 50 | m | M | CR(013)
|см. замеч. 1 |
| 51 | , | < | -1
| -1 |
| 52 | . | > | -1
| -1 |
| 53 | / | ? | -1
| -1 |
| 54 Shift| -1 | -1 | -1
| -1 |
| 55 | * | (см. замеч. 2) |(см.замеч. 1
) | -1 |
| 56 Alt | -1 | -1 | -1
| -1 |
| 57 | SP | SP | SP
| SP |
|58CapsLoc| -1 | -1 | -1
| -1 |
| 59 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
============================================================
=================
- 9 -
Прод
олжение таблицы
============================================================
=================
| номер | основной | верхний | CTRL
| ALT |
| клавиши | случай | регистр |
| |
|---------|------------------|-----------------|------------
--|-------------|
| 60 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 61 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 62 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 63 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 64 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 65 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 66 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 67 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
| 68 | NUL(см.замеч.1) | NUL(см.замеч.1) | NUL(замеч.1
) | NUL(замеч.1)|
|69NumLock| -1 | -1 | Pause(зам.2
) | -1 |
|70ScrLock| -1 | -1 | Break(зам.2
) | -1 |
|-----------------------------------------------------------
----------------|
| Замечания:
|
| 1. См. "расширенные коды" в данном разделе
|
| 2. См. "специальную обработку" в данном разделе
|
============================================================
=================
Клавиши с 71 по 83 имеют специальное значение тольк
о в основном слу-
чае, в состояниях NumLock(или Shift) или в состоянии CTRL.
Следует отметить,
что ключ Shift временно переворачивает текущее состояние Num
Lock.
============================================================
=================
| номер | Num | основной | ALT |
CTRL |
| клавиши | Lock | случай | |
|
|---------|------|------------------|-------------|---------
----------------|
| 71 | 7 | Home(замеч.1) | -1 | очистка
экрана |
| 72 | 8 | стр_вверх(зам.1) | -1 | -1
|
| 73 | 9 | PgUp(замеч.1) | -1 | верх те
кста и исходное |
| 74 | - | ---------------- | -1 | -1
|
| 75 | 4 | стр_влево(зам.1) | -1 | возврати
ть слово(зам.1) |
| 76 | 5 | -1 | -1 | -1
|
| 77 | 6 | стр_вправо(зам.1)| -1 | продвину
ть слово(зам.1) |
| 78 | + | + | -1 | -1
|
| 79 | 1 | End(замеч.1) | -1 | удалить_
строку(замеч. 1)|
| 80 | 2 | стр_вниз(зам.1) | -1 | -1
|
| 81 | 3 | PgDn(замеч.1) | -1 |удал_до_к
онца_экр(зам. 1)|
| 82 | 0 | Ins | -1 | -1
|
| 83 | . | Del(замеч.1 и 2) | см. замеч.2 | см. зам
ечание 2 |
|-----------------------------------------------------------
----------------|
| Замечания:
|
| 1. См. "расширенные коды" в данном разделе
|
| 2. См. "специальную обработку" в данном разделе
|
============================================================
=================
7РАСШИРЕННЫЕ КОДЫ9
7Расширенные функции9
Для некоторых функций, которые не могут быть предст
авлены стандартным
ASCII кодом используется расширенный код. В регистре AL возв
ращается код симво-
ла 000(Nul). Это указывает, что система или прикладная прогр
амма должна прове-
рить второй код, который будет указывать действительную функ
цию. Обычно, но не
всегда, Этот второй код является кодом сканирования первично
го ключа, который
был нажат. Этот код возвращается в регистре AH.
.
- 10 -
РАСШИРЕННЫЕ ФУНКЦИИ КЛАВИАТУРЫ
============================================================
=================
| вторичный код | функция
|
|---------------|-------------------------------------------
----------------|
| 3 | символ NUL
|
| 15 | <-----
|
| 16-25 | ALt Q,W,E,R,T,Y,U,I,O,P
|
| 30-38 | ALt A,S,D,F,G,H,J,K,L
|
| 44-50 | ALt Z,X,C,V,B,N,M
|
| 59-68 | основной регистр клавиш F1-F10
|
| 71 | Home
|
| 72 | стрелка вверх
|
| 73 | страницу назад и курсор в исходное положен
ие |
| 75 | <-----
|
| 77 | ----->
|
| 79 | End
|
| 80 | стрелка вниз
|
| 81 | страницу вперед и курсор в исходное положе
ние |
| 82 | Ins
|
| 83 | Del
|
| 84-93 | F11-F20(верхний регистр F1-F10)
|
| 94-103 | F11-F20(CTRL-F1-F10)
|
| 104-113 | F21-F30(ALT-F1-F10)
|
| 114 | CTRL-PrtSc(Начало/конец эха на принтер)
|
| 115 | CTRL-<-----(возвратить слово)
|
| 116 | CTRL------>(продвинуть слово)
|
| 117 | CTRL-END(удалить до конца строки (EOL))
|
| 118 | CTRL-PgDn(удалить до конца экрана (EOS))
|
| 119 | CTRL-HOME(очистить экран и установить в на
чало) |
| 120-131 | ALt 1,2,3,4,5,6,7,8,9,0,-,=(клавиши 2-13)
|
| 132 | CTRL-PgUp(вверх 25 строк текста и курсор в
начало) |
============================================================
=================
7Измененные состояния9
Большинство измененных состояний обрабатываются в
программе клавиату-
ры, передаваясь в систему или прикладную программу. В любом
случае текущий на-
бор активных измененных состояний доступен при вызове входно
й точки клаввиатур-
ной программы ПЗУ. К изменению состояний приводят следующие
клавиши:
SHIFT
Эта клавиша временно переводит на верхний регис
тр клавиши 2-13,
15-27, 30-41, 43-53, 55 и 59-68(основной случай в состояни
и CapsLock). Кроме
того, клавиша Shift временно переворачивает состояние NumLoc
k/не NumLock кла-
виш 71-73, 75, 77 и 79-83.
CTRL
Эта клавиша временно переводит в управляющее состоя
ние ключи 3, 7,
12, 14, 16-28, 30-38, 43-50, 55, 59-71, 73, 75, 77, 79 и 81
. Кроме того, ключ
Ctrl используется совместно с ключами Alt и Del для обращени
я к функции сброса
системы, с ключом ScrollLock для получения функции разрыва
и с ключом NumLock
для обращения к функции паузы. Системный сброс, разрыв и
пауза описываются
впоследствии в разделе "специальная обработка".
ALT
Этот ключ временно переводит клавиши 2-13, 16-25, 3
038, 44-50 и 59-60
в дополнительное состояние. Кроме того, клавиша Alt использу
ется совместно с
Ctrl и Del для обращения к функции сброса системы, описанно
й в разделе "специ-
альная обработка" на следующих страницах.
Клавиша Alt имеет и другое использование. Эта клави
ша позволяет поль-
зователю ввести любой код символа от 0 до 255 в систему с кл
авиатуры. Пользова-
тель, удерживая клавишу Alt в нажатом состоянии, набирает де
сятичное значение
- 11 -
символьного кода, используя цифровую клавиатуру(клавиши 71-
73, 75-77, 79-82).
После этого следует отпустить клавишу Alt. Если набрано боле
е 3 цифр, строится
результат по модулю 256. Эти три цифры интерпретируются как
код символа и пере-
даются через клавиатурную программу в прикладную программу и
ли систему. Alt об-
рабатывается внутренними стредствами программы клавиатуры.
CAPS LOCK
Эта клавиша переводит на верхний регистр клавиши 16
-25,30-38 и 44-50.
Повторное нажатие клавиши Caps Lock возвращает регистр в ис
ходное состояние.
Данная клавиша обрабатывается внутри программы клавиатуры.
SCROLL LOCK
Эта клавиша интерпретируется соответствующими прикл
адными программами,
как указывающая использование клавиш управления курсором дл
я изменения окна
текста, а не для обычного передвижения курсора. Повторное на
жатие клавиши восс-
танавливает действие клавиш управления курсором. Программа
клавиатуры просто
записывает текущий регистр клавиши Scroll Lock. Данная функц
ия будет выполнять-
ся, только если системные или прикладные программы ее поддер
живают.
ПРИОРИТЕТЫ И КОМБИНАЦИИ РЕГИСТРОВЫХ КЛАВИШ
Если нажимаются комбинации клавиш Shift, Alt и Ctrl
и только одна из
них верна, то используется следующий порядок следования: спе
рва - Alt, потом -
Ctrl, а потом Shift. Единственной допустимой комбинацией эти
х клавиш является
Ctrl и Alt, которая используется для функции системного сбро
са.
7СПЕЦИАЛЬНАЯ ОБРАБОТКА9
7Системный сброс9
Комбинация клавиш Ctrl, Alt и Del приводит к тому
, что клавиатурная
программа инициализирует эквивалент системного сброса или пе
резагрузки. Систем-
ный сброс обрабатывается внутри клавиатурной программы.
7Разрыв9
Комбинация клавиш Ctrl и Break приводит к тому, что
клавиатурная прог-
рамма вырабатывает прерывание 1AH. Кроме того, возвращается
расширенный символ
(AL=00H, AH=00).
7Пауза9
Комбинация клавиш Ctrl и Num Lock приведет к тому
, что клавиатурная
программа зациклится, ожидая нажатия любой клавиши, за исклю
чением Num Lock.
Это обеспечивает для системных или прикладных программ мето
д временного подав-
ления печати, вывода на экран и т.п. Пауза отрабатывается вн
утри клавиатурной
программы.
7Печать экрана9
Комбинация клавиш Shift и PrtSc(клавиша 55) привод
ит к прерыванию на
программу печати экрана. Эта программа работает в алфавитно-
цифровом или графи-
ческом режиме, печатая нераспознаваемые символы, как пустое
место.
7ДРУГИЕ ХАРАКТЕРИСТИКИ9
Программа клавиатуры выполняет свою собственную
буферизацию. Буфер
клавиатуры достаточно велик, для поддержки быстрой печати. О
днако, если вводит-
ся клавиша, когда буфер полон, то она игнорируется и выраб
атывается звуковой
сигнал.
- 12 -
Кроме того, программа клавиатуры подавляет отображ
ение при нажатии
следующих клавиш: Ctrl, Shift, Alt, Num Lock, Scroll Lock, C
aps Lock и Ins.
7ИСПОЛЬЗОВАНИЕ КЛАВИАТУРЫ9
В данном разделе приведен набор правил по использов
анию клавиш при вы-
полнении широко применяемых функций.
============================================================
==================
| функция |клавиша(и)| коммен
тарий |
|-------------------------------|----------|----------------
-----------------|
| Курсор в исходное положение | HOME | Редакторы; текс
товый процессоры |
|-------------------------------|----------|----------------
-----------------|
| Возврат к основному меню | HOME | Прикладные прог
раммы, управля- |
| | | емые меню
|
|-------------------------------|----------|----------------
-----------------|
| Перемещение курсора вверх | стр.вверх| Экранный редакт
оры; текстовый |
| | | процессоры
|
|-------------------------------|----------|----------------
-----------------|
| Обратный переход на 25 строк | PgUp | Редакторы; текс
товые процессоры |
| и в исходное положение | |
|
|-------------------------------|----------|----------------
-----------------|
| Перемещение курсора влево | стр.влево| Текстовые прогр
аммы; ввод команд|
|-------------------------------|----------|----------------
-----------------|
| Перемещение курсора вправо |стр.вправо| Текстовые прогр
аммы; ввод команд|
|-------------------------------|----------|----------------
-----------------|
| Переход в конец текста; поме- | End | Редакторы; текс
товые процессоры |
| щение курсора в конец строки | |
|
|-------------------------------|----------|----------------
-----------------|
| Перемещение курсора вниз | стр.вниз | Экранные редакт
оры; текстовые |
| | | процессоры
|
|-------------------------------|----------|----------------
-----------------|
| Прямой переход на 25 строк и | PgDn | Редакторы; текс
товые процессоры |
| курсор в исходное положение | |
|
|-------------------------------|----------|----------------
-----------------|
| Начало/конец вставки текста | Ins | Ввод текста, ко
манд |
| под курсором, сдвиг текста в | |
|
| буфере вправо | |
|
|-------------------------------|----------|----------------
-----------------|
| Удаление символа под курсором | Del | Ввод текста, ко
манд |
|-------------------------------|----------|----------------
-----------------|
| Шаг назад с уничтожением | <-- | Ввод текста, ко
манд |
|-------------------------------|----------|----------------
-----------------|
| Табуляция вперед | |---> | Ввод текста
|
|-------------------------------|----------|----------------
-----------------|
| Табуляция назад | <---| | Ввод текста
|
|-------------------------------|----------|----------------
-----------------|
| Очистка экрана и перевод кур- | Ctrl-Home| Ввод команд
|
| сора в исходное положение | |
|
|-------------------------------|----------|----------------
-----------------|
| Прокрутка вверх | стр.вверх| В режиме Scroll
Lock |
|-------------------------------|----------|----------------
-----------------|
| Прокрутка вниз | стр.вниз | В режиме Scroll
Lock |
|-------------------------------|----------|----------------
-----------------|
| Прокрутка влево | стр.влево| В режиме Scroll
Lock |
|-------------------------------|----------|----------------
-----------------|
| Прокрутка вправо |стр.вправо| В режиме Scroll
Lock |
|-------------------------------|----------|----------------
-----------------|
| Удаление от курсора до конца | Ctrl-End | Ввод текста, ко
манд |
| строки | |
|
|-------------------------------|----------|----------------
-----------------|
| Выход/Эскейп | Esc | Редакторы:меню
1 уровня и т.п. |
|-------------------------------|----------|----------------
-----------------|
| Начало/останов вывода экрана |Ctrl-PrtSc| в любой момент
|
| на принтер | |
|
============================================================
==================
- 13 -
============================================================
==================
| функция |клавиша(и)| коммен
тарий |
|-------------------------------|----------|----------------
-----------------|
| Удаление от курсора до конца | Ctrl-PgDn| Ввод текста, ко
манды |
| экрана | |
|
|-------------------------------|----------|----------------
-----------------|
| Слово вперед | Ctrl---> | Ввод текста
|
|-------------------------------|----------|----------------
-----------------|
| Слово назад | Ctrl<--- | Ввод текста
|
|-------------------------------|----------|----------------
-----------------|
| Окно вправо | Ctrl---> | Когда текст вых
одит за пределы |
| | | экрана
|
|-------------------------------|----------|----------------
-----------------|
| Окно влево | Ctrl<--- | Когда текст вых
одит за пределы |
| | | экрана
|
|-------------------------------|----------|----------------
-----------------|
| Переход в режим вставки | Ins | Редактор строки
|
|-------------------------------|----------|----------------
-----------------|
| Выход из режима вставки | Ins | Редактор строки
|
|-------------------------------|----------|----------------
-----------------|
| Отмена текущей строки | Esc | Ввод команд, те
кста |
|-------------------------------|----------|----------------
-----------------|
| Подавление системы(пауза) | Ctrl | Останов програм
мы, останов лис- | | Num Lock
| |
| | | тинга. Продолже
ние по любой кла-|
| | | више
|
|-------------------------------|----------|----------------
-----------------|
| Прерывание разрыва |Ctrl-Break| Прерывание теку
щего процесса |
|-------------------------------|----------|----------------
-----------------|
| Сброс системы | Ctrl-Alt-| Перезагрузка
|
| | Del |
|
|-------------------------------|----------|----------------
-----------------|
| В начало документа и курсор | Ctrl-PgUp| Редакторы; текс
товые процессоры |
| в исходное положение | |
|
|-------------------------------|----------|----------------
-----------------|
| Стандартные функциональные | F1-F10 | Первичные функц
иональные клавиши|
| клавиши | |
|
|-------------------------------|----------|----------------
-----------------|
| Вторичные функциональные |Shift, | Дополнительные
функциональные |
| клавиши |Ctrl, | клавиши, если н
едостаточно 10 |
| |Alt F1-F10|
|
|-------------------------------|----------|----------------
-----------------|
| Внешние функциональные клавиши|Alt+клави-| Используются, е
сли набираются в |
| |ши 2-13 | верхнем ряду кл
авиатуры |
|-------------------------------|----------|----------------
-----------------|
| Внешние функциональные клавиши|Alt+A-Z | Используются дл
я укказания функ-|
| | | ции, которая на
чинается с того |
| | | же символа
|
============================================================
==================
.
- 14 -
СПЕЦИАЛЬНЫЕ ФУНКЦИИ ЭКРАННОГО РЕДАКТОРА БЕЙСИК
============================================================
==================
| функция | клав
иша |
|-----------------------------------------------|-----------
-----------------|
| Возврат каретки | Enter
|
| Перевод строки | Ctrl-Enter
|
| Звонок | Ctrl-G
|
| В исходное положение | Home
|
| Курсор вверх | стрелка вв
ерх |
| Курсор вниз | стрелка вн
из |
| Курсор влево | стрелка вл
ево |
| Курсор вправо | стрелка вп
раво |
| На слово вперед | Ctrl - ---
-> |
| На слово назад | Ctrl - <--
-- |
| Вставка | Ins
|
| Удаление | Del
|
| Очистка экрана | Ctrl-Home
|
| Останов вывода | Ctrl-Num L
ock |
| Табуляция вперед | |---->
|
| Прекращение обработки | Ctrl-Break
|
| Удаление текущей строки | Esc
|
| Удаление до конца строки | Ctrl-End
|
| Установка курсора в конец строки | End
|
============================================================
==================
СПЕЦИАЛЬНЫЕ ФУНКЦИИ DOS
============================================================
==================
| функция | клав
иша |
|-----------------------------------------------|-----------
-----------------|
| Пауза | Ctrl-Num L
ock |
| Эхо на принтер | Ctrl-Prt S
c |
| Останов эха на принтер | Ctrl-Prt S
c |
| Прекращение текущей функции | Ctrl-Break
|
| Шаг назад | <--
|
| Перевод строки | Ctrl-Enter
|
| Отмена строки | Esc
|
| Копирование символа | F1 или ---
-> |
| Копирование до конца | F2
|
| Копирование оставшегося | F3
|
| Удаление символа | Del
|
| Удаление до конца | F4
|
| Вход в режим вставки | Ins
|
| Выход из режима вставки | Ins
|
| Сделать новую строку по шаблону | F5
|
| Ограничитель строки при замещении | F6
|
| Конец файла при вводе с клавиатуры | F6
|
============================================================
==================
7ЛОГИКА КАССЕТНОГО МАГНИТОФОНА BIOS9
7Программные алгоритмы - прерывание 15H9
Кассетная программа будет вызвана по типу запроса
в регистре AH. Ад-
рес байтов, которые должны быть прочитаны с или записаны на
ленту будет опреде-
ляться как ES:BX, а число байт, которые должны быть прочита
ны или записаны бу-
дет определяться в регистре CX. Действительное число прочит
анных байт будет
возвращаться в DX. Чтение блока или запись блока будет авто
матически включать
двигатель магнитофона при начале и выключать в конце операци
и. Ниже приведены
типы запросов в AH и описания состояния магнитофона.
.
- 15 -
============================================================
==================
| тип запроса | функция
|
|-------------|---------------------------------------------
-----------------|
| AH=0 | Включить двигатель магнитофона
|
|-------------|---------------------------------------------
-----------------|
| AH=1 | Выключить двигатель магнитофона
|
|-------------|---------------------------------------------
-----------------|
| AH=2 | Читать блок с ленты:
|
| | - чтение CX байт в память, начиная с адре
са ES:BX |
| | - возврат действительного числа байт в DX
|
| | - возврат состояния магнитофона в AX
|
|-------------|---------------------------------------------
-----------------|
| AH=3 | Записать блок на ленту
|
| | - запись CX байт на кассету, начиная с ад
реса ES:BX |
| | - возврат состояния магнитофона в AX
|
------------------------------------------------------------
------------------
------------------------------------------------------------
------------------
| состояние | описание
|
| магнитофона |
|
|-------------|---------------------------------------------
-----------------|
| AH=00 | Нет ошибок
|
| AH=01 | Ошибка циклической контрольной суммы(CRC) в
считанном блоке |
| AH=02 | Отсутствует передача данных
|
| AH=04 | Нет заголовка
|
| AH=80 | Неверная команда
|
|-----------------------------------------------------------
-----------------|
| Замечание: При любой ошибке будет установлен флаг переноса
|
============================================================
==================
7Запись на кассету9
Программа поблочной записи помещает ленточный бло
к на кассету. Впос-
ледствии, в разделе "Архитектура записи данных", описана стр
уктура ленточного
блока.
Программа поблочной записи включает двигатель кассе
тного магнитофона
и бит синхронизации(0), а затем записывает на ленту заголово
к(256 байт все еди-
ницы). Далее, программа записывает число блоков данных, опре
деленное в CX. Пос-
ле каждого блока данных размером 256 байт записывается 2-б
айтная циклическая
контрольная сумма(CRC). Байты данных берутся из памяти по ад
ресу, указанному в
ES.
Программа поблочной записи раз'единяет байт и запи
сывает его побитно
на кассету. Используется метод установки таймера 2 во время
желаемого бита дан-
ных. Таймер устанавливается на период 1.0 мсек для единичног
о бита и на период
0.5 мсек для нулевого бита.
Таймер устанавливается в режим 3, который означает
что таймер выводит
прямоугольный импульс с периодом, заданным его регистром сч
етчика. Период тай-
мера изменяется по прохождении каждого бита данных, записанн
ого на кассету. Ес-
ли число байтов данных, которые должны быть записаны, не кр
атно 256, то после
конечного байта данных из памяти блок данных расширяется до
256 байт путем мно-
гократного повторения последнего значащего байта.Последни
й блок завершается
двумя контрольными байтами, как обычно. После конечного блок
а данных помещает-
ся запись, состоящая из четырех байтов, полностью единичных
. В завершение вык-
лючается двигатель магнитофона, если программа не сообщила о
б ошибке.
.
- 16 -
НУЛЕВОЙ БИТ
__________
| | |
| 250 мксек| |
|<-------->| |
| |__________|
500 мксек
|<------------------->|
ЕДИНИЧНЫЙ БИТ
____________________
| | |
| 500 мксек | |
|<------------------>| |
| |____________________|
1000 мксек
|<--------------------------------------->|
7Чтение с кассеты9
Программа поблочного чтения включает двигатель касс
етного магнитофона
и делает задержку приблизительно на 0.5 сек для достижения д
вигателем номиналь-
ной скорости.
После этого программа поблочного чтения ищет заголо
вок и должна опре-
делить все единицы приблизительно на 1/4 длины заголовка,
прежде чем она смо-
жет вести поиск бита синхронизации(нулевой бит). После обнар
ужения бита синхро-
низации читается байт синхронизации(код ASCII 16H). Если
байт синхронизации
прочитан правильно, то может быть прочитана порция данных. Е
сли же правильный
байт синхронизации не обнаружен, то программа переходит на н
ачало и опять ищет
заголовок. Данные читаются побитно и об'единяются в байты. П
осле формирования
каждого байта он записывается в память по адресу ES:BX и BX
увеличивается на 1.
После чтения каждых 256 байт читается контрольная
сумма и сравнивает-
ся со сгенерированной контрольной суммой. Если обнаружена о
шибка контрольной
суммы, то программа завершается с установкой флага переноса
для индикации ошиб-
ки, а в регистр AH записывается 01H. DX будет содержать числ
о байт, записанных
в память.
На время операции чтения с магнитофона запрещаются
прерывания по вре-
мени дня.
7Архитектура записи данных9
Программа поблочной записи использует следующий фор
мат для записи бло-
ка данных на кассету:
------------------------------------------------------------
------------------
|заголовок| бит | байт | блок | CRC | блок |
CRC | |
| |синхронизации|синхронизации|данных| |данных|
| |
------------------------------------------------------------
------------------
^
^
|
|
включение
выключение
двигателя
двигателя
КОМПОНЕНТЫ ЗАПИСИ ДАННЫХ
============================================================
==================
| компонент | описание
|
|--------------------|--------------------------------------
-----------------|
| Заголовок | 256 байт всех единиц
|
| Бит синхронизации | один нулевой бит
|
| Байт синхронизации | символ ASCII 16H
|
| Блок данных | 256 байт длиной
|
| CRC | 2 байта для каждого блока данных
|
============================================================
==================
- 17 -
7Обработка ошибок9
Обработка ошибок осуществляется программным обеспе
чением. Для обнару-
жения ошибок используется контрольная сумма. Испол
ьзуется полином
G(X)=X&9169+X&9129+X&959+1, который совпадает с полин
омом, используемым интерфейсом уп-
равления синхронной передачей данных. Обычно, когда данные ч
итаются с кассеты
или пишутся на нее, то они передаются через программный р
егистр контрольной
суммы. После записи блока данных на ленту записывается допол
нение до получен-
ной контрольной суммы. При чтении данных с кассеты байты ко
нтрольной суммы чи-
таются с ленты и сравниваются со сгенерированной величиной к
онтрольной суммы.
Если прочитанная контрольная сумма не равна вычисленной,
то устанавливается
флаг переноса процессора и состояние 01H регистра AH, которо
е указывает, что
возникла ошибка контрольной суммы. При возникновении ошибки
CRC осуществляется
выход из программы
|