3Bit #01
03 января 2005
  Железо  

Железячки - обзор некоторых современных контроллеров для работы с внешними накопителями информации для ZX-Spectrum.


Аппаратное обеспечениеПериферийное оборудованиеХранение информацииКонтроллеры дисковода и жестких дисков

   Краткий обзор некоторых современных
    контроллеров для работы с внешними
 накопителями информации для ZX-Spectrum

(c) Гартфельдер Денис
──────────────────────────────────────────
  В этом небольшом обзоре я попытался соб-
рать информацию об относительно новых кон-
троллерах  для работы с внешними накопите-
лями  информации, которые можно подключить
к ZX-Spectrum. Описываемые устройства име-
ют  ряд отличительных особенностей, благо-
даря которым они и попали в этот обзор:

1. Они  разработаны западными производите-
лями  и мало известны среди "восточноевро-
пейских" (бывших советских) спектрумистов;

2. Они  не  являются продуктами промышлен-
ного производства, их устройство обычно не
очень сложное и они могут быть собраны са-
мостоятельно;

3. Они  используют современные распростра-
нённые  накопители  информации и построены
на доступных микроконтроллерах, что облег-
чает их сборку;

4. Они  являются  открытыми, постоянно со-
вершенствующимися  проектами, и вся инфор-
мация о них доступна всем желающим.

  Большая  часть материала для обзора была
взята мной из английского Spectrum-журнала
"ZX FORMAT" (тёзки отечественного электро-
нного издания) и была дополнена информаци-
ей с сайтов самих разработчиков. Пользуясь
возможностью, хочу порекомендовать пользо-
вателям,  владеющим  английским  языком  и
имеющим  возможность пользоваться Интерне-
том, ознакомиться с этим замечательным жу-
рналом по адресу:

      http://www.cwoodcock.co.uk/zxf

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

      Flash Disk for ZX

Разработчик: Roelof Koning (Roelof.Koning@12move.nl)

  Использование  CompactFlashCard  объёмом
128 Mb вместо жёсткого диска.
     
  Карта  памяти  находится  внутри корпуса
компьютера, подключаясь  проводами к адре-
сной шине (A7, A8, A14, A15), шине данных,
сигналам  /RD,/WR,/IORQ.  Конструкция  CFC
не требует никакого дополнительного интер-
фейса (1 резистор, 2 диода), провода одним
концом  соединяются с шиной, а другим про-
сто втыкаются в female-сокет карты.

  Работа  с устройством осуществляется по-
средством IN/OUT через следующие порты:
     
     ┌──┬───┬───┬──┬─────┬───────────────────────────────┐
     │A7│A15│A14│A8│ Порт│ Действие                      │
     ├──┼───┼───┼──┼─────┼───────────────────────────────┤
     │ 0│  0│  0│ 0│  127│Чтение / запись чётного байта  │
     │ 0│  0│  0│ 1│  383│Чтение / запись нечётного байта│
     │ 0│  0│  1│ 0│16511│Sector count                   │
     │ 0│  0│  1│ 1│16767│Номер сектора                  │
     │ 0│  1│  0│ 0│32895│Номер цилиндра (мл. байт)      │
     │ 0│  1│  0│ 1│33151│Номер цилиндра (ст. байт)      │
     │ 0│  1│  1│ 0│49279│Головка                        │
     │ 0│  1│  1│ 1│49353│Состояние / Команда            │
     └──┴───┴───┴──┴─────┴───────────────────────────────┘

  Размер сектора - 512 байт; операции чте-
ния/записи происходят при помощи секторбу-
фера.
  Поскольку  карта  с  16-битным доступом,
информация  делится  на условно "чётные" и
"нечётные" байты. После того, как из порта
127 было произведено чтение "чётного" бай-
та, в  него копируется значение из "нечёт-
ного"  порта  383. Регистры, отвечающие за
номера   головки/цилиндра/сектора,   также
поддерживают  логическую  адресацию (режим
LBA).
  Некоторые (основные) команды:

   ┌───┬────────────────────────────────────────────────────┐
   │Код│     Команда                                        │
   ├───┼────────────────────────────────────────────────────┤
   │#EC│Идентификация устройства (считывание из секторбуфера│
   │   │512 байт информации о фирме-производителе)          │
   │#20│Чтение сектора                                      │
   │#30│Запись сектора                                      │
   └───┴────────────────────────────────────────────────────┘

  Значение битов в регистре состояния:
     
             ┌───┬────┬───────────────────────────┐
             │Бит│Флаг│    Значение               │
             ├───┼────┼───────────────────────────┤
             │  0│ ERR│Ошибка                     │
             │  1│   0│Не используется (всегда 0) │
             │  2│CORR│Необходима коррекция данных│
             │  3│ DRQ│Ожидаются данные           │
             │  4│ DSC│Готов                      │
             │  5│ DWF│Ошибка записи              │
             │  6│ RDY│Готов принять команду      │
             │  7│BUSY│Занят                      │
             └───┴────┴───────────────────────────┘

  В обычном состоянии должны быть включены
только 6-й и 4-й биты.
  Специального   программного  обеспечения
для работы с картой не существует; исполь-
зование  регистров предполагает, что напи-
сание  подпрограмм  чтения/записи из карты
не  представляет труда. Ниже приведён при-
мер программы на BASIC-е, которая считыва-
ет  из  секторбуфера карты помещённую туда
по команде идентификационную информацию:
     
  10   CLEAR 39999: LET T=40000
  20   IF IN 49535<>80 THEN STOP: REM Проверка готовности карты
  30   OUT 49535,236: REM Посылаем команду идентификации #EC
  40   POKE T+1, IN 127: POKE T, IN 127: REM Чтение "чётного" и
       "нечётного" байта из секторбуфера
  50   IF IN 49535<>80 THEN LET T=T+2: GOTO 40: REM Цикл будет
       продолжаться до тех пор, пока карта не выдаст сигнал
       готовности (после чтения всех 512 байт)
  60   REM Вывод считанной информации
  70   FOR F=40000 TO 400512
  80   PRINT F;" "; PEEK F, CHR$ PEEK F AND PEEK F>31
  90   NEXT F

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

Разработчик: Sami Vehmaa (user.tninet.se/ўvjz762w/)
     
  Использование  CompactFlashCard как уни-
версального накопителя.
     
  В отличие от предыдущего варианта, в ко-
тором  карта  выполняла роль своеобразного
"железоподкреплённого электронного диска",
данная  разработка представляет собой пол-
ноценный  контроллер для работы с CFC. Со-
ответственно, усложнилась и схемотехничес-
кая  часть, так  что  к  категории "сделай
сам"  эту разработку можно отнести с боль-
шим натягом.

  Данная система позволяет работать в опе-
рационной системе ResiDOS или в специально
адаптированной +3e для Amstard ZX Spectrum
3+  (разработчик  обеих ОС - Garry Lancas-
ter). Тем не менее, контроллер будет рабо-
тать на любой Sinclair-совместимой машине.
ResiDOS  не позволяет работать с каталога-
ми, зато может создавать разделы (partiti-
ons). Контроллер также позволяет использо-
вать  многостраничный (по 16 Kb) доступ ко
встроенной RAM объёмом 512 или 1024 Kb.

  Контроллер   подключается  к  системному
разъёму  (своими габаритами он чем-то сма-
хивает  на  надгробие  :)). При нажатии на
кнопку  NMI  загружается  собственный Task
Manager, одной  из  примечательных функций
которого  является  возможность делать мо-
ментальные  снимки памяти (до 16 снимков в
48  режиме  при объёме встроенной памяти в
1  Mb), переключаться  между ними и сохра-
нять их, причём как на CompactFlash-карте,
так и в памяти самого устройства. Посколь-
ку  питание ZXCF автономное, то можно хра-
нить  информацию во встроенной памяти сто-
лько, сколько это позволит сделать батаре-
йка (которой хватит на 3 года работы, пос-
ле чего придётся применить некоторые навы-
ки  обращения с паяльником, чтобы заменить
её). Можно загрузить игру, пройти несколь-
ко  уровней, сделать снимок, сохранить его
в память устройства, выключить компьютер и
позабыть про него на пару месяцев, а затем
включить  и  продолжить игру с того самого
места, на котором она была в последний раз
сохранена. Использование  в  качестве  ус-
тройства  сохранения  карты  CFC позволяет
увековечить свои игровые рекорды :).

  Разработчик отмечает, что тестировал ус-
тройство  с несколькими типами CFC-накопи-
телей  различной ёмкости от различных про-
изводителей,и не все из них заработали.

  На странице разработчика можно найти не-
обходимые  для самостоятельного изготовле-
ния  устройства  файлы  (разводку печатной
платы и принципиальную схему).

            YABUS.ZX

Разработчик: Jarek Adamski (zx@yarek.com)

  Универсальный  интерфейс для подключения
внешних устройств.

  Подключающийся  к системному разъёму ми-
ниатюрный  контроллер  с  двумя разъемами,
позволяющими подключать и работать в пара-
ллельном режиме с различными специализиро-
ванными  модульными  устройствами (YAMOD).
Отличительной  чертой  модулей является их
железонезависимость; YABUS  можно  подклю-
чать  к  ZX  81,  ZX  Spectrum, Timex, SAM
Coupe,  MSX,  Amstard  CPC.  Кроме  версии
YABUS.ZX, разработчиком  предлагаются  ин-
терфейсы  для Amstard ZX Spectrum +3 и Ti-
mex, возможно будет версия и для Commodore
Amiga. Начата  разработка интерфейса, поз-
воляющего "паразитировать" на PC-железе.

  Работа с некоторыми устройствами возмож-
на и в стандартном режиме, но для полноце-
нной   работы  рекомендуется  использовать
специальные операционные системы: СPM22QED
(расширенная версия CP/M 2.2), ZXVGS (опе-
рационная  система, разработанная  автором
этого интерфейса).

  Автор разработал следующие модули:

┌──────────────┬───────────────────────────────────────────────┐
│Модуль        │               Предназначение                  │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.ATBUS   │IDE-контроллер, позволяет  подключать  HDD, CD-│
│              │ROM, CFC.  Кроме  этого, может  нести  на борту│
│              │энергонезависимые  часы с автономным питанием и│
│              │позволяет  генерировать  прерывания  с заданным│
│              │интервалом (необходимые, например, для дисково-│
│              │дов компьютеров Timex)                         │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.EPROG   │Был задуман как программатор EEPROM и микрокон-│
│              │троллеров 8751, но по сути является универсаль-│
│              │ным параллельным 30-битовым портом, позволяющи-│
│              │мся  обмениваться с компьютером данными по про-│
│              │токолу ECP.                                    │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.IDE8255 │Более простой (менее скоростной) IDE-контроллер│
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.ZXINPUT │Позволяет  подключать  клавиатуру и мышь от PC.│
│              │Также  позволяет  генерировать  прерывания так,│
│              │как это делается на SAM Coupe (перед каждой из │
│              │191 экранных строк)                            │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.KJ      │Подключение Kempston-джойстика                 │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.KMOUSE  │Подключение Kempston-мыши (нужна мышь от Амиги)│
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.FDC765A │Контроллер дисковода. Дисковод может работать в│
│              │двух  режимах: как ZX Spectrum +3, либо как ISA│
│              │Multi I/O                                      │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.AY      │Звуковой  модуль.  Дополнительно  комплектуется│
│              │шиной I2C и позволяет подключить 8k EEPROM, ис-│
│              │пользуемый операционной системой ZXVGS         │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD. EPLIP  │Какой-то шустрый параллельный порт с FIFO-буфе-│
│              │рами                                           │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.8250    │Последовательный  порт (как у PC). Через  ZXVGS│
│              │можно работать с подключенной к нему PC-мышкой │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.8211    │PC-подобный порт принтера                      │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.MB02    │Порт программируемого ввода-вывода 8255 с разъ-│
│              │ёмом DB37 как у дискового интерфейса MB-02     │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD. PCMOUSE│Простой  RS-232 для  PC-мышки со скоростью 1200│
│              │или 19200 bps                                  │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.SIO     │Для  профессионалов  в радиотехнике - позволяет│
│              │превратить  компьютер в TNC-модем (если ещё ку-│
│              │пить  BayCom модем). Что  это  такое, я, честно│
│              │говоря, не знаю.                               │
├──────────────┼───────────────────────────────────────────────┤
│YAMOD.ETHERNET│Позволяет  подключать  некоторые сетевые модули│
│              │(www.embeddedethernet.com), не требующие PC для│
│              │своей  работы. Возможно, это  несколько дорогое│
│              │удовольствие...                                │
└──────────────┴───────────────────────────────────────────────┘

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

    http://zx.yarek.com/dYABUS-en.html

  Инфо по операционной системе ZXVGS:

          http://zxvgs.yarek.com
     
              zxUSB

Разработчик: Dave "The Lurker" Mills
     
  Контроллер для работы с USB-устройствами
на ZX Spectrum.
     
  Попытка  создать работающий USB-контрол-
лер для подключения к Спектрум-совместимым
машинам различных устройств, оборудованных
интерфейсом  USB, в  первую очередь порта-
тивных  накопителей  памяти (USB FlashDri-
ve). Контроллер на основе микросхемы Nati-
onal Semiconductor USBN9603 позволяет под-
ключать  одно устройство через стандартный
разъём  USB  к  системной шине компьютера.
Возможно, что будет разработана версия для
подключения через YABUS.ZX.

  Базовый  адрес  контроллера - #91. Путём
дополнительного  перепрограммирования кон-
троллера и написания программы-обработчика
немаскируемых  прерываний  можно использо-
вать NMI для контроля и управления переда-
чей  данных. Потребляемая подключенным ус-
тройством  мощность ограниченна возможнос-
тями блока питания Спектрума (сила тока не
более 100мА).

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

 http://8bitorbust.info/sinclair/spectrum/hardware/zxUSB/.
     
            ZXATASP

Разработчик: Sami Vehmaa (user.tninet.se/ўvjz762w/)

  16-битный интерфейс для работы с внешни-
ми накопителями.
     
  ZXATASP  это 16-битный IDE-контроллер на
основе    программируемого    модуля   NEC
D8255AC-5, позволяющий  подключать  к ком-
пьютеру  жёсткий диск и CompactFlash Card.
Он подключается к системному разъёму и ра-
ботает  на всех Spectrum-машинах начиная с
ZX  Spectrum  16  без аппаратной доработки
компьютера. Имеет  на борту 128/512 Kb па-
мяти, позволяет загружать в неё любые про-
шивки  ПЗУ, выбирать и работать с одной из
них.

  Модуль  8255 имеет три 8-битных регистра
(A, B, C)  и регистр состояния (CWR), поз-
воляющий  контролировать состояние портов,
сязанных с этими тремя регистрами:

              ┌───────┬─────┬───────────────────┐
              │Регистр│ Порт│    Значение       │
              ├───────┼─────┼───────────────────┤
              │      A│#009F│Младший байт       │
              │      B│#019F│Старший байт       │
              │      C│#029F│Состояние IDE / MEM│
              │    CWR│#039F│Управляющий регистр│
              └───────┴─────┴───────────────────┘

  Регистр CWR позволяет переключать режимы
чтения/записи для регистров A и В (регистр
C всегда находится в режиме записи):
     
  OUT 927,146 - переключает регистры в ре-
                жим чтения

  OUT 927,128 - переключает регистры в ре-
                жим записи
     
     Значения флагов регистра C:
     
             ┌───┬────────────────────────────────┐
             │   │                  Значение      │
             │Бит├─────────────────────┬──────────┤
             │   │     Non-Latched     │  Latched │
             ├───┼─────────────────────┼──────────┤
             │  0│                   A0│          │
             │  1│                   A1│          │
             │  2│                   A2│ Страница │
             │  3│                /IOWR│          │
             │  4│                /IORD│          │
             ├───┼─────────────────────┼──────────┤
             │  5│/CS0 первый канал IDE│   /CS0   │
             ├───┼─────────────────────┴──────────┤
             │  6│            Latch clock         │
             ├───┼─────────────────────┬──────────┤
             │  7│/CS0 второй канал IDE│MEM on/off│
             └───┴─────────────────────┴──────────┘

  Примеры  подпрограмм, осуществляющих за-
пись/чтение данных через IDE:

  10   REM Запись данных в IDE
  20   REM Задаём значение младшего регистра шины IDE (D00-D07)
  30   LET DATALOW=139
  40   REM Задаём значение старшего регистра шины IDE (D00-D07)
  50   LET DATAHIGH=217
  60   REM Переключение в режим записи в порт
  70   OUT 927,128
  80   REM Отправляем значения младшего и старшего регистров
       шины в соответствующие порты
  90   OUT 159, DATALOW
 100   OUT 415, DATAHIGH
 110   REM Получаем доступ к регистру состояния IDE
 120   OUT 671,55
 130   REM Сбрасываем все контролирующие флаги
 140   OUT 671,0

  10   REM Чтение данных из IDE
  20   REM Переключение в режим чтения из порта
  30   OUT 927,146
  40   REM Получаем доступ к регистру состояния IDE
  50   OUT 671,55
  60   REM Считываем значения младшего и старшего регистров
       шины из соответствующих поров
  70   LET DATALOW = IN 159
  80   LET DATAHIGH = IN 415
  90   REM Сбрасываем все контролирующие флаги
 100   OUT 671,0
     
  Устройство  комплектуется маломощной па-
мятью  объёмом  128  или  512  Kb. Нулевая
страница  памяти содержит загрузчик и ути-
литы  для работы с IDE, первая - несколько
модифицированную прошивку ПЗУ. Принцип ра-
боты  состоит  в  том, чтобы загружаться с
IDE, а  затем подставлять вместо загрузоч-
ной  нулевой  страницы  "родной" или любой
другой ROM (причём достаточный объём памя-
ти  позволяет  хранить их несколько десят-
ков). Для  этого используется 6-ой бит ре-
гистра  C во включенном состоянии, а номер
страницы  памяти задаётся битами 0-4 этого
же регистра:
     
       OUT 617, (64+номер страницы)
     
  Для  отключения этой возможности исполь-
зуется седьмой бит регистра C, причём дол-
жны быть включены и шестой, и седьмой бит,
а биты с нулевого по четвёртый должны быть
обязательно  выключены  (а  сам контроллер
должным  образом проинициализирован коман-
дой  OUT  927, 128 или OUT 927, 146). Если
этого  сделано не будет, то тогда "со вто-
рым каналом IDE может произойти что-нибудь
нехорошее"  (цитата  из  техдокументации к
устройству).

  Загрузка  в  память  устройства прошивок
ПЗУ  осуществляется  следующим  образом: в
определённое положение устанавливаются пе-
ремычки на самом устройстве, затем устрой-
ство  инициализируется  и  конфигурируется
при  помощи  регистра  C, после чего образ
ПЗУ  можно  загрузить  в область памяти 0-
16383 при помощи POKE или LDIR.

           Глоссарий
     
I¤C - Inter-IC, интерфейс  связи между ин-
      тегральными схемами.

IDE - Integrated  Device  Electronics, тип
      интерфейса  дисковых  накопителей, в
      котором управляющая электроника раз-
      мещается в самом накопителе, не тре-
      буя специальной адаптерной платы.

СFC - Compact Flash Card, карты памяти ем-
      костью 1-512 Mb. Интерфейс достаточ-
      но  универсален, в формате CF сущес-
      твует  много устройств - модемы, фо-
      токамеры, сетевые  адаптеры, GSM мо-
      дули и жесткие диски. Используются в
      некоторых карманных компьютерах.

EEPROM - Electrically Erasable Programmab-
      le ROM, электрически-стираемое прог-
      раммируемое ПЗУ.

FIFO - First-In-First-Out, буфер, из кото-
      рого данные выпускаются в том же по-
      рядке, как  они  поступили  (т. наз.
      буфер обратного магазинного типа).

RS-232 - Recommended Standard 232, промыш-
      ленный стандарт для последовательных
      соединений,  определяет   конкретные
      линии  и характеристики сигнала, ис-
      пользуемые  контроллерами последова-
      тельных соединений.

USB - Universal  Serial Bus, универсальная
      последовательная шина.
──────────────────────────────────────────




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

Похожие статьи:
Software - втоpая веpсия схемы IDE-HDD адаптеpа для ZX Spectrum.
Железяки - загрузка программ в спектрум с CD с использованием SP-Dif.
Железячный фронт - Новый контроллер винчестера с произвольным доступом из TR-DOS.

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