What's new

Zilmar's RSP spec: two questions

angrylion

New member
1) It's well known that while RSP operates, CPU can write to signal flags (aka semaphores), which are bits in SP_STATUS_REG. Software that relies on this behaviour includes World Driver Championship, Stunt Racer 64 (for these two look at 0x138 in the ucode), Neon64 (NES emulator) and probably more. Ucode of these programs checks against CPU-performed writes. However, with Zilmar's spec (and existing emulators) CPU won't do a thing until DoRspCycles is executed. Therefore DoRspCycles enters infinite loops, etc. How can I implement this?
2) Some software (e.g. MooglyGuy's NUTS test program) switches RSP into single-step mode. But if I exit DoRspCycles, I can't guarantee that DoRspCycles will be called again just because single-step bit is set or cleared. No existing emulator seems to reenter DoRspCycles when single-step mode is on. Can I resolve this without modifying emulators?
Also, if single-step bit is set, is any other bit (namely, halt/broke) in SP_STATUS_REG being set automatically?

EDIT: Now that I have considered this more closely, I suppose that Zilmar's spec is incapable of both features. This conclusion effectively ruins my plans to emulate WDC/Stunt Racer in a non-hacky way. The whole situation is like "Zilmar's spec vs. proper LLE".
 
Last edited:

MooglyTwo

New member
Sorry if this is a bit forward, but why not put your efforts towards contributing to the N64 implementation in MAME / MESS? I know the siren song of getting accolades from the rom kiddiez for getting a heretofore broken game working in one of the pre-existing "hack-u-lators" is pretty alluring. However, if you'd like to do something the right way - and it seems you want to - why not contribute to an emulator that is founded on that princple? I'd certainly appreciate the help.
 

mudlord

Banned
However, if you'd like to do something the right way - and it seems you want to - why not contribute to an emulator that is founded on that princple? I'd certainly appreciate the help.

I never knew there was a precise right or wrong way to go about things...:matrix:

This is exactly why I despise MAME/MESS. I don't mind the principles, they are actually quite neat, but what I don't like is the ethics involved. Like precise definitions as to what is right or wrong. Since when is the MAME team a authoritative figure on emulation on what is right or wrong to do? Isn't it purely up to the developer how to do things? Or must everything be screened through MAMEdev so that it is checked out as being "properly" emulated.

I know the siren song of getting accolades from the rom kiddiez for getting a heretofore broken game working in one of the pre-existing "hack-u-lators" is pretty alluring.

Now I heard everything..MAME devs calling people who use alternate, less accurate emulators "rom kiddiez". Yet another reason to add MAME/MESS to my avoid list. :angry:
 

smcd

Active member
Most people use emulators because they play games. The point of MAME is to accurately recreate hardware functionality in software. If things are done hackishly (not trying to slander anyone or any project) then it isn't accurate in all cases... those in MAME are just more concerned about if it gets every instruction correct as opposed to if you can actually play a game?

There are some other emulators are taking this approach too it seems (bsnes, nestopia?) but they also manage to be playable, as is the majority of items emulated in MAME

I'm not saying either approach is right or wrong. I certainly cannot do better than the authors of MAME, zsnes, jnes, nestopia, etc. :)
 

mudlord

Banned
The point of MAME is to accurately recreate hardware functionality in software. If things are done hackishly (not trying to slander anyone or any project) then it isn't accurate in all cases... those in MAME are just more concerned about if it gets every instruction correct as opposed to if you can actually play a game?

That, I fully agree with. What I don't like is the tone being conveyed here. Like, I honestly can't stand people preaching thier methods over others. Can't both sides just accept that they are both different and just get along? Thats what I am mainly getting at.

That being said, I agree that there is about 2 or more entirely different goals to emulation. I just don't like the preaching of one over the other. And thats what exactly gets on my nerves.

There are some other emulators are taking this approach too it seems (bsnes, nestopia?) but they also manage to be playable, as is the majority of items emulated in MAME

Yeah, Nestopia is taking the same approach. It mixes speed with per-cycle accuracy, which certainly isn't a bad thing. Plus it has loads of different features. BSNES is just starting to become like that, too.
 
OP
A

angrylion

New member
I agree that there are no right or wrong approaches. Personally I prefer precise emulation. But criticism in this area is a senseless thing, anyway.
Moogly, I would gladly help you and MESS if I had enough knowledge. Your work is amazing! But I'm just a beginner.
Anyway, if you're here, would you be so kind as to answer my latter question:
is this behaviour from your rsp.c hardware-accurate? Is it real that whenever sstep bit is set by mtc0, broke bit is set automatically?

if( rsp.sr & RSP_STATUS_SSTEP )
{
rsp.sr |= RSP_STATUS_BROKE;
}
 
Last edited:

MooglyTwo

New member
There are some other emulators are taking this approach too it seems (bsnes, nestopia?) but they also manage to be playable, as is the majority of items emulated in MAME

Solipsism aside, the N64 driver in MESS will eventually approach playable speeds on hardware that's already out on the market. You have to realize that the current implementation is entirely single-threaded and uses an interpreter RSP core. There are currently plans for the recompiler framework in MAME and MESS to be overhauled; once that is in place I'll be writing a recompiler for the RSP. This should gain a significant amount of speed, as in profiles the RSP is currently taking about 75% of each frame. I just don't want to commence work on an RSP recompiler until the new framework is in, as it will deprecate any work that I do.

In addition, MAME and MESS now support a concept of "work units" which can be threaded off onto a separate CPU or on-die core. Once the RSP is taken care of, I intend to overhaul the video emulation so that it renders all of the RDP commands on a second core rather than bogging down the main thread.

Ultimately, this should result in playable speeds on a run-of-the-mill Core 2 Duo or even possibly a regular Core Duo as found in laptops up until late 2006.

Moogly, I would gladly help you and MESS if I had enough knowledge. Your work is amazing! But I'm just a beginner.
Anyway, if you're here, would you be so kind as to answer my latter question:
is this behaviour from your rsp.c hardware-accurate? Is it real that whenever sstep bit is set by mtc0, broke bit is set automatically?

if( rsp.sr & RSP_STATUS_SSTEP )
{
rsp.sr |= RSP_STATUS_BROKE;
}

Hey, everyone's a beginner at some point. In a lot of ways, I'm still a beginner myself.

As for your question, I'm fairly certain that the RSP immediately stops executing as soon as the SSTEP bit is set in the RSP status register. I'll double-check tonight - it should be simple enough for me to write up a quick test routine that puts some sort of register-affecting opcode after the MTC0, and then read the register state out once the RSP has hit its breakpoint. I'll let you know.
 

Hacktarux

Emulator Developer
Moderator
1) It's well known that while RSP operates, CPU can write to signal flags (aka semaphores), which are bits in SP_STATUS_REG. Software that relies on this behaviour includes World Driver Championship, Stunt Racer 64 (for these two look at 0x138 in the ucode), Neon64 (NES emulator) and probably more. Ucode of these programs checks against CPU-performed writes. However, with Zilmar's spec (and existing emulators) CPU won't do a thing until DoRspCycles is executed. Therefore DoRspCycles enters infinite loops, etc. How can I implement this?
2) Some software (e.g. MooglyGuy's NUTS test program) switches RSP into single-step mode. But if I exit DoRspCycles, I can't guarantee that DoRspCycles will be called again just because single-step bit is set or cleared. No existing emulator seems to reenter DoRspCycles when single-step mode is on. Can I resolve this without modifying emulators?
Also, if single-step bit is set, is any other bit (namely, halt/broke) in SP_STATUS_REG being set automatically?

EDIT: Now that I have considered this more closely, I suppose that Zilmar's spec is incapable of both features. This conclusion effectively ruins my plans to emulate WDC/Stunt Racer in a non-hacky way. The whole situation is like "Zilmar's spec vs. proper LLE".

I think it's possible with Zilmar's spec. DoRspCycles(n) is supposed to executes a maximum of n rsp cycles before returning. The problem is that pj64 is not programmed this way, so if you want an emulator that is compatible with other plugins, you have to do the same mistake :(

Anyway, it's not really hard to modify the core. For example you can simply call DoRspCycles when the signals flag is modified.

Also, i don't think it's wrong to add custom extensions to the specs that are only used with some emulator/plugin combination. For example, we have added a feature in glide64 and mupen64 to detect easily framebuffers writes. It speeded up detection of framebuffers writes and allowed emulating full speed some effects in the plugin. If glide64 is used with another emulator it does not use this feature and is slower. Wouldn't it be posssible with your rsp plugin project ?

I see another way to implement it: use a thread for the rsp core. But there would be two problems: the first one is that it would be slow to probe signal bit changes. And more importantly, with threads, the core is not determinist: it would be hard to reproduce bugs and it would also cause desyncs if you plan to use the plugin with a network emulator.
 
OP
A

angrylion

New member
DoRspCycles(n) is supposed to executes a maximum of n rsp cycles before returning.
Isn't it a bad concept? How can CPU know how many opcodes should RSP execute? This concept brings about 3 problems:

1) Imagine that DoRspCycles executes n opcodes, then returns. With current emus it will be called next time only after CPU does some work connected to RSP (in PJ64 only after SP_STATUS_REG is changed by CPU). CPU does DMA to RSP' IMEM and DMEM, changes rsp pc, etc. and calls DoRspCycles again. But RSP hadn't enough time to carry out what it was meant to in the previous run (which may include DMAs to RDRAM, etc.), because it implied more opcodes than n . This will engender disastrous effects.
Try to change Ziggy's RSP so that it executes n (which is actually 100 for PJ64 and Mupen) opcodes and then returns. And what will you see? No game will work (verified). RSP won't have time to do its work.
Why does Ziggy's RSP work nowadays? Because DoRspCycles returns either when it should return (mtc0, break) or when it has executed 10 million opcodes (read: Ziggy forces it to quit infinite loops).

2) These infinite loops in WDC and Stunt Racer 64. Yes, Ziggy quits them by force. But it well may be that RSP would do more work if it exited these loops normally and continued execution (i.e. if multithreading allowed CPU to write to SP_STATUS_REG, including signal flags, while RSP works). So we force WDC to work instead of resolving the true issue. Thus, we're getting a false impression of "everything working", instead of more pressure that we need to fix true bugs.

3) There are branches in WDC ucode: RSP jumps to this or that location depending on signal flags set or cleared by CPU in real time. If we don't allow CPU to write while RSP operates, RSP will jump to a wrong piece of code. It'll be very bad.
Imo, only multithreaded CPU<->RSP interaction model is nice.

Anyway, it's not really hard to modify the core. For example you can simply call DoRspCycles when the signals flag is modified.
Project64 does exactly this. Look into functions Compile_SW_Const and r4300i_SW_NonMemory from memory.c and into function ChangeSpStatus from registers.c. Project64 calls DoRspCycles whenever CPU writes to SP_STATUS_REG and, more than that, only when CPU writes to SP_STATUS_REG.
But CPU should have the possibility of writing to signal flags while RSP works so that RSP continues execution. CPU shouldn't wait until we pause RSP after an arbitrary number of cycles. This waiting, (while RSP is in infinite loop), will slow down looped games tremendously. If we, however, put cycle limit for DoRspCycles too low, it will break other games (set it to 100.000 and Mario Kart 64 will crash).

Moogly, Ziggy has introduced RSP DRC in his RSP plugin, you may find looking at it useful. However, while DRCs can be theoretically as accurate as interpreters, in practice they often/sometimes breed additional bugs and incompatibility. I esteem your decision. However, if I was you, I wouldn't put my efforts into RSP DRC until I am assured that my RSP interpreter is more or less perfect (which includes testing of all opcodes).
 

MooglyTwo

New member
As for your question, I'm fairly certain that the RSP immediately stops executing as soon as the SSTEP bit is set in the RSP status register. I'll double-check tonight - it should be simple enough for me to write up a quick test routine that puts some sort of register-affecting opcode after the MTC0, and then read the register state out once the RSP has hit its breakpoint. I'll let you know.

Okay, I just verified the behavior of setting the SSTEP flag. It appears that the RSP executes exactly one opcode after the MTC0 before single-stepping mode takes effect.

I just ran the following test code on my N64, with RSP DMEM populated with zero:

Code:
                la      t0,0x00000040
                la      t1,0x00000001
                la      t2,0x00000002
                la      t3,0x00000003
                la      t4,0x00000004
                la      t5,0x00000005
                la      t6,0x00000006
                la      t7,0x00000007
                la      s0,0x00000008
                la      s1,0x00000009
                la      s2,0x0000000a
                la      s3,0x0000000b
                la      s4,0x0000000c
                la      s5,0x0000000d
                la      s6,0x0000000e
                la      s7,0x0000000f
                mtc0    t0,SP_STATUS ; Set single-stepping mode
                sb      t1,0x0000(zero)
                sb      t2,0x0000(zero)
                sb      t3,0x0000(zero)
                sb      t4,0x0000(zero)
                sb      t5,0x0000(zero)
                sb      t6,0x0000(zero)
                sb      t7,0x0000(zero)
                sb      s0,0x0000(zero)
                sb      s1,0x0000(zero)
                sb      s2,0x0000(zero)
                sb      s3,0x0000(zero)
                sb      s4,0x0000(zero)
                sb      s5,0x0000(zero)
                sb      s6,0x0000(zero)
                sb      s7,0x0000(zero)
                break ; Safety break

This resulted in byte 0 of DMEM being set to 1, which would indicate that the sb opcode just after mtc0 was executed before single-stepping kicked in.

I'll be committing a fix to MAME to this effect.
 

Exophase

Emulator Developer
I agree with mudlord. If for some the sole purpose of emulation is to preserve a machine then that's fine but for many of us the point is to play games, and it's not fair to stand on a moral pedastool because of this. Accuracy and compatibility don't necessarily go hand in hand, and sometimes a highly compatible emulator can also be grossly inaccurate. These emulators are receiving more and more criticism, when the authors have usually made a highly pragmatic decision to emphasize playing the games at fullspeed on lower spec systems over telling the user base to buy or wait for a faster computer.

In fact, I really have more respect for people who put a lot of effort into optimizing their emulators, because this is really much harder than just implementing something that works, especially if extensive documentation is available. You might argue that there will eventually be good enough computers to play it, but why should people be forced to wait? You can't claim that N64 is a commercially architecture for Nintendo now, at least no more than you can claim it won't be in 10, 20, or 50 years. What's the point of having a mentality of preserving an experience for people when you have no consideration for giving people that experience today? Is it just because you won't have to worry about the future generations annoying you? Every day you put off emulation for some higher purpose you're depriving people the opportunity to play that game. I don't see what's so morally superior in this.
 
OP
A

angrylion

New member
Thanks for your efforts, Moogly!

I've proved that allowing CPU to act while RSP operates is enough for WDC and Stunt Racer. I've turned the whole RSP plugin into one endlessly running SDL_Thread and got ingame in WDC without hacks. But with this approach all games sooner or later crash due to CPU/RSP desync. This is quite
accountable, because with modern emulators CPU runs probably 10x faster than RSP. And I can't sync them unless I introduce some changes into CPU emulation(e.g. turn CPU emulation into another thread).

Besides multithreading, there's an option to change CPU emulation so that CPU executes only a definite number of cycles after DoRspCycles returned and then calls DoRspCycles again.

The spec itself is probably not to blame. Theoretically, if an emulator is programmed in a particular fashion, the spec allows CPU/RSP synchronization. However, no emulator seems to be programmed this way, and Hacktarux has already explained why.
 

Hacktarux

Emulator Developer
Moderator
In my opinion, threads are not the magical solution because they are not predictable and the emulator becomes non deterministic. I've said that the specs are good enough to do what you want but i've not said emulator are perfectly using them currently...

There are many ways of implementing it but here's an example of what i'm thinking about:
- the cpu writes to SP_STATUS_REG, you ask the RSP to execute 100 cycles. We suppose that 100 cycles are not enough to finish ucode execution
- then the cpu core continues, and when it reaches next jump, it check that the number of cpu cycles since SP_STATUS_REG write is greater than 100 rsp cycles. If it is the case, the cpu core ask the rsp plugin to execute another 100 rsp cycles.
and so on until the rsp task is finished.

Of course, we would have to handle all possible interactions between two cores: semaphore, SP_STATUS_REG write...

I agree that no core is truly accurate on the way rsp is handled currently. But i'm sure it can be improved.

And if you're worrying about speed, i think that once this is working in a single emulation thread, we can implement it with thread as long as there are enough synchronization points. But i think we need to change zilmar's spec to do this accurately with threads.

Edit: i didn't read totally your post before posting my answer. Actually, you seem to have the same idea ;)
 
Last edited:
OP
A

angrylion

New member
There are many ways of implementing it but here's an example of what i'm thinking about:
- the cpu writes to SP_STATUS_REG, you ask the RSP to execute 100 cycles. We suppose that 100 cycles are not enough to finish ucode execution
- then the cpu core continues, and when it reaches next jump, it check that the number of cpu cycles since SP_STATUS_REG write is greater than 100 rsp cycles. If it is the case, the cpu core ask the rsp plugin to execute another 100 rsp cycles.
and so on until the rsp task is finished.

Yes, I suppose byuu, author of bsnes, calls this approach a "state machine".
Probably I'll experiment with this in Mupen once I have enough time. If everything goes well, I'll let you know.
 

PistolGrip

New member
Mame/Mess is quite inaccurate in many ways. Most of their CPU cores offer CPU cycle accurate emulation, but some systems require sub cpu cycle accuracy (NES, ATARI, to name some). That and the dynarecs are even worse accuracy wise to make some games playable on current host systems. What I don't understand is why they can agree to make hacks (dynarecs, inaccurate cores, incomplete system emulation) for some items, but then go all nutsy when it comes to other things. You then have some developers of mame/mess (of which mooglyguy is barely one, I'm not really talking about him) talking about how accurate MAME is when there are lots of other emulators which completely smoke it in regards to accuracy. The other issue with mame/mess is in regards to things like hardware acceleration, are there plans to support polygon rendering on end hardware and all the benefits which come with that? Possibly, but other things like texture packs and whatever will most likely NEVER be supported.

That said, if the hacky way the RSP is put together in the plugins works as it does then syncing with threads (on host) will work fine without much slowdown. You can simply do work in some unit size and stop the RSP and/or CPU at those work intervals. So in between those work units it isn't deterministic but since a work unit is small it's irrelevant, you'll have many points to choose from, and if you need it very accurate a way to adjust the work unit. I can't really see hacktaruxs point of view about it being non deterministic when the current method is much much worse.
 

olivieryuyu

New member
Good things that at last those 2 games works.

There is one game from the same company that designed WDC and Stunt Racer that have no audio at all (Azimer told me it was a core issue).

it is Twisted Edge Extreme Snowboarding

Could that fix the audio in this game ?

just wondering ...

:)
 

byuu2

New member
So, your account gets disabled here when you don't post frequently enough?

These emulators are receiving more and more criticism, when the authors have usually made a highly pragmatic decision to emphasize playing the games at fullspeed on lower spec systems over telling the user base to buy or wait for a faster computer.

This goes both ways. I see constant insults to my emulator because it's so unbearably slow (though in fairness, it really is.) And the majority of people favor playability over accuracy, so really -- the speed-oriented emulators aren't taking nearly as much flack as the accuracy-oriented ones are. It's only recently that they have begun taking any flack at all, in fact.

This kind of backs accuracy-oriented emulator authors against a wall, you can't justify your approach without insulting the speed-oriented emulators in the process by pointing out where your approach is superior, such as pointing to known bug lists or game-specific hack lists. It doesn't matter how much tact you try and use.

In fact, I really have more respect for people who put a lot of effort into optimizing their emulators, because this is really much harder than just implementing something that works, especially if extensive documentation is available.

From my experience, I'll have to strongly disagree with you here. Some speed optimizations are tough, but a lot are obvious from a basic understanding of the system. Range testing IRQs, dynarecs, idle loop skipping, averaging cycle counts, synchronizing less frequently between components, etc are all standard fare and offer tremendous speedups. And adding game-specific patches to fix broken games is even easier, albeit time consuming.

It's only when you really start trying to eke out every last ounce of performance that things really get tough. An N64 emulator on the PSP for instance, would be real pain indeed.

Whereas, when you're aiming for perfection, you already have an impossible goal in front of you. It doesn't matter how good your documentation is -- getting every last edge case working perfectly requires arduous testing.

To me, I have the most respect for someone who can make an emulator that requires at least a ~20GHz processor to achieve full speed. Not even I am willing to work on an emulator I know I'll never actually get to use for gaming. I limit my accuracy to that which can run on (my) current top-of-the-line modern hardware. But I don't see much point in catering to ten year old systems. There are already emulators out there for those. Whereas the original hardware won't be around forever for us to run tests on. When the last unit fails, we have to hope we've gotten it right, because we'll never get it any better.

What's the point of having a mentality of preserving an experience for people when you have no consideration for giving people that experience today? ... I don't see what's so morally superior in this.

Agreed and agreed.

I was regrettably too dogmatic when I first started off, and sadly I cannot change the past, but I calmed down after a while. The good news is, as I said above, we already have emulators playable on modern hardware for most systems, N64 included, so nothing is being lost by pursuing more faithful emulation now.

However, no approach is truly superior to another. They're all different means to reach the same end goal -- 100% compatibility. They just have different tradeoffs in the process. It is beyond tasteless to insult another emulator, regardless of the method they have chosen. Especially when you aren't paying a dime for it.

But, leave it to human nature to proselytize every last possible line of thought in the world, much to the chagrin of everyone else.

You then have some developers of mame/mess (of which mooglyguy is barely one, I'm not really talking about him) talking about how accurate MAME is when there are lots of other emulators which completely smoke it in regards to accuracy.

Do you have any cases where they've done this and it wasn't justified? I've yet to see them claim superiority to NES, SNES or Gameboy emulation, for instance.

Yes, I suppose byuu, author of bsnes, calls this approach a "state machine".

State machine is actually a very generic term. It's C analogue would be:
switch(state++) { case MAX+1: case 1: ... break; case 2: ... break; ... }

To the extent that you need a way to enter and exit in the middle of performing a specific CPU function, so that you can guarantee calling CPU::run() won't execute > ~100 cycles and desync your RSP, yes. That would require a state machine in a single-threaded environment. It's basically a software method of saving the program counter position, so that you can leave a routine and then re-enter it later on.
 

Hacktarux

Emulator Developer
Moderator
However, no approach is truly superior to another. They're all different means to reach the same end goal -- 100% compatibility. They just have different tradeoffs in the process. It is beyond tasteless to insult another emulator, regardless of the method they have chosen. Especially when you aren't paying a dime for it.

That's the word: tradeoff. But in my opinion, we should try to optimize both speed and accuracy. A good emulator is an emulator that is as optimized as possible for a certain accuracy. I mean, even a perfectly accurate emulator can be optimized to some extend. It does not really matter if you start by an accurate emulator and optimize it step by step or if you start with a fast emulator and improve for accuracy step by step. The goal is the same in the end and it is unreachable: the 100% accurate emulator that is as fast as possible.
 

Cyberman

Moderator
Moderator
I like the idea of saying "there is always room for imrpovement".
Where that improvement is depends on what approach one took.
Emulation is what it is. Most times peolpe who are expressing anger and frustration had unrealistic ideas of how things should be. Angry people create decent and divide everything. Unless you use your anger (IE do something with it useful) it just makes a mess.

Aside from such things, this has turned into a somewhat productive discussion, which in my perspective is cool.

The most important thing in what you do is you reach the goal YOU WANT. Not the goal other people want. It's best to be true to yourself and not someone elses means to there end.

So this all started about how to approach better RSP emulation correct? :D

Cyb
 

MooglyTwo

New member
Mame/Mess is quite inaccurate in many ways. Most of their CPU cores offer CPU cycle accurate emulation, but some systems require sub cpu cycle accuracy (NES, ATARI, to name some).

Neither MAME nor MESS claim ultimate emulation of the NES or Atari. However, MESS is now one of the better Atari 2600 emulators with the exception of certain bizarre carts like Pitfall 2.

However, if you don't think that the developers of MAME aren't continually making strides toward accuracy, you're a retard. Ad-hominem attacks aside, you should really try looking at the numerous systems in MAME that have had their drivers rewritten over the past year to remove hacks and be perfectly accurate to the schematics. You should try looking at the numerous systems in MAME that have had discrete audio emulation added, eliminating the inaccurate use of samples. Just what drugs are you on for you to claim that the developers don't care about accuracy?

That and the dynarecs are even worse accuracy wise to make some games playable on current host systems.

What the fuck are you talking about? The only two dynamic recompilers that MAME has is a MIPS recompiler and a PowerPC recompiler, and both of them are more accurate than the interpreter counterparts.

What I don't understand is why they can agree to make hacks (dynarecs, inaccurate cores, incomplete system emulation) for some items, but then go all nutsy when it comes to other things.

If an inaccuracy is found in MAME and can be corrected in an accurate manner, it's fixed. Period. Dynamic recompilers are not hacks, they do not sacrifice accuracy, and anyone who tells you otherwise is an idiot. Incomplete system emulation is often submitted as a fundamental basis on which other people can work. Take Naomi, for instance - for months it could do nothing, but thanks to an external developer it can now, at least, boot the Naomi BIOS. This wouldn't have happened if a dev had just sat on the incomplete driver and never submitted it.

You then have some developers of mame/mess (of which mooglyguy is barely one, I'm not really talking about him)

Blow me. I'm on the private mamedev mailing list, that puts me as more of a dev than a number of external contributors.

when there are lots of other emulators which completely smoke it in regards to accuracy.

There are no arcade emulators that "completely smoke it in regards to accuracy". You're deluding yourself. MAME strives for accuracy, MESS strives for development just for fun, and accuracy eventually.

The other issue with mame/mess is in regards to things like hardware acceleration, are there plans to support polygon rendering on end hardware and all the benefits which come with that?

Yup!

Possibly, but other things like texture packs and whatever will most likely NEVER be supported.

What, and not supporting texture packs makes an emulator inherently shitty? What the fuck? There's a difference between an emulator that's designed for playability and an emulator that is designed for accuracy to the way the hardware worked. There's nothing inherently wrong with either of them, but you're deluded if you think that saying one is more correct than the other - with regards to the way the original hardware worked - is wrong.

Christ, I don't even know why I bother. It's like talking to a brick wall. If you're not all about FR33 G4MEZ!!!!! at FULL SPEED on L33T PENTIUM THR33ZZZ!!!!! you're obviously not welcome on these boards.
 

Top