ZSNES - Current ZSNES Status (moved from romhacking.net)

pagefault - Oct 23, 2006

The ZSNES story:

Most of our devs are only capable of fixing non emulation related thing. Currently the only people who can emulation relation fixes are me and _Demo_ (when he contributes something), Jonas. He recently redid our mode 7 code to match anomie's formula and is now working on DMA changes based on byuu's research I believe. My job is to work on the CPU and then replace the S-DSP (there you go byuu). So pretty much the project is resting on my shoulders for emulation fixes and I have a day job so it doesn't leave me a lot of time to work on it, so development is slow.

We are trying to do a quality job that hopefully the community can appreciate and enjoy without pointing at us and calling us (we only care about games, we use hidden hacks etc). We are removing all of those, we want to remove the crud that has collected in ZSNES in it's 10 year history and rebuild it fresh with new information. But all this doesn't happen overnight. None of the emulation changes get released in SVN because they have too many side effects with other code that isn't right either. We are trying to be legitimate about this and come out with an accurate emulator (probably not to the level of bsnes, he goes the extra mile and I don't have the resources to do things like that). But you can be assured most things will work properly as they do on the SNES when we are done, byuu has been nice enough to send me tests which don't pass in ZSNES and I try to get ZSNES to pass them by implmenting what has to be done.

The WIP's are something I don't really approve of but some of the developers get excited and they want their feature exposed to the public right away and I may have half-working code in SVN at the time, so it doesn't look good when they run a game. So I would like to stop doing a WIP. When we do a WIP it doesn't really mean the features are stable it just means someone wants to make it public. I don't really feel this is a good idea but my recommendations so far have gone unattented so to speak.

We are also rewriting the debugger which ROM hackers will hopefully enjoy once it's done it's still text based, but using curses so it is portable without any heavy overhead. If anyone has any other suggestions (GTK and Qt aren't really an option) unless you think we should have standalone and Qt builds.

All in all we are trying to improve on the mistakes made in the 10 year history of ZSNES. It was originally made to run games only and as fast as possible. But that is not needed anymore so we need to change how we work on the project and I think we are making good progress so far. We don't really want to release anything until we are sure it's right. You know first impression is everything. I can't promise accuracy on the level of bsnes because byuu cannot be beat at this point he has the resources and the time to do that, but we plan to do our best and pass every test hopefully he can throw at us to at least have another accurate emulator (hopefully).

We are trying to come out with a quality product and respected like it was 10 years ago. But since all the original developers have left the project it's sort been adoped by us and it's sort of like restoring an old car now I guess if you want to put it that way

I will talk to _Demo_ about getting into the domain.

Anyway if you have any other questions let me know.


byuu - Oct 23, 2006

My job is to work on the CPU and then replace the S-DSP (there you go byuu).

I don't recall explicitly complaining about ZSNES' S-DSP support. I've been more vocal about S-SMP timing than anything else. I believe the EWJ2 bug lies in S-SMP timing, personally.

So pretty much the project is resting on my shoulders for emulation fixes and I have a day job so it doesn't leave me a lot of time to work on it, so development is slow.

Not to downplay, but to empathize. I also work full-time, and often times I have to take a secondary job as I'm the only income winner where I live currently. It's very difficult to both work full time and come home to work on a hobby. I generally put in 2-3 hours every other day, and I'm fortunate in that at my current job, I can work on my hobbies during downtime to a very limited extent.

On top of that, I have only the occasional direct help of the talented DMV27, and informational help of anomie, Overload and TRAC.

We are trying to do a quality job that hopefully the community can appreciate and enjoy without pointing at us and calling us (we only care about games, we use hidden hacks etc). We are removing all of those, we want to remove the crud that has collected in ZSNES in it's 10 year history and rebuild it fresh with new information.

I tended to be a bit harsher in the past, when our only options were ZSNES and SNES9x. The only accurate alternatives were Super Sleuth (missing sound and speed throttling) and SNEeSe (missing transparency effects). We now have three decent alternatives with varying feature sets, though each are still missing one or two "must have" features.

At any rate, I hope that you don't feel pressured or motivated solely based on what I say or ask for, and I apologize if I annoy you guys with my pickiness. First and foremost, you guys should do what you want to do with the project. Or if you really want to take external feedback, I'd prefer you go with majority opinion rather than just mine.

But all this doesn't happen overnight. None of the emulation changes get released in SVN because they have too many side effects with other code that isn't right either. We are trying to be legitimate about this and come out with an accurate emulator (probably not to the level of bsnes, he goes the extra mile and I don't have the resources to do things like that).

...

All in all we are trying to improve on the mistakes made in the 10 year history of ZSNES. It was originally made to run games only and as fast as possible. But that is not needed anymore so we need to change how we work on the project and I think we are making good progress so far.

...

I can't promise accuracy on the level of bsnes because byuu cannot be beat at this point he has the resources and the time to do that, but we plan to do our best and pass every test hopefully he can throw at us to at least have another accurate emulator (hopefully).

As I've always stated in the past, I think ZSNES is a bad codebase to work from. Emulators written in pure x86 assembly were, back in the day, considered the best. Nowadays, there's simply no need for that. Anyone too cheap to buy a $30 3ghz processor does not deserve to be catered to.

I personally strongly believe ZSNES should start over on a fresh codebase. The world could definitely use an emulator that is barely (if at all) compromised on accuracy, and yet focuses on speed over things transparent to the end user such as the way I tend to implement things exactly as a hardware chip would, even when there are much faster alternatives that provide the same outputs for said given inputs. In a sense, my code is more self documenting for the future, almost to the point of absurdity in some cases.

But starting over is your' guys choice, and you've chosen not to.

But as to the reference of my vast time and resources... again, I spend ~10 hours a week on this, I work alone, and all of my resources include one broken and one working Super UFO 8.3j copier, both totalling ~$200 retail.

So why can I make so much progress so quickly? Because I start over. All the time. I've rewritten my entire emulator from scratch twice now, and I've rewritten entire cores of the emulator more times than I can count. Since my code is all in portable c++, and written using modern OO techniques, this is trivial and takes very little time. I've pulled off an entire CPU rewrite from scratch in ~1 1/2 weeks. There's nothing special about me, and in fact I'm a rather lousy programmer with no formal education in the CS field. Nach and half of #c++ can attest to that fact. You guys are working with raw x86 assembly code, and I know exactly how difficult that is to work with, having directly contributed code to ZSNES on several occasions in the past.

I couldn't imagine how much you would outpace me with 4+ heavily active developers if you weren't held back so much by your legacy codebase.

We are trying to come out with a quality product and respected like it was 10 years ago. But since all the original developers have left the project it's sort been adoped by us and it's sort of like restoring an old car now I guess if you want to put it that way

Yes, we're quite lucky ZSNES has lived on. Nearly all projects, even of ZSNES' fame and magnitude generally don't survive once all founding members of the project have departed.

But it's still a quality product and the number one choice amongst emulation fans. It's more popular by at least two orders of magnitude over my own project. Keep that in mind when you consider the negative things myself or others may say about it from time to time.

To summarize, I apologize again if I'm upsetting you guys or discouraging you in your project, as well as on behalf of anyone else who may be attacking ZSNES based on things I've stated publically in the past. I still believe ZSNES is a great product and I'm personally very appreciative that you're taking the time to fix it up and incorporate the fixes I send to you.

Thanks again for all your hard work.


pagefault - Oct 24, 2006

I don't think you understand byuu, this isn't a competition. We don't consider it one, we will work on ZSNES at our own speed and impove it as necessary as our users request. Porting the CPU core to C would be a pointless endevour for us, we aren't trying to be portable to other platforms than x86 at this point so we are going for speed. There is no reason we cannot achieve decent accuracy using an assembly based engine. There is no pressure on my part because I am 100% confident in the code I am writing. It is good code and it will perform well.

I have no problem if people want to use some other program, thats their choice. Just because another emulator offers something else that appeals to the user doesn't make it competition, it's not like we are trying to prove or make money off this. We see it only as a hobby.

I think everyone will be very pleased with our release that will be coming out mid 2007, most of all emulation code will have been rewritten and it will probably be called ZSNES 2.0 because so much as changed. In the mean time we are considering a 1.50 release with the current code base because of the people getting sick of WIP's. Some people are content the way ZSNES is right now and just want a release so they can distribute it.

We just have a lot of stuff to clean up in the code before this happens. If you don't like something in ZSNES you don't have to use it, but we are far from giving up and calling it quits, we have lots of good stuff coming I think will satisfy the critics of our project.


byuu - Oct 24, 2006

I don't think you understand byuu, this isn't a competition. We don't consider it one, we will work on ZSNES at our own speed and impove it as necessary as our users request.

I don't remember saying it was one. And again for the record, we're definitely not in competition. If that were the case, I'd be closed source and I wouldn't be sharing every single finding of mine with you guys free of charge. I absolutely want to help you guys, to the point where I'd even like to donate source code. I've always said you guys are free to use any of bsnes' source code for ZSNES. You don't even have to ask.

The way I do think of it, however, is friendly competition. Huge difference. There's no need for any of us to outdo another, as we're all working together toward the same goal. However, I can honestly say that I believe all of us have been motivated to make progress on our emulators due to the presence of alternatives, regardless if we admit it or not. And that's a good thing, for everyone. You wouldn't want just one OS, you wouldn't want just one anything. As that always, always leads to stagnation (see: IE6->IE7).

I see stagnation even in my own work with Der Langrisser's English translation.

Porting the CPU core to C would be a pointless endevour for us, we aren't trying to be portable to other platforms than x86 at this point so we are going for speed. There is no reason we cannot achieve decent accuracy using an assembly based engine. There is no pressure on my part because I am 100% confident in the code I am writing. It is good code and it will perform well.

It's your source so that's definitely your right. The benefits of C speak for themselves, though. Other people can read the code and fix mistakes, additions are far easier to add, the code is portable not just for ZSNES but for any emulators that wanted to use the core in the future, there's no guarantee x86 code will run forever (perhaps one day 32-bit apps will be as 16-bit apps are today, maybe worse) and the speed benefits of an x86 core are quickly diminishing. When Moore's law (or whatever) pushes emulator requirements from ~1% for ZSNES to ~10-15% for the slowest competitor, people aren't going to care anymore about speed.

I have no doubt that your work is top notch, however. I've seen your programming work firsthand and you're definitely a better programmer than I.

That's good news. One thing that zsnes will always have going for it is huge name recognition, and 2.0 will meet with much fanfare. This is a huge obstacle for byuu and I'm frustrated for him, because many people are still oblivious to bsnes (or anything other than zsnes: see sig). I see a lot of grief in the zsnes bug reports forums, but it would be discourteous of me to recommend bsnes outright for zsnes' problem games.

If pagefault and co truly aren't concerned about maintaining ZSNES' popularity position and truly view this as complete non-competition, then I suspect it will suffer the same fate of certain NES emulators of the past -- though probably not for another five to ten years. Overload really is one feature away from having a complete alternative to ZSNES, that's useable right now. However, given the recent cycle accurate CPU core pagefault is working on, I don't entirely believe there is not at least friendly competition here still. Which again, I view as strictly a positive thing. Although I wish people listening to our (myself mostly) banter about accuracy would've taken a friendlier approach to convincing pagefault that a cycle core would be a very good thing for ZSNES.

As far as recommending my work, nah. Recommend all of the other emulators that run the game. Kind of rude in that this is ZSNES' forum and not a general SNES emulation forum, however.


© 2006 ZSNES board - archive.is/MmEan