PlayStation 1 (PSX) modchip
Dostala sa mi do rúk konzola PlayStation 1, bol to jeden z najstarších modelov, tzv. SCPH-1002 s doskou PU-8. Nemal som k nemu nič, ani žiadne hry. Dokúpil som ovládač, pamäťovú kartu na ukladanie hier a náhradnú CD mechaniku, keďže pôvodná bola značne opotrebovaná. PlayStation 1 vie aj prehrávať audio CD, a to sa mu darilo excelentne. Ale mňa zaujímalo, ako na tom rozbehať hry. Originálne CD som nemal, ale chcel som nejakú hru vyskúšať, preto som zadal do googla "PS1 modchip" a začítal sa do výsledkov.
Našiel som jeden zaujímavý open source projekt - PsNee - aj s diskusiou vo fóre. Čo ma potešilo, bol fakt, že tento modchip bol vyvinutý pre Arduino, a teda pre mikrokontroléry Atmel. Žiaden PIC, ani žiadne nezohnateľné súčiastky. Ja predraženým Arduinom nedisponujem, zato mám v zásobe dosť čipov Atmel, a tak som sa do toho pustil.
Voľba padla na čip ATtiny85V, o ktorom aj autori projektu píšu, že je vyskúšaný a malo by to s ním fungovať. Zdrojáky sú však písané pre Arduino, nedalo sa teda natiahnuť ich do Atmel Studia a manipulovať s nimi tam. Preto som si musel stiahnuť Arduino IDE a prenastaviť ho, aby kompilovalo program nie pre Arduino, ale pre samotný čip ATtiny85V. Pozor, je to dôležitý krok - ako to urobiť, nájdeš na tejto stránke. Keď už máš Arduino IDE nastavené, v menu Board nastavíš ATtiny85V, frekvenciu 16 MHz, skompiluješ program a exportuješ binárku. Aby som ti to zjednodušil, zahrnul som binárku - .hex súbor - priamo v zip súbore, ktorý si tu môžeš stiahnuť. Hex súbor naflashuj do mikrokontroléra cez tvoj obľúbený program, napr. Atmel Studio, alebo avrdude. Potom ešte treba nastaviť poistky (fuses) na: High = 0xDF, Low = 0xF1. To spôsobí oproti továrnym nastaveniam čipu dve veci: 1) CKDIV8 = false, teda frekvencia čipu nebude delená ôsmimi, 2) zdroj frekvencie bude PLL clock, teda plných 16 MHz.
Po naprogramovaní čipu ho treba pripojiť káblikmi k základnej doske PlayStation. Význam pinov čipu je takýto:
PB port / pin / význam
PB0 5 SQCK
PB1 6 SUBQ
PB2 7 DATA
PB4 3 GATE_WFCK
- 8 Vcc
- 4 GND
Pozor, Vcc je 3,5V, nie 5V. Čip treba pripojiť k základnej doske podľa nasledujúceho obrázku. Obrázok pochádza z oficiálnej dokumentácie PsNee, preto je tam odfotená doska s Arduinom, ale v našom prípade sú dôležité červené popisky signálov.
(klikni na obrázok pre zväčšenie)
No a to je všetko. Po poskladaní a odskúšaní by PlayStation malo úspešne načítať napálenú hru. Prejaví sa to tak, že namiesto obrazovky "Insert disc" sa objaví logo PlayStation.
A ako to vlastne celé funguje? Podľa toho, čo som sa dočítal na internete, ochrana proti kopírovaniu CD je pri PlayStation primitívna. Originálne CD obsahujú na samom začiatku stopy špeciálne dáta - reťazec SCEx (pre európsku verziu SCEE) a tieto dáta nedokáže žiadna mechanika napáliť. PlayStationová mechanika ich však dokáže čitať. Keď tento reťazec na očakávanom mieste nenájde, odmietne hru a zobrazí "Insert disc".
Modchip funguje tak, že keď je CD mechanika v oblasti, kde by sa mal nachádzať hľadaný reťazec, podvrhne ho na príslušnú zbernicu a tak oklame ochranu.
Ja som mal akosi smolu v tom, že som musel pôvodný program PsNee upraviť, lebo ani za svet nedetekoval oblasť CD, v ktorej by mal podvrhnúť reťazec SCEE. Preto som upravil danú podmienku tak, aby tento reťazec vysielal stále, vždy keď je vložené CD, ktoré nie je audio CD. Tento upravený riadok nájdeš v zdrojovom .ino súbore:
//if (hysteresis >= 14) {
if (scbuf[0] == 0x41) {
Pôvodný riadok je vykomentovaný. Tipujem, že s touto úpravou nebude modchip "stealth", a teda hry obsahujúce dodatočnú ochranu nepôjdu. Mne to však stačí aj takto, keď to inak nešlo... ale tvoje skúsenosti môžu byť iné.
Mimochodom, modchip vysiela dáta po sériovej linke na pine 2. Baud rate je 115200. Tento debugovací výstup sa dá vypnúť, no ja som ho nechal zapnutý. Neprekáža ničomu a v prípade problémov príde vhod.
Tak veľa úspechov pri hardware hackingu PlayStation. Ak budeš mať problémy, odporúčam konzultovať s autorom modchipu na príslušnom fóre.