Echo #06
30 июня 2000

Железо - Контроллер прямого доступа к памяти звуковой карты DMA Ultrasound Card.

<b>Железо</b> - Контроллер прямого доступа к памяти звуковой карты DMA Ultrasound Card.
──────────────────────────────────────────
    Контроллер прямого доступа к памяти
──────────────────────────────────────────

   Контроллер  прямого  доступа  к  памяти
(ПДП,  DMA - Direct Memory Access) обеспе-
чивает высокоскоростной обмен данными меж-
ду устройствами ввода-вывода и ОЗУ без ис-
пользования  центрального  процессора, что
позволяет  освободить процессор для выпол-
нения  вычислений  параллельно с обменом и
независимо от него. Наиболее часто возмож-
ности ПДП используются при работе с диско-
выми  накопителями, однако реализовано ис-
пользование  ПДП адаптерами накопителей на
магнитной  ленте и рядом других устройств.
Ощутимые  преимущества  дает использование
ПДП в процессе обмена с устройствами, при-
нимающими или передающими данные достаточ-
но большими порциями с высокой скоростью.
   В PC-подобных компьютерах функции конт-
роллера  ПДП  выполняет  микросхема  8237А
фирмы  INTEL (советский аналог КР1810ВТ37)
или ее аналоги 8237А-4 и 8237А-5, работаю-
щие  с  тактовой  частотой 4 и 5 Мгц соот-
ветственно  (стандартная  микросхема 8237А
работает  на  частоте  3  Мгц). Контроллер
имеет  4 независимых канала, каждый из ко-
торых  может обслуживать одно периферийное
устройство.

    1. Принципы работы контроллера ПДП

   В работе ПДП различаются 2 главных цик-
ла:  цикл ожидания (Idle cycle) и активный
цикл (Active cycle). Каждый цикл подразде-
ляется  на  ряд  состояний,  занимающих по
времени   один   период  тактовой  частоты
(тик).  Из цикла ожидания контроллер может
быть  переведен в состояние программирова-
ния  (Program  Condition)  путем подачи на
вход  RESET  сигнала высокого уровня, дли-
тельностью не менее 300 нc и следующей  за
ним  подачи сигнала низкого уровня (уровня
0)  на вывод CS (Chip Select). В состоянии
программирования контроллер будет находит-
ся до тех пор, пока на выводе CS сохранит-
ся сигнал низкого уровня. В процессе прог-
раммирования контроллеру задаются:

   - начальный адрес памяти для обмена;
   - уменьшенное  на единицу число переда-
     ваемых байтов;
   - направление обмена,

   а также устанавливаются требуемые режи-
мы  работы (разрешить или запретить цикли-
ческое  изменение приоритетов, автоинициа-
лизацию,  задать направление изменения ад-
реса при обмене и т. д.).
   Загрузка  16-разрядных  регистров конт-
роллера  осуществляется  через 8-разрядные
порты ввода-вывода. Перед загрузкой перво-
го  (младшего)  байта  должен быть сброшен
(очищен) триггер-защелка (триггер первый/-
последний,  First/Last flip-flop), который
изменяет  свое  состояние  после  вывода в
порт  первого  байта  и таким образом дает
возможность  следующей  командой  вывода в
тот  же  порт загрузить старший байт соот-
ветствующего регистра.
   Запрограммированный  канал  может  быть
демаскирован  (бит маски канала устанавли-
вается  при этом в 0), после чего он может
принимать сигналы "Запрос на ПДП", генери-
руемые  тем  внешним  устройством, которое
обслуживается  через  этот  канал.  Сигнал
"запрос на ПДП" может быть также иницииро-
ван  установкой  в  1  бита запроса даного
канала  в  регистре  запросов контроллера.
После появления сигнала запроса контроллер
входит  в  активный цикл, в котором выпол-
няется  обмен  данными.  Обмен  может осу-
ществляться в одном из четырех режимов:
   1)  Режим  одиночной  передачи  (Signle
Transfer  Mode). После каждого цикла пере-
дачи контроллер освобождает шину процессо-
ру, но сразу же начинает проверку сигналов
запроса  и, как только обнаруживает актив-
ный  сигнал  запроса, инициирует следующий
цикл передачи.
   2)   Режим   блочной   передачи  (Block
Transfer Mode). В этом режиме наличие сиг-
нала  запроса  требуется только до момента
выдачи контроллером сигнала "Подтверждение
запроса на ПДП" (DACK), после чего шина не
освобождается вплоть до завершения переда-
чи всего блока.
   3) Режим передачи по требованию (Demand
Transfer   Mode).  Данный  режим  является
промежуточным между двумя первыми: переда-
ча  идет непрерывно до тех пор, пока акти-
вен  сигнал  запроса,  состояние  которого
проверяется  после каждого цикла передачи.
Как  только устройство не может продолжить
передачу,  сигнал  запроса сбрасывается им
и   контроллер  приостанавливает  работу.
Этот  режим применяется для обмена с  мед-
ленными  устройствами,  не позволяющими по
своим временным характеристикам работать с
ПДП в режиме блочной передачи.
   4)  Каскадный режим (Cascade Mode). Ре-
жим  позволяет  включить  в подсистему ПДП
более  одного  контроллера  в тех случаях,
когда  недостаточно четырех каналов ПДП. В
этом режиме один из каналов ведущего конт-
роллера  используется  для  каскадирования
с  контроллером второго уровня. Для работы
в  каскаде сигнал HRQ ("Запрос на захват")
ведомого контроллера подается на вход DREG
("Запрос  на канал ПДП") ведущего, а  сиг-
нал DACK ("Подтверждение запроса") ведуще-
го  подается  на  вход HDLA ("Потверждение
захвата") ведомого.
   Такая   схема   подключения  аналогична
подключению ведущего (первого) контроллера
к  микропроцессору,  с  которым он обмени-
вается сигналами HRQ и HDLA.

             2. Типы передач

         2.1. Передача память-память
           (Memory-to-memory DMA).

   Используется  для передачи блока данных
из  одного места памяти в другое. Исходный
адрес  определяется  в  регистрах нулевого
канала, выходной - в регистрах первого ка-
нала.  Число циклов обмена (число байт ми-
нус  1)  задается  в регистре числа циклов
канала  1. Передача происходит с использо-
ванием рабочего регистра контроллера в ка-
честве  промежуточного  звена для хранения
информации. При передачe память-память мо-
жет  быть задан специальный режим фиксации
адреса  (Address hold), при котором значе-
ние  текущего  адреса  в регистре нулевого
канала не изменяется, при этом весь выход-
ной блок памяти заполняется одним и тем же
элементом данных, находящимся по заданному
адресу.

          2.2. Автоинициализация
   (автозагрузка, Autoinitialization).

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

   2.3. Режим фиксированных приоритетов.

   В этом режиме канал 0 всегда имеет мак-
симальный приоритет, а канал 3 - минималь-
ный.  Это  означает, что любая передача по
каналу  с  более высоким приоритетом будет
выполняться  раньше, чем по каналу с более
низким приоритетом.

   2.4. Циклический сдвиг приоритетов.

   Позволяет избежать "забивания" шины од-
ним  каналом при одновременной передачe по
нескольким каналам. Каждому каналу, по ко-
торому   прошла   передача,  автоматически
присваивается низший приоритет, после чего
право на передачу получает канал с наивыс-
шим  приоритетом,  для которого передача в
данный момент возможна. Таким образом, ес-
ли в начале работы распределение приорите-
тов  было обычным (канал 0 - наивысший), и
пришли  сигналы  запроса  на ПДП по 1-му и
2-му каналам, то сначала будет выполняться
передача  по первому каналу, затем он  по-
лучит  низший  приоритет (а канал 2, соот-
ветственно,  высший, т. к. сдвиг приорите-
тов  циклический) и передача выполнится по
2-му  каналу, который затем получит низший
приоритет,  а  высший  приоритет  получит,
сответственно,  канал  3,  который и будет
обладать  преимущественным правом на пере-
дачу.

       2.5. Сжатие времени передачи
       (Compressed transfer timing).

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

   3. Описание внутренних регистров ПДП.

   Контроллер  имеет  344  бита внутренней
памяти,  организованной  в виде регистров.
Описание внутренних регистров ПДП приведе-
но в таблице.

┌───────────────────────────────────┬──────────────┬───────────┐
│          Наименование             │ Разрядность  │   Число   │
│            регистра               │    (бит)     │ регистров │
├───────────────────────────────────┼──────────────┼───────────┤
│ Регистр начального адреса         │     16       │     4     │
│ (Base Address Register)           │              │           │
│ Регистр начального счетчика циклов│     16       │     4     │
│ (Base Word Count Register)        │              │           │
│ Регистр текущего адреса           │     16       │     4     │
│ (Current Address Register)        │              │           │
│ Регистр текущего счетчика циклов  │     16       │     4     │
│ (Current Word Count Register)     │              │           │
│ Рабочий регистр адреса            │     16       │     1     │
│ (Temporary Address Register)      │              │           │
│ Рабочий регистр счетчика циклов   │     16       │     1     │
│ (Temporary Word Count Register)   │              │           │
│ Регистр состояния                 │     8        │     1     │
│ (Status Register)                 │              │           │
│ Регистр команд                    │     8        │     1     │
│ (Command Register)                │              │           │
│ Регистр режима (Mode Register)    │     6        │     4     │
│ Рабочий регистр                   │     8        │     1     │
│ (Temporary Register)              │              │           │
│ Регистр масок (Mask Register)     │     4        │     1     │
│ Регистр запросов                  │     4        │     1     │
│ (Request Register)                │              │           │
└───────────────────────────────────┴──────────────┴───────────┘

      3.1. Регистр начального адреса
         (Base Address Register).

   В  этом регистре задается стартовый ад-
рес  ОЗУ,  с которого начинается передача.
Регистр  содержит 16 разрядов и определяет
адрес внутри заданного банка памяти разме-
ром 64К. Задание номера банков памяти осу-
ществляется   через  специальные  регистры
банков  (Bank  Registers),  поддерживаемые
внешней  логикой.  Каждый  канал ПДП имеет
свой  регистр  начального адреса и регистр
банка.  Такое  деление  памяти на банки не
позволяет осуществить обмен с блоком памя-
ти,  находящимся  на пересечении двух бан-
ков.  Каждый банк состоит из четырех стра-
ниц  и  начинается  со страницы с номером,
кратным  4  (0, 1, 2, 3; 8, 9, 10, 11 и т.
д.).

         3.2. Регистр начального
             счетчика циклов
       (Base Word Count Register).

   В этом регистре задается начальное чис-
ло  циклов  передачи  для программируемого
канала.  Фактическое число передаваемых во
время  работы ПДП элементов данных на еди-
ницу  превышает  заданное число циклов, т.
е.  если Вы задаете 100 циклов передачи, а
размер элемента будет равен 1 байту, то за
сеанс обмена будет передан 101 байт инфор-
мации.

       3.3. Регистр текущего адреса
        (Current Address Register).

   Начальное значение заносится в этот ре-
гистр  одновременно с регистром начального
адреса.  В дальнейшем в ходе передачи зна-
чение текущего адреса автоматически увели-
чивается  или уменьшается (конкретное нап-
равление изменения задается при программи-
ровании в регистре режима). Если разрешена
автоинициализация,  то после окончания пе-
редачи  в регистр автоматически устанавли-
вается значение из регистра начального ад-
реса.

  3.4. Регистр текущего счетчика циклов
      (Current Word Count Register).

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

           3.5. Регистр режима
             (Mode Register).

   Данный  регистр  задает  режимы  работы
своего канала контроллера.

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

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

           3.7. Регистр команд
           (Command Register).

   Этот 8-битный регистр управляет работой
контроллера.   Он  программируется,  когда
контроллер  находится в состоянии програм-
мирования  и  очищается  командами  сброса
"Reset" и "Master Clear". Назначение битов
регистра команд приведено на рисунке.

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


           3.8. Регистр состояния
             (Status Register).

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

           3.9. Регистр масок
            (Mask Register).

   Каждый  бит  этого  4-битового регистра
маскирует/демаскирует  свой канал ПДП, при
этом  значение 1 маскирует канал, значение
0 демаскирует канал и разрешает прием сиг-
нала запроса по этому каналу.

           3.10. Регистр запросов
             (Request Register).

   Сигнал запроса на ПДП (DREQ) может быть
издан как обслуживаемым устройством, так и
программно.  Для программного издания сиг-
нала  запроса по одному из 4-х каналов ПДП
необходимо  установить соответствующий бит
в 4-разрядном регистре запросов. Запрос на
ПДП  может  быть  отменен записью нулевого
значения  в  соответствующий бит регистра.
Бит  запроса  очищается  автоматически при
окончании  передачи по данному каналу. Все
биты  запросов  очищаются при сбросе конт-
роллера.   Для  того,  чтобы  воспринимать
программные  запросы  на ПДП, канал должен
находиться в режиме блочной передачи.

          3.11. Рабочий регистр
          (Temporary Register).

   Этот  8-разрядный  регистр используется
для хранения элемента данных, передаваемо-
го  в режиме фиксированного адреса при пе-
редаче  память-память  или  для временного
хранения  передаваемого байта при всех ос-
тальных режимах передачи.

         4. Программное управление
              контроллером ПДП

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

┌────┬──────┬──────────────────────────────────────────────────┐
│Порт│Режим │               Назначение                         │
├────┼──────┼──────────────────────────────────────────────────┤
│#0C │запись│Запись начального адреса в регистр начального     │
│    │      │адреса и регистр текущего адреса канала 0         │
│#2C │запись│то же для канала 1                                │
│#4C │запись│то же для канала 2                                │
│#6C │запись│то же для канала 3                                │
├────┼──────┼──────────────────────────────────────────────────┤
│#0C │чтение│Чтение текущего адреса из регистра текущего       │
│    │      │адреса канала 0                                   │
│#2C │чтение│тоже для канала 1                                 │
│#4C │чтение│тоже для канала 2                                 │
│#6C │чтение│тоже для канала 3                                 │
├────┼──────┼──────────────────────────────────────────────────┤
│#1C │запись│Запись в регистр начального счетчика циклов и в   │
│    │      │регистр текущего счетчика циклов канала 0         │
│#3C │запись│то же для канала 1                                │
│#5C │запись│то же для канала 2                                │
│#7C │запись│то же для канала 3                                │
├────┼──────┼──────────────────────────────────────────────────┤
│#1C │чтение│Чтение текущего значения из регистра текущего     │
│    │      │счетчика циклов канала 0                          │
│#3C │чтение│то же для канала 1                                │
│#5C │чтение│то же для канала 2                                │
│#7C │чтение│то же для канала 3                                │
├────┼──────┼──────────────────────────────────────────────────┤
│#8C │запись│Запись регистра команд ПДП                        │
│#8C │чтение│Чтение регистра состояния ПДП                     │
│#9C │запись│Запись в регистр запросов ПДП                     │
│#AC │запись│Запись бита маски для одного из каналов ПДП       │
│#BC │запись│Запись регистра режимов для одного из каналов ПДП │
│#CC │запись│Очистка (сброс) триггера-защелки(триггера первого/│
│    │      │последнего)                                       │
│#DC │запись│Программный сброс контроллера                     │
│#EC │запись│Очистка битов масок всех 4-х каналов              │
│#FC │запись│Запись регистра масок для всех 4-х каналов        │
│#DC │      │                                                  │
│или │чтение│Чтение рабочего регистра ПДП                      │
│#FC │      │                                                  │
├────┼──────┼──────────────────────────────────────────────────┤
│#07 │запись│Задание номера банка для канала 0                 │
│#17 │запись│то же для канала 1                                │
│#27 │запись│то же для канала 2                                │
│#37 │запись│то же для канала 3                                │
└────┴──────┴──────────────────────────────────────────────────┘

   Порты  #0C-#7C предназначены для записи
исходных  значений в регистры начального и
текущего  адреса,  начального  и  текущего
счетчика  циклов для всех 4-х каналов. Так
как  порты  восьмиразрядные, а регистры, в
которые   через   них   заносятся  данные,
16-разрядные, то запись производится в два
приема.  Перед  первой  командой  вывода в
требуемый  порт  необходимо сбросить триг-
гер-защелку,  для чего выполняется команда
вывода  произвольного значения в порт #CC,
после  чего  в  требуемый  порт  выводится
младший  байт 16-разрядного значения и за-
тем  старший байт следующей команды вывода
в тот же порт.
   Вывод в порт #8C позволяет занести зна-
чение в регистр команд ПДП (Описание битов
регистра команд приведено в п. 3).
   Чтение  из  порта #8C считывает регистр
состояния  ПДП  (Описание  битов  регистра
состояния приведено в п. 3).
   Запись  в порт #9C позволяет установить
или  сбросить бит запроса в регистр запро-
сов  для одного из каналов. Формат команды
следующий:

 7 6 5 4 3 2 1 0
╔═╤═╤═╤═╤═╤═╤═╤═╗
║x│x│x│x│x│ │ │ ║     Раскладка битов
╚═╧═╧═╧═╧═╧╤╧╤╧╤╝     ───────────────
           │ └─┴─ 0-1:выбор канала 00-0
           │                        01-1
           │                        10-2
           │                        11-3
           └───── 2: 1=установить бит запроса на ПДП
                      0=сбросить бит запроса на ПДП

   Запись  в порт #AC позволяет установить
или  сбросить  бит  маски в регистре масок
для одного из каналов. Формат команды:

 7 6 5 4 3 2 1 0
╔═╤═╤═╤═╤═╤═╤═╤═╗
║x│x│x│x│x│ │ │ ║     Раскладка битов
╚═╧═╧═╧═╧═╧╤╧╤╧╤╝     ───────────────
           │ └─┴─ 0-1:выбор канала 00-0
           │                        01-1
           │                        10-2
           │                        11-3
           └───── 2: 1=установить бит маски
                      0=сбросить бит маски

   Запись  в порт #BC устанавливает значе-
ние в регистре режимов одного из 4-х кана-
лов  ПДП.  Биты  0  и 1 задают номер кана-
ла(00-0, 01-1, 10-2, 11-3). В биты 2-7 за-
носятся  значения, передаваемые соответст-
венно в биты 0-6 регистра режимов. (Описа-
ние  битов регистра режимов приведено в п.
3).
   Запись  в  порт  #DC задает программный
сброс  контроллера  (Master  Clear). Вывод
любого байта в этот порт имеет один и тот-
же эффект, что и аппаратный сброс контрол-
лера. При программном сбросе очищаются ре-
гистры команд, состояния, запросов и рабо-
чий  регистр. Также  сбрасывается триггер-
защелка и устанавливаются все биты масок в
регистре  масок. После программного сброса
контроллер переходит в цикл ожидания.
   Вывод  любого  байта в порт #EC очищает
регистр масок-сбрасывает биты всех четырех
каналов  ПДП  и  таким  образом  разрешает
прием запросов на ПДП по всем каналам.
   Через  порт #FC можно задать произволь-
ное значение регистра масок ПДП. Для этого
необходимо  в битах 0-3 регистра A устано-
вить  требуемое значение масок каналов 0-3
соответственно  и  вывести  это значение в
порт.
   Регистры  банков  ПДП предназначены для
задания номера банка памяти, с которой бу-
дет производиться обмен. Под номером банка
понимаются  старшие  биты номера страницы,
начиная  со 2-го бита. Напомним, что архи-
тектура  ПДП  позволяет  работать только с
банками  памяти  размером  64К,  а логика,
обеспечивающая переключение банков устрое-
на  так,  что банки имеют жесткие границы,
описанные выше. Из-за этой особенности не-
возможно  с  помощью ПДП осуществить обмен
с  блоками  памяти,  пересекающими границу
между  двумя  такими банками. Каждый канал
ПДП имеет свой регистр банка, поэтому дос-
туп канала к памяти независим ни от банков
других  каналов,  ни  от портов страничной
памяти (#7FFD, #DFFD, #1FFD и т. п.).




Другие статьи номера:

Вступление - годичный перерыв в выпуске газеты.

Обзор Warez'a - Extreme's Tracker v2.10, Universal Player v1.2, HYPERION v1.0, Z-Player v3.0 for GS, Quick Screen Viewer, BestView v2.9, Small Hrust Unpacker v2.0, Fm.COP v.3.1, All Disks Copier, Maxs Copier, HD-KIT, Real Commander v1.9, Direct Commander v3.04, E-mage WorkStation v1.0, System test v4.30, Lara Croft Mail Editor, S-Terminal, Storm Turbo Assembler, Sprite Editor, Text Print.

Обзор игр - The Cezar, 8-й Отдел, Clickmania, 4x4 Puzzle, Xixit, Tower Pod.

Железо - программирование звуковой карты для ZX Spectrum: Ultra Sound Card (DMA).

Железо - Схема аналоговой части звуковой карты DMA Ultrasound Card.

Железо - Методика отладки звуковой карты DMA Ultrasound Card.

Железо - Контроллер прямого доступа к памяти звуковой карты DMA Ultrasound Card.

Железо - Доработка контроллера дисковода для подключения 4-х дисководов.

Программирование - Структура и организация RamDisk'а в Real Commander'е.

Письма - письмо от рядового пользователя ZX Spectrum.

Авторы - авторы гызеты.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
И вновь party 2 - обзор работ с Ростовского демопати Paradox'2002.
Сontacts - Контакты. Заключение.
Почтовый ящик - дискуссия: Обзор програмного обеспечания для ZX с точки зрения пользователя, не создающего программы на продажу.
Доска почета - "oVERFILE" всю страну кинули". О Кемеровской Спектрумовской Сцене. Пара слов о писи.
Интервью - Новгородская группа Digital Reality.

В этот день...   21 ноября