Witchcraft Creative Group

Спектрум жив!

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Руководство по программированию DMA UltraSound Card

Печать PDF

X. Преамбула

Звуковая карта с прямым доступом к памяти (ПДП), называемая DMA UltraSound Card разработана Алексеем Иноземцевым. Карта не имеет первоначальных коммерческих целей, вся документация по ней может распространяться любым некоммерческим методом. Возможность распространения документации с корыстной выгодой необходимо заранее согласовать с автором представляемого документа.

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


0. Введение

Руководство по программированию предназначено для ознакомления с практическим программированием звукового устройства DMA UltraSound Card (DMA USC) для компьютера Zx-Spectrum. В данном руководстве приводится полная справочная информация по адресации портов ввода/вывода этой карты, а также описание назначения портов, регистров и их программирование.

1. Распределение памяти компьютера.

Прежде чем подойти вплотную к вопросу программирования карты необходимо иметь представление о том, как же она распределяет память компьютера, доступную ей. Доступ контроллера ПДП (i8237) к па¬мяти не зависит от порта расширения ОЗУ компьютера, будь-то Pentagon (#7ffd), Scorpion (#1ffd) или любой другой Спектрум-совместимый клон.

Вся доступная DMA USC память разделена на отрезки объемом по 64 кБ. Мы будем называть эти отрезки памяти БАНКами, чтобы не путать со «страницами».

 
Банки ПДП 

Рис.1 Распределение ОЗУ компьютера в сравнительном изображении

для центрального процессора Z80 и контроллера ПДП i8237

На Рис.1 приводится карта памяти компьютера в сравнительном изображении для процессора и контроллера ПДП. Из этого рисунка легко понять, как необходимо адресовать память при взаимодействии с ПДП контроллером, относительно распределения ОЗУ для Z80.

Другими словами, банк состоит из 4х страниц и начинается со страницы с номе¬ром, кратным 4 (0 банк - 0,1,2,3; 1 банк - 4,5,6,7 и т.д.). Т.о. в компьютере с ОЗУ 128 Кб будет всего два банка, 512 Кб – 8 банков, 1024 Кб - 16 банков. Адресация внут¬ри банка лежит в пределах от #0000 до #ffff, т.е. шестнадцатиразрядная.

Для управления памятью существуют регистры банков и регистры начального ад¬реса, причем для каждого канала свой набор этих регистров.

2. Регистры контроллера ПДП.

2.1. Регистр банков.

У каждого канала имеется свой регистр банка, поэтому доступ одного канала к памяти не зависит от выбранных банков других каналов.

АдресНазначение 
Табл.1 Адресация регистров банков. 
 #0777 Регистр банка 0го канала
 #1777 Регистр банка 1го канала
 #2777 Регистр банка 2го канала
 #3777 Регистр банка 3го канала

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

Пример:
...
ld bc,#0777	;регистр 0го канала
ld a,1	;программируем на
out (c),a	;работу с 1м банком
...

2.2. Регистр начального адреса.

Этот регистр задает начальный ад¬рес, с которого будет производиться передача блока данных. Регистр содержит 16 разрядов и определяет адрес внутри заданного банка (#0000-#ffff). 

Адрес Назначение
 Табл.2 Адресация регистров начального адреса.
 #0c77 Регистр нач. адреса 0го канала
 #2c77 Регистр нач. адреса 1го канала
 #4c77 Регистр нач. адреса 2го канала
 #6c77 Регистр нач. адреса 3го канала

 

При программировании задаются два байта адреса последовательно - сначала младший байт, затем старший.

Пример:
...
ld bc,#0c77	;в регистр адреса 0 кан.
ld hl,#1234	;загружаем адрес #1234
out (c),l	;текущего банка
out (c),h
...

2.3. Регистр текущего адреса.

Кроме регистров начального адреса имеются регистры текущего адреса.
Начальное значение заносится в этот регистр автоматически, одновременно с регистром на¬чального адреса. В дальнейшем, в ходе пе¬редачи, значение текущего адреса увеличивается или уменьшается в за¬висимости от режима работы канала (см. регистр режима).
Обращение к регистрам текущего ад¬реса производится по адресам регистров начального адреса в режиме чтения значе¬ния.

2.4. Регистр начального счетчика циклов.

В этом регистре задается начальное количество циклов передачи для программи¬руемого канала (длина сэмпла).

Адрес Назначение 
Табл.3 Адресация регистров начального счетчика циклов. 
 #1c77 Регистр нач. счетчика 0го канала
 #3c77 Регистр нач. счетчика 1го канала
 #5c77 Регистр нач. счетчика 2го канала
 #7c77 Регистр нач. счетчика 3го канала
 

При передаче данных в этот регистр необходимо задавать длину блока данных на 1 байт меньше истинной длины, т.е. при передаче 100 байт данных в ре¬гистр нужно записать число 99.
Пример:

...
ld bc,#1cff	;в регистр счетчика
ld hl,#1234	;0-го канала заносим
out (c),l	;длину передаваемого
out (c),h	;блока
... 

2.5. Регистр текущего счетчика циклов.

Регистр содержит текущее значение счетчика циклов (число оставшихся циклов передачи). Отображаемое в нем число циклов всегда на единицу меньше числа еще не переданных элементов данных.

Обращение к регистрам текущего счетчика циклов производится по адресам регистров начального счетчика циклов в режиме чтения значения.

2.6. Регистр режима.

Данный регистр задает режим работы своего канала контроллера. Адрес регистра для всех каналов одинаковый - #bc77, разделение по каналам производится исходя из значения битов 0 и 1 этого регистра.

Биты регистра имеют следующее назначение:

 ╔═╤═╤═╤═╤═╤═╤═╤═╗
 ║7│6│5│4│3│2│1│0║
 ╚╤╧╤╧╤╧╤╧╤╧╤╧╤╧╤╝
  │ │ │ │ │ │ └─┴0-1: Номер канала:
  └─┤ │ │ └─┤        00 - 0й канал
    │ │ │   │        01 - 1й
    │ │ │   │        10 - 2й
    │ │ │   │        11 - 3й
    │ │ │   │
    │ │ │   └────2-3: Режим работы:
    │ │ │            00 – проверка
    │ │ │            01 - запись (в память)
    │ │ │            10 - чтение (из памяти)
    │ │ │            11 – недопустимая
    │ │ │                       комбинация
    │ │ │
    │ │ └────────4: Автоинициализация:
    │ │              1 – разрешена
    │ │              0 – запрещена
    │ │
    │ └──────────5: Изменение адреса 
    │                       при обмене:
    │                0 – увеличение
    │                1 – уменьшение
    │
    └────────────6-7: Тип передачи:
                     00 -режим передачи по требованию
                     01 -режим одиночной передачи
                     10 -режим блочной передачи
                     11 -каскадный режим

Рис.2 Разбитовка регистра режима контроллера ПДП

 

Кратко о назначении некоторых битов:

  •   Номер канала - выбор канала ПДП, для которого задается режим работы.
  •   Режим работы - для работы DMA USC используется всего два режима:
    • чтение из памяти (комбинация - 10) – при проигрывании сэмпла, либо при перемещении блока данных в памяти (задается для канала-источника).
    • запись в память (комб. - 01) - при перемещении блока, задается для канала-приемника.

 

  • Автоинициализация - иными словами – зацикливание, т.е. при окончании передачи восстанавливаются исходные данные начального адреса и начального счетчика циклов. Т.о. если установить 4й бит регистра режима, то мы разрешим повторение передачи, и сэмпл будет играть бесконечно.
  • Изменение текущего адреса. При нулевом состоянии этого бита при передаче адрес увеличивается, т.е. сэмпл будет проигрываться нормально, иначе - происходит уменьшение адреса (проигрывание «наоборот»).
  • Тип передачи: БИС i8237 (КР1810ВТ37) поддерживает 4 режима передачи данных, но для работы с DMA USC нам нужен всего лишь один - режим одиночной передачи(комбинация - 01). Этот режим заключается в том, что после передачи очередного байта данных карта освобождает шину процессору, но сразу же начинает проверку сигналов запроса и, как только обнаруживает активный сигнал запроса, инициирует следующий цикл передачи.

>!!!< Остальные режимы в данном руководстве описываться не будут из-за узкой направленности. Детальную информацию по остальным режимам передачи можно найти в [1].

2.7. Регистр команд.

Регистр команд управляет работой контроллера и программируется всего один раз при полной его инициализации. Имеет адрес #8c77. Раскладка регистра:
╔═╤═╤═╤═╤═╤═╤═╤═╗
║7│6│5│4│3│2│1│0║
╚╤╧╤╧╤╧╤╧╤╧╤╧╤╧╤╝
 │ │ │ │ │ │ │ │
 │ │ │ │ │ │ │ └0:	0-запрет передачи память-память
 │ │ │ │ │ │ │	1-разрешение
 │ │ │ │ │ │ └──1:	0-запретить фиксацию адреса в 0м канале
 │ │ │ │ │ │	1-разрешить
 │ │ │ │ │ └────2:	0-разблокировать контроллер
 │ │ │ │ │	1-заблокировать
 │ │ │ │ └──────3:	0-нормальная временная диаграмма
 │ │ │ │	1-сжатие времени передачи
 │ │ │ └────────4:	0-режим фиксированных приоритетов
 │ │ │	1-режим циклического сдвига приоритетов.
 │ │ └──────────5:	1-режим расширенной записи
 │ │	0-задержки при записи
 │ └────────────6:	0-активен высокий уровень сигнала запроса
 │	1-низкий DREQ
 └──────────────7:	0-активен высокий уровень сигнала подтверждения запроса на ПДП
 1-низкий

Рис.3 Разбитовка регистра команд контроллера ПДП

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

2.8. Регистр маски.

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

  1. Регистр маски(#fc77) - маскирует/демаскирует все каналы ПДП. Биты 0-3 регистра отвечают соответственно за 0-3 каналы (0 в соответствующем бите разрешает работу, а 1 – запрещает).
  2. Регистр одиночной маски(#ac77).
   ╔═╤═╤═╗
   ║2│1│0║
   ╚╤╧╤╧╤╝
    │ └─┴──────0-1:	Номер канала.
    └──────────2:	0-разрешить работу,
 1-запретить.
Рис.4 Разбитовка регистра одиночной маски контроллера ПДП

2.9. Регистр состояния.

Регистр отражает текущее состояние запросов и передач по всем четырем каналам. Биты 0-3 устанавливаются в единицу после завершения передачи по каналам 0-3 (бит 0 - канал 0, бит 1 - канал 1 и т.д.), если не задан режим автоинициализации. Эти биты очищаются после команды сброса контроллера и после каждой операции считывания состояния из регистра состояния. Биты 4-7 указывают, по какому из каналов 0-3 активен в текущий момент сигнал запроса на ПДП.

Источники

  1. Архитектура ввода-вывода персональных ЭВМ IBM PC. Справочное пособие.
Обновлено 14.10.2009 07:32  
Организация и проведение праздничных мероприятий, фото- и видеосъемка