Рубрики: КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

про компютерное железо, документация, языки программирования

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

Графический режим 320 х 200 предоставляет пользователю 8
страниц размером по 8К. Смещение от начала страницы до байта,
содержащего пиксель с координатами (X,Y), равен 40*Y + int(X/8),
а номер соответствующего бита в этом байте равен 7 — (X % 8).
Здесь X — горизонтальная позиция точки (0 — 639), Y — ее
вертикальная позиция (0 — 199).

В графических режимах 640 х 350 имеются две страницы с
адресами A0000h и A8000h соответственно. В остальном этот режим
аналогичен предыдущим.

В качестве примера приведем три подпрограммы работы с
дисплеем EGA в режиме 640 х 200. Если Вы хотите использовать их
в других режимах, достаточно поменять значение константы
PageSize на соответствующее значение.

— 67 —

PageSize equ 4000h ; размер страницы для режима 640 х 200

;ЙННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма очистки экрана. є
;є Вход: CX = номер очищаемой страницы (0-3) є
;ИНННННННННННННННННННННННННННННННННННННННННННј

EGA_Cls proc near
push ax
push bx
push cx
push dx
push es
push di
xor ax,ax ; вычисляем смещение до страницы
mov bx,PageSize
jcxz Page_0
High_Page:
add ax,bx
loop High_Page
Page_0:
mov di,ax ; DI = адрес страницы в видеопамяти
mov ax,0A000h
mov es,ax ; ES:DI = полный адрес страницы
mov ax,0FF08h
mov dx,3CEh ; графический контроллер
out dx,ax ; установить все битовые маски
mov ax,0FF02h
mov dx,3C4h ; блок синхронизации
out dx,ax ; разрешить запись во все плоскости
mov ax,3
mov dx,3CEh ; графический контроллер
out dx,ax ; задать нормальный режим работы
mov cx,PageSize
xor al,al
rep stosb ; обнулить страницу
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret
EGA_Cls endp

;ЙННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма вывода пикселя на экран. є
;є Вход: AX = цвет пикселя є
;є BX = номер страницы є
;є CX = номер столбца (X) є
;є DX = номер строки (Y) є
;ИНННННННННННННННННННННННННННННННННННННННННННј

Put_Pixel proc near
push ax

— 68 —

push bx
push cx
push dx
push es

push ax
push cx
push dx
mov ax,dx
mov cx,80
mul cx ; AX = 80 * Y
pop dx
pop cx
push cx
shr cx,1
shr cx,1

shr cx,1 ; CX = X / 8
add ax,cx ; AX = 80 * Y + X / 8
mov cx,bx ; номер страницы
mov bx,PageSize
jcxz Page_Done
Next_Page:
add ax,bx ; учтем смещение до страницы
loop Next_Page
Page_Done:
pop cx
mov bx,ax ; BX = адрес байта, содержащего пиксель
mov ax,0A000h
mov es,ax ; ES:BX = полный адрес байта
and cl,7 ; CL = X % 7
mov ah,80h
shr ah,cl ; AH = позиция пикселя в байте
mov dx,3CEh
mov al,8
out dx,ax ; разрешить запись только в этот бит
pop ax
mov ch,al ; цвет пикселя
mov dx,3C4h
mov ax,0FF02h
out dx,ax ; разрешить запись во все плоскости
mov al,es:[bx] ; читаем байт
xor al,al
mov es:[bx],al ; обнуляем пиксель
mov al,2
mov ah,ch ; цвет
and ah,0Fh ; приведем к диапазону 0-15
out dx,ax ; разрешить запись в соотв. плоскости
mov al,es:[bx] ; читаем байт
mov al,0FFh
mov es:[bx],al ; устанавливаем пиксель
mov ax,0FF02h
out dx,ax ; разрешить запись во все плоскости
mov ax,3
mov dx,3CEh ; графический контроллер
out dx,ax ; задать нормальный режим работы

— 69 —

mov ax,0FF08h
out dx,ax ; включить все биты
pop es
pop dx
pop cx
pop bx
pop ax
ret
Put_Pixel endp

;ЙННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма чтения цвета пикселя. є
;є Вход: CX = номер столбца (X) є
;є DX = номер строки (Y) є
;є Выход:AX = цвет пикселя є
;ИНННННННННННННННННННННННННННННННННННННННННННј

Get_Pixel proc near
push ax
push bx
push cx
push dx
push es

push dx
mov ax,205h
mov dx,3CEh
out dx,ax ; режимы: записи=01, чтения=0
pop dx
push cx
push dx
mov ax,dx
mov cx,80
mul cx ; AX = 80 * Y
pop dx
pop cx
push cx
shr cx,1
shr cx,1
shr cx,1 ; CX = X / 8
add ax,cx ; AX = 80 * Y + X / 8
mov cx,bx ; номер страницы
mov bx,PageSize
jcxz My_Page
Higher_Page:
add ax,bx ; учтем смещение до страницы
loop Higher_Page
My_Page:
mov di,ax ; DI = адрес байта, содержащего пиксель
mov ax,0A000h
mov es,ax ; ES:DI = полный адрес байта
pop cx
and cl,7 ; CL = X % 7
mov ch,80h
shr ch,cl ; CH = позиция пикселя в байте

— 70 —

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

— в цикле проверять состояние принтера до устaновки бита 7
регистра состояния (здесь возможно использование таймаута);

— проверить биты 3-5 регистра состояния на наличие ошибки;

— установить и сразу же сбросить нулевой бит регистра
управления, для этого подходит следующая последовательность
команд:

mov dx,37Ah ;адрес регистра управления
mov al,00001101b ;установить биты 0,2 и 3
out dx,al ;вывести команду
xor al,1 ;сбросить бит 0
out dx,al ;повторно вывести команду

— далее можно прочитать и запрограммировать регистр
состояния и перейти к печати следуюего символа.

Несмотря на простоту управления, принтер представляет из
себя достаточно сложное устройство, имеющее свой микропроцессор,

— 110 —

ПЗУ и ОЗУ. Микропроцессор используется для обработки управляющих
последовательностей и управления печатью. ПЗУ содержит описание
рисунков символов в зависимости от их кода и выбранной таблицы и
программы на языке используемого микропроцессора. ОЗУ
используется для временного хранения введенных данных и
спроектированных пользователем символов. Ряд принтеров, помимо
интерфейса Centronix, могут поключаться и к последовательному
интерфейсу. Принтер обрабатывает ряд спецсимволов (таких, как
звонок, забой, горизонтальная и вертикальная табуляция), а также
имеет достаточно сложную систему команд для изменения режимов
работы и управления печатью.

Обычно команды начинаются с символа ESC (шестнадцатиричный
код 1Bh) и имеют длину от двух байт и более (существуют
командные последовательности, включающие по несколько килобайт
информации, например команды загрузки спроектированных
пользователем шрифтов). Спецсимволы и байты команд передаются
принтеру так же, как и обычные символы, предназначеные для
печати, описанным выше способом. Подобный способ управления
удобен для программного изменения режимов работы устройства.
Учитывая, что выпуском принтеров для ПЭВМ занимается достаточно
большое число компаний и возможности принтеров постоянно
совершенствуются, нет смысла приводить полностью какую-либо
систему команд, так как, во-первых, она в разных марках и
моделях принтеров различна, и, во-вторых, достаточно полно
описывается в документации на каждый конкретный принтер.

Существует 2 основных стандарта на систему команд и таблицу
используемых символов (стандарты IBM и EPSON), которых в
основном придерживаются фирмы-изготовители, оставляя за собой
право вносить в них изменения и дополнения. Единого стандарта
как на систему команд, так и на расположение и рисунки символов
второй половины таблицы ASCII (коды 129-255) нет. Наиболее часто
используемые команды:

— установка вида шрифта и режима печати;

— черновой текстовый (draft) нормальной ширины (pica),
узкий (condensed) или средней ширины (elita).

— качественный шрифт (NLQ, Proportional, Orator, Script и
т. д.);

-выбор таблицы символов из ПЗУ (обычно имеется несколько
таблиц, отличающихся расположением управляющих кодов, наличием и
расположением псевдографических символов или курсива);

— загрузка в ОЗУ принтера спроектированных пользователем
шрифтов и работа с ОЗУ принтера (именно в этой группе команд,
имеются наибольшие различия между разными моделями);

— управление принтером в режиме точечной графики;

— установка служебных параметров (размеры отступов,
страницы, шаг табуляции, расстояние между строками) и изменение

— 111 —

характеристик (сброс, включение/отключение датчика конца бумаги,
печать в одну или в две стороны и т. п.).

Ряд характеристик и режимов работы может выбираться как
программно, так и аппаратно с использованием кнопок и клавиш на
лицевой панели и DIP-переключателей. Существуют характеристики,
изменить которые можно только аппаратно (например, возможность
загрузки шрифтов или размер используемого ОЗУ).

— 112 —

E11.Последовательный интерфейс RS-232F

E11.1. Общие сведенияF

В сотав IBM PC могут входить до четырех последовательных
интерфейсов, работающих в стандарте RS-232 (отечественный аналог
— стык С2) и именуемых СОМ1 — СОМ4. Им выделены следующие адреса
в области портов ввода-вывода:

СОМ1: 3F8h-3FFh COM3: 338h-33Fh
COM2: 278h-2FFh COM4: 238h-23Fh

(интерфейсы СОМ3 и СОМ4 поддерживаются только в моделях PS/2).

Каждый интерфейс связан с определенным уровнем контроллера
прерываний:

СОМ1 вызывает прерывание IRQ4 (Int 0Ch)
COM2 вызывает прерывание IRQ3 (Int 0Bh)
СОМ3 и СОМ4 не имеют стандартных векторов прерываний.

Каждое из устройств RS-232 представляет собой контроллер
8250, оснащенный 25- или 9- штырьковым разъемом на задней стенке
корпуса ПЭВМ. Этот разъем может использоваться для подключения
мыши, графопостроителя или организации связи между ПЭВМ.
Контакты стыка RS-232 имеют следующие наименования

ЪДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДВДДДДДДДДї
іНазваниеі Имя цепиіНомер контактаі Назначение іНаправ- і
ісигнала ГДДДВДДДДДЕДДДДДВДДДДДДДДґ іление і
і іEIAіCCITTі9-шт.і 25-шт. і і і
ГДДДДДДДДЕДДДЕДДДДДЕДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДґ
і DCD іCF і 109 і 1 і 8 іСвязь модемов іВ ПЭВМ і
і і і і і іустановлена і і
і RX іBB і 104 і 2 і 3 іПринимаемые данные іВ ПЭВМ і
і TX іBA і 103 і 3 і 2 іПередаваемые данныеіИз ПЭВМ і
і DTR іCD і108/2і 4 і 20 іГотовность ПЭВМ к іИз ПЭВМ і
і і і і і іработе і і
і SG іAB і 102 і 5 і 7 іСигнальная земля і ДДДД і
і DSR іCC і 107 і 6 і 6 іГотовность модема кіВ ПЭВМ і
і і і і і іработе і і
і RTS іCA і 105 і 7 і 4 іЗапрос на передачу іИз ПЭВМ і
і CTS іCB і 106 і 8 і 5 іГотовность модема кіВ ПЭВМ і
і і і і і і к передачи і і
і RI іCE і 125 і 9 і 22 іИндикатор вызова іВ ПЭВМ і
і FG іAA і 101 і ДД і 1 іЗащитная земля і ДДДД і
АДДДДДДДДБДДДБДДДДДБДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДБДДДДДДДДЩ

Контроллер стыка RS-232 является полностью программируемым
устройством; вы можете задать следующие параметры обмена:
количество битов данных и стоп-битов, вид четности и скорость
обмена в бодах (бит/с).

— 113 —

E11.2. Описание портовF

Ниже описаны порты ввода-вывода для СОМ1, имеющего базовый
адрес 3F8h. Обратите внимание, что порты 3F8h и 3F9h имеют
разное назначение в зависимости от бита 7 порта 3F8h (т. н. бит
DLAB — Divisor Latch Access Bit).

Порт Операция Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
3F8h Запись Регистр передатчика — сюда засылается байт для
передачи
Чтение Регистр приемника — отсюда извлекается принятый
байт
Запись Если DLAB=1, то сюда засылается младший байт
скорости обмена (см. порт 3F9h)

3F9h Запись Если DLAB=1, то сюда засылается старший байт
скорости обмена. Скорость задается значением
делителя, равным 115200/V, где V — скорость
в бодах. Например, для скорости 9600 бод
делитель равен 115200/9600=12=0Ch, поэтому
нужно вывести 0Ch в порт 3F8h и 0 в порт 3F9h.
Запись Регистр управления прерываниями (1 = разрешить
прерывание):

7 6 5 4 3 2 1 0
ЪДДВДДВДДВДДВДДВДДВДДВДДї
і0 і0 і0 і 0і і і і і Бит:
АДДБДДБДДБДДБВДБВДБВДБВДЩ ДДДД
і і і АД> 0: прерывание по приему символа
і і АДДДД> 1: прерывание по завершению передачи
і і символа
і АДДДДДДД> 2: прерывание по обрыву линии или
і или ошибке в линии
АДДДДДДДДДД> 3: прерывание по изменению состояния
модема (любой из линий CTS, DSR, RI
и DCD)

3FAh Чтение Регистр идентификации прерывания. Когда
произошло прерывание, здесь содержится причина,
вызвавшая его:

7 6 5 4 3 2 1 0

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і 1 і 0 і 0 і 0 і 0 і 0 і 0 і 0 і 1 і
АДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДЩ

Если ведомый контроллер работает на уровне 4, то его ICW3 будет
таким:

— 28 —

A0 7 6 5 4 3 2 1 0
ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і 1 і 0 і 0 і 0 і 0 і 0 і 1 і 0 і 0 і
АДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДЩ

Последнее слово инициализации (ICW4) имеет следующий
формат:

A0 7 6 5 4 3 2 1 0
ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і 1 і 0 і 0 і 0 іSFNMі BUFі M/SіAEOIі mPMі
АДДДДБДДДДБДДДДБДДДДБДВДДБДВДДБДВДДБДВДДБДВДДЩ
і і і і і
і і і і АДДД> 1=8088/8086
і і і і 0=8080/8085
і і і АДДДДДДДД> 1=AEOI
і і і 0=EOI
і і АДДДДДДДДДДДДД> 1=ведущий
і і 0=ведомый
і і (только при BUF=1)
і АДДДДДДДДДДДДДДДДДД> 1=режим
і буферизации
АДДДДДДДДДДДДДДДДДДДДДДД> 1=специальный
вложенный режим

Бит 0 (mPM) определяет, с каким микропроцессором работает
ПКП (0 — 8080/8085, 1 — 8086/8088).

Бит 1 (AEOI), равный 1, задает режим автоматического
завершения обработки прерывания, описанный выше. Если этот бит
равен 0, действует обычное соглашение: процедура обработки
аппаратного прерывания должна сама сбрасывать свой бит в ISR.

Бит 2 (M/S) игнорируется, если бит 3 (BUF) = 0. При наличии
одного контроллера и BUF = 1 устанавливается в 1. При наличии
каскада должен быть равен 1 только для ведущего контроллера.

Бит 4 (SFNM) устанавливает специальный вложенный режим,
применяемый при каскадировании для определения приоритетов
запросов от разных контроллеров (Special Fully Nested Mode).

После инициализации ПКП готов к работе в заданном режиме.
Для изменения режимов работы, задаваемых при инициализации
требуется переинициализировать его заново.

В процессе работы с ПКП Вы можете без переинициализации:

— маскировать и размаскировать аппаратные прерывания;
— изменять приоритеты уровней;
— издавать команду завершения обработки аппаратного пре-
рывания;
— устанавливать/сбрасывать режим специальной маски;
— переводить контроллер в режим опроса и считывать
состояние регистров ISR и IRR; для этого Вам потребуется вывести
в порты ПКП одно из трех слов рабочих приказов OCW1 — OCW3.

— 29 —

Формат первого слова рабочих приказов OCW1:

A0 7 6 5 4 3 2 1 0
ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і 1 і M7 і M6 і M5 і M4 і M3 і M2 і M1 і M0 і
АДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДЩ

Единичное значение одного из битов М0 — М7 означает, что
прерывания соответствующего уровня (IR0 — IR7) маскируются и не
будут обрабатываться контроллером.

Второе слово рабочих приказов (OCW2) предназначено для
вывода команды завершения обработки аппаратного прерывания
(EOI), циклического сдвига и явного изменения приоритетов
уровней. Назначение битов OCW2 следующее:

A0 7 6 5 4 3 2 1 0
ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і 0 і R і SL і EOIі 0 і 0 і L2 і L1 і L0 і
АДДДДБДВДДБДВДДБДВДДБДДДДБДДДДБДВДДБДВДДБДВДДЩ
і і і і і АДД> Эти 3 бита опреде-
і і і і АДДДДДДД> ляют номер уровня
і і і АДДДДДДДДДДДД> прервания, если он
і і і требуется в команде.
і і і

і і і
і і АДДДДДДДДДДДДДДДДДДДДДДДДДДД> 1-команда завер-
v v шения обработки
ЪДДДДВДДДДї аппаратного
і 0 і 0 і Используется вместе с EOI=1 прерывания
ГДДДДЕДДДДґ
і 0 і 1 і Специфицированный EOI (сбрасывает бит, определя-
ГДДДДЕДДДДґ емый полями L0 — L2 в ISR)
і 1 і 0 і Циклический сдвиг приоритетов влево на одну
ГДДДДЕДДДДґ позицию
і 1 і 1 і Назначение низшего приоритета уровню, определяе-
АДДДДБДДДДЩ мому полями L0 — L2

Как уже говорилось, процедура обработки аппаратного
прерывания должна перед своим завершением очистить свой бит в
ISR выводом команды завершения обработки прерывания (End Of
Interrupt, EOI). Существует два варианта команды EOI: обычный и
специфицированный EOI. Обычный EOI очищает бит в ISR, соот-
ветствующий прерыванию с максимальным приоритетом. Специфи-
цированный EOI (R=0, SL=1, EOI=1, L0 — L2 равно номеру уровня
прерывания) очищает в ISR бит, соответствующий прерыванию с
номером, указанным в L0 — L2 независимо от его приоритета.
Команды с битом R=1 позволяют изменить приоритеты уровней.
Циклический сдвиг приоритетов сдвигает приоритеты влево на
единицу, при этом, если после обычного распределения
приоритетов, издать команду циклического сдвига, уровень 0
получит низший приоритет, уровень 1 — наивысший, уровень 2 —
следующий за ним и т.д. Команда явного назначения низшего
приоритета одному из уровней изменяет приоритеты остальных
уровней циклически. Таким образом, если Вы зададите низший

— 30 —

приоритет уровню 5, то уровень 6 получит наивысший.

Третье слово рабочих приказов OCW3 позволяет установить и
отменить режим специальной маски, перевести контроллер в режим
опроса и прочитать содержимое IRR и ISR. Назначение битов OCW3
приведено на рисунке

A0 7 6 5 4 3 2 1 0
ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і 0 і 0 іESMMі SMMі 0 і 1 і P і RR і RISі
АДДДДБДДДДБДВДДБДВДДБДДДДБДДДДБДВДДБДДВДБДВДДЩ
ЪДДДДДДДДДЩ і і і і
і ЪДДДДДДДДДДЩ АДВДДДЕДДДЕДД> 1-режим опроса
v v v v v
ЪДДДВДДДї ЪДДДВДДДВДДДї
і 1 і 0 і-Отменить режим і 0 і 1 і 0 і Чтение IRR
ГДДДЕДДДґ специальной маски ГДДДЕДДДЕДДДґ
і 1 і 1 і-Установить режим і 0 і 1 і 1 і Чтение ISR
АДДДБДДДЩ специальной маски АДДДБДДДБДДДЩ

Единичное значение бита Р (бит опроса, Polling Bit)
переводит контроллер в режим опроса. Если после этого считать
данные из порта с четным адресом, в регистр AL загрузится байт
следующего содержания:

7 6 5 4 3 2 1 0
ЪДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї
і I і 0 і 0 і 0 і 0 і L2 і L1 і L0 і
АДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДЩ

Если I = 1, значит имеются запросы на прерывания и тогда L0
— L2 — это номер уровня с наивысшим приоритетом, по которому
имеется запрос на прерывание.

Если P=0, Вы можете считать информацию из ISR или IRR. Для
этого необходимо издать команду чтения ISR или IRR (см. рисунок
выше) и затем считать значение из порта с нечетным адресом.

Единичное значение бита ESMM позволяет в зависимости от
значения бита SMM установить или отменить режим специальной
маски.

— 31 —

E4. Таймер и генерация звукаF

E4.1. Программируемый таймер 8253F

Для задания временных интервалов и формирования сигналов с
различными временными параметрами в IBM PC/XT применяется
программируемый таймер 8253 (отечественный аналог КР580ВН53), в
AT — 8254. С точки зрения программиста они идентичны. В состав
таймера входят: буфер шины данных, схема управления
вводом-выводом и три независимых канала, каждый из которых
содержит регистр режима, схему управления каналом, буфер и
16-разрядный счетчик.

Программирование канала осуществляется путем вывода
управляющих слов в регистр режима каналов и начального значения
в его счетчики. Каждый канал имеет управляющий вход GATE и выход
OUT и может работать в одном из следующих шести режимов.

-Режим 0- (прерывание терминального счета). После записи
управляющего слова в регистр режима канала на выходе ОUT
устанавливается напряжение низкого уровня; загрузка счетчика не

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

mov bl,7
sub bl,cl
mov cl,bl ; CL = номер бита в байте
xor bl,bl ; накопитель цвета
mov ah,3 ; счетчик битовых плоскостей
mov al,4 ; R4 = регистр выбора плоскости
mov dx,3CEh ; графический контроллер
Read_Plane:
out dx,ax ; выбираем плоскость AH
mov bh,es:[di] ; читать байт
and bh,ch ; выбрать бит
shr bh,cl ; сдвинуть цвет в бит 0
shl bl,1 ; сдвинуть выбранные цвета
or bl,bh ; и добавить считанный
dec ah ; следующая плоскость
jge Read_Plane ; повторить для всех плоскостей
mov al,bl
xor ah,ah ; AX = цвет пикселя
pop es
pop dx
pop cx
pop bx
pop ax
ret
Get_Pixel endp

— 71 —

E7.7. Графический видеомассив VGAF

Адаптер VGA (Video Graphics Array) представляет собой даль-
нейшее развитие EGA. В основном он полностью совместим с
адаптером EGA, поэтому мы приведем только его основные отличия.

1. Если EGA-дисплеи имеют цифровой вход, то VGA — это
дисплей с аналоговым входом. Поэтому при формировании цвета
пикселя из битовых плоскостей цвет слагается из трех основных
цветов (красного, зеленого и синего), интенсивность каждого из
которых может плавно варьироваться от нуля до максимального
значения.

2. VGA имеет большее разрешение, чем EGA, и предоставляет
пользователю три дополнительных режима:

640 x 480, 2 цвета
640 x 480, 16 цветов
320 x 200, 256 цветов

В режимах 640 х 480 имеется одна графическая страница
размером 153600 байт. В режиме 320 х 200 с 256 цветами
используется несколько иной метод формирования цвета пикселя,
чем в других режимах; за счет этого видеопамять разбивается на 4
страницы размером по 16К. Этот режим возможен только на
аналоговых дисплеях или дисплеях с переменной частотой.

3. Частота генератора пикселей VGA принимает значения 25
или 28 Мгц (в отличие от 14 и 16 Мгц у EGA).

4. VGA имеет дополнительный порт ввода 3CCh, позволяющий
считать содержимое многоцелевого регистра (см. описание порта
3C2h в п. 7.6). Графические позиции 3CAh и 3CCh, имеющиеся в
EGA, у VGA отсутствуют.

— 72 —

E8. Контроллер накопителей на гибких дискахF

E8.1. Основные сведения о контроллереF

Управление гибкими дисками в PC-подобных ПЭВМ
осуществляется микросхемой 8272А фирмы Intel, выполняющей
функции контроллера гибких дисков (Floppy Disk Controller, FDC).
Информация на дискете хранится на дорожках, дорожки разбиты на
сектора. В зависимости от типа дисковода число дорожек на одной
стороне дискеты может быть равно 40 или 80, число секторов на
дорожке колеблется от 8 до 26. Кроме того существуют дисководы,
имеющие одну головку чтения/записи (при этом вторая сторона
дискеты не используется). Контроллер управляет дисководами для
дискет диаметром 8, 5.25 и 3.5 дюйма, поддерживает запись на
дискету методами ЧМ и МЧМ, программируемую длину секторов (128,
256, 512 или 1024 байта), мультисекторные и мультидорожечные
операции обмена с дисками, операции поиска. Одновременно к
одному контроллеру может быть подключено до четырех дисководов
любого из поддерживаемых типов. Обмен с диском может
осуществляться как с использованием ПДП, так и без него. В
последнем случае используются 2 метода: опрос состояния
контроллера через регистры или использование аппаратных
прерывания контроллера. FDC генерирует аппаратные прерывания
уровня 6 (IRQ6), связанные с вектором прерываний 0Eh. Управление
контроллером и накопителями осуществляется через 3 порта

ввода-вывода.

— 73 —

E8.2. Порты контроллера накопителей на гибких дискахF

Материалы данного и следующего разделов полностью описывают
возможности контроллера 8272А, система команд которого является
базовой для всех более поздних моделей. Дополнительные
возможности контроллера 82072 не описаны, т. к. этот контроллер
полностью поддерживает описываемую систему команд, а его
неописанные функции практически не используются в стандартных
средствах.

Назначение портов ввода-вывода контроллера гибких дисков
приведено в таблице.

ЪДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Порт і Режим і Назначение і
ГДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і і і
і 3F2h і запись і Передача команд по управлению режимом работыі
і і і контроллера и накопителей і
і і і і
і 3F4h і чтение і Чтение регистра состояния контроллера і
і і і і
і 3F5h і запись і Передача команд по управлению накопителями і
і і і і
і 3F5h і чтение і Чтение данных с диска в режиме работы і
і і і без ПДП і
і і і і
і 3F5h і запись і Запись данных на диск в режиме работы і
і і і без ПДП і
і і і і
і 3F5h і чтение і Чтение результатов выполнения команды во і
і і і всех режимах і
АДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Порт 3F2h.

7 6 5 4 3 2 1 0
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
і і і і і Биты:
АДВДБДВДБДВДБДВДБДВДБДВДБДВДБДВДЩ ДДДДД
і і і і і і АДДДБД> 0-1: выбор накопителя:
і і і і і і 00-первый
і і і і і і 01-второй
і і і і і і 10-третий
і і і і і і 11-четвертый
і і і і і АДДДДДДДДД> 2: 0=сброс контроллера,
і і і і і 1=разблокировать контроллер
і і і і АДДДДДДДДДДДДД> 3: 1=разрешить работу с ПДП и
і і і і прерывания контроллера
АДДДБДДДБДДДБДДДДДДДДДДДДДДДДД> 4-7: включить мотор:
0001 — первый накопитель
0010 — второй
0100 — третий
1000 — четвертый

— 74 —

На АТ-подобных ПЭВМ обычно допускается не 4, а только 2
накопителя, вследствии чего комбинации, использующие третий и
четвертый накопители, игнорируются. Бит 2, равный 0, прекращает
выполнение текущей команды в момент вывода в порт. Если команда
не завершилась, ее выполнение прерывается. Если не были считаны
результаты выполнения команды, они пропадают. Если не закончился
ввод команды, он пропадает и должен быть начат заново. В любом
случае продолжение работы возможно только после установки этого
бита обратно в 1.

Порт 3F4h.
Через этот порт осуществляется чтение регистра основного
состояния FDC.

7 6 5 4 3 2 1 0
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
і і і і і і і і і Биты:
АДВДБДВДБДВДБДВДБДВДБДВДБДВДБДВДЩ ДДДДД
і і і і АДДДБДДДБДДДБД> 0-3: накопитель занят в режиме
і і і і поиска:
і і і і 0001-первый, 0010-второй
і і і і 0100-третий, 1000-четвертый
і і і АДДДДДДДДДДДДДДДДД> 4: 0=контроллер свободен,
і і і 1=контроллер занят выполне-
і і і нием команды чтения или
і і і записи
і і АДДДДДДДДДДДДДДДДДДДДД> 5: режим работы контроллера:
і і 0=с использованием ПДП,
і і 1=без ПДП
і АДДДДДДДДДДДДДДДДДДДДДДДДД> 6: направление обмена:
і 0=процессор —> контроллер
і 1=контроллер —> процессор
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДД> 7: готовность к обмену:
0=не готов, 1=готов

Бит 7, равный 1, говорит о том, что контроллер при вводе

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

ЪДДВДДВДДВДДВДДВДДВДДВДДї
і0 і0 і0 і 0і 0і і і Бит:
АДДБДДБДДБДДБДДБДДЕДДБВДЩ ДДДД
і і
і АДД> 0: 0=есть отложенные прерывания
АДДДДДД> 1-2: причина прерывания:
11=ошибка или обрыв линии;
сбрасывается чтением регистра
состояния линии (порт 3FDh)
10=принят символ; сбрасывается
чтением приемника (порт 3F8h)
01=передан символ; сбрасывается

— 114 —

записью символа в регистр
передатчика (порт 3F8h)
00=изменение состояния модема
(линий CTS, DSR, RI или DCD);
сбрасывается чтением регистра
состояния модема (порт 3FEh)

3FBh Чтение/ Регистр управления линией:
Запись

7 6 5 4 3 2 1 0
ЪДДВДДВДДВДДВДДВДДВДДВДДї
і і і і і і і Биты:
АВДБВДБВДБДДЕДДБВДБДДЕДДЩ ДДДДД
і і і і і і
і і і і і АДДД> 0-1: число битов данных:
і і і і і 00=5, 01=6, 10=6, 11=8
і і і і АДДДДДДДД> 2: число стоп-битов:
і і і і 0=1, 1=1.5 при 5 битах данных
і і і і и 2 в противном случае
і і і АДДДДДДДДДДДД> 3-4: тип четности:
і і і X0=нет,
і і і 01=нечетная,
і і і 11=четная
і і АДДДДДДДДДДДДДДДДД> 5: постоянная четность
і і 0=отмена постоянной четности
і і 1=постоянный бит четности,
і і зависит от битов 3-4:
і і биты 3-4=01 — бит четности
і і всегда 1
і і биты 3-4=11 — бит четности
і і всегда 0
і і биты 3-4=X0 — без бита четности
і АДДДДДДДДДДДДДДДДДДДД> 6: 1=имитировать обрыв линии
і (посылка нулей)
АДДДДДДДДДДДДДДДДДДДДДДД> 7: бит DLAB:
1=порты 3F8h и 3F9h для загрузки
скорости обмена;
0=порты 3F8h и 3F9h в обычном
режиме

3FCh Запись Регистр управления модемом

7 6 5 4 3 2 1 0
ЪДДВДДВДДВДДВДДВДДВДДВДДї
і 0і 0і 0і і і і і і Бит:
АДДБДДБДДБВДБВДБВДБВДБВДЩ ДДД
і і і і АД> 0: 1=установить выход DTR
і і і АДДДД> 1: 1=установить выход RTS
і і АДДДДДДД> 2: 1=установить OUT1 (не используется)
і АДДДДДДДДДД> 3: 1=установить OUT2 (разрешить преры-
і вания от RS-232)
АДДДДДДДДДДДДД> 4: 1=диагностический режим (посылать
выход на вход стыка).

— 115 —

3FDh Чтение Регистр состояния линии. Биты 1-4 вызывают
прерывания по ошибке, если оно разрешено:

7 6 5 4 3 2 1 0
ЪДДВДДВДДВДДВДДВДДВДДВДДї
і 0і і і і і і і і Бит:
АДДБВДБВДБВДБВДБВДБВДБВДЩ ДДД
і і і і і і АД> 0:1=данные приняты. Сбрасывается
і і і і і і чтением приемника
і і і і і АДДДД> 1:1=потеря предыдущего символа
і і і і АДДДДДДД> 2:1=ошибка четности
і і і АДДДДДДДДДД> 3:1=неверный стоп-бит
і і АДДДДДДДДДДДДД> 4:1=обнаружен обрыв линии
і АДДДДДДДДДДДДДДДД> 5:1=сдвиговый регистр передатчика пуст.
і Можно передавать след. символ
АДДДДДДДДДДДДДДДДДДД> 6:1=регистр передатчика пуст. Нет
обрабатываемых данных.

3FEh Чтение Регистр состояния модема. Биты 0-3 вызывают
прерываниe по изменению состояния модема,

если оно разрешено:

7 6 5 4 3 2 1 0
ЪДДВДДВДДВДДВДДВДДВДДВДДї
і і і і і і і і і Бит:
АВДБВДБВДБВДБВДБВДБВДБВДЩ ДДД
і і і і і і і і
і і і і і і і АДД> 0:1=изменилось состояние линии CTS
і і і і і і АДДДДД> 1:1=изменилось состояние линии DSR
і і і і і АДДДДДДДД> 2:1=изменилось состояние линии RI
і і і і АДДДДДДДДДДД> 3:1=изменилось состояние линии DCD
і і і АДДДДДДДДДДДДДД> 4: состояние линии CTS
і і АДДДДДДДДДДДДДДДДД> 5: состояние линии DSR
і АДДДДДДДДДДДДДДДДДДДД> 6: состояние линии RI
АДДДДДДДДДДДДДДДДДДДДДДД> 7: состояние линии DCD

Примечание: «Изменилось состояние линии…» означает, что
данная линия стыка RS-232 изменила свое состояние по сравнению с
последним чтением этого регистра.

— 116 —

E11.3. Порядок инициализации 8250F

Для подготовки контроллера 8250 к работе необходимо
выполнить следующие шаги.

1. Установить бит DLAB порта 3FBh и заслать делитель,
задающий скорость обмена, в порты 3F8h и 3F9h.

2. Инициализировать регистр управления линией (порт 3FBh);
при этом сбросить бит DLAB.

3. Инициализировать регистр управления модемом (порт 3FCh).

4. Инициализировать регистр управления прерываниями (порт
3F9h) и, если прерывания разрешены, установить адрес программы
обработки прерываний от стыка RS-232.

В качестве примера приведем набор подпрограмм, обеспечива-
ющих обмен через порт COM1 в дуплексном режиме со скоростью 1200
бод.

title RS232
_DATA segment para public
Buf_Size equ 1024 ; размер буфера

Source db Buf_Size+2 dup (0) ; буфер приема символов
Src_ptr dw Source ; указатель позиции в буфере
Count dw 0 ; количество символов в буфере
Ser_ip dw 0 ; старый адрес Int 0Ch
Ser_cs dw 0
Save_ds dw 0 ; служебные переменные
Int_sts db 0
Overrun db 0
_DATA ends

_TEXT segment para public
assume cs:_TEXT, ds:_DATA
public Ser_Ini:near, Ser_Rst:near
public Get_Chr:near, Out_Chr:near
;ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма инициализации стыка COM1. є
;ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Ser_Ini proc near
push ax ; сохранить регистры
push dx
push bx
push es
in al,21h ; IMR 1-го контролера прерываний
or al,10h ; запретить прерывание IRQ4 от COM1
out 21h,al
mov al,0Ch
mov ah,35h
int 21h ; взять вектор Int 0Ch в es:bx
mov Ser_ip,bx ; и сохранить его
mov Ser_cs,es

— 117 —

mov al,0Ch
mov dx,offset Ser_int
push ds
mov bx,cs
mov ds,bx
mov ah,25h
int 21h ; установить Int 0Ch = ds:dx
pop ds
pop es
pop bx
cli ; запретить прерывания
in al,21h ; IMR 1-го контроллера прерываний
and al,not 10h
out 21h,al ; разрешить прерывания от COM1
mov dx,3FBh ; регистр управления линией
in al,dx
or al,80h ; установить бит DLAB
out dx,al

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

изменяет это состояние. Затем начинается декремент счетчика
(последовательное вычитание из него единицы). В момент, когда
счетчик обнулится, на выходе OUT установливается напряжение
высокого уровня и сохраняется до загрузки счетчика новым
значением. Счет возможен только при наличие сигнала высокого
уровня на входе GATE. Низкий уровень этого сигнала или
ниспадающий фронт запрещают счет.

Перезагрузка счетчика во время приводит к следующему:
загрузка младшего байта останавливает текущий счет, загрузка
старшего байта запускает новый цикл счета. Минимально допустимое
значение счетчика равно 2.

-Режим 1- (ждущий мультивибратор). На выходе OUT формируется
отрицательный импульс длительностью t=n*T, где n — число,
загруженное в счетчик, T — период тактовых импульсов. Низкий
уровень на выходе OUT устанавливается со следующего такта после
подачи на вход GATE сигнала высокого уровня.

Загрузка в счетчик нового числа не влияет на длительность
текущего импульса, а учитывается при следующем запуске.
Перезапуск счетчика производится нарастающим фронтом входа GATE
(без перезагрузки счетчика). Минимальное допустимое n=1.

-Режим 2- (генератор частоты). Каждый раз после достижения
счетчиком нуля на выходе OUT появляется отрицательный импульс с
длительностью один такт. Перезагрузка счетчика сказывается
только после перезапуска счетчика. При исчезновении сигнала
высокого уровня на входе GATE прекращается счет и на выход OUT
подается напряжение высокого уровня. Перезапуск счетчика
происходит при наличии на входе GATE сигнала высокого уровня.

-Режим 3- (генератор меандра). Аналогичен режиму 2, но
положительный уровень выходного сигнала занимает первый

— 32 —

полупериод, а отрицательный — второй полупериод. Точнее, если n
(начальное значение счетчика) четно, то длительность
положительного и отрицательного полупериодов равна n*T/2; если
же n нечетно — то (n+1)*T/2 и (n-1)*Т/2 соотвественно. Низкй
уровень сигнала на входе GATE запрещает счет, на выходе OUT
устанавливается сигнал высокого уровня. Высокий уровень GATE
разрешает счет, а нарастание его запускает счетчик начального
состояния. Отметим, что n=3 в этом режиме недопустимо.

-Режим 4- (счетчик событий). По окончании отсчета числа,
загруженного в счетчик, на выходе OUT формируется отрицательный
импульс длительностью один такт. Запись в счетчик во время счета
младшего байта не влияет на текущий счет, а запись старшего
байта перезапускает счетчик. Низкий уровень входа GATE запрещает
счет, высокий — разрешает. Минимальное допустимое значение
счетчика равно 1.

-Режим 5- (счетчик событий с автозагрузкой). Отличие от
режима 4 состоит в том, что каждое нарастание сигнала на входе
GATE перезапускает счетчик. Перезагрузка счетчика не влияет на
текущий цикл, однако следующий цикл определяется вновь
занесенным числом.

Временные диаграммы режимов таймера приведены на следующем
рисунке:

іЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪї
CLK ГЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩА
__ Гїn=5 ЪДДДДДДДДДДДДДДДДїn=4 ЪДДДДДДДДДДДДДДДДДД
WR іАДДДДЩ АДДДДЩ
і ЪДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДД
GATE ГДДДДДДДЩ АДДДЩ
ГДДДДДї ЪДДДДДДДДДї ЪДД
OUT і АДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДЩ
і
n і 5 4 3 2 1 0 4 3 2 2 1 0
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Режим 0

іЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪї
CLK ГЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩА
__ Гїn=4 ЪДДДДДДїn=5 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДД
WR іАДДДДЩ АДДДДЩ
і ЪДДДДДДДДДДї ЪДї ЪДДДДДДДДДДДДД
GATE ГДДДДДДДДДЩ АДДДДЩ АДДДДЩ
ГДДДДДДДДДДДї ЪДДДДДДДї ЪДД
OUT і АДДДДДДДЩ АДДДДДДДДДДДДДДДЩ
і
n і 4 3 2 1 0 5 4 3 5 4 3 2 1 0
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Режим 1

— 33 —

іЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪї
CLK ГЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩА
__ Гїn=4 ЪДДїn=3 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
WR іАДДДДЩ АДДДДЩ
і ЪДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДД
GATE ГДДДДДДЩ АДДДДЩ
ГДДДДДДДДДДДДДї ЪДДДДї ЪДДДДДї ЪДДДДДДДДДДї ЪДД
OUT і АДЩ АДЩ АДЩ АДЩ
і
n і 4 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Режим 2

іЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪї
CLK ГЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩА
__ Гїn=4 ЪДДДДДДДДДДДДДДДДїn=5 ЪДДДДДДДДДДДДДДДДДД
WR іАДДДДЩ АДДДДЩ
і ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДД
GATE ГДДДДДЩ АДДДЩ
ГДДДДДДДДДДї ЪДДДДДї ЪДДДДДї ЪДДДДДДДД
OUT і АДДДДЩ АДДДДЩ АДДДДЩ
і
n і 4 3 2 1 0 4 3 2 1 0 4 3 2 1 0 5 5 4
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Режим 3

іЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪї
CLK ГЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩА
__ Гїn=4 ЪДДДДДДДДДДДДДДДДїn=5 ЪДДДДДДДДДДДДДДДДДДДДД
WR іАДДДДЩ АДДДДЩ
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДД
GATE і АДДДЩ
ГДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДї ЪД
OUT і АДЩ АДЩ
і
n і 4 3 2 1 0 5 5 4 3 2 1 0
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Режим 4

іЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪїЪї
CLK ГЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩАЩА
__ Гїn=4 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
WR іАДДДДЩ
і ЪДДДДДДДДї ЪДї ЪДДДДДДДДДДДДДДДДД
GATE ГДДДДДДДДДЩ АДДДЩ АДДДЩ
ГДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДї ЪДДДДДД
OUT і АДЩ АДЩ
і
n і 4 3 2 1 0 4 3 4 3 2 1 0
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Режим 5

— 34 —

В IBM PC таймер имеет базовый адрес 40h и следующие
программируемые регистры:

Адрес Операция Назначение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
40h запись Загрузка счетчика канала 0
чтение Чтение счетчика канала 0

41h запись Загрузка счетчика канала 1
чтение Чтение счетчика канала 1

42h запись Загрузка счетчика канала 2
чтение Чтение счетчика канала 2

43h запись Запись управляющего слова
в регистр режима канала
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Управляющее слово имеет следующий формат:

7 6 5 4 3 2 1 0
ЪДВДДВДДВДДВДДВДДВДДВДДї
і і і і і Биты Маска
АДЕДДБДДЕДДБДДБВДБДДБДВЩ ДДДД ДДДДДДД
і і і А> 0: 0 = двоичный код, а & 1
і і і 1 = двоично-десятичный код
і і АДДДДДДД> 1-3: режим работы канала: а & 0Eh
і і 000 — режим 0
і і 001 — режим 1
і і X10 — режим 2
і і X11 — режим 3
і і 100 — режим 4
і і 101 — режим 5
і АДДДДДДДДДДДДДД> 4-5: вид загрузки счетчика: а & 30h
і 00 — «защелкивание»
і (биты 0-3 безразличны)
і 01 — только младший байт
і 10 — только старший байт
і 00 — младший байт, затем старший
АДДДДДДДДДДДДДДДДДДДД> 6-7: номер канала: a & C0h
00 — канал 0
01 — канал 1

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

команды готов к приему очередного байта команды, при обмене
данными в режиме без ПДП готов к приему/передаче очередного
байта данных, при приеме результата выполнения команды готов к
передаче очередного байта результата.

— 75 —

E8.3. Команды управления накопителямиF

Выполнение каждой команды имеет 3 фазы:

-фаза ввода команды;
-фаза выполнения;
-фаза результата.

В фазе ввода команды контроллер побайтно принимает и
накапливает команду. Фаза команды заканчивается запуском мотора
на соответствующем накопителе (это не относится к командам
задания режимов и чтения состояния).

В фазе выполнения осуществляется обмен данными между ОЗУ и
накопителем (если команда предполагает такой обмен). В режиме с
использованием ПДП перед приемом/передачей байта данных
генерируется сигнал «запрос на ПДП». Контроллер ПДП отвечает на
него сигналом подтверждения и командой приема/передачи. В режиме
работы без ПДП при готовности к приему/передаче каждого байта
генерируется прерывание. Если прерывания запрещены, приграмма
может в цикле проверять регистр состояния (порт 3F4h) до
получения подтверждения готовности контроллера к обмену данными.

По окончании выполнения команды генерируется прерывание,
означающее начало фазы результата. В фазе результата контроллер
передает результаты выполнения команды. Все байты результата
должны быть считаны, либо необходимо выполнить сброс
контроллера, иначе следующая команда не будет принята. Не все
команды имеют фазу результата, ряд команд выполняется в 2 фазы.

E8.3.1. Перечень команд контpоллеpа НГМДF

Ниже приводится подробное описание команд FDC. Фаза
выполнения помечена знаками «* * *». Смысл символических
обозначений элементов команд приведен после описания команд. В
битовых масках биты нумеруются справа налево. В фазе результата
все байты результата приведены в той последовательности, в
которой они возвращаются контроллером.

ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДї
і Команда і Регистр данных і Назначение і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 1. Чтение і MT MF SK 0 0 1 1 0 і Ввод данных і
і данных і X X X X X HD US1 US0 і из поля дан-і
і і C і ных сектора і
і і H і і
і і R і і
і і N і і
і і EOT і і
і і GPL чячячpячячя і і
і і R і і
і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 2. Чтение і MT MF SK 0 1 1 0 0 і Ввод данных і
і удаленных і X X X X X HD US1 US0 і из поля дан-і
і данных і C і ных, поме- і
і і H і ченного как і
і і R і удаленное і
і і N і і
і і EOT і і
і і GPL і і
і і DTL і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і
і і H і і
і і R і і
і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 3. Запись і MT MF 0 0 0 1 0 1 і Вывод данныхі
і данных і X X X X X HD US1 US0 і в поле дан- і
і і C і ных сектора і
і і H і і
і і R і і
і і N і і
і і EOT і і
і і GPL і і
і і DTL і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і
і і H і і
і і R і і

і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 4. Запись і MT MF 0 0 1 0 0 1 і Запись ад- і
і удаленных і X X X X X HD US1 US0 і ресного мар-і
і данных і C і кера удален-і
і і H і ных данных иі
і і R і занесение і
і і N і символа-за- і
і і EOT і полнителя в і
і і GPL і поле данных і
і і DTL і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і

— 77 —

і і H і і
і і R і і
і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 5. Чтение і 0 MF SK 0 0 0 1 0 і Чтение полейі
і дорожки і X X X X X HD US1 US0 і данных сек- і
і і C і торов всей і
і і H і дорожки і
і і R і і
і і N і і
і і EOT і і
і і GPL і і
і і DTL і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і
і і H і і
і і R і і
і і N і і

При выполнении данной команды игнорируются параметры «начальный
номер сектора» и » номер последнего сектора», так как чтение
начинается с первого встреченного после индекса сектора и
передается столько секторов, сколько было запрошено. Если
запрошенное число секторов (длина принимаемой информации)
больше, чем имеется секторов на дорожке, передача повторяется с
начала первого сектора дорожки.

ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 6. Чтение і 0 MF 0 0 1 0 1 0 і Чтение пер- і
і идентифи- і X X X X X HD US1 US0 і вого встре- і
і катора і * * * і ченного і
і сектора і ST0 і идентифика- і
і і ST1 і тора сектораі
і і ST2 і і
і і C і і
і і H і і
і і R і і
і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 7. Форма- і 0 MF 0 0 1 1 0 1 і Запись на і
і тирование і X X X X X HD US1 US0 і дорожку фор-і
і дорожки і N і матирующей і
і і SC і информации і
і і GPL і і
і і D і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і
і і H і і
і і R і і

— 78 —

і і N і і

Перед выполнением команды форматирования необходимо
спозиционировать головку на требуемую дорожку. Данные для записи
в идентификатор адреса сектора (цилиндр, головка, дорожка и
размер сектора) принимаются от ПДП или через порт данных и не
проверяются. Физический размер сектора определяется параметром
«N» — код длины сектора, задаваемым в команде и одинаковым для
всей дорожки. Таким образом нельзя иметь на на одной дорожке
сектора разной длины. Команда не заносит в маркер данных признак
«удаленные данные», а заполняет поле данных секторов дорожки
байтом-заполнителем.

ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і 8.Сканиро-і MT MF SK 1 0 0 0 1 і Сканирова- і
і вание до і X X X X X HD US1 US0 і ние данных і
і «равно» і C і на указан- і
і і H і ное условие і
і і R і и формирова-і
і і N і ние запроса і
і і EOT і на прерыва- і
і і GPL і ние при вы- і

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

mov dx,3F8h
mov al,60h
out dx,al ; младший байт для скорости 1200 бод
inc dx
mov al,0
out dx,al ; старший байт скорости
mov dx,3FBh ; регистр управления линией
mov al,00000011b ; 8 бит, 2 стоп-бита, без четности
out dx,al
mov dx,3F9h ; регистр разрешения прерываний
mov al,1 ; разрешить прерывания по приему
out dx,al
nop ; и чуть-чуть подождать
nop
mov dx,3FCh ; регистр управления модемом
mov al,00001011b ; установить DTR, RTS и OUT2
out dx,al
sti ; разрешить прерывания
mov dx,3F8h ; регистр данных
in al,dx ; сбросить буфер приема
pop dx
pop ax
ret
Ser_Ini endp
;ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма отключения стыка COM1. є
;ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Ser_Rst proc near
push ax ; сохранить регистры
push dx
Wait_Free:
mov dx,3FDh ; регистр состояния линии
in al,dx
jmp short $+2 ; короткая задержка
test al,60h ; передача окончена?
jz Wait_Free ; ждем, если нет
mov dx,3F9h ; регистр разрешения прерываний

— 118 —

mov al,0 ; запретить прерывания
out dx,al
jmp short $+2 ; еще подождем…
jmp short $+2
mov dx,3FCh ; регистр управления модемом
mov al,00000011b ; активировать DTR и RTS
out dx,al
jmp short $+2
jmp short $+2
push bx
mov al,0Ch
mov dx,Ser_ip
push ds
mov bx,Ser_cs
mov ds,bx
mov ah,25h
int 21h ; восстановить вектор Int 0Ch
pop ds
pop bx
cli ; запрет прерываний
in al,21h ; читать маску прерываний
jmp short $+2
or al,10h ; запретить IRQ4
out 21h,al
sti ; разрешение прерываний
pop dx
pop ax
ret
Ser_Rst endp
;ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма обработки прерываний от COM1. є
;ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Ser_Int proc far
push ax
push dx
push ds
mov ax,seg _DATA
mov ds,ax
mov dx,3FAh ; регистр идентификации прерываний
in al,dx
mov Int_Sts,al; сохраним его содержимое
test al,1 ; есть отложенные прерывания?
jz Is_Int ; да
pop Save_ds ; нет, передаем управление
pop dx ; старому обработчику Int 0Ch
pop ax
push Ser_cs
push Ser_ip
push Save_ds
pop ds
ret ; длинный переход
Is_Int:
mov al,64h ; послать EOI для IRQ4
out 20h,al ; в 1-й контроллер прерываний
test Int_Sts,4 ; прерывание по приему?

— 119 —

jnz Read_Char ; да
No_Char:
sti ; нет, разрешить прерывания
jmp Int_Ret ; и закончить обработку Int 0Ch
Read_Char:
mov dx,3FDh ; регистр состояния линии
in al,dx
and al,2
mov Overrun,al; ovvrrun0, если была потеря символа
mov dx,3F8h ; регистр данных
in al,dx ; вводим символ
or al,al ; если принят нуль,
jz No_Char ; то игнорируем его
push bx
mov ah,Overrun
or ah,ah ; предыдущий символ потерян?
jz Save_Char ; нет
mov ah,al ; да,
mov al,7 ; заменяем его на звонок (07h)
Save_Char:
mov bx,Src_ptr; заносим символ в буфер
mov [bx],al
inc Src_ptr ; и обновляем счетчики
inc bx
cmp bx,offset Src_ptr-2 ; если конец буфера
jb Ser_Int_1
mov Src_ptr,offset Source ; то «зацикливаем» на начало
Ser_Int_1:
cmp Count,Buf_Size ; буфер полон?
jae Ser_Int_2 ; да
inc Count ; нет, учесть символ
Ser_Int_2:
or ah,ah ; если была потеря символа
jz Ser_Int_3
mov al,ah ; то занести в буфер сам символ
xor ah,ah
jmp short Save_Char
Ser_Int_3:
pop bx
sti ; разрешить прерывания
Int_Ret:
pop ds
pop dx
pop ax
iret
Ser_Int endp
;ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма вывода символа AL в порт. є
;є При ошибке возвращает CF=1, иначе CF=0. є
;ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Out_Chr proc near
push ax
push cx
push dx
mov ah,al

— 120 —

sub cx,cx
Wait_Line:
mov dx,3FDh ; регистр состояния линии
in al,dx
test al,20h ; стык готов к передаче?
jnz Output ; да
jmp short $+2
jmp short $+2
loop Wait_Line ; нет, ждем
pop dx
pop cx
pop ax
stc ; нет готовности порта
ret
Output:
mov al,ah
mov dx,3F8h ; регистр данных
jmp short $+2
out dx,al ; вывести символ
pop dx
pop cx
pop ax
clc ; нормальный возврат
ret
Out_Chr endp
;ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма ввода символа из порта в AL. є
;є Если буфер пуст, возвращает CF=1, иначе CF=0. є
;ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Get_Chr proc near
cmp Count,0 ; буфер пуст?
jne loc_1729 ; нет
stc ; да, возврат по ошибке
ret
loc_1729:
push si
cli ; запретим прерывания
mov si,Src_ptr

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

10 — канал 2
11 — запрещенная комбинация

Существует два способа чтения текущего значения счетчика
канала.

1. Чтение с остановом счетчика. Для обеспечения стабильных
показаний необходимо приостановить работу канала либо подачей
сигнала низкого уровня на вход GATE (кроме режима 1), либо
блокированием тактовых импульсов.

2. Чтение «на лету». Для считывания счетчика без остановки
процесса счета используется посылка в порт 43h управляющего

— 35 —

слова в режиме «защелкивания» (см. выше). Это управляющее слово
фиксирует текущее значение счетчика и Вы можете считать его
младший байт, а затем старший байт.

E4.2. Таймер на системной плате IBM PCF

В IBM PC каналы таймера имеют следующее назначение.

Канал Назначение Режим
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
0 системные часы (IRQ0) 3, счетчик=0 (65536)
1 запрос для канала 0 ПДП
(регенерация памяти) 2, счетчик=18
2 генератор звука ДД
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Тактовая частота каждого канала равна 1,19318 МГц, т. е.
каждый такт имеет длительность 0,84 мсек. Вход GATE каналов 0 и
1 всегда имеют высокий уровень, поэтому счет на этих каналах
разрешен всегда. Вход GATE канала 2 управляется битом 0 порта PB
интерфейса 8255 (см. гл. 5), связанного с портом 61h.

При начальной загрузке BIOS инициализирует канал 0 для
работы в режиме 3 со счетчиком 0 (т. е. 65536 декрементов на
цикл счета). Поэтому частота системных часов равна
1,19 МГц/65536 = 18.2 Гц
и прерывание IRQ0, связанное с вектором Int 8, происходит 18,2
раз в секунду, т. е. каждые 55 мсек.

Вы можете перепрограммировать канал 0, но тогда

— BIOS не сможет отслеживать текущее время и дату;

— нарушится работа с гибкими дисками, т. к. включение и
выключение их двигателей отсчитывается по текущему времени.

Канал 1 работает в режиме 2 со счетчиком 18, поэтому
регенерация памяти происходит каждые 18 мсек. Перепрог-
раммировать его нельзя, т. к. это приведет к потере данных в
ОЗУ.

Программирование канала 2 описано в следующем пункте.

— 36 —

E4.3. Генерация звукаF

На вход звукогенератора поступает логическое «И» двух
сигналов: выхода OUT 2-го канала таймера и содержимого бита 1
порта РВ интерфейса 8255. Поэтому простейший способ генерации
звука состоит в программировании канала 2 таймера так, чтобы он
выдавал прямоугольный импульс заданной частоты, лежащий в
звуковом диапазоне (20 Гц — 20 КГц). Для этого следует
использовать режим таймера 3 с подходящим начальным значением
счетчика. Если затем установить биты 0 и 1 порта РВ, то импульс
начнет поступать на вход звукогенератора (бит 0 — это вход GATE
канала 2, разрешающий счет, а бит 1 — разрешение выдачи выхода
OUT на вход звукогенератора). Для выключения звука достаточно
сбросить биты 0 — 1 в РВ. Преимущество этого метода состоит в
том, что, запустив генерацию звука, ЦП может выполнять другие
действия. Значение счетчика 2-го канала вычисляется по формуле
n=1193181/f=1234DDh/f (1193181 — тактовая частота таймера в Гц,
f — требуемая частота звука).

Пример:

;
; подпрограмма генерации звука
; Вход: АX= частота звука в Гц
;
Sound proc near
push ax ;сохранить регистры
push bx
push dx
mov bx,ax ;частота
mov ax,34DDh

mov dx,12h ;(dx,ax)=1193181
cmp dx,bx ;если bx < 18Гц, то выход jnb Done ;чтобы избежать переполнения div bx ;ax=(dx,ax)/bx mov bx,ax ;счетчик таймера in al,61h ;порт РВ or al,3 ;установить биты 0-1 out 61h,al mov al,00001011b ;управляющее слово таймера: ;канал 2, режим 3, двоичное слово mov dx,43h out dx,al ;вывод в регистр режима dec dx mov al,bl out dx,al ;младший байт счетчика mov al,bh out dx,al ;старший байт счетчика Done: pop dx ;восстановить регистры pop bx pop ax ret Sound endp ; - 37 - ;подпрограмма выключения звука ; No_Sound proc near push ax in al,61h ;порт РВ and al,not 3 ;сброс битов 0-1 out 61h,al pop ax ret No_Sound endp Для генерации музыки можно использовать следующий алгоритм. Пусть octave - номер октавы (1, 2, ...); note - номер ноты в октаве (до=1, до#=2, ..., си=12). Тогда: f := 32.625; for i := 1 to oktave do f := 2*f; for i := 1 to note do f := 1.059463094*f Sound (round(f)); Второй способ генерации звука состоит в том, чтобы генерировать звуковые импульсы не выходом таймера, а установкой и сбросом бита 1 в регистре РВ. Для управления задержками можно использовать программный цикл, например: ; ; Программа генерации звука ; Вход: N=количество импульсов ; FREQ=длительность импульса ; in al,61h ;порт РВ and al,not ;сброс бита 0 mov dx,N Repeat: or al,2 out 61h,al ;установить бит 1 mov cx,FREQ Wait_On: loop Wait_On and al,not 2 ;сбросить бит 1 out 61h,al mov cx,FREQ Wait_Off: loop Wait_Off dec dx jnz Repeat Программирование этого способа основано на следующих формулах. Если Т - длительность звучания в сек, f - частота звука в Гц, а t - тактовая частота процессора ПЭВМ, то N=T*f; FREQ=t/(34*f). Константа 34 объясняется тем, что длительность каждого из циклов Wait_on и Wait_off приблизительно равна (17*cx) машинных - 38 - тактов. Неудобство этого метода состоит в том, что ЦП полностью занят генерацией звука - любое прерывание испортит временную диаграмму звукового сигнала. Однако он обеспечивает точную подстройку частоты и позволяет создавать несимметричные импульсы варьированием задержек в циклах Wait_on и Wait_off. - 39 - E5. Программируемый периферийный интерфейсF

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC

і і STP і полнении і
і і * * * і условия і
і і ST0 і і
і і чячячpячячяо і
і вание до і X X X X X HD US1 US0 і предыдущей і
і «больше і C і команде і
і или равно»і H і і
і і R і і
і і N і і
і і EOT і і
і і GPL і і
і і STP і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і
і і H і і
і і R і і
і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і10.Сканиро-і MT MF SK 1 1 1 0 1 і аналогично і
і вание до і X X X X X HD US1 US0 і предыдущей і
і «меньше і C і команде і
і или равно»і H і і
і і R і і

— 79 —

і і N і і
і і EOT і і
і і GPL і і
і і STP і і
і і * * * і і
і і ST0 і і
і і ST1 і і
і і ST2 і і
і і C і і
і і H і і
і і R і і
і і N і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і11. Река- і 0 0 0 0 0 1 1 1 і Перемещение і
і либровать і Х Х Х Х Х 0 US1 US0 і головки на і
і і * * * і нулевую і
і і і дорожку і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і12. Опреде-і 0 0 0 0 0 0 1 1 і Задание і
і ление і і режима і
і і ND і работы і
і і і дисковода і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і13.Поиск і 0 0 0 0 1 1 1 1 і Позициониро-і
і і Х Х Х Х Х HD US1 US0 і вание голов-і
і і NCN і ки на задан-і
і і * * * і ную дорожку і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і14.Чтение і 0 0 0 0 1 0 0 0 і Чтение байтаі
і состояния і * * * і состояния і
і прерыванияі ST0 і ST0 после і
і і PCN і прерываний, і
і і і вызванных і
і і і изменением і
і і і готовности і
і і і дисковода і
і і і и операцией і
і і і поиска і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і15.Чтение і 0 0 0 0 0 1 0 0 і Чтение байтаі
і состояния і Х Х Х Х Х HD US1 US0 і состояния і
і НГМД і * * * і ST3 і
і і ST3 і і
і і і і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
і16. Несуще-і < ошибочный код команды FDC> і При ошибоч- і
і ствующая і * * * і ной команде і
і команда і ST0 і возвращаетсяі
і і і ST0=80h і
і і і і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДЩ

Смысловое значение элементов команд:

МТ=1 — многодорожечная (двусторонняя операция);

— 80 —

MF=1 — МЧМ-кодирование (двойная плотность) — пропуск
синхроимпульсов у единичных битов и пропуск синхроимпульсов у
нулевых битов, стоящих после единичных;

SK=1 — пропуск адресного маркера удаленных данных;

HD — номер головки (0 или 1);

US1, US0 — номер накопителя (0 — 3);

С — номер цилиндра;

Н — номер головки;

R — номер сектора;

N — код длины сектора (0 — 128, 1 — 256, 2 — 512, 3 — 1024
байтов);

EOT — номер последнего сектора на цилиндре;

GPL — длина межзонного промежутка (обычно 2Ah при обмене и
50h при форматировании);

DTL — число считываемых/записываемых байт (действительно
при N = 0);

ST0 — ST3 — байты состояния ST0-ST3;

STP — межсекторное смещение;

SRT — время скорости шага в милисекундах (обычно 0Dh);

HUT — время разгрузки головки в единицах по 16 милисекунд
(обычно = 0Fh);

HLT — время загрузки головки в единицах по 2 милисекунды
(обычно = 1);

ND=0 — режим работы с использованием ПДП, =1 — режим работы
без использования ПДП;

NCN — номер цилиндра после поиска;

PCN — номер текущего цилиндра;

SC — количество секторов на цилиндре;

D — символ-заполнитель для разметки (обычно 0F6h).

— 81 —

E8.3.2. Структура байтов состоянияF

Байт состояния ST0:

7 6 5 4 3 2 1 0
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
і і і і і і і і і Биты:
АДВДБДВДБДВДБДВДБДВДБДВДБДВДБДВДЩ ДДДДД
і і і і і і АДДДБД> 0-1: номер накопителя (0 — 3)
і і і і і АДДДДДДДДД> 2: номер головки
і і і і АДДДДДДДДДДДДД> 3: НГМД не готов при обмене
і і і АДДДДДДДДДДДДДДДДД> 4: Сигнал «ошибка» НГМД или
і і і дорожка 0 не найдена после 77
і і і шагов рекалибровки
і і АДДДДДДДДДДДДДДДДДДДДД> 5: команда поиска завершена
АДДДБДДДДДДДДДДДДДДДДДДДДДДДДД> 6: код прерывания:
00-нормальное завершение команды
01-ненормальное завершение
10-недействительная команда
11-в фазе выполнения измени-
лась готовность дисковода

Бит 2 (номер головки) после выполнения команды поиска
всегда равен 0, независимо от того, на какой головке
осуществлялся поиск.

Бит 3 будет всегда равен 1, если на дисководе с одной
головкой вы попробуете обратиться к стороне 1 (допустима только
сторона 0).

Байт состояния ST1:

7 6 5 4 3 2 1 0
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
і і 0 і і і 0 і і і і Бит:
АДВДБДДДБДВДБДВДБДДДБДВДБДВДБДВДЩ ДДДД
і і і і і АД> 0: 1=не найден маркер иденти-
і і і і і фикатора сектора
і і і і АДДДДД> 1: 1=дискета защищена от
і і і і записи
і і і АДДДДДДДДД> 2: 1=искомый сектор не найден
і і АДДДДДДДДДДДДДДДДД> 4: 1=таймаут запросов на
і і передачу данных
і АДДДДДДДДДДДДДДДДДДДДД> 5: 1=ошибка CRC в поле иденти-
і фикации или в поле данных
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДД> 7: 1=конец цилиндра (попытка
обращения к сектору после
обращения к последнему сектору
последнего цилиндра)

— 82 —

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36