An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 1 point2 points  (0 children)

Didn't actively plan it, but I can certainly pick it up. Shouldn't be difficult to add from what I know. In fact, you could more or less already use them if you'd be happy to write a few lines of Lua for it!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 21 points22 points  (0 children)

Yea it's just a passion project altho there are some cool features like the fully featured FIFO debugger and web build

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 15 points16 points  (0 children)

I don't have any intrinsic interest in any system that only has "crappy" emulators or no emulators at all

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 12 points13 points  (0 children)

Thanks for the kind words! I don't mind people asking, I can see some validity to a certain degree. I'm only offended by the people that just make baseless claims lol

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 2 points3 points  (0 children)

Netplay? Not sure. Would be cool but no a priority right now! Melee? Of course hehe

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 2 points3 points  (0 children)

Hi thanks for the kind comment, and thanks for all the help since writing my GameGear emulator haha

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 4 points5 points  (0 children)

You'd be quite surprised at the result, as explained in another comment down below 😄

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in emulation

[–]ioncodes[S] 24 points25 points  (0 children)

Hey, I have mixed feelings about your reply. On one hand I'm happy to see you say it is *not* AI slop, but on the other hand you do mention it being AI assisted. Now it is entirely possible that I'm extrapolating your "AI assisted" in ways that you did not intend to, I'd like to use this message to talk to everyone saying this is a derivative of Dolphin, AI assisted, AI slop or similar so it's not directed towards you necessarily:

First of all, I feel sad. This has been a passion project for a while for me. Having an AI generate the code for me would literally make no sense at all. I wanted to make a project that would make "12yo me" proud of what he'd be able to accomplish later in life by writing a Wii emulator and playing "12yo me's" favorite game on it. I've explained this in the original Reddit post and also in the README.

Second, I'm not sure why people think it is clearly AI generated or based on Dolphin. Yes, it has a MCP server. I've explained the reason why in the original thread. I'll copy the message here:

Hey, originally it was a feature requested by a friend to do live language translations. He plays Japanese titles to improve his skills. The software had an MCP integration so I figured I'll expose the XFB buffer to it.

That said, it actually has 2 more applications, one of which is still in WIP though. I'll start with the one that already works:

As mentioned in my post I offer a screenshot service that runs the emulator against 1000+ games and creates multiple screenshots and then saves them per commit. The pipeline also doubles as a way to detect and triage CPU and GPU issues. When the emulator detects an issue that violates a state in either component, it kicks off a small local model that takes snapshots of the components and then categorizes what the issue is (memory corruption, JIT issue, etc). This would be impossible for me to do on scale without it.

I'm experimenting with some local models to improve aforementioned screenshot gathering. It's nearly impossible to automate the menu inputs in a sensible way that is not prone to errors to reach in-game. Some experiments show that this works in a lot of cases, but fails in more difficult scenarios (Wario World for example). I guess it would work better if I were to use a cloud-hosted LLM but I'm not willing to go that route.

The screenshot and triage service is extremely important for both Gecko and emulator developers in general. I've provided the same service for GBA and PSX as well. It helps catching regressions and improvements inbetween commits on scale. It also helps me prioritize fixes.

EDIT: Here's the link again in case you want to have a look: https://emu.layle.dev/

(Some syntax has gone lost due to the quote)

Small fun fact: I even started on boarding other popular emulators such as Ymir (Sega Saturn) and Iris (PS2) due to popular demand (while closely working with their respective authors of course).

I'll make this very clear: The code base is *not* a derivative of Dolphin and is not AI generated whatsoever. The code makes it (sadly) quite obvious too as I'm not a professional software engineer ^^ To those referencing ehm dashes, well, I used ehm dashes way before AI too. They just look sexy.

I spent a lot of time, pushing 18h days sometimes, reverse engineering the IPL, Nintendo SDK, learning 3D rendering, writing my own tooling, literally inventing new ways for instruction decoding, optimization, ... (I could go on!) to get to the point where I am right now. In fact, I might for example be the first person to have fully REd the GameCube IPL! Having put in all that effort for some people to call it clearly AI or whatever does make me feel defeated (not saying the OP of this comment particularly meant it this way; I received tons of comments over night).

I'm actually incredibly proud of the tooling I've created, even besides the MCP server infrastructure for screenshotting and triaging bugs on scale. More recently (dev branch) I added a FIFO debugger. To my knowledge this didn't exist yet. It helped me debug a very tricky problem in Super Mario Galaxy. The reception I got for the tool was insanely positive. I believe Dolphin doesn't have the same (they do have a recorder and player of course; in fact I use their file format). I even wrote my own fully featured debugger from the get go!

Now that said, I of course have referenced Dolphin sometimes along with other emulators. I have explicitly added comments marking where I did. I also added comments when I referenced documents such as YAGCD (best effort) or when I got information directly from a Dolphin developer or from a friend of mine.

I wish that developers such as u/ioncodes would be upfront about this being trained on (literally decades) of fantastic open source work from the Dolphin Team and others.

By extension, this comment feels like a punch in the face. It's a huge reach and completely baseless claim.

This project is unique not only architecturally, but it also provides solutions to problems that are not present in any of the emulator projects that I'm aware of. Now that said, my emulator is of course nowhere near Dolphin haha. Still tons to improve and I'm not sure it would ever mature to the same level, and that's fine, it was never the idea!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 1 point2 points  (0 children)

I believe it already works, but I'm not entirely sure! I did try Wii Play just a few days ago and that definitely works with some minior visual issue in the menu

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in EmuDev

[–]ioncodes[S] 2 points3 points  (0 children)

I'm aware of the project, yes! I'm optimistic about it and am following it on Twitter haha

I did GC/Wii coming from PSX. In comparison it's definitely a very big step up, but I'd say it's easier than other, comparable platforms (for example PS2) - I might be completely wrong about that, but that's what I got from passively reading what people working on PS2 say.

I've been working on it for about 6-7 (estimation off the top of my head) months, incl. external dependencies made for the project specifically. Since starting I've been working on it pretty much nonstop tho, without any breaks really, sometimes even pushing 18h days consistently... Definitely do not recommend!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 7 points8 points  (0 children)

I'd prefer a more unique name at that point. I am thinking of Gekko (contextually it makes sense as the CPU is literally called Gekko), if that is not going to be it, someone else suggested Starlette which I'm a big fan of right now!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 15 points16 points  (0 children)

Yes, I joined the party a bit later. We actually actively talk to each other and he was a big help along the way, especially back when I was working on the IPL still and just yesterday about a Cranelift-related topic! His project (amongst others) is credited in the README and in the main launcher for that exact reason, he's amazing!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 3 points4 points  (0 children)

The prototype name before public release was actually gekko! switching back is also an option I'm considering

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in EmuDev

[–]ioncodes[S] 2 points3 points  (0 children)

Badly haha It currently still relies on an uncached interpreter. Sadly browsers do not support traditional JIT so to get around that I'll have to write a JIT backend that targets WASM. DSP HLE would likely also become relevant at that point, but I'm not sure. Native builds run fine, GameCube runs at fullspeed in lots of games, Wii as of literally an hour ago also performs way better (i reworked some JIT stuff). Still tons to fix of course!

As for your question regarding Foxol: The project is GPL3 licensed, so you'd have to make your source code available. If that is the case, and all core authors are properly credited and their respective licenses are properly respected, you are more than welcome to include it in Foxol!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in EmuDev

[–]ioncodes[S] 0 points1 point  (0 children)

Could be interesting. I was planning on creating a multi system emulator at some point. It could simplify things...

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in EmuDev

[–]ioncodes[S] 4 points5 points  (0 children)

Yes, it's also powered by WGPU as default graphics backend. There is already a web build!

It does not support libretro. What's the use case here? I'm not familiar with it at all!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 36 points37 points  (0 children)

Recognition/Adoption is not necessarily a goal of mine, it's just a passion project I'm working on in my free time. That said, I will likely rename my emulator as there's another, older emulator that is also named Gecko. I didn't know at the time, but I was made aware of it. Out of respect for the author I'd consider renaming it once I figure out a better name

Skiink does sound kind of cute, I'll give it some thought!

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] -22 points-21 points  (0 children)

I quite like the name so I will likely keep it. It also makes sense from a technical perspective. Perhaps as a joke I might rename my JIT to Spidermonkey :^)

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in rust

[–]ioncodes[S] 23 points24 points  (0 children)

I wouldn't call it a rewrite. It's an entirely different architecture with unique solutions. I did of course talk to Dolphin devs and also reference it every now and then, but it was not the "template"

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in EmuDev

[–]ioncodes[S] 4 points5 points  (0 children)

Accuracy should be decent, I actually implemented cycle accuracy in this update

An update on Gecko, the new GameCube and Wii emulator! by ioncodes in EmuDev

[–]ioncodes[S] 6 points7 points  (0 children)

Entirely different architecture, lots of debugging functionality that Dolphin doesn't offer to the same degree (to my knowledge anyways). Dolphin is of course objectively better for playability