TUTORIAL: Removing ISP settings-check from Dreamcast games.

Moderators: pcwzrd13, deluxux, VasiliyRS

User avatar
ateam
Heroine Console
Posts: 484

TUTORIAL: Removing ISP settings-check from Dreamcast games.

Post#1 » Fri Aug 19, 2022 11:48 am

For those who've tracked any of my previous or ongoing translation patch projects, you may know how I like to leverage a game's built-in Dream Passport browser to bundle in bonus content for players.

In "Sakura Wars: Columns 2", this included archived DLC, as well as a fully unlocked save (thus giving access to all extra content the game offers).

Image

In "Cool Cool Toon", we'll be shipping a fully unlocked save, as well as other things, like an archive of the old Dricas website, and more.

Skip to the 3 minute and 44 second mark.


However, did you know that any internet-enabled game, even if that just means a built-in web browser, actually checks for the presence of preconfigured ISP settings before allowing the player to access that internet content? This makes perfect sense, as there'd be no real reason for a player to try and make use of such features without their Dreamcast having an internet connection.

However, for my translation patches, all content is baked directly onto the disc itself (or disc image, rather). As a result, I want to ensure that nobody out there is unable to enjoy that bonus material, meaning I had to start looking at how to remove that ISP settings-check.

The simplest of the two methods, which I used for "Sakura Wars: Columns 2", involves searching for the byte string 41474553 (ASCII for SEGA) in a disassembler, like Ghidra. Next, identify any functions reading in that string until you find one that looks like this...

Image

The hack here is simple, and only requires forcing the function to return 0x0, as seen below.

Image

I have found this function in other internet-enabled games, but haven't yet extensively tested modifying this function in anything but "Sakura Wars: Columns 2".

The next method, which I used for "Cool Cool Toon", is slightly more involved, but should at least somewhat fun for you to read about! :lol:

In the Dreamcast BIOS at address 0x8c0000b8, there are SH4 assembly instructions to iterate through various parts of the flashrom, namely the ISP settings. In a disassembler, you'll find numerous references to this address...

Image

The screenshot above is one such example. As we can see, 0x8c0000b8 isn't the flashrom address, but rather the address in the BIOS where actual code lives that DOES access the flashrom.

I was able to learn more about how this works by analyzing the source code for KalistiOS, which does the same thing to access those network settings: https://github.com/KallistiOS/KallistiOS/blob/master/kernel/arch/dreamcast/hardware/flashrom.c

For this game, there are four functions identical to the one shown in the above screenshot. Each of the four is called numerous times from other parts of the code. After each of those calls, there's a cmp/eq for -1...

Image

So by simply forcing each of those four functions to return 0x0, the code no longer jumps to the instructions stored in the BIOS, and thus does not execute code to look in the flashrom for network settings. Instead, it just returns 0x0.

Image
Find me on...

DreamcastForever.com
GitHub
Reddit
SegaXtreme
Twitter
YouTube
• Discord: derek.ateam

User avatar
Slurmking
lithium
Posts: 45

Re: TUTORIAL: Removing ISP settings-check from Dreamcast games.

Post#2 » Fri Aug 19, 2022 2:51 pm

Very interesting, it makes sense why they would do that. Great work

  • Similar Topics
    Replies
    Views
    Last post

Return to “Modifications”

Who is online

Users browsing this forum: No registered users