
-------------------------------------------------
VERSION 2! :D 
-------------------------------------------------
What has changed?
 - Thanks to TriMesh, the gate-pin is now also used to determine in which model of
   Playstation PsNee is installed. The modchip algorithm thus can be optimized for
   optimal performance on specific Playstation revisions. This works by monitoring
   whether a clock signal is present on this pin - when there is one, the modchip is
   installed in a PU-22, PU-23 or PSOne Playstation, else it is installed in an older
   model Playstation. In this version of PsNee, nothing is actually done with this information.
 - Thanks to -again- TriMesh, NTSC support for PAL SCPH-102 Playstations is added! This uses
   the same method the OneChip modchip used for achieving this:
     1. Monitor the XLAT signal from the CD mechanism controller chip. This requires
        another connection to the Playstation. When this signal is 0, the first CD copy
        protection is passed! After this, there is another one.
     2. After this, watch the Address18-pin (pin 31) on the BIOS-chip. When this signal
        is high, this means the second CD copy protection is about to run.
     3. Wait a short time.
     4. Pull the Data2-pin (pin 15) on the BIOS-chip to 0. This effectively blocks the
        execution of the region check of the inserted disc.
     5. The Playstation plays the inserted disc and doesn't care whether it's PAL or NTSC!
     6. Release the 0 of the Data2-pin.
   To correctly output a PAL video color signal for a PAL TV on a PAL PSOne with an NTSC disc
   inserted, Pin 3 of IC502 must be grounded with an external switch. The modchip also could do
   this, although we would need a device with more pins available.
 - The outputted data signal is now "sliced up" to improve (or less distort) the tracking
   signal from the CD mechanism: later Playstations use the CD tracking signal for transmitting
   the SCEx-string to the Playstation instead of using a seperate connection, so when the modchip
   forces a 0 on the data-pin, the tracking signal also is gone temporarily. By slicing the data-
   signal up in little pieces at least some of the tracking signal remains and the Playstation can
   read discs more easily.
 - The two big for-loops are combined into one with an OR-statement describing the two conditions
   modchip should be active: when flagFirstCycle = 0 or when flagFirstCycle = 1 and the lid is opened
   and closed again. This makes code maintenance easier.
 - The pin-out of the modchip is changed slightly to be able to use an interrupt for the PAL=>NTSC
   BIOS-patch for PAL SCPH-102. Please use the revised pin-out found below with this code.
~TheFrietMan, The Netherlands
--------------------------------------------------------------
     New in this version! V6
--------------------------------------------------------------
A lot!
 - The PAL SCPH-102 NTSC BIOS-patch works flawlessly! For speed reasons this is implemented in bare
   AVR C. It is functionally identical to the OneChip modchip, this modchip firmware was disassembled,
   documented (available on request, but written in Dutch...) and analyzed with a logic analyzer to
   make sure PsNee works just as well.
 - The code now is segmented in functions which make the program a lot more maintable and readable
 - Timing is perfected, all discs (both backups and originals of PAL and NTSC games) now work in the
   PAL SCPH-102 test machine
 - It was found out that the gate signal doesn't havbe to be hooked up to a PAL SCPH-102 Playstation
   to circumvent the copy protection. This is not tested on other Playstation models so the signal still
   is available
 - The /xlat signal is no longer required to time the PAL SCPH-102 NTSC BIOS-patch
 - Only AVR PORTB is used for compatibility reasons (almost all the AVR chips available have PORTB)
 
-------------------------------------------------------------
A minor detail: The lid detection is missing its digitalRead() ;p
psxdev
-------------------------------------------------------------
Update 7th of May 2017
Branched and tweaked for use with the Position 0 switch on a PSX laser.
(Requires a bit of sticky tape at the point where the switch touches the laser assembly.)
This allows deterministic SCEX injections, without relying on timing. Also gets rid of connection wires for LID and RESET.
WIP!
psxdev
--------------------------------------------------------------
Update 15th of May 2017
PSNee now watches the subchannel data and looks at the position information contained within.
This allows deterministic SCEX injections. It knows (almost) exactly when to inject the SCEX string.
Therefore it is now a stealth modchip :)
Required connections: GND, VCC, data, gate, SQCL, SUBQ
No more need to watch the PSX reset or lid open signals or any other typical modchip points (like "sync")
WIP! Only tested on PU-18 board. Should work fine on PU-7, PU-8, PU-18 and PU-20.
Will need adaption for PU-22 to PU-41 (SCPH-750x, 900x and PSOne).
Note: Once this is installed in a PSX, mind the Pin13 LED that many Arduino boards have. Do not upload new sketches while the PSX is on!
(If the PSX is on while uploading a sketch (making the LED blink), a voltage will be fed back into the SCLK pin on the HC-05 in the PSX.
This didn't break my PSX in testing but it does stun the chip and halt CD operation. I'm thinking of a better method to do this but for now I need Arduino pin13..)
Very much recommended to install a 3.3V chip!
psxdev
-------------------------------------------------------------
Update 27th of May 2017
This version is compatible with 8Mhz and 16Mhz ATmega328 / Arduino boards.
It uses polling to grab the SUBQ packets. This works better than relying on interrupts.
I even have a few cycles to spare on a 8Mhz chip! 
psxdev
------------------------------------------------------------
Update 31st May 2017

- supports all motherboard versions except PU-41 (PAL) (will get to it!)
- WFCK modulated injection method for PU-22 and up, just like the last multimode 3 chips
- minimized CD controller interference: PsNee only ever speaks when it has to (also: full stealth)
- not relying on BIOS delays: perfect boot disregarding extension cards etc
- might not be bug free! I'm just one guy and testing on a dozen consoles takes time ;)
psxdev
------------------------------------------------------------
Update 4 June 2017
- unified SCEX injection function / easier to read code
- PU-22+ now work without the WFCK wire (but depends on tight timings, tested on 8 and 16Mhz mcu)
- interrupts disabled while sampling SUBQ > much better performance capturing all events correctly
- now blinks the built-in LED on injections for debugging
psxdev

-------------------------------------------------------------
Updat 29 June 2017
- final modchip function I / Os: SQCK, SCLK, data, gate_wfck
- hysteresis for injections, fixes anti-mod occasionally triggering when using worn drives
- optimized injection timing for multi-region, multi BIOS versions (Sony added more protection checks over time)
- first attempt to make it more portable to other Arduino variants
- auto console detection works reliably, with and without Arduino bootloader present
- pin assignments changed for practical / installation reasons (ICSP capability, wire routing)
- so many changes, it surely contains all new bugs ;)

Pin assignments are finalized. We can start producing final installation images / help!
As always, I appreciate code reviews and bug fixes. I'm sorry some of it got so messy ;p
psxdev
---------------------------------------------------------------
Update 9 July 2017

Sure. Consider it work in progress quality ;)
Main changes:
- figured out ATtiny pin assignments :p
- RAM use reduced by only storing the "SCE" part of the license string once. Using a somewhat farfetched method. Maybe someone can make it nicer, without the recursion and over engineering? :p
- tried getting debug prints but it doesn't look like it'll happen (on ATtiny45), too little RAM > the chip crashes
- SUBQ sampling timing reverted to sample while clock is low, instead of right after it goes high

--------------------------------------------------------------

Update: 10 July 2017

- finished porting to ATtinyX5 (25,45,85 although the 25 has too little resources. for now.)
- store the licensing symbols in flash again, frees a lot of RAM
- bit retrieval code lifted from AttyNee (Nice work guys!)
- extra RAM allows SoftwareSerial debugging prints on an ATtiny45!
- nicer intro readme ;p

--------------------------------------------------------------

Update: 16 July 2017

-The BIOS patch works!
For now it only supports Arduino boards (ATmega chips).
Also, the Arduino must either be powered on first or have no bootloader present (flashed using SPI) since I expect a signal ~1 second after power on.
8Mhz boards are also supported.

------------------------------------------------------------

 Update: 16 August 2017
 
 -changed the timing for the PAL PM-41 patch to make it more reliable (I had it failing occasionally).
 Also I added a warning for people not to use 5V.
 
