Краткий обзор некоторых современных
контроллеров для работы с внешними
накопителями информации для 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, универсальная
последовательная шина.
──────────────────────────────────────────