ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 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 осуществляется
выход из программы
         


Яндекс цитирования