ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 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 осуществляется выход из программы |