Optron
#32
22 октября 1999 |
|
Ликбез - Ассемблер взгляд издалека: Работа с внешними устройствами. Чтение данных из порта. Команды записи в порт.
Ассемблер - взгляд издалека Продолжение. Начало в || 20, 21, 24, 25, 28-30 {}Инфарх, 1999 Работа с внешними устройствами К таковым относятся клавиатура, магнито- фон, принтер, много ещё чего (зависит от конкретного варианта). Так как же процес- сор обменивается с ними информацией? Оче- видно, что они не включены непосредственно в шину данных (ШД). Между внешним устройством (ВУ) и процессором есть такая вещь, как "порт". Только не подумайте, что я про морской порт вам рассказывать буду! На самом деле "порт" - это устройство, которое по коман- де процессора подключит к ШД определённое ВУ. Какое - зависит от его адреса. Напри- мер, порт kempston joystick'а имеет адрес #1F, бипер - #FE и т.д. Теоретически количество портов может быть 65536, но на практике это число го- раздо меньше и зависит от аппаратной реа- лизации вашего Speccy. Здесь имеет значе- ние метод дешифрации порта, т.е. определе- ние того, какое ВУ в данный момент должно быть подключено к ШД. К примеру, хоть порт джойстика имеет номер #1F, его дешифрация чаще всего происходит только по разряду A5 шины адреса (ША). Рассмотрим сей процесс подробнее. При- знаком работы с портом, является низкий уровень сигнала IORQ. Какой процесс проис- ходит (чтение из порта или запись в него), подскажет низкий уровень сигналов RD или WR соответственно. И если при таковом со- четании сигналов (IORQ=0; RD=0) сигнал A5 ША имеет низкий уровень, то будет выбран порт джойстика. При этом значение, прочи- танное из него, появится на ШД. Запись происходит аналогично, только используется сигнал WR и число с ШД попадает в порт. А вот как управлять всеми этими сигнала- ми без помощи паяльника и большого коли- чества пива? Для этого процессор распола- гает специальными командами, которые я вам сейчас и продемонстрирую. Чтение данных из порта Наверняка в бейсике вам встречалась ко- манда IN. Так вот, в ассемблере есть точно такая же. Она присутствует в таких вариан- тах: IN A,(n) IN r,(C) Первый вариант команды производит чтение из порта, младший байт адреса которого за- писан в скобках, а старший - в аккумулято- ре. Байт, прочитанный из порта, будет по- мещён в "A". Для того, чтобы с помощью этой команды прочитать состояние kempston joystick'а, надо записать её сле- дующим образом: IN A,(#1F) Как я уже говорил, дешифрация порта #1F происходит, как правило, только одним раз- рядом ША, поэтому содержимое регистра "A" может быть любым. Хвастайтесь перед всеми, что ваш компьютер имеет 256 портов джойстика! А теперь обратимся ко второму варианту. В качестве приёмника для считанного байта служит "r", который на практике может быть одним из регистров: A, B, C, D, E, H, L Адрес порта помещается в регистровую па- ру BC. Этот вариант наиболее удобен, если вам следует использовать полную адресацию порта. К примеру, рассмотрим чтение клавиатуры. Адреса портов клавиатуры отличаются только старшим байтом, а младший всё время равен #FE. Какой полуряд в данный момент читает- ся, видно из таблички: ╔═══════════╤═══════╗ ║ Полуряд │ Адрес ║ ║ │ порта ║ ║───────────┼───────╢ ║ Space...B │ 7FFE ║ ║ Enter...H │ BFFE ║ ║ P.......Y │ DFFE ║ ║ 0.......6 │ EFFE ║ ║ 1.......5 │ F7FE ║ ║ Q.......T │ FBFE ║ ║ A.......G │ FDFE ║ ║ CS......V │ FEFE ║ ╚═══════════╧═══════╝ Одной из особенностей чтения из порта клавиатуры является то, что младшие биты полученного значения относятся к крайним клавишам полуряда. Наример, если мы выпол- ним нечто вроде LD BC,#EFFE IN A,(C) то полученный байт будет иметь следующее значение: ╔══╤══╤══╤══╤══╤══╤══╤══╗ ║x │x │x │6 │7 │8 │9 │0 ║ Клавиша ╟──┼──┼──┼──┼──┼──┼──┼──╢ ║D7│D6│D5│D4│D3│D2│D1│D0║ Бит ╚══╧══╧══╧══╧══╧══╧══╧══╝ Битам D7, D6, D5 повезло - они имели честь остаться неиспользованными. О том, что определённая клавиша нажата, мы узнаем по состоянию соответствующего ей бита - он будет сброшен. Расширим приведённый выше пример: LD BC,#EFFE;полуряд 6...0 IN A,(C) ;чтение состояния RRCA ;проверка JR NC,ZERO ;нажат "0" ;продолжаем работу ..... ..... ZERO Вот так и просходит работа с клавиату- рой. Не правда ли, все просто? А теперь давайте рассмотрим процесс об- ратный - Команды записи в порт Они весьма похожи на команды чтения. Вот, взгляните: OUT (n),A OUT (C),r Запись в порт аналогична чтению, по крайней мере, в том, что относится к пере- даче параметров. К примеру, рассмотрим запись в порт #FE. На него возложена не одна задача, а сразу несколько: младшие три бита определяют цвет бордюра, бит D3 посылает импульс на гнёзда MIC и EAR, а бит D4 включает или выключает бипер. Итак, допустим, что вам необходимо уста- новить красный бордюр. Для этого выполните следующее: LD A,2 OUT (#FE),A Пару слов о бите D4. Всякий раз, когда вы переводите его в противоположное состо- яние (разумеется, высылая результат в порт), внутренний динамик издаёт краткий щелчёк. Таким образом, манипулируя этим битом с определённой скоростью, вы можете создавать простые звуки. Так, на сегодня вроде бы всё... Что? Ах, да, я совсем забыл о влиянии на флаги! Ну, давайте посмотрим, что у нас тут... ╔═══════════╤═══════════════╗ ║ Мнемоника │ Флаги ║ ║ операции ├───────────────╢ ║ │ C Z P/V S N H ║ ╟───────────┼───────────────╢ ║ OUT (n),A │ . . . . . . ║ ║ OUT (C),r │ . . . . . . ║ ║ │ ║ ║ IN A,(n) │ . . . . . . ║ ║ IN r,(C) │ . x P x 0 x ║ ╚═══════════╧═══════════════╝ Как видите, и здесь всё довольно просто. Ну, теперь действительно всё. Итак, до следующего раза! Продолжение следует... ──══════════──
Другие статьи номера:
Non Possumus - Сеть... Что же это такое на самом деле? |
ZX-Обоз - Обзор электронной прессы: Nicron 112-113, Полесье 11, ZX-News 49, Born Dead 0D. |
Вся жизнь игра - Операция Р.Р. (окончание Приключения последнего). |
Ликбез - Ассемблер взгляд издалека: Работа с внешними устройствами. Чтение данных из порта. Команды записи в порт. |
Реклама - Реклама и объявления... |
Рубрика X - Торжественная поинтовка. |
Смотрите Картины маслом на нашем сайте. |
Похожие статьи:
В этот день... 21 ноября