Download SuperCIC source+hexfiles here.
what do i program to my pic16f630
supercic-key.hex or supercic-lock.hex
i have a 1 big chip ppu 111 pin i need to lift for that ppu.
i remove the cic chips please let me know thanks for the hard work.
Key is for cartridges, lock is for consoles. So you need to flash the lock firmware.
Hi, and thanks for this amazing work !!
I’ve got a simple question : is there any plan to implement this sd2snes feature to “normal” pic16f630 mod “Auto region patching: eliminates “This Game Pak is not designed…” messages regardless of 50/60Hz setting” ?
The SuperCIC has a pin reserved for connecting extra circuitry to patch the region register when accessed. Here is the beta schematic: http://sd2snes.de/files/supercic-213f.pdf
It’s untested though.
Thanks a lot for this stuff, i’m going to check this out !
What is the point with the right side of the schematic ? ie. to what are U1D, U1E, U1F, U3B, U3C and U3D connected ?
Is SuperCIC pin3 is an input or an output ?
The components on the right side are the unused portions of the ICs used. The inputs of these should not be left open, hence the data inputs are connected to GND and the enable inputs (where applicable) are connected to +5V to disable the outputs.
Also all ICs have to be connected to power supply which is not shown in the diagram.
Pin 7 of U1 and U3 and Pin 8 of U2 must be connected to GND.
Pin 14 of U1 and U3 and Pin 16 of U2 must be connected to +5V.
Pin 3 on the SuperCIC is an output.
Ok, thanks ! Let’s give it a try
I’m back again and with positive feedback. This $123f patch is working ! For example, Tetris & Dr. Mario is working like a charm and passes each fading black screen.
But i’m getting a problem, my Super CIC + IGR cannot be set in “auto mode” via 1P controller or with the reset button. Manual 50 or 60 is still working. Plus L R Select X isn’t reseting sd2snes properly, it only reset the rom currently playing.
I have this problem since I soldered the $213f patch to the SuperCIC pin 3. My additionnal pcb was already in place, so I soldered it on the top of pic16f. Maybe it burned some transistors inside of it
I plan to replace the pic 16f, but have you an idea ?
Check your connection of Pin 8 of the IGR PIC. Maybe it has moved or become shorted or something. It should be connected to +5V to enable SuperCIC auto mode and correct SuperCIC reset mode.
Hi ! Problem solved
I double checked the connections but all was good. In fact a cable under my PCB was pierced by a CIC pin, yellow cable on picture : http://img402.imageshack.us/img402/4392/imag0708k.jpg
(whole project visible here : http://www.generation-snes.fr/Forum/index.php?showtopic=1055)
By the way, thank you for your amazing work !
Hi there ! I’m back again
I did the mod again on another 2PPU snes and tested it. Thus far it works great, but (there always is a but …) I tried to run some region check games in different modes:
a PAL Tetris & Dr. Mario (native 50Hz) in 60Hz does boot and passes every fading screen
a Korean Tetris & Dr. Mario (native 60Hz) in 50 Hz doesn’t even boot and shows the blue screen of death “this game pack is not designed blah blah”
You could ask “but why play a 60Hz game in 50Hz ? xD”, it was just for testing purpose and there is no point playing import games in 50Hz xD
I’ll have to test it on my first modified snes.
Do you have any clue Ikari ?
[...] Reset (IGR), for controlling the reset button from your controller! And you can also download the SuperCIC code from his site also. Tags: nintendo, regionfree, sfc, snes, super famicom, super nintendo, [...]
can you tell me if your s213f wiring is complete also for the unused portions of the chip?
if yes can you just leave the unused pins floating and check if it still works?
i cant get it working but my wiring is correct just with the floating pins.
The unused parts of the chips are fully wired like ikari told me to do
Here is a recto/verso of my pcb : http://img836.imageshack.us/img836/5315/imag0670s.jpg
With which games have you tested ?
i used terranigma pal. mariokart pal and some others.
cant you disconnect the unused pins and test if it still works?
i wired all pins directly with wires. since all the inputs of the 133 are the same i used pins 12,13,14,15 for vcc instead of 1,2,3,4, so i could just bridge the solder from pin16 vcc.
is that ok ikari?
anyway im going to connect the unused pins now.
Yes, you can swap the ’133 inputs around as you like.
what is your mainboard revision ours? and your chipset code?
As I know, Super Mario Kart doesn’t have an ingame protection, for terranigma I don’t know.
I can’t disconnect the pins because the are on a pcb !
imo go solder the all the pins like ikari told me to do ^^
My motherboard is a SNSP-CPU-02, and here you’ve got a nice picture of the stuff before I made the SuperCIC mod: http://img18.imageshack.us/img18/3346/imag0178e.jpg
Ive redone the job with sockets, new chips and same connections like you.
Still wont work for me, i used many pal games whichnjust show me this gamepak is not…
thank you ikari
you have the 2ppu snes. Mine is the 1chip, but that brings me to the idea to try it on my 2ppu.
If it works there, Ikari has to save the day with a new 1chip schematic.
I didn’t have a PIC programmer, but I do have AVR’s. So I created an extremely basic PIC programmer with an AVR and did a quick-and-dirty patch to Jaakko Hyvätti’s Picprog to support it. It might be the cheapest way to build a halfway decent PIC programmer even if you have nothing to start with, because you can get an AVR programmer on eBay for $4 (the AVR itself is even cheaper, obviously).
You can get my program here if you’re interested.
And thanks for your super awesome CIC! I cheered when I found it, because now I don’t have to put a butt ugly switch in my SNES!
Any news with your 2 PPU snes ?
It didnt work. The only 74133 ic i could get was the 74HC133, you used an the LS one.
I ordered some LS133 to have exactly the same setup like you. Will let you know.
If that doesn’t work either you can try using multiple gates of the 74133 in parallel, i.e. connecting them in the same way as the first one. That should increase the drive strength to override the PPU output.
sounds good, will try that right now . Thank you
I tried it also with two 133 Chips but still no go . Can you sell me a complete circuit?
Can you tell me which program/version you built this with? I’m trying to use the lock… it seems to work if I program your .hex file, but doesn’t work when I build it from source. I’m using MPLAB 8.85, MPASMWIN.exe v5.45, mplink.exe v4.43, and mplib.exe v4.43 . Any special build options?
I’m using Piklab (http://piklab.sourceforge.net/) with the GNU PIC utilities (gputils). It’s important that the assembler understands the option strings in the source file so it can set the configuration bits properly.
Thanks… I finally got some time to dive into this problem. I tried building it with gputils, but it still wasn’t working.
I disassembled the working file from this site, and the file I built, and it was almost identical (it’s ASM, it should be!), but your file had a few extra lines. I narrowed down where they were, and it appears that every time it does a banksel, yours writes bits RP0 and RP1 (two seperate instructions), and mine only writes RP0.
The PIC16F630 only has RP0, with RP1 being a reserved bit (for compatibility with the larger devices that use it), so I’m guessing gputils used to write that bit, but changed it sometime between the version you built it with, and the latest version that I downloaded. I added a nop after each banksel (to keep the timing the same as yours), and it works perfectly now.
Just in case it helps anyone in the future, these are the commands I used to build the hex file:
gpasm -c supercic-lock.asm supercic-lock.asm
gplink -o supercic-lock.hex supercic-lock.o
This is using relocatable code. I think you could use absolute (and just use gpasm) if you change the DEEPROM CODE to ORG 0×2100.
BTW, I’d like to migrate this code to a faster PIC (like a PIC16F1825), so I could use the internal oscillator, and drive the cart CIC clock with CLKOUT (so a standalone CIC wouldn’t require an external oscillator). Unfortunately, CLKOUT is Fosc/4, so I need to run the internal oscillator at 16MHz to get 4MHz output to the CIC. Of course this 4x clock ratio will kill the timing. Could you tell me which parts of the code are sensitive to exact timing? I assume I can add NOPs so the code essentially runs at 4MHz, but it seems pointless to add NOPs everywhere if there are only a few timing sensitive areas.
Wow, thanks for the insight regarding the implementation specifics of banksel, I didn’t expect that to be “unstable”. I will replace all instances of banksel with normal instructions with defined timing behaviour.
Now, regarding timing critical code areas, I’m afraid I have bad news for you… everything from line 248 onward (“trigger the slave”) up to line 1062 is timing critical as both CICs will run in lock-step from there on, their only means of synchronisation being cycle counting.
>everything from line 248 onward (“trigger the slave”) up to line 1062 is timing critical
Heh, I was afraid you were gonna say that, but that wasn’t unexpected. Oh well, NOPs are free… the code will be ugly, but should work. If I get it working, I’d be glad to send it back here to keep it together, or host it myself. I imagine someone might find it useful (maybe in a Retrode or something).
Regarding banksel, I didn’t see that change specifically called out in the gputils changelog, though it looks like there have been a few changes with banksel in the last couple years. It probably just creeped in unnoticed.
Just for completeness, in your .hex:
1683 bsf 0×3, 0×5
1303 bcf 0×3, 0×6
In mine, it translated to just:
1683 bsf 0×3, 0×5
Having a issue. The game comes on for about 25 seconds and cuts off. I don’t have an IGR or anything. I did have the old switched Region Free mod working properly, and therefore pin 4 of the CIC is lifted. I’m guessing this is the problem. Unfortunately I don’t see any solder pad to solder leg 4 back, and I have no idea where to connect it to. Any help would be appreciated.
Replying to myself. A quick check of the old mod tells me all I have to do is supply pin 4 with +5v and it that will reactivate it. Will have to check tomorrow morning to know for sure.
That didn’t seem to help any. It still reacts the same when I supply 5V to pin 4.
TBH I can only guess. May be a power supply related issue, the sd2snes draws more power than a normal game cartridge.
I have the Super CIC wired up. It plays NTSC games, and PAL games just fine. It switches between the 3 modes just fine. However, it doesn’t play SA-1 games. My copy of Super Mario RPG doesn’t load. I’m pretty sure its wired up right. Any ideas of what could be wrong?
The SuperCIC will “work” with most games even if a portion of its lines are not wired correctly (i.e. its clock and data lines). It will just unlock the console and do the region switching even if it cannot communicate with the cartridge CIC properly.
Please double-check the wiring for PIC pins 2, 8, 9, 10, and 11.
I noticed for a few of those you supply alternate cartridge pins on the ASM,. I checked for continuity between between the SuperCIC and cartridge pins, and found only one of them did. Is that an indication that something is wrong, are the old CIC pins directly wired to the cartridge slot?
I think the problem here is when I lifted the legs I took the solder pads with it. I thought I find adjacent vias, but I’m not positive they’re connected properly.
hi to all! i’ve a willem programmer 5.0: could you help me to understand how to program the supercic? i don’t understan which program i’ve to use
I did the SuperCIC mod in a PAL SNSP-001A(FRG). I programmed the 16F630 with PicKit2 clone and MPLAB (File/ new project / add the lock.asm/ building the project / write).
I set the fourth pin to Vcc and the original CIC onboard lifting the pins 1,2,10 and 11. If I understand correctly in this mode (4th pin to Vcc) ,if I insert a NTSC game in PAL mode, the frequency is set at 60Hz and after 9 seconds change to 50Hz. Also if I put a PAL game in NTSC mode, this will start in 50Hz and after 9 seconds change to 60Hz. The problem is that in PAL mode, every game start directly in 50Hz and in NTSC mode, starts directly in 60Hz. Also in automode every game starts at 60Hz and I think that in this mode the game must start at native frequency.
I did the mod again, but this time without the CIC and setting the pulldown resistor of 13th pin, and the result is the same.
I’m thinking of add the module to detect the and patch the region using D4 but first I like to know if my actual mod is working fine or not.
PD: Sorry if I made a huge mistake in my redaction. At present I’m improving my english.
Sorry for double post.
I forgot to mention that the program that I wrote onto the microcontroler is the last version and that the CIC’s footprint of my snes is damaged. The Footprint of pin 2 is practically lifted from the motherboard and maybe does bad contact. I can weld into the little hole that connects de upper side of the board to the bottom side so I will try to do it when I has time.
After checking again all the conections i decide to add a in serial circuit programming port to program the microcontroler again. This time I used the provided .hex file and the PicKit2 programming aplication.
Hi there !
Has my previous post been seen ? http://sd2snes.de/blog/cool-stuff/supercic#comment-120350
You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>