Темы



SSD технологии древних: DiskOnChip

zoldvfbq_gpb7zpbegoic7--d9e.jpeg


В середине 1990-х, FLASH-накопители были очень дорогими, поэтому появление твердотельных накопителей сильно задерживалось. Стоимость 1 МБ FLASH-памяти была несоизмеримо дорога в сравнении со стоимостью 1 МБ памяти на физическом жёстком диске, с блинами.

Но, несмотря на это, в 1995 году — израильская компания M-Systems представила первый полупроводниковый накопитель. Это был настоящий жёсткий «диск», который выглядел как обычная 32-х контактная DIP-микросхема. Более того, он устанавливался вместо микросхемы расширения BIOS, при этом имел на борту ёмкость в десятки, а то и сотни мегабайт. В те годы — это было просто космические технологии, и в последствии они встречались и использовались достаточно часто, но уже в промышленном секторе.

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

Ну что же, попробуем собрать свою необычную систему с этим жёстким «диском», проверю, может ли она работать с обычной ROM-памятью, запущу наконец свой BIOS на 386 машине с ISA-картой, чего не удалось в прошлый раз.

❯ Что же такое DiskOnChip®?


DiskOnChip (далее — DOC) — это фактически продолжение идеи расширения BIOS, о котором я достаточно подробно писал в статье «Пишем свой ROM BIOS».

DOC представляет собой обычную DIP-микросхему и вставляется в ту же панельку, что EEPROM, как на сетевой карте, живёт по тем же адресам и даже в начале содержит код BIOS инициализации. И микросхема pin-to-pin совместима с некоторыми микросхемами ПЗУ! Однако далее, в старших адресах этой микросхемы, содержатся регистры управления, которые переключают FLASH-памяти.

Для сравнения можно посмотреть расположение выводов DiskOnChip 2000 и микросхемы EEPROM SST 29EE512 (64К x 8). Отличие только в количестве адресных линий, потому что DOC работает через окно в 8К х 8 (как восьмикилобайтная EEPROM).

_2un-e-9jq9jhnpj5_2tfv9wn9k.png
Сравнение распиновки EEPROM и DOC

Фактически электрический интерфейс работы с DiskOnChip ничем не отличается от интерфейса работы с обычной EEPROM. Сигнальные линии называются также, и она совместима с ними по ногам.

8glrixhduyasvozfkixsfhrvddw.png
Структурная схема DOC

DiskOnChip занимает 8 КБ памяти. При этом — во время старта, она выглядит как обычная ROM BIOS, и инициализирует код для работы в реальном режиме, добавляя в прерывание BIOS 13h ПО для работы по этому интерфейсу.

При работе в реальном режиме, когда передаётся код управления BIOS в его внутреннюю EEPROM, он подменяет прерывание 13h по работе с диском. Таким образом, он начинает мапить в старшие адреса по очереди страницы флэш-памяти, с помощью регистров управления.

zkhdpiyekhs7ibjjkytnt1qiifm.png
Карта памяти DiskOnChip 2000

Если рассмотреть карту памяти, которая доступна системе в пространстве 8 КБ, то мы увидим что оно состоит из четырёх разделов по 2 КБ.

  • Секция 0: Загрузочный блок. Этот раздел содержит данные, которые выполняются при загрузке BIOS.
  • Секция 1: Загрузочный блок 2. Содержит вторую часть загрузочной области.
  • Секция 2: Регистры управления. Используется для управления поведением DiskOnChip 2000 и флэш-носителя.
  • Секция 3: Окно доступа к FLASH-накопителю. Окно, чрез которую видно область FLASH для записи или чтения данных.


Как можно понять, вся доступная память, в моём случае 8 МБ, доступна через маленькое окно в 2 КБ и переключается с помощью регистров управления.

В более сложных системах, которые работают уже в защищённом режиме, таких как Windows CE, Windows 2000, QNX, Linux и т. д., где недоступен код инициализации и прерывание 13h, для работы требуются специализированные драйвера файловой системы DOC, называемой TrueFFS.

Подводя итог, можно сказать, что DiskOnChip — это примитивный SSD того времени, который успешно применялся во многих встраиваемых системах. Чаще всего его можно было встретить в одноплатных компьютерах, в кассах, тонких клиентах и другом аналогичном оборудовании. Вот, например, недавно через мои руки прошёл моноблок для ресторанов Micros WS4. Как я понял, он использовался официантами для приёма заказа.

u4hy_t56t1nsv-oidgcrpwtfcou.png
Внешний вид моноблока

И после вскрытия внутри можно обнаружить микросхему DiskOnChip, несмотря на то, что он работает под управлением операционной системы Windows CE.

hsvpbhi2-x_x5v7eqdpu2jbkkko.jpeg
Микросхема DiskOnChip

Самое приятное, что из-за простоты устройства DOC для его подключения к компьютеру не требуется использовать каких-либо контроллеров жёстких дисков, от них можно вообще отказаться! Схема подключения содержит всего две микросхемы логики.

s3usasbmr8hzsn6wctajvpwqxjc.jpeg

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


А ещё их можно заменить на микросхемы серии к155, к555, кр1564 и всё будет прекрасно работать.

Схема простая, значит можно попробовать запустить его на любом старом железе!

❯ Ваяю плату расширения


Много лет хочу сделать плату расширения для шины ISA. Ещё со студенческой скамьи вынашивал идеи, прикидывал дешифраторы адреса для создания своей платы расширения. Даже как-то пытался паять параллельный порт на микросхеме КР580ВВ55. Но всё это было не торт, и толком не работало.

Здесь другое дело, схема простая, всего три микросхемы, как работает — понятно. Осталось дело за малым — это всё реализовать. Мне было лениво заниматься разводкой печатной платы, поэтому решил делать всё на макетке. В качестве основы платы взял проект IBM PC XT8-bit ISA Prototype PCB Card XL.

fmhk2g2uzwqm9-ldyxx-__coj90.jpeg

В Китае заказал изготовления платы, микросхему DOC на 8 МБ и уже здесь нашёл подходящие микросхемы логики: 74HC138AP и 74HC139AP (обратите внимание, что буквенные индексы иные). Самое тяжёлое — это было томительное ожидание, когда изготовят платы и их отправят. Спустя несколько месяцев у меня всё было на руках.

w9umxxno69jdw12l0ysyxfji6eo.jpeg
Всё готово к сборке

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

ddbmtkxd8ejdzj9onnhpqysibv0.jpeg
Набросок схемы

Далее предстоит кружок кройки и шитья, и покуда я собирал всё это хозяйство, десять раз пожалел, что не развёл плату сразу. Потому что убил просто громадное количество времени на все эти проводочки.

cxvpozuo-_mna6epyr9ii3u2ass.jpeg
Кружок кройки и шитья

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

v0wq_mqh8xu_gks_9vnw8bgsqea.jpeg
Вид спереди

wdpjxwtogw5v4jknnryng2xso1s.jpeg
Вид сзади

Далее предстоит самое интересное — тестирование!

❯ Проверка работоспособности DiskOnChip


Проверку проводил на материнских платах с процессорами 386SX и Pentium 1. Как обычно бывает, где-то был неконтакт или непропай. После исправления мелких недочётов система сразу подхватила BIOS из DOC, и я увидел при загрузке ключевое сообщение, о том, что TrueFFS-BIOS запустился.

w7f8xyrt7btpkebpkcubffvsh8c.jpeg

Если загрузиться вместе с жёстким диском, то можно увидеть второй диск D:, который можно отформатировать в системный раздел и перенести на него файлы, что я и сделал. Забегая вперёд, скажу, что форматировать стандартным format d: /s нельзя! То есть если очень хочется, то можно, но результат непредсказуем.

5s7lo-4gpnulwvgl52h0krqnc3k.jpeg

Намного более правильно работать с этим «диском» с помощью его родных утилит, которые корректно работают с TrueFFS. После того как я отформатировал диск родными утилитами, можно было перенести систему, отсоединить плату контроллера дисков и оставить только видеокарту и мою самодельную платку.

Удивительно, но это работает!

kzxfxkmc78ayli8cmnyobztp-8e.jpeg
Ничего лишнего: только материнская плата, видеокарта и DOC

Самое забавное, что при загрузке BIOS не видит никаких подключённых носителей: ни флоппи, ни жёстких дисков. Но несмотря на это, всё равно идёт загрузка DOS. Лучше всего посмотреть на видео.


❯ Не всё так гладко с этим DOC…


На самом деле, не всё так гладко. То ли мне не повезло с микросхемой, то ли какая-то другая проблема, но DOC глючил. Он не всегда успешно загружался на моей плате, так и на железе, которое умеет работать с DOC из коробки (имеет аппаратную и программную поддержку в системном BIOS). То есть выглядело так, BIOS TrueFFS стартует, но диска при загрузке не видит. После перезагрузки стартует нормально, потом снова не видит. С чем связано — непонятно.
В какой-то момент при загрузке начались артефакты с запуском программ, а при переходе в папку увидел такое:

zef-6fatvj-nbmj3ptvbkrb21u0.jpeg
Так выглядит смерть жёсткого диска

И после этого загружаться он отказался. Спасло только форматирование его штатными утилитами. Что это было — я не знаю. Сетую на то, что у меня одна из первых версий микросхем, возможно, она немного сырая.

❯ Замена DiskOnChip на EEPROM


Hо перед нами прогресс открывал все пути,
И, бросив старых друзей ради новых ХТ,
Мы выжимали, что можно, из DOS и из архитектуры,

Меняли коды команд, трассировали INT’ы
Дизассемблировали BIOS и писали в порты
То, что я б не позволил печатать на месте цензуры.


Мне всё же хотелось продемонстрировать, что вместо DOC можно поставить обычную ROM микросхему, и это решение будет работать. В результате это вылилось в столь громадный квест, что потянет на ещё одну статью, а то и не одну. Там пришлось дизассемблировать основной BIOS, была попытка запустить его в qemu и много других забавных экспериментов. Но всё же, оставлю это всё самое интересное за кадром, и расскажу суть.

В качестве микросхемы ПЗУ взял EEPROM SST 29EE512 просто потому, что она у меня была под рукой, и была pin-to-pin совместима с DOC. Внимательный читатель заметит (хотя уверен, что таких нет), что это та же самая микросхема, которую я использовал в статье «Пишем свой ROM BIOS». Для корректной работы 64КБ ROM в области памяти 8 КБ, нужно посадить неиспользуемые старшие адреса на землю. То есть, фактически мы превращаем микросхему в 8 килобайтную EEPROM.

В процессе экспериментом выяснилось, что БИОС на материнской плате пытается писать в EEPROM, и, таким образом, портит её содержимое. Для того чтобы этого не происходило, доработал переходник, удалив контакт с сигналом разрешения записи WE.

5k950tzuxqv5bdkweczz6imlw3o.jpeg

kyygkode_fe87uqww_cvf3ijqns.jpeg
Больше переходников, богу переходников!

Изначально планировал попробовать точно также запустить BASIC-ROM, но как я не бился, так и не смог его стартануть. То есть, видно, что происходит успешная инициализация, системный BIOS «зависает» без ошибок, значи переход на код ПЗУ состоялся, о чём также свидетельствовали POST-коды. Но ничего больше не происходило. В отчаянной попытке я начал искать JTAG-отладчики для 386 архитектуры, пытался запустить BIOS материнской платы в qemu, но всё тщетно. Идей, как отлаживать подобные BIOS у меня пока нет. Хотя задача, крайне интересная, как же заниматься отладкой различных расширений BIOS.

Обращаю внимание, что в qemu c SeaBIOS и на другой материнской плате, с EPROM на PCI-карте всё прекрасно работало.

s9h4xkfonf0iynwf5k8izr9vgug.jpeg
Установленная микросхема ПЗУ, вместо DOC

В конце концов, я не нашёл выхода из этой ситуации, поэтому решил идти по более простому пути и запустить ROM HELLO. К слову сказать, в том коде я тоже обнаружил ошибку.

Как оказалось, после того как я посчитал контрольную сумму, оставшиеся байты надо было сделать равными нулю. Чтобы в результате общая сумма давала нуль. И мне сильно повезло, что на PCI тогда этот код завёлся. Вообще, то что на PCI плате это работало — чудо, потому что потом я внимательно прочитал стандарты, он не должен был работать никак. Исправление этой ошибки запуску BASIC не поспособствовали.

В результате всех мытарств, которые по времени заняли больший и наиболее сложный промежуток, чем эксперименты с DOC, мне удалось на этой же плате стартануть мой самописный BIOS.

97yy0dlzbpn34j77i3kpa__ob8y.jpeg
Успешный запуск на материнской плате Pentium

Всё это, конечно, интересное колхозничество, но как насчёт промышленных железок, будет ли всё это работать и там?

❯ Тест на железе с панелькой под DOC


Всё это забавно и хорошо, хочется попробовать запустить реальное железо, которое имеет поддержку DiskOnChip прямо из коробки. Специально для этого прикупил себе старинный тонкий клиент Light System LG8101, внутри которого есть панелька для DOC.

m_rq_xcacsk3lwxljyepcg0dsmw.jpeg
Внешний вид тонкого клиента

Если вскрыть эту штуку, то внутри можно обнаружить CF, с которой идёт загрузка, и панельку под DiskOnChip. В неё можно и проинсталлировать нашу замечательную микросхему.

bnteiyet2qcoachozsz_4dgcv6k.jpeg
Недра

Эта железка имеет поддержку DOC на уровне BIOS, так что запуск TrueFFS-BIOS не требуется. Обратная сторона этой поддержки в том, что сюда не получится вставить свою ROM-память, эта панелька предназначена только для микросхемы DiskOnChip (да, я попробовал вставить туда свою ROM, но ничего не произошло).

t-pmf-jxp2yft0mnf9r1u0hh0eg.jpeg
Выбираем в BIOS загрузку с DOC

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

il-x5hmrsfhz9xalzcsgbdu_l5s.jpeg
Успешная загрузка тонкого клиента с установленной микросхемы DiskOnChip

❯ Заключение


Удивительно, но многие из вас не знают, что первые SSD-накопители появились аж в 1995 году, и даже вполне себе успешно применялись и использовались. Их высокая стоимость и малая ёмкость привели к тому, что рядовые пользователи не могли встретить их в своих ПК. Однако нашли широкое применение во встраиваемых системах, либо там, где не требуется частая запись на диск, как, например, тонкий клиент. Их могли использовать также в игровых автоматах или станках.

ykypmadcj-9k0gnxcwsuvprl8vi.jpeg
Условный игровой автомат на DiskOnChip

Тем не менее широкого распространения они так и не получили. Впоследствии дешевизна и расширение рынка CompactFlash свели на нет эту перспективную разработку. К её недостаткам также следует отнести, что она довольно медленная, так как работа идёт через маленькое окно в 2 КБ.

❯ Полезные ссылки:


  1. Документация на DiskOnChip.
  2. Отличная статья на русском по DOC: «Все про DiskOnChip® 2000» от Андрея Кузнецова.
  3. Прекрасная статья о работе и програамированию DiskOnChip (англ.)
  4. ПО под ДОС для работы с DOC.
  5. Проект макетной платы ISA.


❯ Благодарности:


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

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

p-u9l27ynelxi92bcmdxhu76ma8.png

© Habrahabr.ru