• Category Archives Coding
  • AGAR v1.2.1 released

    Version 1.2.1 of AGAR is out, for both Linux and Windows. It’s a bug fix release with small improvements.

    Improvements
        pcb dialog : preview in pictures tab is saved in database to speed up navigation.
        pcb dialog : displaying full size image by double clicking when the image is bigger than the display screen
                     is now handled correctly : you can zoom, resize or move the image to taste.
        pcb dialog : progress indicator is now displayed while adding images.
    
    Bug fixes
        main : application icon is now correctly displayed.
        pcb dialog : drag & drop should now work without occasionally creating orphan actions.
    

    I also spent some time creating a user guide, describing more in depth how to use the software. I hope you’ll like it 🙂

    Cheers !


  • AGAR v1.2

    I just released version 1.2 of AGAR. It’s main feature is the overhaul of the pictures tab in the pcb view : you can now directly drag and drop files from the file explorer to the pictures list. No need to use the clumsy file selector anymore, everything is handled using the mouse.

    • PNG, JPG and GIF files are supported, anything else will be silently rejected.
    • Depending on the settings, files can be resized to the specified resolution, or left untouched if No resizing is checked. Beware of large files in this case, as database size will grow really quickly !
    • Default resize value is initialized to 1024 * 768 as it was in previous versions.
    • Icons are added to every line to edit the label or remove the picture, context menu isn’t used anymore.
    • Single left click still displays the preview, and double left click the full size image.

    I made some changes to the Linux version too : in previous versions the database file was created in the config directory, which could lead to permissions problems on the file when updating. The database was supposed to be in the same directory than the executable anyway (it works that way on Windows), so the file will be automatically copied to the right directory at first start. If there’s any trouble doing so, a message will be displayed with relevant information to do it manually.

    Finally the binary for Windows is now x86-64, I don’t think the 32 bit version will be missed … if that’s the case drop me a line 😉

    I created a GitHub page for the project, you can access it here : https://rtoumazet.github.io/agar/ (or using the Projects tab above).

    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 !