Дискеты и дисководы

Материал из Amiga wikipedia
Перейти к: навигация, поиск

Содержание

Дискеты и дисководы

Немного истории

Большинство Амиг оснащены дисководом для 3.5" дискет двойной плотности (DD - double density). Они обладают максимальной вместимостью 880 КБ при использовании стандартной FFS (Fast FileSystem).

Так называемые 'Big Box' Амиги, A3000 и A4000, могут поставляться с дисководом для дискет высокой плотности (HD). На такие дискеты помещается 1.76 МБ информации. Сами дисководы иногда называют "полускоростными" (half-speed): скорость вращения шпинделя в них уменьшена вдвое по сравнению со стандартной (150 оборотов в минуту против 300), чтобы скорость потока данных, поступающих в компьютер, оставалась прежней, и в результате работа с дисками HD довольно-таки небыстрая. Также эти дисководы позволяют работать со стандартными дискетами PC и Mac объёмом 1.44 МБ при помощи CrossDOS.

Амига поддерживает до четырех дисководов.

(Цельнотянуто с http://www.amigahistory.co.uk/floppy1.html)

Совместимость с PC

Коротко: дискеты, записанные на Амиге в её родном формате, штатными средствами на PC не могут быть прочитаны никак. Связано это с различиями в форматах дорожки PC и Амиги, а также с устройством контроллера дисковода там и там. На сегодняшний день известны два способа решения этой проблемы, оба с использованием дополнительного оборудования: Catweasel и проект Amiga Floppy Reader. Последний покамест работает только на чтение.

Дискеты с PC могут нормально читаться и записываться на Амиге с использованием CrossDOS (?). В сущности, Амига способна читать практически любые дискеты в формате MFM (PC, Atari ST, MSX, TR-DOS), а также - с небольшими ухищрениями - в формате CGR (Commodore 64, Apple II).

Формат стандартной DD (880К) дискеты

(см. http://lclevy.free.fr/adflib/adf_info.html#p3)

Данные на дискетах записываются в формате MFM.

Стандартная дискета содержит 80 цилиндров, каждый состоит из 2 дорожек, по одной на каждую сторону дискеты. Каждая дорожка состоит из 11 секторов (для дискет DD), или 22 секторов (для дискет HD), и одного межтрекового промежутка (inter-track gap).

Читая DD дорожку, Paula ищет два синхрослова (по умолчанию 0x4489, хотя могут быть заданы и другие значения, см. документацию по Paula). Как только искомая последовательность обнаружена, производится считывание 12800 байт дорожки в память. Важное отличие от PC состоит в том, что Амиге безразлично расположение дорожки относительно сигнала INDEX, формируемого дисководом с частотой вращения шпинделя (5 раз в секунду), хотя синхронизация операций чтения-записи дорожки может производиться и по нему.

Переделка стандартных (PC) дисководов для использования в Амиге

Переделка PC HD (1.44) в Amiga DD (880)

Практически любой стандартный дисковод 3.5" может быть переделан для использования в Амиге. Для этого нужно:

  1. переключить (или перепаять) перемычку на дисководе на DS0
  2. обеспечить подачу на 34 контакт разъема дисковода сигнала RDY (готовность), диодом на 10.
  3. обеспечить подачу на 2 контакт разъема дисковода сигнала DISKCHANGE (наличие дискеты), перепайкой дисковода или шлейфа.

Топик на English Amiga Board по переделке дисководов (по-английски, зато с картинками)

Если сигнал RDY на дисководе обнаружить не удалось, его можно изготовить искусственно при помощи сигнала SEL0 (для устройства DF0; SEL1 для DF1 и так далее) и диода типа 1N4148, включив последний следующим образом:

Контроллер           Дисковод
02 ─────────────────────── 34
10 ───────┬─────────────── 10 (или 12 для DF1)
         _│_      ┌─────── 16
         / \ Д9   │
         ~│~      │
34 ───────┘       └─────── 17 (или любая другая нечётная линия)
PCFDFA.jpg

Переделка PC HD (1.44) моделей Chinon FZ-357 в Amiga HD (1.7)

I always thought converting a Chinon FZ-357 drive from PC to Amiga was just a job of playing with the jumpers on the back of the drive. This worked fine for the drive I had, so I didn't notice that my drive in fact had already been converted !

But now I got another FZ-357 drive and was very surprised that it didn't work on an A-500 after I set the jumpers exactly like on my FZ-357 ?!? So, I disassembled both and discovered that it is also necessary to close one jumper ! Did this to the new drive, and now it works perfectly in an Amiga like the other one I had before

Ok, here is how to do it:

  • First, set the jumpers on the back: You have to close DS0, MM, RDY and TTL/C-MOS. So there is one horizontal jumper in the lower row between pins 2 & 3, and 3 horizontal jumpers between upper and lower row on positions 4, 6 and 7.
  • now you have to disasemble the drive:

Take off the top cover of the drive by lifting it from the side of the drive. Then carefully pull off the front cover ( if there is one ) Now turn the drive upside down and unscrew 2 screws which fix the drive to the lower part of the case. After this, bend the lower case a little bit to the outside and remove the big spring which goes across the drive from left to right.

Now, very carefully take the drive out of the lower case. Take care not to loose the upper part of the drive !! Hold it down with one finger while removing the drive from it's case ! Once you have done this, turn the drive upside down and have a look on the board. About in the middle, there are 2 square dots marked with 'J2'. Now, what you have to do is apply a solder blop to close this jumper. Be very careful the blop isn't too big because otherwise you will close some contacts you wouldn't want to be closed

Now, that's all Build the drive back together ( fiddling the disk slot into the right place can take some time ), hook it up to your Amiga like a Amiga drive and it will work 100% with all disks ! This modified drive will also work with NDOS disks and such that require a correct 'ready-signal'.

Доработка дисковода в Amiga 1200 от Escom

Амиги 1200 производства Amiga Technologies (Escom) поставлялись с обыкновенным PCшным дисководом (Panasonic JU-257A605P), что создавало проблемы для программ (игр и демо), использующих собственный код для чтения дорожек дискеты. Чтобы этот дисковод заработал в A1200, Amiga Technologies внесла изменения в схемотехнику материнской платы: сигнал _CHNG был переключен, а сигнал _RDY просто отрезан. Откатить эти изменения для правильной работы с амиговскими (и переделанными PCшными) дисководами очень просто.

Если посмотреть на материнскую плату снизу, можно увидеть провод, идущий от контакта 34 разъема внутреннего дисковода к контакту 2 того же разъема. Все, что нужно - отпаять этот провод от контакта 2 разъема внутреннего дисковода и припаять его к контакту 1 разъема внешнего дисковода в соответствии с приведенной диаграммой.

                             разъем внутреннего дисковода
 34o   o   o   o   o   o   o   o   o   o   o   o   o   o   o   o  2o
 ,-'
'33o   o   o   o   o   o   o   o   o   o   o   o   o   o   o   o  1#
|
|
|
 `--------------------, разъем внешнего дисковода (External Drive)
                     1#   o   o   o   o   o   o   o   o   o   o 12o

                      13o   o   o   o   o   o   o   o   o   o 23o

После обратной переделки дисковод Panasonic, естественно, работать перестанет, но зато можно будет использовать любой всамделишный амижный флоп, вроде Chinon FZ-357, или переделать все тот же Panasonic для 100% совместимости с Амигой.

(Исходный рецепт взят из Ville9's Hardware Hacks)


Контроллер дисковода

Функции контроллера дисковода в Амиге выполняют специализированная микросхема Paula и универсальные микросхемы ввода-вывода 8250 CIA. Контроллер чрезвычайно гибок; он позволяет считывать и записывать MFM или CGR потоки данных в любом формате с использованием DMA (прямой доступ к памяти) или программного ввода-вывода, с возможностью синхронизации по заданному слову (например, 0x4489) или по индексному импульсу.

Любопытно, что для кодирования и декодирования MFM может использоваться Blitter - один проход для декодирования, три прохода для кодирования.

Paula

Дисковая подсистема использует следующие регистры Paula:

ADKCON     ($DFF09E)    control bits (write only register)
ADKCONR    ($DFF010)    control bits (read only register)
DSKPTH     ($DFF020)    DMA pointer (32 bits)
DSKLEN     ($DFF024)    length of DMA
DSKBYTR    ($DFF01A)    Disk data byte and status read
DSKSYNC    ($DFF07E)    Disk sync finder; holds a match word

8250 CIA

Дисковая подсистема также использует 12 линий 8250 CIA:

CIAAPRA    ($BFE001)    four input bits for disk sensing
CIABPRB    ($BFD100)    eight output bits for disk selection, control
                            and stepping

Определение типа подключенных дисководов

Разъем для подключения внешних дисководов (External Drive) поддерживает метод определения типа дисковода (Drive ID). Процедура следующая:

1. Подать MTRXD- : Включить мотор дисковода
2. Подать SELxB- : Выбрать дисковод с номером x
3. Снять SELxB-  : Снять выбор дисковода x
4. Снять MTRXD-  : Выключить мотор
5. Подать SELxB- : Выбрать дисковод x
6. Снять SELxB-  : Снять выбор дисковода x
7. Подать SELxB- : Снова выбрать дисковод x
8. Прочитать и запомнить состояние RDY
9. Снять SELxB-  : Снять выбор дисковода x


Для получения 32 бит данных надлежит повторить шаги с 7 по 9 еще 31 раз. Первым идет старший бит.

Шаги с 1 по 4 служат для включения и выключения мотора выбранного накопителя. Это приводит к инициализации последовательного сдвигового регистра (? в CIA имеется свой serial shift register, возможно, имеется в виду именно он).

Получнные 32 бита значений RDY образуют два 16-битных слова, или ID дисковода. Определены следующие ID:

 0000 0000 0000 0000 0000 0000 0000 0000  Зарезервировано ($0000 0000)
 1111 1111 1111 1111 1111 1111 1111 1111  Стандартный дисковод 3.25($FFFF FFFF)
 1010 1010 1010 1010 1010 1010 1010 1010  Зарезервировано ($AAAA AAAA)
 0101 0101 0101 0101 0101 0101 0101 0101  Двусторонний дисковод двойной плотности DS/DD, 48 TPI ($5555 5555)
 1000 0000 0000 0000 1000 0000 0000 0000  Зарезервировано ($8000 8000)
 0111 1111 1111 1111 0111 1111 1111 1111  Зарезервировано ($7FFF 7FFF)
 0000 1111 xxxx xxxx 0000 1111 xxxx xxxx  Доступно пользователю ($0Fxx 0Fxx)
 1111 0000 xxxx xxxx 1111 0000 xxxx xxxx  Зарезервировано для расширения ($F0xx F0xx)
 xxxx 0000 0000 0000 xxxx 0000 0000 0000  Зарезервировано ($x000 x000)
 xxxx 1111 1111 1111 xxxx 1111 1111 1111  Зарезервировано ($x000 x000)
 0011 0011 0011 0011 0011 0011 0011 0011  Зарезервировано ($3333 3333)
 1100 1100 1100 1100 1100 1100 1100 1100  Зарезервировано ($CCCC CCCC)

Всякая всячина

С момента прихода индексного импульса и до начала поступления битов данных с дисковода (с запуска DMA) проходит какое-то время. Эта задержка составляет от 135 до 200 микросекунд и складывается следующим образом:

  • 55 мкс - оверхед программного прерывания (время с момента возникновения прерывания до записи в регистр DSKLEN);
  • 66 мкс - задержка на 1 строку растра (помним, что дисковый ввод-вывод синхронизирован с выборкой видеоданных Agnus).
  • Последняя величина (0-65 мкс) - дополнительная строка растра ввиду того, что запись в DSKLEN производится в произвольном месте горизонтальной строки. Остаются неучтенными 15 мкс. Короче говоря, вам практически никогда не удастся получить биты в первые 135 микросекунд с момента прихода индексного импульса, и маловероятно, что повезет получить их ранее чем через 200 микросекунд. При 4 мкс на бит это выливается в задержку от 4 до 7 байт пользовательских данных.

Чтение "сырых" данных может быть синхронизировано с индексным импульсом при использовании флага IOTDF_INDEXSYNC, или с синхрословом 0x4489 при использовании флага IOTDF_WORDSYNC. Подробней об этих и других флагах см. "trackdisk.doc" из Amiga ROM Kernel Reference Manual: Includes and Autodocs.