Главная · Поиск книг · Поступления книг · 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 ... 74 75 76 77 78 79 80  81 82 83 84 85 86 87 ... 92
ERRORLEVEL и условные операции выполняются в зависимости от того,
больше он или нет определенного числа. С помощью этой возможности
командные файлы могут прекращать  обработку и выводить сообющение
о  возникновении  ошибки в одной из запущенных  программ.   Более
подробная информация приведена в разделе  "Kоманды пакетной обра-
ботки" руководства по операционной системе.
   Раздел 3. Использование специальных устройств ввода/вывода.

   Имеется  огромное  количество устройств ввода/вывода,  которые
могут быть присоединены к IBM PC,  включая мышь, джойстик, графо-
построители  и т.д.  В данном разделе обсуждаются только те  уст-
ройства, которые специально  поддерживаются оборудованием IBM PC.
Сюда  относятся  кассетные  магнитофоны, световое  перо и  другие
устройства, которые могут быть  присоединены  через игровой порт.
Адреса  портов,  относящиеся к другим устройствам, обсуждаются  в
других разделах этой книги, относящихся именно к данным устройст-
вам.   Распределение  адресов портов в основном одно и то же  для
всех типов IBM PC:

Адрес порта        Функция

  00-0F      микросхема DMA 8237 (не для PCjr)
  20-2F      микросхема прерываний 8259 (AT контроллер #1: 20-3F)
  40-4F      микросхема таймера 8253/8254
  60-6F      микросхема PPI 8255 (AT использует только адреса
             клавиатуры
  70-7F      часы реального времени (только AT)
  80-83      регистры страниц DMA (не для PCjr)
  A0-BF      микросхема прерываний #2 (только AT)
  C0-C7      микросхема звука SN76496 (только PCjr)
  F0-FF      PCjr - контроллер HГМД, AT - управление математиче-
             ским сопроцессором
1F0-1F8      фиксированный диск AT
200-20F      игровой адаптер
278-27F      AT коммуникационный порт #2
2F8-2FF      коммуникационный порт COM2 (COM1 для PCjr)
320-32F      фиксированный диск XT
378-37F      адаптер параллельного принтера для PC, XT, AT
3B0-3BF      монохромный/параллельный адаптеры (не для PCjr)
3D0-3DF      цветной графический адаптер
3F0-3F7      контроллер HГМД
3F8-3FF      коммуникационный адаптер COM1 (модем PCjr)
   7.3.1 Чтение/запись с кассетного магнитофона.

   Только очень немногие IBM PC и PCjr используют кассетный  маг-
нитофон, а XT и AT не поддерживают  его вообще.  Помимо того, что
он очень ненадежен, обмен с кассетным магнитофоном возможен толь-
ко последовательный, но не с прямым доступом. Тем не менее, могут
быть причины для программирования кассетного магнитофона на PCjr.
Имейте ввиду, что кассетные операции используют канал 2 микросхе-
мы  таймера 8253 [2.1.1], поэтому не пытайтесь  одновременно  ис-
пользовать этот канал для  других  целей.  Отметим также, что при
операции  чтения  с кассеты, запрещено прерывание времени  суток,
поэтому счетчик времени суток  BIOS  будет давать неверное значе-
ние.

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

   Хотя  кассетные файлы обрабатываются совершенно по-другому чем
дисковые файлы, однако команды доступа к ним совершенно аналогич-
ны. Hа кассету могут записываться только программные файлы и пос-
ледовательные файлы данных.  Последние могут включать файлы изоб-
ражения памяти. Отметим, что данные не могут добавляться к после-
довательным файлам.  При создании, именам файлов даются следующие
однобайтные расширения:

   .B      программа на Бейсике
   .P      защищенная программа на Бейсике
   .A      программа на Бейсике в формате ASCII
   .M      файл изображения памяти
   .D      последовательный файл данных

   Для сохранения файла на кассете напишите SAVE "CAS1:имяфайла".
Для загрузки программы - LOAD "CAS1:имяфайла". В последнем случае
лента прогоняется до тех пор,  пока  нужный файл не будет найден,
при этом имя каждого встреченного файла будет выводиться на экран
(кассеты не используют каталоги).   Если запросить несуществующий
файл, то будет выведен полный список файлов на кассете.

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

   BIOS работает с кассетной лентой порциями в 256-байтные блоки.
Hабору блоков предшествует "лидер", который состоит из 256 байтов
ASCII  1.  Лидер завершается нулевым битом синхронизации.   Затем
следует байт синхронизации со  значением  16H, а затем 256 байтов
данных.  После этого идут 2 байта контроля ошибок, а затем  новый
блок данных, сопровождающийся  парой  байт проверки ошибок и т.д.
Вся  последовательность  завершается  четырехбайтным   "хвостом",
содержащим коды ASCII 1.
   Для чтения данных с кассеты на  до использовать функцию 2 пре-
рывания 15H.  Hет необходимости открывать файл, как это  делается
при дисковых операциях. ES:BX  указывают  на буфер в памяти, куда
будут  посылаться данные, а CX - число байтов, которые надо  счи-
тать.  При возврате DX сообщит  сколько байтов прочитано на самом
деле, а ES:BX будут указывать на последний считанный байт плюс 1.
Флаг переноса будет  равен  0,  если  чтение  прошло успешно, а в
противном  случае AH будет содержать 1, если проблема с контролем
ошибки, 2 - при ошибке чтения данных  и 3 - при отсутствии данных
на ленте.
   Функция  3 прерывания 15H записывает данные на кассету.  ES:BX
указывают на первый  байт  данных,  а  CX  содержит число байтов,
которое  надо  записать.  При возврате ES:BX указывают  на  байт,
следующий за последним записанным.  Мотор управляется функциями 0
(включение) и 1 (выключение) прерывания 15H. Для этих функций нет
выходных регистров.
   7.3.2 Чтение позиции светового пера.

   Хотя очень немногие компьютеры оснащены световым пером, тем не
менее  это  одно из немногих вспомогательных  устройств,  которое
поддерживается как  оборудованием,  так  и операционной системой.
Световое перо работает с помощью небольшого оптического детектора
на кончике пера.  По ходу  сканирования  экрана электронным лучом
инициируется импульс оптического детектора, когда пучок достигает
точки экрана, над  которой  находится  перо.  Время возникновения
этого импульса, относительно сигналов горизонтальной и вертикаль-
ной синхронизации, позволяет определить позицию светового пера.

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

   Бейсик может определять  позицию светового пера двумя способа-
ми.  При первом программа непрерывно определяет статус пера.  При
втором, когда перо используется, то управление временно передает-
ся процедуре, обеспечиваемой Вашей программой.  Для  непрерывного
контроля за пером  надо  использовать  оператор PEN как функцию в
форме  X = PEN(n), где n - кодовый номер, определяющий какую  ин-
формацию Вы хотите получить о пере и его позиции.  Возможные зна-
чения n такие:

  0    возвращает -1, если перо было выключено со времени послед-
       него запроса, 0 - если нет
  1    возвращает последнюю координату x (0-319 или 0-639), в ко-
       торой перо было  включено  (оно  могло  быть  впоследствии
       передвинуто, если оставалось включенным)
  2    возвращает последнюю координату y (0-199), в которой перо
       было  включено.
  3    возвращает -1, если перо включено и 0 - если нет
  4    возвращает текущую x координату (0-319 или 0-639) пера
  5    возвращает текущую y координату (0-199) пера
  6    возвращает позицию - номер строки (1-24), в которой  перо
       было последний раз активизировано
  7    возвращает позицию - номер столбца (1-40 или 1-80), в ко-
       торой перо было последний раз активизировано
  8    возвращает текущую позицию - номер строки (1-24)
  9    возвращает текущую позицию - номер столбца (1-40 или 1-80)

   В данном примере  определяется  включено  ли  перо, и если это
так, то берется текущее его положение:

100 IF NOT PEN(3) THEN 130   'проверяем включено ли перо
110 X = PEN(4)               'получаем координату точки по оси x
120 Y = PEN(5)               'получаем координату точки по оси y
130 ...                      'продолжаем программу

   Более гибкие возможности использования светового пера  предос-
тавляются оператором ON PEN GOSUB.  Этот оператор указывает номер
строки, в которой начинается процедура, активизируемая при  вклю-
чении пера. Бейсик достигает этого проверкой состояния пера после
выполнения каждой его инструкции.  Процедура может получить пози-
цию пера и предпринять требуемые действия. Kогда процедура закан-
чивается,  то программа продолжается с того места, где  она  была
при включении пера.
   ON PEN GOSUB не работает до тех пор, пока она не активизирова-
на  оператором PEN ON.  PEN OFF отменяет ее работу.  Смысл  этого
состоит в том, что  постоянная  проверка  статуса  пера замедляет
работу  программы, поэтому ее надо осуществлять только когда  это
необходимо.  Если программа  начинает  выполнять критичекую часть
кода, когда нельзя использовать процедуру ON PEN GOSUB,  напишите
PEN STOP. В этом случае будет продолжаться проверка статуса пера,
и если перо будет включено, то этот факт будет запомнен.   Однако
пока не будет встречен оператор PEN ON, управление не будет пере-
даваться процедуре ON PEN GOSUB.
   Данный пример вызывает остановку программы, когда нажата кноп-
ка на световом пере. Точка  в  позиции  светового пера включается
процедурой, обрабатывающей включение светового пера.

100 ON PEN GOSUB 5000   'устанавливаем процедуру для светового
110 PEN ON              'пера и включаем режим отслеживания его
 .
 .
5000 '''процедура обработки светового пера
5010 X = PEN(4)         'получаем координату X
5020 Y = PEN(5)         'получаем координату Y
5030 PSET(X,Y)          'включить эту точку
5040 RETURN             '

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

   Функция  4 прерывания 10H BIOS сообщает текущую позицию свето-
вого пера.  У нее нет входных регистров. При возврате AX содержит
0,  если перо не включено и 1 - если получены новые значения  для
его позиции. Возвращается два  набора  координат, позиции точки и
позиции строки и столбца. Позиции символа содержатся в DX, причем
DH содержит строку (0-24), а DL  -  столбец (0-79). Позиция точки
содержится  в CH и BX, причем CH содержит вертикальную координату
(0-199), а BX - горизонтальную (0-319 или 0-639, в зависимости от
режима терминала).

;---читаем и запоминаем положение светового пера
   MOV  AH,4            ;номер функции
   INT  10H             ;прерывание BIOS
   CMP  AH,1            ;новая позиция?
   JE   NO_READING      ;если нет, то уходим
   MOV  COL,BX          ;сохраняем горизонтальную координату
   MOV  CL,CH           ;помещаем вертикальную координату
   MOV  CH,0            ;в CX
   MOV  ROW,CX          ;сохраняем вертикальную координату

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

   По своей сути световое перо является расширением  видеосистемы
и как таковое использует микросхему контроллера CRT 6845. Позиция
светового  пера  дается одним 2-хбайтным значением, хранящимся  в
регистрах 10H (старший байт) и  11H  (младший байт) микросхемы. В
[4.1.1]  объясняется как читать регистры микросхемы.   Посмотрите
пример.  Порт с адресом  3DCH  устанавливает  задвижку  светового
пера, а с номером 3DBH - сбрасывает ее.
;---проверка светового пера и чтение его позиции
   MOV  DX,3DAH       ;указываем на регистр статуса
   IN   AL,DX         ;получаем информацию
   TEST AL,4          ;проверяем выключатель
   JNZ  NOT_SET       ;на выход
   TEST AL,2          ;проверяем триггер
   JZ   NOT_SET       ;на выход
   SUB  DX,7          ;указываем на регистр адреса 6845
   MOV  AL,10H        ;запрос на старший байт позиции пера
   OUT  DX,AL         ;посылаем запрос
   INC  DX            ;указываем на регистр данных 6845
   IN   AL,DX         ;получаем значение
   XCNG AH,AL         ;запоминаем его в AH
   DEC  DX            ;возвращаемся к адресному регистру
   MOV  AL,11H        ;теперь хотим получить младший байт
   OUT  DX,AL         ;посылаем запрос
   INC  DX            ;назад к регистру данных
   IN   AL,DX         ;теперь это значение в AX
   7.3.3 Получение аналогового ввода через игровой порт.

   Игровой порт может поддерживать 2 джойстика или 4 "весла". Для
джойстика он сообщает две  координаты  и  статус двух кнопок; для
Предыдущая страница Следующая страница
1 ... 74 75 76 77 78 79 80  81 82 83 84 85 86 87 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама