- PVSM.RU - https://www.pvsm.ru -
В статье могут встречаться страшные картинки, не оптимальные схемы, неверные решения. Если вы к этому готовы и вам это интересно добро пожаловать под кат.
PS. я знаю про существование psio, и эмуляторы консолей, но мне был интересен процесс.
В общем двадцать лет назад там где я жил интернета, можно сказать не было. Найти в нем, что-то тоже было сложней. Но тогда были достаточно интересные книги. Одну, из которых мне и удалось раздобыть. А именно «Игровые приставки. Ремонт и обслуживание». Где и была найдена схема PS1. После изучения схемы, а ещё и под влиянием того, как она была разбита в этой книге, в голове созрела мысль, что проще всего «эмулировать» микросхему CXD2545.
Задача не казалась особо сложной и сигналов, которые надо было эмулировать, было не так и много около пятнадцати. Мне казалось, что приставка посылает управляющие команды, а этот чип выдает данные с нужного сектора компакт диска. В целом я был не очень далек от правды. Добравшись до интернета, я смог найти даташит на CXD2545. Правда, в очень ужасном качестве, в виде очень кривого скана с бумаги. Но в целом стало понятно для чего нужны все сигналы, и примерный протокол их работы. Потом я увидел список команд, которые понимает этот чип, и понял, что не осилю. Так как на тот момент помигать светодиодом на AVR был подвиг. Ну и у меня не было самой PS1, и мощной AVRки тоже не было. И так идея ложится в долгий ящик первый раз.
Всё что описано дальше актуально для плат с низкой степенью интеграции SCPH-5XXX и ниже.
Прошло много лет, я успел поработать админом, обзавестись паяльной станцией, платой DE1 от Terasic, логическим анализатором и самой PS1. И время от времени на ней поигрывал, но во в ней таки додох лазер, так что FF IX я пройти смог, а финальную заставку смотрел уже на ютубе. Потому что, вот не могла она прочитать заставку финальную, хотя на PC диск читался идеально. И тут вспомнилась давняя идея. И после непродолжительных поисков в инете был найден уже в нормально качестве даташит на CXD2545. И также стало понятно, что именно надо делать со всеми(почти со всеми как я ошибался насчет SENS) управляющими сигналами. Все сигналы можно разделить на: передачу данных, передачу данных субканала, статусные и управляющие:
Передача данных:
Пин | Название | Предназначение |
---|---|---|
47 | CDBCLK | Тактирование данных |
45 | CDLRCK | Данные какого звукового канала передаются, левый/правый |
46 | CDDATA | Сами биты данных |
56 | С2PO | Указание на наличии ошибки в блоке данных |
72 | EMPH | Аудиоданные были подвержены предусилению/предискажению |
Передача данных субканала:
Пин | Название | Предназначение |
---|---|---|
78 | SQCK | Тактирование данных |
77 | SUBQ | Биты данных субканала |
74 | SCOR | Выдает импульс при поступлении новых субканальных данных(не совсем верно но об этом потом) |
Статусные сигналы:
Пин | Название | Предназначение |
---|---|---|
80 | SENS | Очень мудреный статусный пин, на которые выводится очень много сенсорной информации. |
83 | SCLK | Иногда работает в паре с SENS(реально не видел такого) |
— (SSTP) | CS(в книге) | Используется чтобы понимать что каретка привода пришла в нулевое положение |
Управляющие сигналы:
Пин | Название | Предназначение |
---|---|---|
88 | CLOK | Тактовый сигнал шины команд. |
86 | DATA | Биты данных для управляющий команд |
87 | XLAT | Защелкивание команды в регистре управления |
Есть ещё некоторые сигналы но они не особо интересны и нужны(ну по крайней мере сейчас).
Сигналы, которые нужно было поглядеть, были известны. Как они должны выглядеть было написано в даташите. Теперь оставалось проверить, как оно всё выглядит на самом деле и как приставка общается с этим контроллером. И тут надо сказать отдельное спасибо инженерам Sony. На плате приставки огромное количество тестовых точек. На которые выведены почти все интересующие сигналы. Покопавшись в интернете были, найдены фото в высоком разрешении верхней и нижней сторон платы. Которые сильно упростили поиск нужных тестпоинтов. Распаял кучу проводов, которые затем вывел на колодку типа IDC и приступил к изучению.
После всех приготовлений, было снято несколько образцов работы сигналов. Всё что было использовано выкладываю на здесь [1], открыть логи можно при помощи фирменной утилиты [2]от анализатора DSLogic. Но надо учитывать, что по каким то причинам которые я уже не могу вспомнить, хотя анализатор и 16 канальный я не делал захват линий данных с сидирома. Возможно мне показалось что там в принципе нет ничего интересного. Поэтому смотрите аннотацию сигналов где что. Также следует учитывать что у меня оказался убит седьмой канал на анализаторе поэтому сигнал SCOR хватался не криво и через раз, но это не особо мешало.
Для начала я захватил событие чтение оглавления диска(TOC) на двух дисках. И посмотрел что получилось.
Начнем с данных ибо тут никаких сюрпризов не было. Мы должны видеть вот такую картину:
Сигнала WDCK у нас не используется. А так имеется 24 бита сигнала, на каждый канал, записанные от старшего к младшему, при этом первые 9 бит одинаковы. Мне кажется что первые 8 бит вообще не используются дальше, но я не проверял. А вот так видим на анализаторе:
Пины 3,4,8 всё сходится с даташитом. Надо также учесть, что тактовая частота, и сигнал указания канала передаются даже если данных с сидирома не идёт.
Дальше данные субканала. Здесь по больше части тоже без сюрпризов.
На линии SCOR появляется импульс в момент когда привод встречает так называемую последовательность S0 или S1 при чтение фрейма с диска, что это я, возможно расскажу, но если говорить упрощенно это метка начала сектора. После этого сигнал SUBQ должен перейти в высокое состояние, это говорит о том, что есть готовые данные в буфере субканала. Дальше при помощи SQCK мы по одному биту вытаскиваем 96 бит данных, из них к субканалу относятся первые 80 бит, последние 16 это какой то PeakMeter скорей всего он имеет адекватные значения только для аудио-сд. Последние 16 бит могут иметь и другие значения, но я не видел вариантов, чтобы приставка переключалась в другой режим. Да я говорил почти без сюрпризов, но сюрпризы таки были:
Как видим здесь читается 18 бит, что очень странно, но в последствии мы разберемся, что это такое. И не мусор ли это вообще.
А вот тут начинается уже интересное а именно управляющие сигналы. По даташиту эту выглядит так:
То есть загоняем биты по одному от младшего к старшему, а сигнал XLAT защелкивает полученную комбинацию и отсылает на исполнение. Это позволяет делать переменную длину параметров команды,
Что видим на самом деле:
Вроде бы всё так, но мне совершенно непонятно было зачем ещё шлются байты 0x50 и 0xA0 но не защелкиваются(а надо внимательно даташит было читать, но это же, так скучно). В общем шлёт да и шлёт, с кем не бывает.
И остаются последние два сигнала SENS и SCLK:
По описанию в русскоязычных источниках SENS работает вместе с SCLK но SCLK ни разу не поменял свое состояние. По даташиту:
SENS output to CPU.
Причем я прочитал даже как оно работает без SCLK и всё равно не понял почему же оно так ведет. Почему меняет состояние когда вздумается. И в голове мелькнула шальная мысль, что нога болтается в HI-Z состоянии и просто ловит наводки от соседних пинов. Для теста подтянул пин к земле привод даже не стал раскручивать диск. Подтянул в VCC и всё отлично работало. Это была моя первая серьёзная ошибка которая в будущем потрепала нервы. Но об этом позже.
После просмотра сигналов и чтения даташита. Было понятно, что это относительно низкоуровневая микросхема. Цель, которой управлять механикой привода, и выдавать данные, полученные с диска. Ни про какие сектора это чип знать не знает, за это отвечает внешний чип, также как и за указания, куда позиционировать лазер. Причем не указание точного места позиционирования, а по принципу левей/правей в поисках нужных данных, на основе полученных данных субканала.
Задача эмуляции это микросхемы выглядела не очень сложной. Принимать команды, и эмулировать на выходе данные субканала, и данные привода. Доверить всё это дело я решил плате DE1 [5]. Во-первых, она у меня была. Во-вторых, валялась без дела. Ну и третьих мне показалось, что FPGA просто идеально подходит для таких дел, это оказалось правдой. К тому же там уже есть слот для SD карты, откуда и собирался брать данные для эмуляции. В общем задачей номер один стало проэмулировать, чтение оглавление диска. А для этого нужно было понять как оно формируется,. но об этом поговорим в следующей части.
Автор:
VBKesha
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/375072
Ссылки в тексте:
[1] здесь: https://github.com/VBKesha/PSX_CDEMU_1/tree/main/research
[2] утилиты : https://www.dreamsourcelab.com/download/
[3] Image: https://habrastorage.org/webt/fv/zg/kn/fvzgkn4o_knrv8m2dt_jkkre5-k.png
[4] Image: https://habrastorage.org/webt/j1/00/9v/j1009v49fsy-utsvcyu7t4nf1zc.png
[5] DE1: https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=53&No=83&PartNo=1#contents
[6] Источник: https://habr.com/ru/post/653507/?utm_source=habrahabr&utm_medium=rss&utm_campaign=653507
Нажмите здесь для печати.