Page 1 of 32

Swiss 0.1

Posted: Tue Feb 01, 2011 12:12 pm
by emu_kidid
Well it's finally here - Swiss version 0.1

Please note that from this point on - I'd consider every aspect of this as Work in Progress - and this is why it is open to the public now. Your bug finding and suggestions will be the bloodlines to this project :)

Background:
Swiss is the software that I've been developing on and off the past few months or so. I've labelled it "Swiss" because it'll hopefully (not initially) boast more features than any other homebrew Gamecube utility out there. It is very losely based on the SD-Boot source but about 90% was re-written :)

It is 100% open sourced and available online so you can see changes as I make them and I'll be releasing binary versions with every new feature/improvement.

Current Features:
- Load DOL from SD/SDHC/DVD-R/HDD
- Load GCM/ISO from Original Disc/SD/SDHC/DVD-R/HDD
- Multi-Game DVD-R support (Cobra/GCOS)
- Multi-Disc support Original Disc/SD/SDHC/DVD-R/HDD
- Disc Ripping to SD/SDHC/HDD (WIP)
- Region free / Video forcing (480p) (WIP)
- Full cheat engine for all games (update it via SD/SDHC)
*HDD features require a IDE-EXI or homemade adapter
**SD features require a SDGecko or homemade adapter

Definite future features (in order of priority):
- Memory Card Management
- USBGecko/SE support
- IPL/SRAM/DVD-ROM/RAM dumping
- IPL Configuration

IMPORTANT:
- 480P video mode forcing is Work in Progress - it may not work at all yet!
- Disc dumping is known to corrupt some HDD's - still work in progress!

Two disc games:
Two disc games need to be named using the following name pattern:
game-disc1.xxx game-disc2.xxx
example:
resEvil0-disc1.gcm resEvil0-disc2.gcm


Source Download
Binary Download

* If you are using Action Replay or SD Media Launcher - take it out from the drive and replace it with a proper GC disc after you've booted swiss - it will result in better compatibility *

Image

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 12:23 pm
by KirovAir
Awesome!
Too bad I´m at work atm, but I'll test it as soon as I come home. Thanks a lot for all your work!

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 12:30 pm
by liquitt
Darkmystery wrote:Awesome!
Too bad I´m at work atm, but I'll test it as soon as I come home. Thanks a lot for all your work!
same here.

other than that: awesome work mate!

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 12:47 pm
by Burbruee
I just got home so I'm going to try it right away! :D

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:02 pm
by elias174
very thanks emukidid, i try test this beautiful homebrew, thanks

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:14 pm
by yamaharacer
you are at work and can surfe through the net? at my ex workplace they would fire me.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:19 pm
by KirovAir
yamaharacer wrote:you are at work and can surfe through the net? at my ex workplace they would fire me.
Well, I'm a software programmer. So, sometimes I browse the web for a small while, and then continue programming. I don't think my boss notices, or would mind that. :)

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:20 pm
by liquitt
yamaharacer wrote:you are at work and can surfe through the net? at my ex workplace they would fire me.
we are unfiltered, yep.
everyone else is, haha. that a huge plus if you're one of the IT guys :D

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:26 pm
by Extrems
Image

Clearer picture, because I can.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:28 pm
by WiiPower
Yippie, found the 1st issue.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:33 pm
by liquitt
WiiPower wrote:Yippie, found the 1st issue.
let's eliminate some bugs!

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 1:35 pm
by yamaharacer
I cant select anything in swiss. i want to boot a gcm or iso file but it doesnt load. it just stays in the screen and does nothing.

ok it works. but still doesnt load the pal gameboy player disk :(

wow respect. its faster. the zelda wind waker videos doesnt stock anymore. great work.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 2:28 pm
by Ashen
Awesome Emu, thanks again for all your hard work. will test this out in a bit :)

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 2:40 pm
by Burbruee
You want a contest? :D

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 2:42 pm
by Extrems
I can't compete with component on composite.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 2:47 pm
by Lopson
emu_kidid, congratulations for the awesome work you've done on Swiss! It's an awesome piece of software!

That being said, the program is still in its infancy, so it's only natural for there to be bugs. I've encountered a few of them and thought I'd share them with you. Keep in mind that I'm using Datel's SD Media Launcher, which means that I'm reading the games from a SD card.

- Sometimes, the program doesn't start. When I load Swiss, the screen goes black and the DVD drive is activated, but no response after that. Other times, I have to press A to get it to start up.
- The only game I've tried so far is Skies of Arcadia, which sadly does not work properly. The game boots just fine, but the problems arise right at the main menu. There's a noticeable sound skip going on at this menu.
But it doesn't end there. While in-game, when I try to access a menu, I immediately get a Disc Read Error. Strangely enough, the music doesn't stop when I get that error.

That's it for now. Again, thanks for this awesome tool!

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 3:10 pm
by Burbruee
Oh, this with SDHC and FAT32 support. Please explain what I should do. You say there are no problems with SDGecko and SDHC and it depends on the software.

I'm booting like this. ViperGC -> Cobra plugin -> sdload -> Swiss
I think sdload is the problem, It doesn't find anything on SDHC and just now when I tried to format a normal 2 GB SD in FAT32 I got a RSOD gamecube exception in sdload.
Swiss is too large to fit as a plugin I'm pretty sure even if you compress it. The only other method I could think about that doesn't require to burn a disc every time a new version of Swiss comes out would be to use GCOM and then send the Dol through the BBA. But I don't like that and was even thinking about selling my BBA.

EDIT: Or I could use a normal SD card in sdload, then when swiss loads, before I select the slot I can just try and swap the card to something else?

On another note, I just tried Resident Evil 1 NTSC version. I couldn't get it to boot at all, on any video mode. Auto = black screen, NTSC = black screen, PAL50 = black screen, PAL60 = black screen, 480p = WARNING screen shows at half screen height then black screen. I've tried reformatting my SD card several times so I'm sure it's not a fragmentation issue. This same game worked on Sd-boot 0.4 final without any issues and although I have a new computer now I'm pretty sure it's the same dump. (by the way will Swiss be able to support switching to disc 2 in any way from SD or IDE-EXI?)

EDIT: Oh and Swiss never complained about not having an original disc in the drive. Is it no longer required that the disc is original? Backups works too?

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 3:37 pm
by Lopson
Tested another game on Swiss, namely Super Smash Bros Melee. This is what I got on my first try:
Image

On my second try, Swiss does the GCM check properly, but when I press A to start the game up, he just gives the error message "Error: OK".

Still haven't managed to get the game running. I'll edit this post if I manage to do so.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 4:39 pm
by WiiPower
Hmm, i can't boot any games from SD-Gecko. I only tested Wind Waker yet(just black screen when it is supposed to load), so maybe there's a problem with that game, although the old SD Boot beta loads the game from the same sd card. Since i do all my tests on a wii, i'll wait for more results from other people before i start worrying.

Anyways, i noticed that Swiss (always?) says it can't patch seek. And then i looked at the patch code...
Swiss and NeoGamma use different patterns for it, this is NeoGamma's:

Code: Select all

static const u32 dvd_seek_original[] = {
	0x7c0802a6,
	0x90010004,
	0x38000000,
	0x9421ffe8,
	0x93e10014,
	0x93c10010,
	0x908d9478,
	0x3c80cc00,
	0x38846000,
	0x900d9470,
	0x3c00ab00,
	0x90040008
};
And i think i haven't seen nor heard from a game where it couldn't patch seek. Maybe it's the used function to compare the code to find the location where to patch. Here's the one from NeoGamma(a bit more than memcmp thanks to WiiGator):

Code: Select all

#include <stdint.h>
#include <gctypes.h>

#include "codecmp.h"

/** Instruction type lwz rD, d(rA). */
#define INSN_TYPE_LWZ 32
/** Instruction type stw rS, d(rA). */
#define INSN_TYPE_STW 36
/** Instruction b or bl. */
#define INSN_TYPE_B 18
/** Instruction bc. */
#define INSN_TYPE_BC 16
/** This register is used to access fast global variables. */
#define SDA_REG1 2
/** This register is used to access fast global variables. */
#define SDA_REG2 13

/** Compare code and ignore offsets used for r2 or r13. */
int codecmp(void *checkedCode, const u32 *condition, u32 size)
{
	u32 *code;
	int i;
	int numberOfInstructions;

	code = (u32 *) checkedCode;
	numberOfInstructions = size/sizeof(*condition);

	for (i = 0; i < numberOfInstructions; i++) {
		u32 type;
		u32 rA;

		if (condition[i] == 0) {
			continue;
		}

		type = (condition[i] >> (31 - 5)) & 0x1f;
		rA = (condition[i] >> (31 - 15)) & 0x1f;

		if (((type == INSN_TYPE_LWZ) || (type == INSN_TYPE_STW))
			||((rA == SDA_REG1) || (rA == SDA_REG2))) {
			/* Don't compare offset, because offset can change each time a program is compiled. */
			if ((code[i] & 0xFFFF0000) != (condition[i] & 0xFFFF0000)) {
				/* Code is not identical. */
				return -1;
			}
		} else if (type == INSN_TYPE_BC) {
			/* Ignore offset for branches. */
			if ((code[i] & 0xFFFF0003) != (condition[i] & 0xFFFF0003)) {
				/* Code is not identical. */
				return -1;
			}
		} else if (type == INSN_TYPE_B) {
			/* Ignore offset for branches. */
			if ((code[i] & 0xFC000003) != (condition[i] & 0xFC000003)) {
				/* Code is not identical. */
				return -1;
			}
		} else if (code[i] != condition[i]) {
			/* Code is not identical. */
			return -1;
		}
	}
	return 0;
}
Ok, i get it, patching seek might not be required at all right now. If, then it would be required by the discless mode, and i think i haven't actually seen a game do it(usb gecko debug output). All in all, this a small issue, but still...

Can somebody try 007 Everything or Nothing via SD Gecko or Ide-Exi? Please only people who are able to load games with it. I want to know if it says it can't patch the read, if yes, i think i might have something.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 4:46 pm
by yamaharacer
swiss on my cube can load wind waker. no problem.

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 5:01 pm
by gCube
Mario Kart : Double Dash!! works amazing! Thanks for this release, i'm gonna try James Bond nightfire now, i'll tell you guys if my favorite gamecube multiplayer game works! :lol:

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 5:22 pm
by Aressi
Game boy player start up disc (U) works fine, Star fox assault (Pal) works fine on sdboot, but in swiss after the Hz selection stucks in a black screen, Pokemon box doen't work

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 5:34 pm
by WiiPower
Aressi wrote:Game boy player start up disc (U) works fine, Star fox assault (Pal) works fine on sdboot, but in swiss after the Hz selection stucks in a black screen, Pokemon box doen't work
Is Star Fox Assault an audio streaming game? If yes, do you happen to know if the game tries to play an audio stream in that moment?

Pokemon Box does something to 0x80001800:
http://www.gc-forever.com/forums/viewto ... p=796#p796

Looks like emu_kidid knows about it, but did not have time to fix it yet. Can you add it to the issues at Google Code so it's officially known and it does not need to be reported again by somebody else?

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 6:02 pm
by deku_scrub
sweeeeeet emu_kidid, sweeeeet

Re: Swiss 0.1

Posted: Tue Feb 01, 2011 6:13 pm
by Cubelover
Yay, thanks emu_kidid. I guess it's testing time :D
Swiss compatibility list, anyone?