• Taito – Rainbow Islands repair log

    Hi there !

    2 posts on the same day ? Watch out for hail 😀

    A few years back I bought a Rainbow Islands pcb, the mythical Bubble Bobble sequel from Taito. I got it pretty cheaply then because of a very simple reason : the custom chip handling the colors (the infamous TC0070RGB) was in a very sorry state, and the game couldn’t run properly.

    This custom chip is in a SIL package (Single In Line), soldered vertically to the pcb, making it really vulnerable to physical shocks.

    The board was clean, but the custom was torn off and soldered back using component legs … as solder isn’t known for its mechanical strength, this repair couldn’t last.

    Check it out  :


    Unsoldered legs, loose connections, etc. … there’s a lot to do !

    As I had various other ongoing projects at the time, and above all I didn’t know to tackle this issue I moved on something else and forgot this board in a cardboard.

    A few months back I came across someone’s website offering print draft of this custom chip. They weren’t available online anymore due to some abuse, but after some time we came to an agreement and he provided me with the files in order to do some real testing.

    I ordered 5 pcb pieces from PCBWay (minimum order), and started looking for the parts needed. The pcb uses CMS 0805 parts, I never had the chance to work on a project of that scale with parts that small.

    Here are the pcbs from PCBWay (I removed the markings from the picture as I don’t want the person to be annoyed because of me 😉 )

    Placing resistors before hot air soldering (it’s really small, magnifier recommended !)

    Soldering done ! A bit of cleaning is needed, and I have to remove excess solder (hard to measure out with the needle), but it’s not that bad actually …

    Added a socket a make testing easier.

    Fresh new custom is plugged in, and …

    Yikes … what’s happening ? Colors are there but seem washed out … looks like a grounding problem.

    To be sure I rewired the original custom to the board, in order to rule out a pcb fault :

    And everythings fine, so the problem is inside the new custom :/

    After discussing back and forth with the designer, he detects a ground difference between 2 parts, and recommends me to add some kynar wire between 2 locations … I do as he says, and …

    Great ! Quite happy to add this one to my collection 🙂

    Cheers !


  • Moving to GitHub

    Hi there !

    Almost 2 years without news, who can beat that :p

    Anyway, I got a few days ago an email from Atlassian stating they will be dropping Mercurial support from Bitbucket, with effective removal of all repositories on June 1st 2020.
    As all my projects are hosted there, that was quite a blow.

    Long story short, all my repositories are now hosted on GitHub, including Agar. I’ve updated the link in the Project page.

    Cheers !


  • AGAR 1.1.10

    Hi there,

    As I did a bit of cleaning in my garage, I added some new entries to my AGAR database, and I noticed that faults weren’t reloaded when editing an existing pcb : data was correctly saved in the database, but it wasn’t reloaded during the next edition.

    It’s a bit annoying as if you resave the data the second time without noticing, you’ll loose the fault content. I’m surprised this bug went unnoticed this long …

    Anyway, it’s now fixed, and I also fixed the way the pcb list was sorted after editing a pcb.

    Both versions (Win32 and Linux) are available, check the projects tab above to get any of them.

    Cheers !


  • New config files and MC8123 WIP

    Happy new year everyone !

     

    Regarding configuration files for SegaDecrypt, I decided to give libconfig a go as a replacement for my big clumsy xml file. I went for version 1.5 as the last version (1.6) has some problems preventing it to compile on my dev setup.

    Now each set has its own configuration file, as you can see in the following example, extracted from a real set :

    
    //--------------------------------
    // Super Hang On Sitdown 317-0039
    //--------------------------------
    
    name =  Super Hang On Sitdown;
    version =  317-0039;
    protection =  FD1094;
    
    program:
    {
        files = [
             epr-10857.25, 
             epr-10859.31 
        ];
        key =  317-0039.key;
        size = 0x20000;
    };
    
    override:
    {
        process_data_manually = true;
        irq_vector_lower_bound = 0x108a;
        irq_vector_upper_bound = 0x108a;
        post_decryption_copy = ( 
            (0x400, 0x1000,  DATA ),
            (0x1A22, 0x20000,  DATA )
        );
    };
    
    crc:
    {
        type =  outrun ;
        storage_address = 0xFF0;
        start_address = 0x1000;
        initial_block_size = 0x1F000;
    };
    

    Almost everything can be overridden, allowing to handle specific cases required for some sets.


    Now that the configuration problem is solved, I started working on the MC8123 decryption. The MC8123 is a Z80 with built-in encryption, Program opcodes and data are encrypted differently, which explains why bootleggers used doubled eproms back in the days : one half was used for the decrypted program, the other half for the decrypted data, and the correct addressing was chosen at runtime.

    Using the same technique I used to decrypt FD1094 files, I should be able to generate decrypted files for MC8123.

    There are some difficulties though :

    • Opcodes operands are considered as data, and they don’t have a fixed size → a pass to check opcode type and operand size has to be done.
    • There are data chunks interleaved with Z80 encrypted code, and unlike FD1094 encrypted code, there are no data markers allowing to know their boundaries → solution will be to consider everything as data first, and then to follow code flow from interrupts start vectors, jumps, branches, etc. in order to get the program code.
    • Previous point has some weaknesses though : some opcodes (like JP (HL) for instance) are supposed to do an unconditional jump, which destination is based on a processor register. Problem is, the register content is set up at runtime, meaning that you can’t know its value without effectively running the code.

    Time to get my hands dirty !


  • New Super Hang On version decrypted

    I migrated enough of the FD1094 part of SegaDecrypt to work on the decryption of a freshly released Super Hang On version. It’s the sitdown one (317-0039).

    The decrypted set is available as usual at Jammarcade.

    I have more sets in the pipeline, but I want first to change the way configuration is handled, as I’m fed up to deal with a big clumsy xml file. A lot of sets use specific code, and moving it to a xml file won’t be easy to maintain. So I’ll move to a plain text per game configuration file, using libconfig.

     

    That’s all for now !


  • Donations and various news

    Hello there !

    For a long time I’ve been wondering what was the best way to set up a donation system, and I finally chose to go for a Pledgie account, as  you can see on the right of the page 😉 So if you find anything I do useful or interesting, you have a way to show your appreciation 🙂

    Regarding current projects, right now I’m converting SegaDecrypt from Ultimate++ to vanilla C++, as a first step implementing what’s new in the latests releases of the language.

    As for Saturnin, I finally decided to go for the Apache License 2.0. I’m migrating the GUI to Qt in order to have something more up to date, and using Qt translation system to implement translations.

     

    I will try post more often … (who said deja-vu ? :p )

    Cheers !


  • Sega FD1089 decryption

    While I was gathering information about how various Sega encryptions worked, it became obvious that some had a lot in common. So I decided to regroup all the decryption routines into the same software, to be able to capitalize on previous work instead of starting from scratch when working on a new decryption.

    I just finished adding FD1089A/FD1089B decryption to the software, meaning that I can generate decrypted sets for PCBs using this kind of encryption. So far Aurail is done (sets 317-0167 and 317-0168), and checksums are automatically fixed. You’ll be able to get them from Porchy’s when the sets will be uploaded.
    I’ll try to add more decrypted sets when I have some spare time, but if you need one quick just drop me a line 😉

    Next step decryption wise will be to move FD1094 decryption code to the new software. After that I’ll have a look at System 24 FD1094 (floppy drive based), and MC8123 (Z80 based, which I’m far from being fluent with :p

    Cheers !


  • Back in business !

    Hi there, it’s been a long time 🙂

    As my interests evolved, I decided to move the devlog to WordPress, to focus on content : why reinvent the wheel when quality CMS already exist ?
    This new version will also talk about arcade stuff (mostly repair oriented), and of course electronics.

    Speaking of arcade repair, I take the opportunity to share about a nice little program I wrote.
    But first, a little history …

    As time goes by, I’m stacking lots of defective arcade games waiting to be repaired, and I’m having hard times keeping track of what is done and/or what is left to do. At first a simple excel file was enough, then I changed for Task Coach, but this one soon have shown its limits.
    After desperately looking for the perfect software, I realized it didn’t exist.
    So I decided to create it, and AGAR was born :p

    What means AGAR ? It stands for Arcade Games Analysis & Repair, and besides it’s almost the name of my favourite Final Fight character 😉

    With this software you can :
    – create manufacturers (without duplicates)
    – create games linked to these manufacturers (without duplicates)
    – create pcbs : with the game linked, its type (original, bootleg, conversion), its origin, its location, its state (working, wip, dead, etc.), its faults when they exist, etc.
    – for each pcb, you can add analysis and link actions to them (whether completed or not), pictures, signature data, describe faults, etc.
    – you can extract analysis/actions listing for every pcb, in text, JSON or XML format

    State of pcbs is shown using configurable colours (text and background), so you can check each state visually. You can also filter pcbs display by state and/or faults.

    AGAR is perfectly usable as is, but I intend to add some more modules in the future, like (non exhaustive list) :
    – purchase management
    – note management
    – and maybe a little components stockpile management, but don’t count heavily on this one …

    Linux and Windows binaries are available, and current version is 1.1.9. Click on “Projects” at the top of the page to get the link to AGAR’s project page on Bitbucket (including download links).

    That’s all for now, I hope you’ll find it useful, as for me I’m using it everyday.