BSNES rendering design was so elegant and simple that I modified MESS to work the same way
Why not use my renderer entirely? It should be almost as fast as others (the bottleneck is in S-CPU IRQ processing), and it's feature-complete. No worries about color add/sub bugs, mosaic, OPT, Mode7 EXTBG, glitched sprite height in interlace mode, etc etc.
Only the S-CPU and S-SMP rely on cothreads, you can easily detach the ~6 lines regarding them from the current renderer and use it in a state machine.
(and don't ask to me why people should use an undefined DMA register bit as RAM, guess is again a SNES compiler issue....)
I use DMA registers for JMP (indirect) inside proportional font routines. Say you want to move a line of a letter six places over:
lda.l {bitpos}; phx; tax
lda {fontdata},y; and #$00ff; xba
-; beq +; lsr; dex; bra -; +; plx
Or:
lda.l {bitpos}; clc; adc.w #table; sta $430a
lda {fontdata},y; and #$00ff; jmp ($430a)
table: asl; asl; asl; asl; asl; asl; asl
Can't use $0000-1fff because the game itself may be using them, plus it's slower to access than $43xx.
$43xb (and its mirror, $43xf) make nice temporary storage registers. I kind of wish $43xb-$43xf were all valid, ah well.
Yes, we can get much better CPU timing than we have now and that's important, but from what I've seen commercial games are generally a lot more forgiving then byuu's synthetic tests.
That's unfortunate. Darren and I were hoping MESS would take the torch eventually. At any rate, I think you'll reconsider when compatibility reaches >99%. I've had games break because I was off by literally a single cycle. Yes, being off by 6hz a frame at 21477272hz caused Mortal Kombat II to go crazy, it was just barely missing an IRQ.
And what some of these bastardized games do with IRQ and NMI should be a crime. There's a half-dozen games that only work because of a severe edge case involving the pipeline, the six-clock /IRQ and /NMI line holding delay, and a strange case where it keeps the acknowledge bit set during that time across reads. And if you don't get it right, games will deadlock on you.
You're right that they are forgiving, but only in one direction. Some games break if you're a little too slow, but not if you're way too fast, and vice versa. With over 4,000 games it's very hard to get them all working at the same time without being perfect.