|
Joined: May 2004
Posts: 1,773 Likes: 34
Very Senior Member
|
Very Senior Member
Joined: May 2004
Posts: 1,773 Likes: 34 |
people are bothering you more because you're working on it... same with anything really.
and having testers while you're actively working on code tends to be good, you can't be expected to catch everything which changes for every change you make, so it can be a handy indication as to if you're doing things right.
simple as that ;-)
actually you should probably be impressed, considering 100% performance is still out of reach with current CPU speeds it's impressive people are testing the driver enough to give you reports :-)
|
|
|
|
Joined: Jan 2006
Posts: 3,693
Very Senior Member
|
Very Senior Member
Joined: Jan 2006
Posts: 3,693 |
speaking of which, at some point in the past few days or today the camera behavior in J.League Live 64 got fixed and the game is now playable
|
|
|
|
Joined: May 2009
Posts: 2,223 Likes: 387
Very Senior Member
|
Very Senior Member
Joined: May 2009
Posts: 2,223 Likes: 387 |
speaking of which, at some point in the past few days or today the camera behavior in J.League Live 64 got fixed and the game is now playable Sounds like some of the RSP changes I made the other day I had an effect. 
|
|
|
|
Joined: Jan 2006
Posts: 3,693
Very Senior Member
|
Very Senior Member
Joined: Jan 2006
Posts: 3,693 |
JD I have found the reason of the crash in mariokrt on MacOSX. there are out of bound accesses in the following routines that you can fix as follows N64TexturePipeT::MaskCoupled (and possibly N64TexturePipeT::Mask too)
- INT32 maskbits_s = m_maskbits_table[tile[num].mask_s];
- INT32 maskbits_t = m_maskbits_table[tile[num].mask_t];
+ INT32 maskbits_s = m_maskbits_table[tile[num].mask_s & 0x0f];
+ INT32 maskbits_t = m_maskbits_table[tile[num].mask_t & 0x0f];
N64TexturePipeT::Fetch
- return ((this)->*(TexelFetch[index]))(s, t, tbase, tpal, userdata);
+ return ((this)->*(TexelFetch[index & 79]))(s, t, tbase, tpal, userdata);
however the resulting code produces glitches around (e.g. invisible cars in Mario Kart and broken menus in many games) also I have noticed two things in the Mask/MaskCoupled routines: you define them for "INT32 num" but Cycle() pass them a "UINT32 tilenum" and I would expect in fact such a tilenum to be in the 0-7 range, given that the n64_rdp class has is there any missing mask? I hope this report might help you to find the proper solution to have both the crash fixed and the cars visible 
|
|
|
|
Joined: Sep 2004
Posts: 392 Likes: 4
Senior Member
|
Senior Member
Joined: Sep 2004
Posts: 392 Likes: 4 |
Erm, masking against 79 isn't going to give you correct results. 
|
|
|
|
Joined: May 2009
Posts: 2,223 Likes: 387
Very Senior Member
|
Very Senior Member
Joined: May 2009
Posts: 2,223 Likes: 387 |
Not to mention the fact that the issue is that the data structures themselves are trashed. So even if what you're proposing "fixes" the issue, it "fixes" it by prolonging the duration of time the driver is going to be using fucked-up values and doing wrong shit. Your "fix" is, like, MASH-level bad.
Basically, I appreciate the attempt to help, but unless you're a professional N64 programmer who has written microcode, just let me handle it. Guesswork is what's gotten us into this situation, and I at least recognize when I have no idea what I'm doing, which is why I've been trying to solicit information from people who have actually made N64 demos and written N64 games, not random other devs.
|
|
|
|
Joined: Jan 2006
Posts: 3,693
Very Senior Member
|
Very Senior Member
Joined: Jan 2006
Posts: 3,693 |
well, I got 79 from the N64TexturePipeT class TexelFetcher TexelFetch[16*5]; I haven't dig further, 'cause it's 12AM and I have to wake up early tomorrow 
|
|
|
|
Joined: Apr 2005
Posts: 618 Likes: 6
Senior Member
|
Senior Member
Joined: Apr 2005
Posts: 618 Likes: 6 |
N64TexturePipeT::Fetch
- return ((this)->*(TexelFetch[index]))(s, t, tbase, tpal, userdata);
+ return ((this)->*(TexelFetch[index & 79]))(s, t, tbase, tpal, userdata);
you probably meant:
+ return ((this)->*(TexelFetch[index % 79]))(s, t, tbase, tpal, userdata);
however, as others pointed out, the problem lies elsewhere, i.e. why does the index get larger than 79 in the first place? And why do the masks contain values larger than 0x0f -Darkstar
|
|
|
|
Joined: May 2009
Posts: 2,223 Likes: 387
Very Senior Member
|
Very Senior Member
Joined: May 2009
Posts: 2,223 Likes: 387 |
I haven't dig further, 'cause it's 12AM and I have to wake up early tomorrow  It's corrupted memory, I guarantee it, so any of amount of finagling it into working is just going to mask the issue, not make it more apparent. Better that it should crash closer to the time the memory gets trashed than even farther into the future.
|
|
|
|
Joined: May 2004
Posts: 1,773 Likes: 34
Very Senior Member
|
Very Senior Member
Joined: May 2004
Posts: 1,773 Likes: 34 |
Not to mention the fact that the issue is that the data structures themselves are trashed. So even if what you're proposing "fixes" the issue, it "fixes" it by prolonging the duration of time the driver is going to be using fucked-up values and doing wrong shit. Your "fix" is, like, MASH-level bad. nothing wrong with *safer* code in general, but no, people can't understand the basics of masking probably shouldn't even be allowed access to the MAME / MESS code. I guess it was probably just a & / % mixup tho, but using % is *very* expensive on performance so not a good solution anyway.
|
|
|
0 members (),
131
guests, and
0
robots. |
Key:
Admin,
Global Mod,
Mod
|
|
Forums9
Topics9,345
Posts122,350
Members5,082
|
Most Online1,283 Dec 21st, 2022
|
|
These forums are sponsored by Superior Solitaire, an ad-free card game collection for macOS and iOS. Download it today!
|
|
|
|