На это небольшое исследование меня натолкнула опубликованная недавно на Хабре статья, в которой автор предположил, что в знаменитых "Тетрисах" из 90-х мог использоваться 4-битный микроконтроллер Holtek HT1130. Меня сильно удивило (и мотивировало), что, по всей видимости, до сих пор не снят образ ПЗУ и, соответственно, не написан эмулятор для этой линейки игр.
У предположения, что Brick Game построен на Holtek HT1130 есть одна слабая сторона — у HT1130 драйвер дисплея может управлять только 128 сегментами, а в типичном Brick Game только игровое поле состояло из 200 (10x20) сегментов. Откуда же появилась вообще информация про Holtek HT1130? Немного погуглив, я нашел первоисточник, это статья 2015 года, в которой автор рассказывает, что нашел даташит на одну из вариаций Brick Game — "Super Brickcal 9 in 1" работающую на HT113LA и отличающуюся от классических меньшим игровым полем. Он отмечает, что Holtek HT113LA является частным вариантом Holtek HT1130, на котором кроме Super Brickcal строится еще множество простых портативных игр с ЖК экраном.
Но меня интересуют более распространенные версии Brick Game — в узнаваемом корпусе с изгибом посередине, обычно маркируемые буквой E и несколькими цифрами. Например, ES-118 и E-88 как на фото ниже:
Эти видавшие виды экземпляры я специально купил для препарирования. E-88 была заявлена продавцом как неисправная, к тому же она в узких кругах ценителей Brick Game является одной из самых классических версий, поэтому начну с него.
1 час 5 рублей :) это шутка, или кто-то действительно был готов платить за почасовую игру в Тетрис?!
У-у-х. Внутри неожиданно открывается вид на богатый внутренний мир предыдущего владельца. Punk not dead!
А вот и интересующий меня кристалл просвечивает под текстолитом:
Черная капля компаунда надежно защищает кристалл микроконтроллера от окружающей действительности и освободить его — довольно нетривиальная задача. Надежней всего было бы растворить ее в азотной кислоте, но такие методы в домашних условиях меня не очень вдохновляют. Поэтому я выбрал более простой, но менее надежный метод декапсуляции — термический.
Декапсуляция
Суть такова — отделяем всю каплю вместе с кристаллом от текстолита, затем нагреваем ее на открытом огне, в результате чего компаунд становится хрупким, и от основной его части можно избавиться механически. Остатки компаунда с поверхности кристалла удаляются дихлорэтаном (который обычно продается в качестве клея для пластика).
Как я уже упоминал, этот метод не очень надежный (плюс отсутствие у меня практики) и, к сожалению, в процессе отделения компаунда кристалл треснул, развалившись на две части :( К тому же основные повреждения "удачно" пришлись на область с ПЗУ, поэтому прочитать его в этот раз у меня не получилось. Итак, вот он, мозг Brick Game E-88 (в полном разрешении):
Сразу бросается в глаза маркировка кристалла HT-943E5 с датой изготовления маски 1994 г. и небольшой чип-арт в виде логотипа Holtek.
Получается, можно подтвердить, что классический Brick Game середины 90-х работает на микроконтроллере Holtek. Осталось выяснить, на каком именно.
Естественно, я сразу загуглил HT-943. И ближайшее, что я нашел, был 8-битный HT-948, но уж больно он не совпадает с тем, что мы видим на DIE-фото — 16 кБ ПЗУ против 4, 3328 бит ОЗУ против 640, опять не совпадает количество управляемых сегментов ЖК, да и 4-битность Super Brickcal наводит на мысль, что и здесь мы имеем дело с 4-битным процессором. Вообще, наверно, кто-то более опытный без труда смог бы определить разрядность АЛУ по фотографии, но я в микроэлектронике полный профан.
В конце концов, я пошел в лоб и скачал все даташиты на 4-битные микроконтроллеры Holtek которые я только смог найти (благо их в открытом доступе всего пара десятков), и все же отыскал идеально подходящий вариант — это HT443A0.
Судите сами: количество сегментов (40) и общих выводов (8) драйвера ЖК совпадает с тем, что можно распознать на фото кристалла, 160 нибблов ОЗУ плюс 80 ОЗУ ЖК тоже. И самое главное — в документации изображены позиции выводов кристалла и его размер, что в точности совпадает с нашим экземпляром.
Теперь я попробую побыть в роли доморощенного Кена Ширрифа, и подписать то, что я распознал на кристалле. Еще раз напомню, что я очень поверхностно разбираюсь в микроэлектронике и мог допустить ошибки в своих предположениях (было бы здорово, если разбирающиеся в теме люди меня поправили и дополнили в комментариях).
Рассмотрим ПЗУ подробнее:
На сетке транзисторов хорошо различимы неоднородности, которые и кодируют отдельные биты ПЗУ. Простыми словами, там, где горизонтальную линию (легированный слой) пересекает розовый участок вертикальной линии (слой поликремния) — 1, там где зеленоватый участок — 0. Слева виден дешифратор 6 старших бит адреса (дешифратор 6 младших бит находится между верхней и нижней частью ПЗУ в поврежденном месте и на фото его не видно). Если присмотреться, все горизонтальные линии сходятся в верхнем левом углу — отсюда на шину данных уходит один бит расположенного по определенному адресу байта. Т.е. каждый участок ПЗУ подобный вырезанному выше (всего их 8) и его зеркальное отражение справа содержат каждый n-ый бит всех 4096 байт ПЗУ. И это на самом деле плохо, т.к. получается, что разрушены биты из середины каждого байта ПЗУ. Даже часть прошивки прочитать с этого кристалла не выйдет.
А пока ко мне едут новые доноры для декапсуляции, у нас есть совершенно целое ПЗУ мелодий, попробуем расшифровать хотя бы его.
ПЗУ Мелодий
Из документации можно узнать, что HT443A0 поддерживает 16 отдельных мелодий, каждая из которых может быть набором тонов, шумов или ударов. Мелодии 1-12 поддерживают до 32 нот, а 13-16 до 64. К сожалению, не сказано, какая разрядность у нот, но мы можем ее легко вычислить: визуально можно насчитать 4480 бит в ПЗУ мелодий, а всего хранимых нот по документации 640, получается 4480 / 640 = 7 бит на ноту.
Чтобы прочитать ПЗУ, надо определить, как биты соотносятся с конкретными нотами, а ноты с мелодиями. Для этого можно попробовать проанализировать дешифраторы, которые управляют выборкой нот и мелодий.
Красным отмечен 5-разрядный дешифратор выбирающий одну из 32 пар вертикальных линий. Логично предположить, что каждая из 32 нот хранится в одной паре вертикальных линий. Синим выделен 4-разрядный дешифратор, который выбирает 1 из 16 наборов по 7 (количество бит в ноте) горизонтальных линий. И еще один 1-разрядный дешифратор, выделенный зеленым, позволяет адресовать дополнительные 32 ноты мелодий двойного размера.
Попробую проиллюстрировать это сбивчивое объяснение, прочитав первую ноту первой мелодии. Для начала, нужно стравить металлизацию, так как она скрывает от нас часть ПЗУ. Для этого я использовал некий флюс для низкотемпературной пайки алюминия (состав его неизвестен). К сожалению, травление влияет и на другие слои интегральной схемы, что приводит к неоднородному изменению цвета (который зависит от толщины слоя) и прочитать ПЗУ становится довольно сложно. Никакой автоматизации, все 4480 бит нужно отметить вручную :(
На фото отмечены значения бит первой ноты первой мелодии, порядок чтения от старшего к младшему отмечен стрелками.
А вот вся первая мелодия:
1010110
1101011
0110101
1011010
1101101
1110110
1111011
0111101
1011110
1101111
0110111
0011011
0001101
1000110
1100011
0110001
1011000
0101100
0010110
1001011
0100101
1010101
1101001
1110100
0111010
1011010
1101110
1110111
0111011
0011101
1001110
1100111
Примечательная последовательность, ожидал увидеть здесь просто числа для делителя частоты, но это похоже на выход регистра сдвига с линейной обратной связью. Смутно вспомнил, что у упомянутого уже Кена Ширрифа есть реверс музыкальной микросхемы открытки с мелодией, проверил — действительно, там полностью аналогичное представление нот. Так что подробности можно почитать по ссылке, а кратко — делитель частоты определяется количеством шагов работы РСЛОС до получения значения 1000000.
Например, нота 1111111 сдвигается за 8 шагов:
1111111
0111111
0011111
0001111
0000111
0000011
0000001
1000000
Базовая частота звука определяется делителем тактовой частоты, который задается маской на заводе, и его точное значение мне неизвестно. Но я измерил частоту звучания этой ноты на живом экземпляре и она получилась равной ~4200Гц. Так что нам подходит базовая частота 32768Гц — при таком значении нота 1111111 будет соответствовать 4096Гц (некоторое расхождение объясняется неточностью резистора задающего тактовую частоту HT443A0)
Теперь можно понять, какой звук содержит первая мелодия — это звук, который воспроизводится при горизонтальном перемещении фигуры в тетрисе.
А что же Коробейники? Она занимает сразу две 64-нотных мелодии 13-ю и 14-ю. Вот начало всем известной мелодии с подписанными частотами:
0111010 - 1092Гц
0111010 - 1092Гц
0111010 - 1092Гц
0111010 - 1092Гц
1100011 - 819Гц
1100011 - 819Гц
0101100 - 886Гц
0101100 - 886Гц
1010010 - 993Гц
1010010 - 993Гц
1010010 - 993Гц
1010010 - 993Гц
0101100 - 886Гц
0101100 - 886Гц
1100011 - 819Гц
1100011 - 819Гц
1101111 - 728Гц
1101111 - 728Гц
1101111 - 728Гц
0000000
1101111 - 728Гц
1101111 - 728Гц
0101100 - 886Гц
0101100 - 886Гц
0111010 - 1092Гц
0111010 - 1092Гц
0111010 - 1092Гц
0111010 - 1092Гц
1010010 - 993Гц
1010010 - 993Гц
0101100 - 886Гц
0101100 - 886Гц
Видно, что длительность ноты задается простым дублированием, а отсутствие звука нулем.
Кроме ПЗУ мелодий есть еще одно, поменьше, тоже относящееся к музыкальной схеме:
Я еще с ним не разбирался, но, по-видимому, здесь содержится делитель задающий темп для каждой мелодии, тип "инструмента" и наверно что-то еще.
В ближайшее время постараюсь все же извлечь целый кристалл из-под компаунда и снять образ прошивки. А там уже и до эмулятора недалеко.
Комментарии (105)
rutenis
20.10.2023 07:25+51 час 5 рублей :) это шутка, или кто-то действительно был готов платить за почасовую игру в Тетрис?!
Почему нет? На вокзале, в зале ожидания, думаю, такие находились.
jar_ohty
20.10.2023 07:25+3В самолетах времен СССР на излете был прокат игры "Ну Погоди". Причем каким-то образом она играла ограниченное время: срабатывал будильник, после чего игра работать переставала. Цену не помню.
igormu
20.10.2023 07:25+1Я помню цену - один рубль в час. Про будильник не помню, по-моему, просто стюардессы проходили и забирали. Возможно, были разные варианты.
CrashLogger
20.10.2023 07:25+4Интересно, что там делает схема с советскими транзисторами
nem0ff
20.10.2023 07:25+4Изменено
Похоже, там на задней крышке светодиод, а плата им управляет, скорее всего контролирует напряжение батареек, типа разрядились.
Azya Автор
20.10.2023 07:25Не, светодиода там нет. В металлическом корпусе, кстати, тиристор КУ101А.
sim2q
20.10.2023 07:25+1Там же написано : "Панк!" :)
1. У платы больше пинов чем подключено
2."Подключены" они в винтам не имеющим электрического контакта ни к чему.
Декор и судя по узнаваемой грязюке и прикрученному и недопаянному проводу - школьник имитировал.
vd0
20.10.2023 07:25+24Порадовали фразы типа: "я очень поверхностно разбираюсь в микроэлектронике"...
Azya Автор
20.10.2023 07:25+4Без ложной скромности. Даже в процессе написания этой статьи я узнал много нового.
AWRDev
20.10.2023 07:25+2Было бы интересно подробнее узнать про "визуальное чтение" ПЗУ)
Azya Автор
20.10.2023 07:25+1Как я и написал - если участок пересечения линий розовый - там единичка, если нет ноль. Вот и все чтение) Проблема только в том, что контрастность и разрешение изображения не позволяют автоматически считать ПЗУ с этого чипа (а такой софт есть, и нормально работает на других типах масочного ПЗУ), поэтому приходится сначала вручную тыкать в Гимпе на активные биты, а т.к. их там 32768, задачка растягивается на несколько часов нудной работы :) А потом еще несколько часов на проверку, т.к. обязательно будут ошибки.
vvzvlad
20.10.2023 07:25+3Нужен краудсорсинг, чтобы каждый распознавал пару сотен бит, и это проверялось бы результатом пары других людей.
grishkaa
20.10.2023 07:25+21Автор такой: "я очень поверхностно разбираюсь в микроэлектронике", а потом берёт и находит дешифраторы в абсолютно непонятном мне месиве из разноцветных областей кремния, определяет их разрядность и читает ПЗУ на глаз ????
Azya Автор
20.10.2023 07:25Это второе масочное ПЗУ, которое я пробовал читать и первый раз когда я постарался побольше проанализировать схему, чтобы понять порядок чтения. Так что опытным в этой области я себя никак не могу считать)
bodyawm
20.10.2023 07:25+3Благодарю за раскрытие тематики подробнее :) так какой тип монтажа у чипа? Что то типа qfn? На BGA не похоже.
dlinyj
20.10.2023 07:25+3Там просто золотые волоски по периметру припаяны, и припаяны к плате. И потом заливается компаундом.
Это типа как плата-микросхема.
BARSRAB
20.10.2023 07:25+2Никакой, там привариваются золотые проволочки к выводам на кристалле и все. Это же голый кристалл, без корпуса.
dlinyj
20.10.2023 07:25+1Вот буквально недавно на канале macroaesthetic появилась фотография К573РФ1
Вот тут точно такие же золотые ниточки, только к плате.
BARSRAB
20.10.2023 07:25+3Остатки компаунда с поверхности кристалла удаляются дихлорэтаном
На самом деле не сильно лучше азотной кислоты в домашних условиях, а скорее даже хуже, т.к. является довольно токсичным и опасным для организма веществом.
olartamonov
20.10.2023 07:25-1Да, я бы с этой дрянью без хорошей вытяжки в значимых объёмах (не ~1 мл, как при использовании в качестве клея) не работал бы.
vilgeforce
20.10.2023 07:25+2Не так страшен черт. Нормальной вентиляции более чем хватит, если внутрь не употреблять
BARSRAB
20.10.2023 07:25+1Нормальная вентиляция в домашних условиях трудно реализуема. Разве что прямо на улице все делать. Но опять же, через кожу он тоже проникает.
dlinyj
20.10.2023 07:25+3Реализуема, но с оговорками.
Вот для всяких химических экспериментов. Алюминиевая гофра - не самое лучшее, но временное решение.
Azya Автор
20.10.2023 07:25Да, я представляю вредность дихлорэтана, использовал на балконе :) Та дрянь во флюсе для алюминия тоже предполагаю далеко не безвредна. А куда деваться, совсем без химии не обойтись :(
WVitek
20.10.2023 07:25+3Лет в 12-13 была у меня в доступе 0.5л дихлорэтана (у отца в залежах находил).
Вроде я им пластик от сметанных баночек растворял в пузырьке, а потом этим "жидким пластиком" бумажные самодельные модели корабликов обрабатывал, чтобы запускать в воде можно было))А может это и уайт-спирит был...
vilgeforce
20.10.2023 07:25+1А сам компаунд тем же дихлорэтаном не растворяется?
Azya Автор
20.10.2023 07:25Он растворяется, но видимо настолько медленно, что стравить полностью не выйдет за разумное время. Возможно, если его нагреть, процесс пойдет веселее, но и опасность работы с ним сильно возрастет.
SuperTEHb
20.10.2023 07:25+1Узнать бы состав. А то, чем чёрт не шутит, может и ДМСО возьмёт. Эта штука менее вредная всё-таки.
Azya Автор
20.10.2023 07:25Спасибо за наводку, попробую его в следующий раз.
Halt
20.10.2023 07:25+6Димексид нужно применять крайне осторожно! Он существенно повышает проницаемость кожи и любая дрянь на ней пойдет прямиком в кровь. За секунды! Его в фармакологии применяют именно как трансдермальный транспорт.
VBlagodarniy
20.10.2023 07:25+1А я им двигатель своей классики промывал от старого масла и грязи.
Когда увидел на Ютубе что аптечные средства используют не по прямому назначению - не поверил. Но потом попробовал перед переборкой движка и правда хорошо очищает и масло и нагар.
Я не химик ни разу, но вот было бы интересно узнать в каких нестандартных вариантах использования можно применять Димексид? Может ли он, например, убрать накипь с внутренней поверхности змеевика газового бытового водонагревателя?
Halt
20.10.2023 07:25+1Как полярный растворитель с очень высоким дипольным моментом ДМСО отлично растворяет полярные вещества. Неполярные, соответственно, особо трогать не будет. Накипь скорее всего не возьмет, потому что апротонный.
Но мыть им двигатель без перчаток равносильно тому, что полученную жижу принимать прямиком внутрь.Из него даже боевые отравляющие вещества делали, смешивая с отравой для лучшей проницаемости.
jar_ohty
20.10.2023 07:25+1ДМСО эпоксидку не возьмет. Она - трехмерный сшитый полимер, и не разрушив полимерные цепи химически, можно только добиться его набухания.
Ostrie_Brevna
20.10.2023 07:25+6но я в микроэлектронике полный профан
Что-то не верится :)
Кажется, в таких случаях принято говорить "Хабр - торт!" Автору спасибо за статью и дальнейших успехов (пишите ещё)!Azya Автор
20.10.2023 07:25+2Но это так, просто в виде причесанной статьи мое знание темы выглядит сильно лучше чем в реальности)
dlinyj
20.10.2023 07:25+5У меня короткий вопрос, который мучает с начала публикации поста: каким образом удалось сделать такую качественную фотографию кристалла?
Azya Автор
20.10.2023 07:25+7Микроскопом с вертикальной подсветкой. Если точнее: Nikon E200 + приколхоженная вертикальная подсветка от Nikon Optiphot + объектив Nikon Plan APO 20x + Sony NEX-5N. Снимал все кучей кадров потом совмещал в Hugin.
Diesel_M
20.10.2023 07:25+1Мне кажется, что в качестве микроконтроллера может использоваться HT-943E5, как и указано на маркировке. Вы нашли даташит на HT-948, а это, как мне кажется, другой контроллер с совершенно иными характеристиками. Ведь характеристики контроллеров, даже в пределах одной линейки, могут отличаться в зависимости от модели. В качестве примера могу привести микроконтроллеры STM32F103VC и STM32F103VD, которые отличаются по характеристикам (в частности, по объёму памяти), несмотря на то, что принадлежат к одной линейке.
Azya Автор
20.10.2023 07:25+1Нет, я же наоборот написал, что первоначальное предположение на счет HT-948 не оправдалось. Я в итоге остановился на HT443A0. HT-943E5 это все же маркировка конкретного набора масок (на сколько я понимаю).
Karlson_rwa
20.10.2023 07:25+1Очень круто, спасибо! Как в этой статье не пробовали декапсулировать?
Azya Автор
20.10.2023 07:25+1Я видел такой способ, но не пробовал. Сегодня, уже после публикации статьи, приехал еще один подопытный экземпляр, на котором я удачно испытал новый способ - просто прогревать феном до того момента, когда компаунд становится мягким но еще не хрупким и медленно его отклеивать.
Karlson_rwa
20.10.2023 07:25+2Вам бы еще озвучку в статью вставить. Типа такой.
Я по вашим герцам подобрал вот так:
Hidden text
C#6
C#6
C#6
C#6
G#5
G#5
A5
A5
B5
B5
B5
B5
A5
A5
G#5
G#5
F#5
F#5
F#5F#5
F#5
A5
A5
C#6
C#6
C#6
C#6
B5
B5
A5
A5
shiru8bit
20.10.2023 07:25+1Очень круто. Я двадцать лет мечтал узнать, какой же там контроллер, и получить прошивку, чтобы написать эмулятор. Раньше, много лет назад, проскальзывали слухи, что там что-то с ядром 6502, но вроде единственным их основанием был разбор кристалла тамагочи.
Azya Автор
20.10.2023 07:25+1Спасибо! Я когда/если сниму образ, отправлю вам копию. Эмулятор Тамагочи, кстати, есть в MAME и там Epson E0C6S46, тоже 4-битный.
shiru8bit
20.10.2023 07:25+1Информацию про 6502 в Тамагочи я вроде видел в IRC #nesdev лет 12 назад. Видимо это были только домыслы.
Да, прошивка бы пригодилась, спасибо! Конечно эмулятор и без меня мигом напишут, я не сомневаюсь, но всё равно, интересно разобраться и сделать свой собственный. Тем более, что не часто приходится сталкиваться с 4-битными системами.
Azya Автор
20.10.2023 07:25Может более поздние модели, на MAME самая первая от Bandai.
А мне что-то часто попадаются 4-битные)
candyboah
20.10.2023 07:25+1Можно разбор приставки SEGA, оч. интересно посмотреть на далеко ушедшую миниатюру.
Azya Автор
20.10.2023 07:25Это сильно выходит за рамки моих планов и возможностей, но если вас интересует просто посмотреть на фотки кристаллов, то они вполне ищутся по Sega Mega Drive die-shots
ogamespec
20.10.2023 07:25+2Для более надёжного сжигания можно использовать газовую горелку. Плату можно не жалеть и жарить с каплей. Пластик нужно прожаривать до красного каления и пока он не перестанет коптить и покроется белым пеплом.
chips-howto/methods.md at main · emu-russia/chips-howto (github.com)
Azya Автор
20.10.2023 07:25Спасибо за ссылку, видимо я не дожарил до готовности) А кристаллу кстати при такой температуре хуже не становится? Я не уверен, но кажется треснул у меня кристалл уже на этапе прожарки из-за неравномерности нагрева - с одной стороны компаунд, а с другой голый кристалл, наверно действительно лучше жарить вместе с платой.
Полировать я когда-то тоже пробовал, но равномерно у меня не получалось, поэтому когда нашел рабочий флюс, остановился на этом методе.
Я чуть выше описал удачный опыт декапсуляции нагревом до ~150°, там правда кристалл был конца 2000-х, раз в 8 меньше по площади чем описываемый в посте и сломать его было сильно сложнее.
johnfound
20.10.2023 07:25+2А что за плата с КТ315 и какой-то МП-шкой внутри корпуса?
Azya Автор
20.10.2023 07:25Чуть выше уже пытались выяснить, но пока к единому мнению не пришли)
johnfound
20.10.2023 07:25Ну, пофантазируем тогда. Сзади имеется ценник – 5 руб/час. Еще есть надпись «Slide forward to turn power on». Выходит, это какое-то устройство для контроля временем. Или секретное включение/выключение чтобы исключить злоупотребления...
Хотелось бы взглянуть на обратную сторону платы. Возможно там есть другие элементы и даже контроллер какой-то.
LTS-Pettrov
20.10.2023 07:25+3Этот девайс всегда был загадкой для меня, очень интересная статья, ждём эмуль, жаль только что на этот тетрис новую прошивку не зальешь)
Azya Автор
20.10.2023 07:25+4Это точно, очень бы хотелось написать игры, которые можно запустить на реальном тетрисе.
johnfound
20.10.2023 07:25+4Можно просто заменить контроллер и использовать дисплей и клавиатуру. Конечно не то, но это минимально возможное воздействие, когда все жестко зашито в чипе.
Akkord11
20.10.2023 07:25Ого.
Как сделана фотка микроконтроллера? И так вертел и эдак, не могу понять. Это ж какая лупа нужна для такого
VEG
20.10.2023 07:25Может быть, заведёте сообщество в Discord или в Telegram для отслеживания вашего весьма интересного проекта?
Давно хотел предложить кому-нибудь с таким оборудованием сделать снимки чипов самых популярных вариаций часов Монтана. Там было 2 популярных версии по 8 разных мелодий в каждой. Ну и ещё были старые и новые модели, но скорее всего чип там один и тот же, просто размещение элементов на экранчике немного менялось.
ZekaVasch
Спасибо. Очень хорошо. Ждем вторую серию
Azya Автор
Если получится все же извлечь кристалл целым, обязательно будет