There is this Github repository: https://github.com/kalymos/PsNee
“PsNee, an open source stealth modchip for the Sony Playstation 1” the README.md file starts. Three good things I want to hear/read: It is a modchip (software) for the PlayStation 1, it is open source and the chip is stealth. Fine. Now starts the trouble: I didn’t find any trustworthy and cheap seller in Germany, didn’t want to wait for all eternity for a chip arrive from China,… so why not go all the way and buy an empty chip from the list in the readme file and upload the program myself?
Step 1 – Programming the ATtiny85
Naive Sinchen ordered a bunch of five ATtiny85 knowing nothing about them. Never used an Arduino, never had a naked microcontroller. Nothing. No idea how to program it. Luckily I didn’t receive naked chips but small PCBs containing the ATtiny85 and a bunch of components as well as a USB connector. It looks like this:

and so on every few seconds. Why does that &§$* thing disconnect every few seconds?! Use the force search engine! This brought up http://digistump.com/wiki/digispark/tutorials/connecting which says:
Step 2 – Compiling PsNee
Pretty neat to have a small PCB with two LEDs (power LED and a second one). But having a red LED flashing is not exactly a challenging task for the chip. Now that I know how to upload software to the chip, the rest is probably just compiling and uploading PsNee source code the same way as the example. Not so fast! There is no documentation file and the README.md isn’t very helpful either (but explains the PS1 disc copy protection). The readme doesn’t even tell to use Arduino IDE. Having not used it before I didn’t realize the extension “.ino” was giving a hint. It looked just like C code to me and previously I had no idea how to compile this (and why they didn't simply release some binaries).
So how to do it? Do I have to understand the complete source code? No. But a pretty good documentation is inside the source – in the form of comments. (Why not mention this in the readme?). Select the branch (ATtiny in my case) and insert the needed letter (E for Europe in my case) in the symbol injection loop for all three iterations for faster boot times.
To my surprise: Arduino IDE didn’t have any objections and uploaded the compiled program to the chip. No guarantee for it to be correct. PsNee is not designed for Digistump/Digispark boards and knows nothing about the connected LEDs. It doesn't assume the presence of any output devices… so it doesn't output anything. The only way to find out was:
Step 3 – Soldering
Yes, I could have, and maybe I even should have, desoldered the microcontroller from the small board after programming. The small board looks HUGE compared to the ATtiny85 and is much harder to fit into the PlayStation 1. Well… I didn’t desolder it. My SCPH-9002 has a PU-23 motherboard which is significantly smaller than on older PS1 revisions which leaves A LOT of empty space.
PsNee repository contains a PDF file with installation instructions and pictures for all(?) motherboard revisions. All I had to do additionally was continuity measurements from the chip to the pads with holes at the edges to get a “mapping” from the ATtiny85 chip legs to the outer solder pads. Then solder wires to the small board and those wires to the PS1 motherboard. Three of the six were pretty hard to do: One on a tiny resistor(?), one on a tiny chip pin and the last one directly next to the same chip pin.
Nightmarish. My hands shake so badly. I drank some booze to lessen the tremor and had even ask for help (somebody holding the wire with tweezers while I held the soldering iron with both hands).
Yes, I do know that my installation is suboptimal. Yes, I do know it is not professional. Yes, I do know that my wires are too long… and so on. The result counts for me: My SCPH-9002 now loads backups like originals and I’m happy and even a little proud (F…ing tremor, I beat you!). Not that it has any practical implications nowadays with all the emulators and the recent PS1/PS2 exploits allowing loading PS1 backups without a modchip. The drives and lasers are old anyway and an optical drive emulator would be so much better… Having uploaded a program to a chip without knowing anything about it and then having beat the tremor STILL FEELS AWESOME!

Sorry for the bad photo of the PlayStation with my own PsNee. Rainy weather and
bad light conditions forced me to use an old powerful halogen lamp to get at least
enough light to convince my weak camera in taking a sharp picture. Bad colors.
Bad white balance (camera didn't catch on to artificial warm light)
If anybody made it through this mess of a blog: Thanks for reading!
“PsNee, an open source stealth modchip for the Sony Playstation 1” the README.md file starts. Three good things I want to hear/read: It is a modchip (software) for the PlayStation 1, it is open source and the chip is stealth. Fine. Now starts the trouble: I didn’t find any trustworthy and cheap seller in Germany, didn’t want to wait for all eternity for a chip arrive from China,… so why not go all the way and buy an empty chip from the list in the readme file and upload the program myself?
Step 1 – Programming the ATtiny85
Naive Sinchen ordered a bunch of five ATtiny85 knowing nothing about them. Never used an Arduino, never had a naked microcontroller. Nothing. No idea how to program it. Luckily I didn’t receive naked chips but small PCBs containing the ATtiny85 and a bunch of components as well as a USB connector. It looks like this:

kernel: usb 3-2: new low-speed USB device number 92 using xhci_hcd
kernel: usb 3-2: New USB device found, idVendor=16d0, idProduct=0753
kernel: usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
mtp-probe[30320]: checking bus 3, device 92: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
mtp-probe[30320]: bus: 3, device: 92 was not an MTP device
kernel: usb 3-2: USB disconnect, device number 92
kernel: usb 3-2: new low-speed USB device number 93 using xhci_hcd
kernel: usb 3-2: New USB device found, idVendor=16d0, idProduct=0753
kernel: usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
mtp-probe[30344]: checking bus 3, device 93: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
mtp-probe[30344]: bus: 3, device: 93 was not an MTP device
kernel: usb 3-2: USB disconnect, device number 93
kernel: usb 3-2: new low-speed USB device number 94 using xhci_hcd
kernel: usb 3-2: New USB device found, idVendor=16d0, idProduct=0753
kernel: usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
mtp-probe[30368]: checking bus 3, device 94: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
mtp-probe[30368]: bus: 3, device: 94 was not an MTP device
kernel: usb 3-2: USB disconnect, device number 94
kernel: usb 3-2: New USB device found, idVendor=16d0, idProduct=0753
kernel: usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
mtp-probe[30320]: checking bus 3, device 92: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
mtp-probe[30320]: bus: 3, device: 92 was not an MTP device
kernel: usb 3-2: USB disconnect, device number 92
kernel: usb 3-2: new low-speed USB device number 93 using xhci_hcd
kernel: usb 3-2: New USB device found, idVendor=16d0, idProduct=0753
kernel: usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
mtp-probe[30344]: checking bus 3, device 93: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
mtp-probe[30344]: bus: 3, device: 93 was not an MTP device
kernel: usb 3-2: USB disconnect, device number 93
kernel: usb 3-2: new low-speed USB device number 94 using xhci_hcd
kernel: usb 3-2: New USB device found, idVendor=16d0, idProduct=0753
kernel: usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
mtp-probe[30368]: checking bus 3, device 94: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
mtp-probe[30368]: bus: 3, device: 94 was not an MTP device
kernel: usb 3-2: USB disconnect, device number 94
Clever. The bootloader(?) checks for a new program via USB and if none is uploaded it executes the one stored on the ATtiny85 (which is nothing on a new chip). I just skip the description of installing Arduino IDE and also the &§%* driver installation (used an offline Windows 7 test machine – I avoid running new, unknown software on my main Linux computer as good as I can). Result: The Arduino IDE successfully uploaded the test program from the digistump wiki site and the microcontroller started blinking with the LED. Nice control mechanism for success.
Step 2 – Compiling PsNee
Pretty neat to have a small PCB with two LEDs (power LED and a second one). But having a red LED flashing is not exactly a challenging task for the chip. Now that I know how to upload software to the chip, the rest is probably just compiling and uploading PsNee source code the same way as the example. Not so fast! There is no documentation file and the README.md isn’t very helpful either (but explains the PS1 disc copy protection). The readme doesn’t even tell to use Arduino IDE. Having not used it before I didn’t realize the extension “.ino” was giving a hint. It looked just like C code to me and previously I had no idea how to compile this (and why they didn't simply release some binaries).
So how to do it? Do I have to understand the complete source code? No. But a pretty good documentation is inside the source – in the form of comments. (Why not mention this in the readme?). Select the branch (ATtiny in my case) and insert the needed letter (E for Europe in my case) in the symbol injection loop for all three iterations for faster boot times.
To my surprise: Arduino IDE didn’t have any objections and uploaded the compiled program to the chip. No guarantee for it to be correct. PsNee is not designed for Digistump/Digispark boards and knows nothing about the connected LEDs. It doesn't assume the presence of any output devices… so it doesn't output anything. The only way to find out was:
Step 3 – Soldering
Yes, I could have, and maybe I even should have, desoldered the microcontroller from the small board after programming. The small board looks HUGE compared to the ATtiny85 and is much harder to fit into the PlayStation 1. Well… I didn’t desolder it. My SCPH-9002 has a PU-23 motherboard which is significantly smaller than on older PS1 revisions which leaves A LOT of empty space.
PsNee repository contains a PDF file with installation instructions and pictures for all(?) motherboard revisions. All I had to do additionally was continuity measurements from the chip to the pads with holes at the edges to get a “mapping” from the ATtiny85 chip legs to the outer solder pads. Then solder wires to the small board and those wires to the PS1 motherboard. Three of the six were pretty hard to do: One on a tiny resistor(?), one on a tiny chip pin and the last one directly next to the same chip pin.
Nightmarish. My hands shake so badly. I drank some booze to lessen the tremor and had even ask for help (somebody holding the wire with tweezers while I held the soldering iron with both hands).
Yes, I do know that my installation is suboptimal. Yes, I do know it is not professional. Yes, I do know that my wires are too long… and so on. The result counts for me: My SCPH-9002 now loads backups like originals and I’m happy and even a little proud (F…ing tremor, I beat you!). Not that it has any practical implications nowadays with all the emulators and the recent PS1/PS2 exploits allowing loading PS1 backups without a modchip. The drives and lasers are old anyway and an optical drive emulator would be so much better… Having uploaded a program to a chip without knowing anything about it and then having beat the tremor STILL FEELS AWESOME!

Sorry for the bad photo of the PlayStation with my own PsNee. Rainy weather and
bad light conditions forced me to use an old powerful halogen lamp to get at least
enough light to convince my weak camera in taking a sharp picture. Bad colors.
Bad white balance (camera didn't catch on to artificial warm light)
If anybody made it through this mess of a blog: Thanks for reading!