THE
COMPLETE AMIGA HARDWARE
REFERENCE MANUAL
ГЛАВА 8 ИНТЕРФЕЙСЫ ВВЕДЕНИЕ В этой главе описываются внешние интерфейсы Амиги, с помощью которых она общается с внешним миром и рассматриваются следующие устройства: - Два многоцелевых контроллера порта мыши/джойстика/светового пера ** - Контроллер дисковода (для НГМД и других MFM и GCR устройств) - Клавиатура - Параллельный интерфейс ввода-вывода, совместимый с Centronics (для принтеров) - Последовательный интерфейс ввода-вывода, совместимый с RS232-C (для внешних модемов и других последовательных устройств) - Разъем видео вывода (RGB, ч/б, NTSC, RF modulator, видео слот) ** ПРИМЕЧАНИЕ При переводе этой главы были опущены разделы, касающиеся описания пропорционального джойстика и светового пера как не представляющие большого практического интереса. Интересующиеся могут найти эти сведения в оригинальной версии THE COMPLETE AMIGA HARDWARE REFERENCE MANUAL (1.3), Chapter 8, Interface Hardware. ПОРТ КОНТРОЛЛЕРА МЫШИ Любая Амига имеет два девятиштырьковых разъема, которые могут быть использованы для ввода и вывода. На рисунке показаны внешний вид одного из разъемов и вставляемой в разъем части внешнего устройства. рис 8-1: Внешний вид разъема контроллера мыши Таблица 8-1: Назначения выводов разъема контроллера мыши Мышь, Трекбол, Проп. X-Y Контроллер Контроллер Проп. Световое Вывод Джойстик руля (Пара) Джойстик Перо 1 Вперед Сигнал-V --- Кнопка 3** --- 2 Назад Сигнал-H --- --- --- 3 Влево Сигнал-VQ Левая кнопка Кнопка 1 --- 4 Вправо Сигнал-HQ Правая кнопка Кнопка 2 --- 5 * --- Средняя кнопка** Правый POT POT X Перо на экране 6 * Кнопка 1 Левая кнопка --- --- Триггер луча 7 --- +5V +5V +5V +5V 8 GND GND GND GND GND 9 * Кнопка2** Правая кнопка Левый POT POT Y Кнопка2** * Эти контакты могут быть сконфигурированы на вывод ** Эти кнопки могут отсутствовать РЕГИСТРЫ, ИСПОЛЬЗУЕМЫЕ ПОРТОМ КОНТРОЛЛЕРА JOY0DAT ($DFF00A) Счетчик для цифрового ввода (мышь) (порт 1) JOY1DAT ($DFF00C) Счетчик для цифрового ввода (мышь) (порт 2) CIAAPRA ($BFE001) Ввод и вывод для 6 контакта."Огонь" для портов 1 и 2 POT0DAT ($DFF012) Счетчик для пропорционального ввода (порт 1) POT1DAT ($DFF014) Счетчик для пропорционального ввода (порт 2) POTGO ($DFF034) Запись значений и запуск проп. счетчиков POTGOR ($DFF016) Чтение значений проп. разъема BPLCON0 ($DFF100) Бит 3 включает защелку светового пера VPOSR ($DFF004) Чтение позиции светового пера (старшие биты) VHPOSR ($DFF006) Чтение позиции светового пера (младшие биты) ЧТЕНИЕ КОНТРОЛЛЕРОВ МЫШИ/ТРЕКБОЛА При движении мыши возникают горизонтальные и вертикальные импульсы. Восьмибитные регистры - счетчики обеспечивают перемещение мыши без вмешательства процессора. Импульсы мыши имеют прямоугольную форму. Механические колесики мыши при перемещении выдают два импульса, находящиеся в противофазе друг к другу. (см. рис 8-2) Направление перемещения определяется отношением фаз импульсов. Счетчики увеличиваются, когда мышь перемещается направо или вниз (к вам) и уменьшаются при перемещении налево или вверх (от вас). КВАДРАТУРА МЫШИ V VQ : D1 D0 ---------------- 0 0 : 1 0 0 1 : 0 1 1 0 : 1 1 1 1 : 0 0 Вариант 1: Счет вверх ________ ________ ________ ____ / \ / \ / \ / V ____/ \________/ \________/ \________/ ________ ________ ________ / \ / \ / \ VQ ________/ \________/ \________/ \__________ ____ ____ ____ ____ ____ ____ / \ / \ / 1 \ 0 / \ / \ / D0 ____/ \____/ \____/ \____/ \____/ \____/ D1 ________ ________ ________ _________ \ / 1 \ 0 / \ / \________/ \________/ \________/ Вариант 2: Счет вниз ________ ________ ________ ____ / \ / \ / \ / V ____/ \________/ \________/ \________/ VQ ________ ________ ________ ________ \ / \ / \ / \________/ \________/ \________/ D0 ____ ____ ____ ____ ____ ____ \ / \ / \ / \ / \ / \ \____/ \____/ \____/ \____/ \____/ \____ ________ ________ ________ / \ / \ / \ D1 ________/ \________/ \________/ \________ D2 ____ \ \____ и т.д. Рис. 8-2: Квадратура мыши ЧТЕНИЕ СЧЕТЧИКОВ Чтение счетчиков мыши/трекбола может быть осуществлено чтением содержимого регистров JOY0DAT и JOY1DAT, содержащих счетчики соответственно для первого и второго портов. Эти регистры имеют следующую раскладку бит: Биты 15-8 Вертикальный счетчик мыши/трекбола Биты 7-0 Горизонтальный счетчик мыши/трекбола ОГРАНИЧЕНИЯ СЧЕТЧИКОВ Значения, содержащиеся в счетчиках зациклены в интервале 0-255, что соответствует объему одного байта. Если вы хотите использовать мышь в вышей программе, вам необходимо считывать содержание счетчиков как минимум один раз за время вертикальной развертки и сохранять их предыдущее значение. Затем, для определения направления перемещения и скорости мыши, надо получить разность предыдущего и текущего значений. Мышь выдает около 200 импульсов на каждый дюйм движения в любом направлении. Обратный ход луча происходит каждые 1/60 секунды. Если вы читаете содержимое счетчиков мыши один раз за время вертикальной развертки вы можете поймать различие в значениях счетчиков (от предыдущих) не более 127. Счетчики могут переполниться только если пользователь перемещает мышь со скоростью более 38 дюймов в секунду. Быстрые игры в жанре Action могут потребовать более частого чтения регистров мыши для предотвращения переполнения счетчиков. Если вы вычтете текущее значение счетчика от его предыдущего значения, то абсолютное значение разности будет определять скорость перемещения мыши, а знак разности будет определять направление перемещения мыши. Простейший путь вычисления скорости мыши - это использование восьмибитовой знаковой арифметики. Новое значение счетчика минус предыдущее значение дает число импульсов, пришедших с момента последней проверки счетчика. В таблице 8-2 рассмотрен альтернативный метод. При этом оба счетчика представляются в качестве беззнаковых величин от 0 до 255. Изменение значения счетчика на 100 импульсов определяется в любом случае. Табл. 8-2: Определение направления перемещения мыши. Предыд. Текущее Направление Значение Значение 200 100 Вверх (Влево) 100 200 Вниз (Вправо) 200 45 Вниз * 45 200 Вверх ** ПРИМЕЧАНИЯ к табл. 8-2 * Поскольку 200-45=155 что больше 127, правильный результат должен быть 255-(200-45)=100, направление вниз. ** 45-200=-155. Поскольку абсолютное значение -155 больше 127, правильный результат должен быть 255+(-155)=100, направление вверх КНОПКИ МЫШИ Стандартная амижная мышь имеет 2 кнопки. Однако, программное обеспечение поддерживает до 3х кнопок. - Левая кнопка мыши может быть прочитана из регистра CIAAPRA ($BFE001). Кнопка первого порта соответствует 6 биту, кнопка второго порта - 7 биту. Для более подробной информации см. приложение F. Логическое состояние 1 обозначает "переключатель открыт" Логическое состояние 0 обозначает "переключатель закрыт" - Кнопка 2 (правая кнопка мыши) присоединена к 9 выводу порта контроллера, одному из контактов, используемых пропорциональными устройствами. Для более полной информации см. "Цифровой ввод/вывод на порт контроллера." - Кнопка 3, когда используется, присоединена к 5 выводу порта контроллера, другому контакту, используемому пропорциональными устройствами. ЧТЕНИЕ ЦИФРОВОГО ДЖОЙСТИКА Цифровой джойстик имеет 4 контакта, отвечающих за направление. С помощью рукоятки может быть активизирован каждый контакт. При диагональном положении рукоятки активизируются два соседних контакта. Из этого следует, что всего возможно 8 различных направлений. Все цифровые джойстики имеют как минимум 1 кнопку. Джойстик имеет нормально разомкнутые контакты. При активизации контакта входная линия замыкается на землю, следовательно открытый контакт считывается как 1, а замкнутый как 0. Чтение состояния джойстика осложняется тем, что регистры данных джойстика и счетчики мыши это одно и то-же. Регистры джойстика называются JOY0DAT и JOY1DAT В таблице 8-3 показано как интерпретируются данные при чтении из этих регистров. 1 обозначает - контакт замкнут. Рис. 8-2-1: Счетчики мыши Табл. 8-3: Интерпретация данных JOY0DAT и JOY1DAT Бит данных Интерпретация 1 Логическое состояние ИСТИНА - вправо 9 Логическое состояние ИСТИНА - влево 1 (XOR) 0 Для получения логического состояния направления "назад" необходимо вычислить исключающее ИЛИ бит 1 и 0 9 (XOR) 8 Для получения логического состояния направления "вперед" необходимо вычислить исключающее ИЛИ бит 9 и 8 Кнопка "огонь" для портов 0 и 1 может быть прочитана в битах 6 и 7 регистра CIAAPRA ($BFE001). Нулевое значение обозначает замкнутое состояние Некоторые, но не все джойстики имеют вторую кнопку. Эта кнопка может быть использована при наличии дублирования ее на клавиатуре. Вторая кнопка может быть прочитана так-же, как и правая кнопка мыши. ЦИФРОВОЙ ВВОД/ВЫВОД НА ПОРТ КОНТРОЛЛЕРА Amiga может читать и интерпретировать большое количество различных и нестандартных контроллеров. Управляющие линии, находящиеся в регистре POTGO, расположенном по адресу $DFF034 могут переопределять функции некоторых выводов порта контроллера Таблица 8-4 - описание битов регистра POTGO. Регистр POTGO ($DFF034) - только для записи, POTINP ($DFF016) - только для чтения. Регистр управления управляет 4х-битным двунаправленным VO портом использующим те же самые четыре штырька как на ввод, так и на вывод Таблица 8-4: Регистры POTGO ($DFF034) и POTINP ($DFF016) Номер бита Имя Функция 15 OUTRY Вывод для бита 14 (l=вывод) 14 DATRY Данные для порта 2, вывод 9 13 OUTRX Вывод для бита 12 12 DATRX Данные для порта 2, вывод 5 11 OUTLY Вывод для бита 10 10 DATLY Данные для порта 1, вывод 9 (правая кнопка мыши) 09 OUTLX Вывод для бита 8 08 DATLX Данные для порта 1, вывод 5 (средняя кнопка мыши) 07-01 X Номер ревизии чипа 00 START Начальные установки (dump capacitors, start counters) Вместо того, чтобы использовать линии в качестве переменных входов, вы можете использовать их как 4х-битный порт ввода-вывода. Это обеспечивает вас двумя дополнительными выводами на каждом из двух портов контроллера для универсального ВВОДА - ВЫВОДА. Если вы установите возможность вывода для линии в 1, Amiga отключает схему управления потенциометром, и конфигурирует этот контакт для вывода. Состояние бита данных управляет логическим уровнем на выходном контакте. Регистр должен записываться по адресу POTGO, и читаться из адреса POTINP. На этих выводах имеются большие конденсаторы, поэтому изменение логического состояния может происходить со скоростью до 300 микросекунд. Чтобы использовать для ввода весь регистр, запишите во все биты POTGO нули. С этого времени вы можете считывать текущее состояние пользуясь только регистром POTINP. Обратите внимание, что биты sct при вводе будет соединяться с пропорциональными счетчиками (См. описание бита START в POTGO ). Эти линии могут также использоваться как дополнительные кнопки. Кнопка- обычно открытый переключатель, который замыкается на землю . Амига должна обеспечивать сопротивление на выходе. Для этого, установите соответствующий контакт на вывод, и установите OUT и DAT в 1. При чтении POTINP будет выдаваться 0 если кнопка нажата и 1 если не нажата. Кнопки огонь джойстика могут также быть сконфигурированы как выводы. CIAADDRA ($BFE201) содержит маску которая взаимно-однознач. соответствует регистру чтения данных, CIAAPRA ($BFE001). Установка 1 в определенной позиции делает соответствующий бит выводом. Для подробностей см. приложение F КОНТРОЛЛЕР ГИБКОГО ДИСКА К встроенному контроллеру диска может подключаться до четырех MFM устройств. Обычно это двухсторонние, с двойной плотностью, 3.5" (9Omm) или 5.25" дисководы. Один дисковод 3.5" установлен в корпусе Амиги Контроллер чрезвычайно гибок. Он может считать в память с помощью DMA всю дорожку данных MFM без заголовка с помощью одной операции. Специальные регистры позволяют синхронизировать CPU с определенными данными, или считывать входной байт одновременно с его чтением с диска. Контроллер может считывать и записывать фактически любые MFM диски с двойной плотностью, включая амижный формат V1.0, IBM PC (МС-ДОС 5.25"), IBM PC (МС-ДОС 3.5") и кроме того CP/M/ITM диски. Контроллер имеет средства для чтения и записи наибольшего количества дискового пространства методом Group Coded Recording (GCR), с помощью которого возможна работа с дисками APPLE II. С помощью управления скоростью двигателя, контроллер может читать и записывать диски формата Commodore 1541/1571. РЕГИСТРЫ, ИСПОЛЬЗУЕМЫЕ ДИСКОВОЙ ПОДСИСТЕМОЙ Дисковая подсистема использует два порта в чипах CIA 8520 и два порта в чипе Paula. CIAAPRA ($BFE001) четыре входных бита наличия диска CIABPRB ($BFD100) восемь выходных бит для выбора диска, управления и перемещения головки ADKCON ($DFF09E) Управляющие биты (только для записи) ADKCONR ($DFF010) Управляющие биты (только для чтения) DSKPTH ($DFF020) Указатель DMA (32 бита) DSKLEN ($DFF024) Длина блока DMA DSKBYTR ($DFFOlA) Байт данных диска и чтения статуса DSKSYNC ($DFF07E) Поиск синхронизации диска; хранит слово соответствия См рис 8-7, 8-8: ВременнЫе диаграммы CIAAPRA/CIABPRB - ВЫБОР ДИСКА, УПРАВЛЕНИЕ И СЧИТЫВАНИЕ В следующей таблице приведен список регистров 8520, используемых дисковой подсистемой. Биты, помеченные как "PA" - входные биты в CIAAPRA ($BFE001). Биты, помеченные как "PB" - выходные биты в CIAAPRB ($BFD100). Более подробную информацию об операциях с чипами 8520 можно найти в приложении F. Табл. 8-5: Дисковая подсистема. Бит Имя Функция PA5 DSKRDY * Готовность диска (активный уровень - низкий). Дисковод будет выдавать активный уровень сигнала, когда двигатель работает с номинальной скоростью. Этот сигнал действителен только тогда, когда двигатель ВКЛЮЧЕН, в другое время тут может содержаться иная информация. PA4 DSKTRACK0* Обнаружена нулевая дорожка. Дисковод будет выдавать низкий уровень сигнала, когда головки дисковода располагаются на нулевой дорожке. Программа не должна пытаться делать шаг на наружную сторону диска, когда этот сигнал находится в активном состоянии. Некоторые дисководы будут отказываться шагать, другие будут пытаться сделать шаг, что может вызвать ошибку выравнивания. Все новые дисководы должны отказываться шагать в этом направлении PA3 DSKPROT* Диск защищен от записи (активный уровень - низкий) PA2 DSKCHANGE* Диск удален из дисковода. Сигнал принимает низкий уровень всякий раз, когда диск удаляется и остается на низком уровне, пока диск не вставляется обратно и пока не выдается импульс шага. PB7 DSKMOTOR* Управление двигателем диска (активный уровень - низкий). Для Амиги этот сигнал нестандартен. Каждый дисковод будет защелкивать сигнал двигателя во время включения сигнала выбора. Двигатель дисковода будет оставаться в этом состоянии до тех пор, пока сигнал выбора не придет еще раз. DSKMOTOR* также управляет световым индикатором на передней стороне дисковода. Все программы, которые выбирают дисководы должны устанавливать сигнал двигателя перед выбором любого дисковода. Дисковод будет "помнить" состояние двигателя даже когда не выбран. После сброса системы все двигатели дисководов выключаются. После включения двигателя, программа должна выждать в течение половины секунды (500ms), или дождаться сигнала низкого уровня на линии DSKRDY* PB6 DSKSEL3* Выбор дисковода 3 (активный уровень - низкий) PB5 DSKSEL2* Выбор дисковода 2 (активный уровень - низкий) PB4 DSKSEL1* Выбор дисковода 1 (активный уровень - низкий) PB3 DSKSEL0* Выбор дисковода 0 (встроенный) (активный уровень - низкий) PB2 DSKSIDE Определяет головку дисковода для использования Нуль обозначает верхнюю головку. Перед началом записи DSKSIDE должен находится в стабильном состоянии 100 микросекунд. Для переключения DSKSIDE, после записи должно пройти как минимум 1.3 миллисекунды PB1 DSKDIREC Определяет направление шага головки. Нуль обозначает направление к центру диска. Нулевая дорожка располагается на наружной стороне диска. Эта линия должна устанавливаться перед выдачей импульса шага, отдельной записью в регистр. PB0 DSKSTEP* Перемещение головки диска. Этот сигнал должен всегда вызываться следующим образом: высокий уровень, низкий уровень на очень короткое время, и снова высокий уровень. Дисководы используемые на Амиге гарантируют переход на следующую дорожку за 3 миллисекунды. Некоторые дисководы поддерживают более высокую скорость, но некоторые будут выдавать ошибку. Для выполнения задержки неприемлемо использование циклов. В приложении F можно найти более правильное решение этой проблемы. При изменении направления перемещение, требуется задержка как минимум 18 миллисекунд, считая от последнего импульса. Время успокоения для амижных дисководов равняется 15 миллисекунд. FLAG DSKINDEX* Индексный импульс диска ($BFDD00, бит 4). Может Использоваться для создания прерываний 6 уровня. Для более подробной информации см. Приложение F УПРАВЛЕНИЕ ДИСКОВЫМ DMA Обычно дисковые операции осуществляются под управлением канала прямого доступа (DMA). DMA управляется четырьмя параметрами: - Указателем на область источника или приемника данных - Длинной области данных - Направлением трансфера (чтение/запись) - Включением и выключением DMA DSKPTH - УКАЗАТЕЛЬ НА ДАННЫЕ Вы задаете 32х битный адрес, из которого или в который должны перемещаться данные. Младший бит адреса должен быть равен нулю, и, кроме того, буфер должен располагаться в ЧИП памяти. Значение должно записываться в виде одиночного длинного слова по адресу $DFF020 (регистр DSKPTH) DSKLEN - ДЛИНА, НАПРАВЛЕНИЕ, ВКЛЮЧЕНИЕ DMA Все управляющие биты собраны в один регистр, называемый DSKLEN (только для записи) Табл. 8-6: Регистр DSKLEN ($DFF024) Номер Бита Имя Назначение 15 DMAEN Включение вторичного дискового DMA 14 WRITE Запись диска (Если 1, то RAM) 13-0 LENGTH Число слов для операции Для запуска DMA требуется специальная последовательность действий, благодаря чему предотвращается случайная запись на диск. Короче говоря, для того, чтобы фактически запускать DMA диска, бит DMAEN в регистре DSKLEN должен включаться дважды. Как образец, можно придерживаться следующей последовательности действий: 1. Включите DMA диска в регистре DMACON (Для подробностей см. главу 7) 2. Запишите $4000 в DSKLEN, это выключит DMA диска 3. Установите желаемое значение в регистре DSKLEN. 4. Запишите это значение в регистр DSKLEN еще раз. Это запустит DMA. 5. После завершения работы DMA, снова установите $4000 в регистр DSKLEN. Это предотвратит случайную запись на диск. Во время перемещения каждого слова счетчик длины уменьшается. После того, как передача окончена, увеличивается значение указателя. Указатель после этого указывает на следующее слово данных для записи или чтения. Когда счетчик длины становится 0, передача данных заканчивается. Рекомендуемый метод чтения с диска состoит в том, что необходимо считать всю дорожку в буфер, а затем найти сектор, который вы хотите использовать. Использование регистра DSKSYNC (описанного ниже) гарантирует выравнивание данных по словам. Таким образом чтение с диска происходит только один раз для всей дорожки. В высокоскоростном загрузчике, шаг головки может происходить во время обработки или проверки контрольной суммы предыдущей дорожки. При использовании этого метода нет никаких критических по времени моментов в чтении данных, что позволяет выполняться другим высокоприоритетным подсистемам (таким как графика или звук) Если у вас слишком мало памяти для буферизации всей дорожки (или вы не можете читать сразу всю дорожку по другой причине), дисковая подсистема имеет ограниченный набор средств поиска сектора. Существует регистр для исследования входного потока данных. В железе имеется ошибка, из-за которой теряются последние три бита данных посланных на диск. Также, может не приходить последнее слово в при операции чтения с помощью DMA (то-есть может читаться на одно слово меньше, чем вы запросили). DSKBYTR - БАЙТ ДАННЫХ ДИСКА И ЧТЕНИЕ СОСТОЯНИЯ (ТОЛЬКО ЧТЕНИЕ) Этот регистр - буфер данных дискового микропроцессора. В режиме чтения, данные с диска помещается в этот регистр байт за байтом. Как только байт помещен в регистр, устанавливается бит DSKBYT. Очистка бита DSKBYT происходит при чтении регистра DSKBYTR. DSKBYTR может использоваться для синхронизации процессора и вращения диска перед выдачей команд чтения или записи под управлением DMA. Табл. 8-7: Регистр DSKBYTR. Номер бита Имя Функция 15 DSKBYT Когда установлен, сигнализирует о том, что регистр содержит непрочитанные данные (очищается чтением) 14 DMAON Указывает, что DMA действительно доступно. Все биты включения DMA должны быть включены, т.е. бит DMAEN в регистре DSKLEN и биты DSKEN и DMAEN в регистре DMACON. 13 DISKWRITE Допускается использование бита записи (в DSKLEN) 12 WORDEQUAL Указывает, что регистр DISKSYNC равняется входному дисковому потоку. Этот бит истинен только тогда, когда входной поток соответствует регистру синхронизации (две микросекунды ). 11-8 В данный момент не используется, но зависит от данных чтения 7-0 DATA Данные ADKCON И ADKCONR - РЕГИСТРЫ УПРАВЛЕНИЯ ЗВУКОМ И ДИСКОМ Этот регистр имеет 2 адреса: ADKON - только для записи и ADKCONR - только для чтения. Не все биты выделены диску. Бит 15 этого регистра - бит SET/CLR, дающий возможность независимой работы с битами. Если бит 15 установлен во время записи, то любые включенные биты в позициях 0-14 будут включать соответствующий бит. Если бит 15 - нуль, соответствующие биты будут выключаться. Табл. 8-8: Регистры ADKCON и ADKCONR. Номер бита Имя Функция 15 SET/CLR Управляющий бит. Позволяет устанавливать или очищать отдельные биты без влияния на остальное содержимое регистра Если бит 15 - 1, биты устанавливаются Если бит 15 - 0, биты сбрасываются 14 PRECOMP1 MSB спецификатора прекомпенсации 13 PRECOMP0 LSB спецификатора прекомпенсации Значение 00 не выбирает ничего Значение 01 выбирает 140 ns. Значение 10 выбирает 280 ns. Значение 11 выбирает 560 ns. 12 MFMPREC Значение 0 выбирает прекомпенсацию GCR. Значение 1 выбирает прекомпенсацию MFM. 10 WORDSYNC Значение 1 включает синхронизирование и запускает DMA на чтение слова с диска. Слово на котором происходит синхронизация должно быть записано по адресу DSKSYNC ($DFF07E). 9 MSBSYNC Значение 1 включает синхронизацию по старшему биту входного потока (обычно используется для GCR. 8 FAST Значение 1 выбирает две микросекунды на бит (обычно MFM). Данные должны быть в формате MFM raw. 0 Выбирает четыре микросекунды на бит (обычно GCR). Raw данные для MFM должны передаваться контроллеру в следующем формате: 1 ---> 01 0 ---> 10;если после 0 0 ---> 00;если после 1 Таким образом, размер данных увеличивается в 2 раза. При умном подходе для кодирования и декодирования MFM данных возможно использование блиттера. В общем виде, запись на GCR, каждый байт данных всегда имеет включенный старший бит. MSBSYNC, когда 1, заставляет контроллер искать этот синхро-бит в каждом байте. При чтении GCR диска, программа должна использовать таблицу перекодировки, называемую nybbleizer, чтобы гарантировать что данные записанные на диск не имеет слишком много последовательных 1's или 0's. DSKSYNC - ВХОДНОЙ СИНХРОНИЗАТОР Регистр DSKSYNC используется для синхронизации входного потока. Это очень полезно при чтении дисков. Если бит WORDSYNC в ADKCON включен, данные не перемещаются до тех пор, пока во входном потоке не найдено слово, которое соответствует слову в регистре DSKSYNC. При чтении, DMA будет запускаться со следующим словом с диска. Во время чтения диска с помощью DMA, контроллер будет синхронизироваться каждый раз, когда найдено соответствующее слово. Обычно в DSKSYNC устанавливается 'волшебное' для MFM значение метки- $4489. Кроме того, бит DSKSYNC в INTREQ устанавливается когда входной поток соответствует регистру DSKSYNC. Бит DSKSYNC в INTREQ независящий от WORDSYNC включен. ДИСКОВЫЕ ПРЕРЫВАНИЯ Контроллер диска может выдавать три вида прерываний: o DSKSYNC (уровень 5, INTREQ бит 12) - входной поток соответствует регистру DSKSYNC o DSKBLK (уровень 1, INTREQ бит 1) - DMA диска завершил работу o INDEX (уровень 6, Флаг вывода 8520) - индекс переключен Прерывания объясняются далее в разделе "Длина, Направление, Включение DMA". Для подробностей, касающихся прерываний см. главу 7, "Управление чипсетом". Для подробностей, касающихся 8520 см. Приложение F КЛАВИАТУРА Клавиатура подключена к системе с помощью последовательного сдвигового регистра на одном из чипов 8520 CIA. Данные клавиатуры присоединены к выводу SP, таймер клавиатуры присоединен к выводу CNT. Приложение H содержит полное описание интерфейса. КАК ПРИНИМАЮТСЯ ДАННЫЕ ОТ КЛАВИАТУРЫ Линия CNT используется как таймер для клавиатуры. При каждом проходе этой линии, синхронизируется один бит данных клавиатуры. Клавиатура посылает этот импульс когда информационный бит принимает устойчивое состояния на линии SP. Активный уровень этого импульса - низкий. Растущий край импульса синхронизирует данные. После того, как байт данных получен от клавиатуры, на процессор выдается прерывание 8520. Перед дальнейшей передачей клавиатура ждет ответного сигнала от системы. Этот сигнал выдается процессором переводом линии SP на низкий уровень, а затем на высокий уровень. Несмотря на то, что некоторые клавиатуры могут обнаруживать ответный импульс длительностью 1 микросекунду, для того, чтобы работали все модели амижных клавиатур, импульс должен быть по крайней мере 85 микросекунд. Если произошло нажатие клавиши до того, как предыдущее принято процессором, микропроцессор клавиатуры задерживает клавиши в буфере клавиатуры, объемом 10 кодов клавиш. ТИПЫ ДАННЫХ КЛАВИАТУРЫ Данные от клавиатуры не передаются в виде ASCII символов. Вместо этого, для получения максимальной эксплуатационной гибкости, используются коды клавиш. Эти коды включают как коды нажатия, так и отпускания клавиши. Это позволяет программам точно определять то, что происходит на клавиатуре. Ниже приведен список шестнадцатеричных значений кодов клавиш. Нажатию клавиши соответствует значение, указанное здесь. Отпусканию клавиши соответствует это-же значение плюс $80. Рисунок клавиатуры в конце этого раздела показывает соответствие позиций клавиш, описанных в параграфах ниже. Обратите Внимание - коды клавиш обеспечивают только позиционную информацию. Надписи на клавишах могут изменяться от страны к стране. КОДЫ КЛАВИШ 00-3F HEX Эти коды клавиш на основной части клавиатуры. Символы, написанные на клавишах различны для каждой страны; не все страны используют расположение клавиш QWERTY. Эти коды клавиш лучше всего описывать позиционно, как показано на Рисунке 8-9 и Рисунке 8-10 в конце раздела. Интернациональные клавиатуры имеют еще две клавиши. Это $30, рядом с LeftShift, и $2B, рядом с Enter. КОДЫ КЛАВИШ --> 40-5F HEX (ОБЩИЕ ДЛЯ ВСЕХ КЛАВИАТУР) 40 Space 41 Backspace 42 Tab 43 "ENTER" на цифровой клавиатуре 44 Return 45 Escape 46 Delete 4C Cursor up 4D Cursor down 4E Cursor right 4F Cursor left 50-59 Функциональные клавиши F1-F10 SF Help КОДЫ КЛАВИШ --> 60-67 HEX (КОДЫ КЛАВИШ СПЕЦИФИКАТОРОВ) 60 Left shift 61 Right shift 62 Caps lock 63 Control 64 Left ALT 65 Right ALT 66 Left Amiga (или клавиша Commodore) 67 Right Amiga F0-FF HEX Эти коды клавиш используются для связи клавиатуры и 68000, и не ассоциируются с нажатием клавиш. Они не имеют флага перехода состояния клавиши, и, следовательно описываются полными 8 битными кодами 78 Resetwarning. Нажаты CTRL-AMIGA-AMIGA. Клавиатура будет ждать максимум 10 секунд перед сбросом машины. (Доступно не на всех моделях клавиатур) F9 Последний переданный код - неправилен. Следующий код будет повтором FA Переполнен буфер клавиатуры FC Ошибка автотеста клавиатуры. Также будет мигать лампочка caps-lock для указания источника ошибки. Один раз при отказе ROM , дважды при отказе RAM и три раз если отказался функционировать таймер сторожа. FD Инициализация потока клавиш (для нажатых или увязших клавиш при включении питания) FE Обрыв потока клавиш при включении питания Эти коды клавиш обычно фильтруются драйверами клавиатуры. ОГРАНИЧЕНИЯ КЛАВИАТУРЫ Клавиатура Амиги - матрица строк и столбцов с переключателем клавиш на каждом пересечении (диаграмму матрицы см. в приложении H). Из-за этого, существует явление, называемое "фантомные нажатия клавиш." В общем это не проблема для набора текста, но игры могут требовать одновременного нажатия нескольких клавиш. Изучая матрицу, вы можете определить, какие клавиши могут сталкиваться друг с другом, и какие - всегда безопасны. Фантомные нажатия клавиши происходят когда одновременно нажимаются определенные комбинации клавиш. Например, нажмите одновременно "A" и "S". Обратите внимание, что "A" и "S" передаются нормально. А теперь нажмите "Z". На оригинальной клавиатуре Амиги 1000 будут генерироваться "Z" и фантом "X" Начиная с Амиги 500, контроллер усовершенствовался и теперь способен исключать простые фантомные ситуации подобно описанной выше; вместо того, чтобы генерировать фантом, контроллер будет прекращать посылку символов до тех пор, пока матрица не очистится (отпускание "A" или "S" очищает матрицу). Некоторые высококачественные Амижные клавиатуры могут обнаруживать одновременное нажатие любого количества клавиш . Все клавиатуры разработаны для печати, поэтому фантомы не будут возникать в процессе нормальной работы, а только когда нажимаются необычные комбинации клавиш, подобно описанной выше. ПРИМЕЧАНИЕ Семь клавиш не являются частью матрицы, и никогда не будут способствовать производству фантомов. Эти клавиши: CIRL, два SHIFT, две Amiga, и две ALT. РИСУНОК 8-9: Клавиатура Амиги 1000, Шестнадцатеричные коды клавиш РИСУНОК 8-10: Клавиатура Амиги 500/2000, Шестнадцатеричные коды клавиш ПАРАЛЛЕЛЬНЫЙ ИНТЕРФЕЙС ВВОДА -ВЫВОДА Универсальный двунаправленный параллельный интерфейс - 25-ти штырьковый разъем на задней стороне компьютера. Обычно он используется для присоединения параллельного принтера. Для каждого байта данных записанного в регистр параллельного порта, железо автоматически генерирует сигнал готовности. Сигнал подтверждения от parallel device подключается к прерыванию. В приложениях E и F можно найти распайки разъема и временные характеристики ПОСЛЕДОВАТЕЛЬНЫЙ ИНТЕРФЕЙС 25-ти штырьковый разъем на обратной стороне компьютера является универсальным последовательным интерфейсом. Он может управлять широким диапазоном различных периферийных устройств, включая внешний модем или последовательный принтер. В приложении E можно найти распайку разъема. ВВЕДЕНИЕ В ПОСЛЕДОВАТЕЛЬНУЮ СХЕМУ Чип Paula содержит Универсальный Асинхронный ПРИЕМНИК/ПЕРЕДАТЧИК, сокращенно UART. Этот UART программируется на любую скорость от 110 до более 1,000,000 битов в секунду. Он может получать или посылать данные длиной восемь или девять бит. Реализация UART обеспечивает высокую степень управляемости софтом. UART способен обнаруживать ошибку переполнения, которая происходит когда некоторая другая система посылает данные быстрее чем принимаете их через регистр получения данных. Существуют биты состояния и прерывания, сигнализирующие 'буфер полный' при приеме и 'буфер пустой' при передаче. Есть еще дополнительный бит состояния - который указывает "все биты посланы". Все это обсуждаются ниже. УСТАНОВКА СКОРОСТИ В БОДАХ Скорость передачи (скорость в бодах) управляется содержимым регистра, называющегося SERPER. Биты 14-0 регистра SERPER - делитель скорости пересылки данных в бодах. Выбор времени выполнен на основе "системных часов", которые тикают со скоростью 279.36ns на машинах с NTSC и 281.94ns на машинах с PAL. Если в SERPER установлено значение N, тогда проходит N + 1 тиков между выборкой состояния входного разъема (для приема) или между передачами битов на вывод (для передачи). Таким образом SERPER= (3,579,545/baud)-1. На машине с PAL, SERPER= (3,546,895/baud)-1. Например, значение SERPER, соответствующее 9600 бод на машине с NTSC - (3,579,545/9600)-1=371. С кабелем приемлемой длины, максимально надежная скорость находится в интервале 150,000-250,000 бод. Максимальная скорость зависит от машины. При такой высокой скорости не используются непроизводительные затраты на прерывания. Конец получения данных должен быть в цикле чтения. Так может быть сформирована недорогая сеть УСТАНОВКА РЕЖИМА ПРИЕМА Число бит, которые должны быть получены перед тем, как система сообщит вам что входной регистр полон может быть восемь или девять (это учитывает 8 битовую передачу с контролем четности). В любом случае, схема приема ожидает получения одного стартового бита, восемь или девять информационных разрядов, и по крайней мере одного стопового бита. Режим приема устанавливается с помощью бита 15 регистра SERPER (только для записи). Бит 15 равен 1 если вы выбрали девять информационных разрядов для данных, и 0 если вы выбрали восемь информационных разрядов. Нормальное состояние этого бита для большинства прикладных программ - 0. СОДЕРЖИМОЕ РЕГИСТРА ПРИЕМА ДАННЫХ Регистр последовательного ввода данных имеет размер 16 бит. Он содержит 8 или 9 бит данных и биты состояния. Данные получаются по одному биту и перемещаются во внутренний сдвиговый регистр, переводящий данный в параллельную форму. Когда истекает время, соответствующее времени передачи бита, содержимое этого регистра перемещается в регистр чтения последовательных данных SERDATR, описанный в Таблице 8-9, и вам сообщается, что для вас имеются готовые данные. Сразу после того, как происходит передача данных, сдвиговый регистр приема становится снова готовым для приема новых данных. После получения прерывания 'буфер заполнен', у вас будет время, равное времени приема одного полного символа для того, чтобы принять данные и очистить флаг прерывания. Если флаг прерывания вовремя не очищается, устанавливается бит OVERRUN Таблица 8-9 показывает назначения бит регистра SERDATR. Таблица 8-9: Регистры SERDATR/ADKCON SERDATR Номер бита Имя Функция 15 OVRUN бит OVERRUN (Зеркало - также появляется в регистре запроса прерывания.) Указывает что другой байт данных был получен прежде, чем предыдущий байт был принят процессором. Чтобы предотвращать это, необходимо сбрасывать INTF_RBF (бит 11, буфер приема заполнен) в INTREQ. 14 RBF READ BUFFER FULL (Зеркало - также появляется в регистре запроса прерывания.) Когда этот бит - 1, имеются данные, готовые для приема процессором. После чтения содержания регистра данных, вы должны сбрасывать бит INTF_RBF в INTREQ чтобы предотвращать overrun. 13 TBE TRANSMIT BUFFER EMPTY (Не зеркало прерывания. Происходит когда буфер становится пустым.) Когда бит 14 - 1, все данные в регистре выходных данных SERDAT переместились в последовательный сдвиговый регистр вывода, так что SERDAT готов принять другое слово на вывод. Бит также установлен, когда буфер пуст. Этот бит обычно используется в режиме полного дуплекса. 12 TSRE TRANSMIT SHIFT REGISTER EMPTY Когда этот бит - 1, сдвиговый регистр вывода завершил задачу, все данные передались, и регистр - теперь пустой. Если вы останавливаете процесс записи данных в регистр вывода SERDAT, тогда этот бит будет содержать 1 после того, как слово, находящееся в данный момент в сдвиговом регистре и слово находящееся в SERDAT передались. Этот бит обычно используется в режиме полудуплекса 11 RXD Прямое чтение контакта RXD на чипе Paula 10 Не используется в этой версии. 9 STP Стоповый Бит, если для получения используется 9 информационных разрядов. 8 STP Стоповый Бит, если для получения используется 8 информационных разрядов. ИЛИ DB 8 9-ый информационный разряд если для получения используется 9 бит. 7-0 DB7-DB0 Младшие 8 информационных разрядов полученных данных. Данные ИСТИННЫ (считываемые данные расположены так же как и ожидаемые данные). ADKCON 15 SET/CLR Позволяет установку или очистку отдельных бит. Если бит 15 - 1 заданные биты устанавливаются. Если бит 15 - 0 заданные биты очищаются. 11 UARTBRK Устанавливает уровень сигнала на контакты передачи 0 КАК ПЕРЕДАЮТСЯ ВЫХОДНЫЕ ДАННЫЕ Вы посылаете данные на передающие линии, используя запись в последовательный регистр вывода данных SERDAT. Этот регистр только для записи. Данные будет посылаться с той же самой скоростью, какую вы установили для чтения. Сразу после того, как вы записываете данные в этот регистр, система будет начинать передачу с выбранной скоростью В начале операции, эти данные перемещается из SERDAT во встроенный последовательный сдвиговый регистр. Когда передача на последовательный сдвиговый регистр завершится, SERDAT может принимать новые данные; прерывание TBE сообщает вам об этом Данные будут перемещаться из сдвигового регистра, бит за битом, начиная с самого младшего бита. Смещение продолжается пока все включенные биты не выйдут за пределы регистра. Таким образом может определяться любое число и комбинация бит и использоваться в качестве стоповых битов SERDAT - 16-ти битный регистр, позволяющий управлять форматом передаваемых данных. Чтобы сформировать типичную последовательность данных: один стартовый бит, восемь информационных разрядов, и один стоповый бит, запишите в SERDAT то, что показано на Рисунках 8-11 и 8-12. 15 9 8 7 0 ------------------------------------------- 0 0 0 0 0 0 0 1 |<----8 бит данных----->| ------------------------------------------- --------------------------> Данные сдвигаются в эту сторону Рисунок 8-11: Начало работы SERDAT и Сдвигового Регистра 15 9 8 7 0 ------------------------------------------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -------->| 1 | ------------------------------------------- 1 бит Все нули после последнего сдвига Рисунок 8-12: Окончание работы SERDAT и Сдвигового Регистра Регистр останавливает сдвиги и сигнализирует "сдвиговый регистр пустой" (TSRE) когда последний выдвинутый из регистра бит = 1 и все оставшиеся биты сдвигового регистра - нули. Когда загружается новое, отличное от нуля содержимое, снова начинаются сдвиги . ОПРЕДЕЛЕНИЕ СОДЕРЖИМОГО РЕГИСТРА Данные для передачи помещаются в регистр вывода SERDAT. Кроме информационных разрядов, 1 бит должен добавляться в качестве стопового бита. Обычно, посылаются или один или два стоповых бита Передача стартового бита не зависит от содержания этого регистра. Один стартовый бит автоматически генерируется перед отправкой первого информационного разряда (бита 0) Запись в этот регистр начинает передачу данных. Если регистр содержит нули, передача данных не производится РАЗЪЕМ ВИДЕОВЫВОДА Все Амиги имеют сзади 23х контактный разъем. Он содержит видео выводы и входы для внешнего генлока. На разъеме доступно два раздельных типа RGB видео выводов: * RGB Мониторы ("аналоговые RGB"). Требуют четыре вывода; Красный (R), Зеленый (G), Синий (B), и Sync (S). Они могут генерировать до 4,096 различных цветов одновременно. * Цифровые RGB Мониторы. Имеют выводы: Красный (R), Зеленый (G), Синий (B), Половинная интенсивность (I), и Sync (S). Все уровни вывода - логические (0 или 1). На некоторых мониторах получается до 15 возможных комбинаций цветов, причем значения 0000 и 0001 дают один и тот-же цвет (Половина интенсивности без цвета то-же самое, что и полная интенсивность - отсутствие цвета). Некоторые мониторы отображают 16 цветов в 16 произвольных цветов. Обратите Внимание что сигналы 'sync' на выходе Амиги небуферизованы. Для использования любого устройства, которое дает тяжелую загрузку выводов 'sync', требуются внешние буфера АМИГА 500 и 2000 имеют одноцветное видео гнездо для использования с недорогими одноцветными мониторами. Цвета АМИГИ oбъединяются по интенсивности, основываясь на следующей таблице: Красный Зеленый Синий 30% 60% 10% АМИГА 1000 имеет гнездо RF модулятора. Это адаптер, который позволяет Амиге использовать телевизор. Stereo звук доступен на гнезде, но в общем будет oбъединяться в моно звук для телевизора 2000 АМИГИ имеет специальный "видео слот" который содержит еще больше сигналов, чем RGB разъем: все сигналы RGB порта, незакодированное цифровое видео, световое перо, питание, звук, цвет, переключатель пикселей, sync, сигналы синхронизации, и т.д.. Конец. |