SuperCIC

 

Download SuperCIC source+hexfiles here.

Based on reverse engineering work by Segher: http://hackmii.com/2010/01/the-weird-and-wonderful-cic/

SuperCIC acts as a multi-region CIC, enabling CIC protected cartridges (S-DD1, SA1) of any region to work properly.

 Posted by at 1:48 pm

  82 Responses to “SuperCIC”

  1.  

    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.

  2.  

    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” ?

    Greetings.

    •  

      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 ?

      Thanks !

      •  

        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 :D

    •  

      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 :x

      I plan to replace the pic 16f, but have you an idea ?

      Thanks !

      •  

        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 :D
      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 !

      Cya :D

    •  

      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 ?

      Thanks !

  3.  

    […] 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, […]

  4.  

    hello ours

    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.

  5.  

    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.

  6.  

    what is your mainboard revision ours? and your chipset code?

  7.  

    thank you ikari ;)

  8.  

    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. ;)

  9.  

    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!

  10.  

    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?

  11.  

    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?

    Thanks!

    •  

      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 0x2100.

      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.

      Thanks!

    •  

      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:
      banksel EEADR
      translated to:
      1683 bsf 0x3, 0x5
      1303 bcf 0x3, 0x6

      In mine, it translated to just:
      1683 bsf 0x3, 0x5

  12.  

    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.

  13.  

    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.

  14.  

    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.

  15.  

    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

    thanks

  16.  

    Hi guys

    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.

    •  

      Problem solved.
      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.

    •  

      I have a same kind issue in my Super Famicom SNS-CPU-GPM-01 motherboard. Automode starts everytime in 60hz. 50hz mode and 60hz mode doesn’t change frequency at all if I put different native cartridge what is current frequency. I desoldered original cic and superCic Pin 4 is Vcc. Is there some difference between PAL Snes and SFC because all my other modded PAL snes consoles works perfectly? I have tried also another pic and check connections but no difference.

  17.  

    Hi there !

    Has my previous post been seen ? http://sd2snes.de/blog/cool-stuff/supercic#comment-120350

    •  

      Hi there, very nice work!

      Inspired by you, I decided to also create a PCB. Here is the schematic (not tested yet, hope I didn’t make any mistakes): https://www.dropbox.com/s/9h71qz5enne7rcn/SNES-ModChip-v1_20140427.png

      Jumpers can be used to setup the board:
      * JP1 to set REG_TIMEOUT high or low
      * JP2 to select LED_TYPE
      * JP3 to set if the original CIC is still in place or not
      * JP4 to enable/disable the D4 circuit

      @ ikari does the circuit look correct to you?

  18.  

    have you an alternative point for the pin 10 of cic because the pin are broken ?

  19.  

    Hi,

    did your mod on a pal snes a few weeks ago for the first time, everything works fine.
    Yesterday i moded a japan sfc, also everything fine except one little thing: I connected pin 4 to vcc on both systems on the pal System all games work fine. on the ntsc SFC I receive the “gamepak not designed” message if the wrong mode is selected!? Any debug ideas? :)

    Best regards
    Michael

  20.  

    HI, i want know if is possible to replace the D411 and use the SUper Ciic inside a cartridge, not for the porpose of multimode because will need a lot of conexions in PPU,but like a alternative CIC chip in cartridge,. Its possible????

  21.  

    I have fulfilled this mod with IGR and it works perfectly except the led that are not ignited simultaneously. Only they give voltage separately. Does it design someone?

    •  

      Probably got the wrong polarity setting for the LED you are using. Change the voltage on the led polarity input (pin 7) – if you have it connected to GND, try 5V, and vice versa.

    •  

      I it have tried both ways with different led and the result is the same. I have measured the voltage in the pic and separately it gives 5v but together it does not give anything

    •  

      I have just finished one 1chip with supercic + igr +mod 50/60hz and the same thing happens to me. The led do not ignite in automatic way. I put a game pal in automatic way and it does not change only to ntsc passed a few seconds

  22.  

    Solved. This led RGB works well with pin 7 to GND. Not since I tested before. Thank you Ikari you are a phenomenon

  23.  

    I want to mod my SNES and built a simple PIC Flasher using my Raspberry PI ( http://mujweb.cz/tlc/rpp/ )
    My problem is that the flasher application is strictly build to handle “small” MPUs and does not understand the “Extended Linear Address Record (Typ 04)” that is used at the beginning of the provided compiled hex file.

    Recompiling in IHEX16 format like this should be okay right?

    gpasm -c supercic-lock.asm supercic-lock.asm -a inhx16
    gplink -o supercic-lock.hex supercic-lock.o -a inhx16

    Thank you for all your work ikari :)

    •  

      I have no idea :D Give it a go and see if it works. ;)
      That flasher still looks fairly complicated IMHO – I use an even simpler programmer using a serial port: http://sksapps.com/wii/programmer2.jpg
      Very ugly “schematic” but I can’t find the original one anymore. Downside is that this circuit can’t supply enough programming voltage for the older PICs which really require 9V+ (like 12F508). 12F629/16F630 work great though.

  24.  

    I have a metric ton of PIC 16F688’s do you see any issues with using that chip (im not that familiar with PIC)

  25.  

    Hi, and thanks for your work.

    I tried to use the super CIC lock file along with uIGR (both on PIC 18f630), but all the time the LED output from super CIC are inverted and conflict with uIGR.
    I can switch via reset button and get all the right colors with the right mode, BUT…
    When trying to switch via IGR, I can’t get orange to turn on.
    When trying to reprogram my CIC with the key file, the problem disapears.

    From what I understand, the lock file is for console installation right ?
    I had a look at the code and there’s that line
    btfsc PORTC, 3 ; invert LEDs?

    I don’t know anything about ASM, could you tell me what happens and how to solve this ?

    Thanks

  26.  

    Dear Ikari,

    Thank you for your outstanding work! I have setup a Super CIC on my SNES, everything is working like a charm. Except: My RESET Button – it stopped working – the button itself seems to be ok though. I am not very experienced with electronics but I am sure that my wiring is set properly. I used the schematics from here respectively from here. I am asking kindly for some ideas how to figure out the cause of this problem.

    Best regards,
    konrad

    •  

      Can you still toggle the video mode using the reset button (best tested with an original game or empty cart slot to make sure pair mode is disabled)?
      If so, something must be wrong with the host reset output pin/connection from PIC pin 11.
      Otherwise it might be worth checking the reset input (PIC pin 13), if you removed the original CIC make sure you didn’t forget the 10k-ish pulldown resistor from PIC pin 13 to GND. ;)

    •  

      Hey Ikari, thank you for your assistance. Turned out that my wiring of PIC pin 13 was wrong. I falsely wired it to [original 18-pin SMD lock CIC pin 9] instead of 8. 9 seemes to be GRND. Thanks for heading me into the right direction. Best regards, Konrad

  27.  

    Hi ikari,

    Thank you for work on the SuperCIC and the Sd2snes! I have a couple of questions regarding the SuperCIC Key.

    1) The ASM says I can tie pin 4 low or high to enable or disable pair mode. Low = enabled, high = disabled? Or is it the other way around?

    2) The LED output is 5v?

    3) I found an older (I’m assuming it’s older) version of the SuperCIC Key on GitHub which does not have the pair mode and blinks the LED when there’s an error. Is there any compatibility issues with this version of the key?

  28.  

    Hi there! Have I fucked up horribly if I’ve accidentally ripped off the solder pad for F413 pin 10?

  29.  

    Hi,

    When writing program on the chip, an alert box said “The OSCAL value should be in the form of a RETLW instruction [ 34xx ] –> Currently [ 3Fxx ] –> Do you want this changed?”
    Shall i choose “Yes” or “No” ?

    Thanks in advance for you help

    •  

      The SuperCIC does not use the OSCCAL feature so it doesn’t matter in this case. However as a general advice you should try and set your programming tool to leave the OSCCAL value alone, it is factory set and requires some work to recover. There is PIC code that makes use of it.

  30.  

    Hello,
    I have just made the SuperCIC in my S. Famicom (GPM-02) but I’m experiencing something I don’t know if it’s “expected” or not.
    Holding the RESET changes perfectly between AUTO, 60 and 50 Hz but everytime I power down the console and power it on, I have no LED light and I have to “reset” the console once.

    Sometimes (very few times and I could not determine what I did differently that time) when I turn on the console the LED turn on as well but it doesn’t match the “mode”. After some seconds it changes the mode (that’s the normal behaviour, right!?)

    Can you guys shed some light?

    Thx!

  31.  

    Hi ikari,

    As others before me, I thank you very much for all your hard work on the SuperCIC.

    I would like to know if the supercic-lock.hex in the archive above is the latest version, because there is a mirror at Borti’s GitHub (
    https://github.com/borti4938/Switchless-Mods/tree/master/SNES/CICs/lock) and when I compare the two files, they are not identical. And I even have another one on my computer (downloaded some years ago from your site) that has some differences too with those two previous.

    Thank you.

    io

    •  

      In fact, the third one was from Wolfsoft tutorial.

      •  

        Hi ikari,

        Do you know what’s different in Borti’s version of SuperCIC lock? And which one we should use?

        Thank you.

      •  

        I replaced “banksel” with the corresponding two dedicated instructions. Also I add a “clrf ANSEL” within the initialization routine to get it compatible with the 16F676 (and 16F684).

  32.  

    Ran into an issue with a SuperCIC Key and the SuperCIC lock. My SNES has the lock installed, which works correctly, with pin 4 set to +5V. My friend sent me a repro he made with a SuperCIC key made to enter pair mode with a SuperCIC lock. When pair mode is set the SuperCIC lock shifts through video modes until landing on PAL mode, and stays there. Holding the reset button then does nothing. My SNES is NTSC. I’ve disabled pair mode by bridge different jumpers on the SuperCIC key and this results in it acting like any other SNES cartridge. Just curious if this is how pair mode is designed to work.

    •  

      Pair mode requires additional hardware on the cartridge. The idea is that a cartridge can be given a means to control the video mode of the SNES on its own (e.g. by setting a register implemented in a CPLD or similar). A “plain” repro cart has no use for the pair mode and should not enable it. The result is that the CIC data lines, which are reused for mode setting, will be left floating and may have the inputs on the lock SuperCIC “drift” to any level, setting video modes at random.

  33.  

    Hi ikari,
    Firstly thanks for everything you do, I have an SD2SNES on it’s way to me in the post (hopefully).
    I had my PAL SNES modded and they put in the CIC chip (not the board) for switchless region changing. It seems to work fine with so far my only game (Starwing, which I know doesn’t really work with changing regions, garbled graphics), however with my Super Game Boy 2 whether I have it set to auto region or forced 60Hz, it will switch back to letter-boxed 50Hz, either very quickly or after a few minutes (seems to depend on the game, Tetris does it very quickly, Wario Land could be up to 5 minutes). After it does this I can’t cycle modes anymore to force it back, holding the reset button will just reset the console as soon as it’s pressed.
    Are you aware of any issues with the CIC mod and the Super Game Boy 2? Is there anything I can do?
    Thanks

  34.  

    Hello! I have a problem with my superfamicom (jap). Switching 50/60 modes often does not work. Also there is a problem that when the reset button is pressed, it does not switch mode but resets the console. And again, mode 50 works without color.
    I checked all solder points, soldered alternative points – without result. Motherboard SNS-cpu-gpm-02

  35.  

    Hello! I have a problem with my superfamicom (jap). Switching 50/60 modes often does not work. Also there is a problem that when the reset button is pressed, it does not switch mode but resets the console. And again, mode 50 works without color.
    I checked all solder points, soldered alternative points – without result. Motherboard SNS-cpu-gpm-02

  36.  

    hi , i need a little bit of help.
    I am making a repro cart
    I use the top3000 ,
    i want to program the super cic to my pic12f629

    , first thing is i open topall program.
    2 select the right chip then load the super cic file
    3 then i click write then once done verify.
    after i installed it no sucess game dosnt boot

    is there something i do wrong ?

 Leave a Reply

All comments are moderated. Email is optional, however no comment confirmation message will be shown for some reason if it is left empty. The comment will be posted anyway.

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=""> <s> <strike> <strong>