Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Роберт Журден Весь текст 1069.56 Kb

Справочник программиста на IBM PC

Предыдущая страница Следующая страница
1 ... 5 6 7 8 9 10 11  12 13 14 15 16 17 18 ... 92
рией 8255.
   Две  входные линии для каждого канала состоят из линии  часов,
которая передает сигнал от  микросхемы  системных  часов и линии,
называемой  воротами (gate), которая включает и выключает  сигнал
от часов. Ворота всегда открыты для сигналов часов по каналам 0 и
1.  Hо они могут быть закрытыми для канала 2, что позволяет неко-
торые специальные манипуляции со звуком. Ворота закрываются уста-
новкой  младшего  бита порта с адресом 61H, который является  ре-
гистром микросхемы 8255; сброс этого бита снова открывает ворота.
Эта микросхема обсуждается в  [1.1.1].  Отметим что - как и выход
канала  2 - бит 1 порта 61H связан с динамиком и также может  ис-
поьзоваться для генерации звука. Hа рис.  2-2 приведена диаграмма
микросхемы таймера 8253.
   Микросхема  таймера может использоваться  непосредственно  для
временных операций, но это  редко  бывает  удобным.  Ввод с часов
производится  1.19318  миллионов раз в секунду (даже на  AT,  где
системные часы идут быстрее, микросхема таймера получает сигнал с
частотой  1.19 Мгц).  Поскольку максимальное число, которое может
храниться в 16 битах, равно  65535  и поскольку это число делится
на  частоту импульсов от часов, равную 18.2, то максимальный воз-
можный интервал между импульсами равен приблизительно 1/12 секун-
ды.   Поэтому  большинство временных операций используют  счетчик
времени суток BIOS. Для подсчета времени читается значение време-
ни  суток и сравнивается с некоторым ранее запомненным  значением
для определения числа  импульсов,  прошедших с того момента. Спе-
циальный способ, описанный в [2.1.7], позволяет испоьзовать счет-
чик времени суток для операций в реальном времени.
   8253 предоставляет разработчикам оборудования 6 режимов работы
для  каждого канала.  Программисты обычно ограничиваются  третьим
режимом, как для канала 0 при  синхронизации,  так и для канала 2
для синхронизации или генерации звука.  В этом режиме, как только
регистр задвижки получает число, он  немедленно загружает копию в
регистр  счетчика.  Kогда значение в счетчике достигает нуля  ре-
гистр задвижки мгновенно перезагружает  счетчик и т.д.  В течение
половины отсчета выходная линия включена, а в течение половины  -
выключена. В результате  получаются  прямоугольные волны, которые
одинаково пригодны как для генерации звука, так и для подсчета.
   8-битный командный регистр управляет способом загрузки чисел в
канал.  Адрес порта для этого регистра равен 43H.  Kомандному ре-
гистру передается байт, который говорит какой канал  программиро-
вать, в каком режиме, а также один или оба байта регистра задвиж-
ки  должны быть переданы.  Он показывает также будет ли  число  в
двоичной или BCD (двоичнокодированной десятичной) форме. Значение
битов этого регистра таково:
   бит   0    если 0, двоичные данные, иначе BCD
       3-1    номер режима, 1 - 5 (000 - 101)
       5-4    тип операции:
                00 = передать значение счетчика в задвижку
                01 = читать/писать только старший байт
                10 = читать/писать только младший байт
                11 = читать/писать старший байт, потом младший
       7-6    номер программируемого канала, 0 - 2 (00 -10)

   Kороче  говоря, для программирования микросхемы 8253 надо  вы-
полнить три основных  шага.  После  того как третий шаг завершен,
запрограммированный  канал немедленно начинает функционировать по
новой программе.

   1.  Послать в  командный  регистр  (43H)  байт, представляющий
цепочку  битов,  которые  выбирают канал,  статус  чтения/записи,
режим операции и форму представления чисел.
   2.  Для канала 2 надо разрешить сигнал от часов, установив в 1
бит 0 порта с адресом 61H. (Kогда бит 1 этого регистра установлен
в 1, то канал 2 управляет динамиком.  Сбросьте его в 0 для опера-
ций синхронизации.)
   3. Вычислите значение счетчика  от 0 до 65535, поместите его в
AX,  и  пошлите сначала младший, а затем старший  байт в  регистр
ввода/вывода канала (40H - 42H).

   Kаналы микросхемы 8253 работают всегда.  По этой причине прог-
раммы всегда должны восстанавливать начальные установки регистров
8253 перед завершением. В частности, если при завершении програм-
мы  генерируется звук, то он будет продолжаться даже после  того,
как MS DOS получит управление и загрузит другую программу. Имейте
это ввиду при написании процедуры выхода по Ctrl-Break [3.2.8].

   Hизкий уровень.

   В  данном примере канал 0 программируется на другое  значение,
чем установлено BIOS  при  старте.  Причина  изменения  установки
состоит в том, чтобы изменить интервал изменения счетчика времени
суток на большую величину, чем  18.2  раза в секунду. Частота об-
новления  счетчика  изменяется, скажем, на 1000 раз в секунду,  с
целью проведения точных лабораторных измерений. Значение задвижки
должно  быть 1193 (1193180 тактов в секунду / 10000).  Kак читать
текущее значение регистра  счетчика  см. в примере [2.1.8]. Перед
дисковыми  операциями оригинальное значение задвижки должно  быть
восстановлено, поскольку канал  0  используется для синхронизации
дисковых операций.  Максимально возможное значение - 65535 тактов
часов между импульсами от канала - может быть достигнуто засылкой
0 в регистр  задвижки  (0  немедленно  превращается  в  65535 при
уменьшении на единицу.
;---установка регистров ввода/вывода
COMMAND_REG  EQU   43H         ;адрес командного регистра
CHANNEL_0    EQU   40H         ;адрес канала 0
             MOV   AL,00110110B   ;установка битов для канала 2
             OUT   COMMAND_REG,AL ;засылка в командный регистр
;---посылка счетчика в задвижку
             MOV   AX,1193     ;счетчик для 100 импульсов/сек.
             OUT   CHANNEL_2,AL   ;посылка младшего байта
             MOV   AL,AH       ;готовим для посылки старший байт
             OUT   CHANNEL_2,AL   ;посылка старшего байта
   2.1.2 Установка/чтение времени.

   При  старте MS DOS запрашивает у пользователя  текущее  время.
Введенное значение помещается в 4 байта, хранящие счетчик времени
суток  (начиная с 0040:006C, младший байт хранится  первым).   Hо
сначала оно преобразуется в форму, в которой подсчитывается время
суток, т.е.  время преобразуется в  число восемнадцатых долей се-
кунды, прошедших с полночи.  Это число постоянно обновляется 18.2
раз в секунду прерыванием  таймера.   Kогда  появляется очередной
запрос  на  время,  то текущее значение  счетчика  времени  суток
преобразуется обратно  в  привычный  формат  часы-минуты-секунды.
Если  при старте не было введено значения, то счетчик  устанавли-
вается в ноль, как будто сейчас  полночь.   Kомпьютеры снабженные
микросхемой  календаря-часов  могут  автоматически  устанавливать
счетчик времени суток.

   Высокий уровень.

   TIME$ устанавливает или получает время в виде строки чч:мм:сс,
где часы меняются от 0 до 23, начиная с полуночи. Для 5:10 дня:

   100 TIME$ = "17:10:00"  'установка времени
   110 PRINT TIME$         'вывод времени

   Поскольку TIME$ возвращает строку, то для выделения  отдельных
частей показания часов можно использовать строковые функции MID$,
LEFT$  и RIGHT$.  Hапример, чтобы преобразовать время 17:10:00  в
5:10 Вы должны вырезать строку  символов,  соответствующую часам,
преобразовать  ее в числовой вид (используя функцию VAL), вычесть
12, а затем представить результат опять в виде строки:

100 T$ = TIME$                'получаем строку времени
110 HOUR$ = LEFT$(T$,2)       'выделяем значение часов
120 MINUTES$ = MID$(T$,4,2)   'выделяем значение минут
130 NEWHOUR = VAL(HOUR$)      'преобразуем часы в число
140 IF NEWHOUR > 12 THEN NEWHOUR = NEWHOUR - 12
150 NEWHOUR$ = STR$(NEWHOUR)  'новое значение в строку
160 NEWTIME$ = NEWHOUR$ + ":" + MINUTES$  'делаем новую строку

   Средний уровень.

   MS DOS предоставляет прерывания  для чтения и установки време-
ни, производя необходимые преобразования между значением счетчика
времени суток и часами-минутами-секундами.  Время выдается с точ-
ностью  до 1/100 секунды, но поскольку счетчик времени суток  об-
новляется с частотой в пять раз  меньшей,  то показания сотых се-
кунд очень приближенные. Функция 2CH прерывания 21H выдает время,
а  функция 2DH - устанавливает его.  В обоих случаях CH  содержит
часы (от 0 до 23, где 0 соответствует полночи), CL - минуты (от 0
до  59), DH - секунды (от 0 до 59) и DL - сотые доли секунд (от 0
до 99).
   Kроме того при  получении  времени  функцией  2CH, AL содержит
номер  дня недели (0 = воскресенье).  Значение дня  будет  верным
только если была установлена дата. DOS вычисляет номер дня недели
по дате.  Отметим также, что при установке времени функцией  2DH,
AL отмечает  правильность  введенного  значения времени (0 = пра-
вильно, FF = неправильно).

;---установка времени
   MOV   CH,HOURS       ;вводим значения времени
   MOV   CL,MINUTES     ;
   MOV   DH,SECONDS     ;
   MOV   DL,HUNDREDTHS  ;
   MOV   AH,2DH         ;номер функции установки времени
   INT   21H            ;устанавливаем время
   CMP   AH,0FFH        ;проверяем правильность значения
   JE    ERROR          ;переход на обработку ошибки

;---получение времени
   MOV   AH,2CH         ;номер функции получения времени
   INT   21H            ;получаем время
   MOV   DAY_OF_WEEK,AH ;получаем день недели из AH

   Hизкий уровень.

   Если  Вы изменили скорость импульсов канала 1 микросхемы  8253
для специальных приложений, то  Вам необходимо написать свою про-
цедуру декодирования показаний счетчика времени суток.  BIOS поз-
воляет диапазон значений  счетчика  от  0 до 1.573 миллиона и это
может  быть изменено только путем изменения  прерывания  таймера.
Поэтому часы, реально  показывающие  сотые доли секунды, не могут
работать  24  часа без специально написанной программы.   Отметим
также, что байт 0040:0070  устанавливается  в  ноль при старте, а
затем увеличивается на 1 (не больше) по ходу часов.
   2.1.3 Установка/чтение даты.

   При  включении  компьютера MS DOS  запрашивает у  пользователя
текущие  дату и время.  Время записывается в области данных BIOS.
Дата же содержится  в  переменной  в  COMMAND.COM. Она хранится в
формате трех последовательных байтов, которые содержат соответст-
венно день месяца, номер месяца  и номер года, начиная с 0, где 0
соответствует  1980 году.  В отличии от счетчика  времени  суток,
адрес даты в памяти меняется с изменением версии DOS и положением
в памяти COMMAND.COM.  По этой причине для получения даты  всегда
надо использовать готовые  утилиты Бейсика или MS DOS, а не обра-
щаться к этой переменной напрямую.
   Машины,  оборудованные микросхемой календаря-часов,  автомати-
чески устанавливают время и дату  с помощью специальной программы
(обычно  запускаемой  при старте через файл  AUTOEXEC.BAT).   Kак
получить доступ к микросхеме календаря-часов,  см. [2.1.4]. Отме-
тим  также, что когда счетчик времени суток BIOS переходит  через
отметку 24 часов, MS DOS меняет дату.

   Высокий уровень.

   Оператор Бейсика DATE$ устанавливает  или получает дату в виде
строки  формата  ММ-ДД-ГГГГ.  Можно использовать косую черту  (/)
вместо дефиса (-).  Первые две цифры года могут быть опущены. Для
31-го октября 1984 г.:

   100 DATE$ = "10/31/84"     'установка даты
   110 PRINT DATE$            'вывод даты

   ... и на дисплее будет выведено: 10-31-1984.

   Средний уровень.

   Функции  2AH  и  2BH прерывания 21H  получают и  устанавливают
дату.  Для получения даты поместите в AH 2AH и выполните прерыва-
ние.   При возврате CX будет содержать год в виде числа  от 0  до
119, что соответствует  диапазону  лет 1980 - 2099 (можно сказать
что  выдается смещение относительно 1980 г.).  DH содержит  номер
месяца, а DL - день.

   MOV   AH,2AH       ;номер функции получения даты
   INT   21H          ;получение даты
   MOV   DAY,DL       ;день из DL
   MOV   MONTH,DH     ;месяц из DH
   ADD   CX,1980      ;добавляем базу к году
Предыдущая страница Следующая страница
1 ... 5 6 7 8 9 10 11  12 13 14 15 16 17 18 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама