Dude, you have no idea what you're talking about. I wrote some code in C++ before, and believe me, it was slow. So I rewrote it in assembly, and hey, I got at least a 1000% speedup. So what was the problem? Bottlenecked code! So the point is, you CAN optimize A LOT if you just know HOW. I am NOT talking about hacks here.Ballard said:Read byuu's points on cycle-accuracy: If you'd like to consider him a poor programmer, I suppose that's your prerogative... http://byuu.cinnamonpirate.com/?page=bsnes
The optimizations you speak of are "speed hacks". Those go against the philosophy of accurate emulation.
They still deserve money for a game well made for OUR sake - that is the reason games are being made. A game is game and a game for pay for and that is it.I sort of agree with your second point ideally, but this has been discussed a jillion times both in forums and in courtrooms and despite the fact that said software is no longer produced by it's manufacturer, it's copyrights are good for 75 years. The rub is, very few of those copyright holders give a toss about suing freeware devs and romsites, since nobody is making a profit, if the basic rules are applied. Obviously, if copyright infringment was hurting the gaming industry from emulators/roms, don't you think all these emulators would be gone by now? But this topic is massively irrelevant to this thread.
Read byuu's points on cycle-accuracy:
It would work the same as the hardware works but does that really matter, there is many different x86 cpus and they all work differently but produce the same results, I can not see the need to simulate the cpu to the exact same level.
ScottJC said:Give it up, nobody agrees with you and the more you go on the more you sound like a whining child. For all your sarcasm this thread is going absolutely nowhere. Now if you didn't post in the manner that you do I wouldn't have responded this way, this is no debate - this is more like "If I don't get my own way, i'll scream"
Doomulation said:Dude, you have no idea what you're talking about. I wrote some code in C++ before, and believe me, it was slow. So I rewrote it in assembly, and hey, I got at least a 1000% speedup. So what was the problem? Bottlenecked code! So the point is, you CAN optimize A LOT if you just know HOW. I am NOT talking about hacks here.
It is a matter of writing efficient code, as it is. The assembly code was still experimental and actually not complete. If you truly need speed, you can convert some heavy used code into assembly to optimize as much as possible.Ballard said:I know C++ is slower, and I'm not ordering anybody to do anything, nor am I even implying that PJ64 is lousy. Obviously this piece of hardware is challenging to emulate accurately and get "perfect" results accross the board. I'm glad byuu weighed in. I respect his work in trying to proliferate accuracy in leu of speed and he admitted that the Nintendo 64 is a far more advanced piece of hardware, thusly the methods of coding the emulation might be too cumbersome to mimic the way he did with the SNES. So I will drop the comparison and stop mentioning it.
And perhaps, you should also concider, that if doing cycle-accurate emulation, with all its complexities, it might introduce more bugs, if not less, and the problem in Gex might not be fixed anyway. Also know that the video plugins has a lot to do as well, and many video plugins causes a lot of these problems. And although I do not know for sure, I believe the water in gex is a video plugin known issue.Maybe there is a good compromise. Most of my PJ games work great... no complaints, but a few of them have noticable graphic glitches and I figure that a more accurate emulation would fix the texture issues (one that comes to mind is the water glitches in Gex), but generally I'm very impressed with the overall product of PJ64.
I'm not whining. This is a thread on cycle-accuracy vs. features.
Perhaps we should eventually aim for both!
Doomulation said:It is a matter of writing efficient code, as it is. The assembly code was still experimental and actually not complete. If you truly need speed, you can convert some heavy used code into assembly to optimize as much as possible.
byuu_ said:The page you linked to is regarding SNES emulation.
The SNES is a two-pipeline CPU without cache running at a nomimal "2.68mhz". There are not different variants of the CPUs with different architectures like the x86, there is only two or three minor revisions to fix bugs. With a library of over 3000 games, there are quite a few that just barely work right on real hardware, and some that have glitches even then. To recreate these faithfully, I chose to break the emulation down as low as possible. First, cycle-accuracy isn't enough to get things perfectly right. You also need to support memory read/write hold delays. Second, it's very useful for figuring out timing for more complex things once you have the simpler layers timed perfectly. For example, the cycle-accurate core was mandatory for understanding the SNES CPU's DMA bus synchronization delay. I also needed this to figure out quirks in the NMI and IRQ interrupt triggers by testing perfectly accurate timing tests on the real hardware vs emulation. And these findings make real differences in many games. Sure, I could probably drop the cycle accuracy now that I know how these things work, but why bother? x86 CPUs capable of emulating a 2.68mhz processor in this manner at full speed cost $80 with the motherboard included.
Now, the N64 is a very different beast. Multiple pipelines, (probably) cache, 100(?)mhz, etc -- I don't know much about the N64 so I might be wrong on a couple of these points. But anyway, it's a much, much faster CPU with a lot more complexity. It's less likely that a game is going to require razor sharp accuracy to work on the N64 than for the SNES. Likewise for the SNES to the NES. The same for NES to Atari 2600. The slower the processor, the more lower level emulation matters.
this level of accuracy is something far off and most likely never done. Mostly cause it is not likely ever needed. There would be a lot better things to get correct first like how many cycles an op really takes, at the moment we just take a view that all ops take the same amount of time and that is X, and set able by the user.
At the end of the day it is the experience that counts, If there is bugs that make the game not look perfect then there are things to be done there to make it work perfect. There are features to add as well to make the actual overall use ability better, even if you had 100% accuracy but no could use the thing, it would be meaningless
I believe it is not the speed of the CPU that matters most it is how the games are written.
Ballard, why is cycle-accurate emulation important, what difference does it make when it is done and not done ?
zilmar said:Ballard, why is cycle-accurate emulation important, what difference does it make when it is done and not done ?
Would figuring that out and being able to properly emulate that in code, in a broad sense be "cycle-accuracy"?
byuu_ said:It's a good point though that perfect accuracy isn't as important if that doesn't cause horrible failure.
byuu_ said:Definitely not.
Read this: http://byuu.cinnamonpirate.com/sdp/?page=cpu/cpu_methods
Then look at this diagram: http://byuu.cinnamonpirate.com/sdp/images/cpu_methods.png
ScottJC said:Pfft, it seems more than likely Byuu IS Ballard. They both have the same post count, they were both registered at the same time (may 2006) and both post after each other within only minutes. He's basically arguing with himself and he expects us to believe this crap.
Its like me posting "Heres some information" then following it five minutes later with "I agree".