Author |
Message |
- Joined: 01 Feb 2014
- Posts: 877
|
Pigarus SRAM glitch
Posted: Fri Dec 07, 2018 4:53 pm
|
On some screenshots in the competition thread law81 runs over at the elotrolado forum, I noticed a glitchy results screen for 5 minutes mode. I never experienced this in Emulicious or on my SMS 1 + Everdrive combo, where it all works flawlessly. I did notice the same behaviour when using the emulator TwoMBit, though.
Since the glitch only seems to appear in 5 minutes mode, it is my theory that the emulator (or the flashcart used) only supports 8KB of SMS SRAM (only as much as is needed to play commercial software from back in the day). IMO, that means that the recording, once it passes into the second 8KB of the SRAM bank, is mirrored into the first part and overwrites the highscores.
Does anyone know more about SRAM behaviour and can confirm this theory?
More importantly, is there anything I can do differently in the code to avoid the glitch? If not, I'm considering adding an option to deactivate the recordings, so people with incompatible setups can at least use the highscore save feature.
|
|
|
- Site Admin
- Joined: 19 Oct 1999
- Posts: 14745
- Location: London
|
Posted: Fri Dec 07, 2018 5:37 pm Last edited by Maxim on Sat Dec 08, 2018 10:16 am; edited 1 time in total
|
You can detect the SRAM size by writing to known addresses and then reading back at mirrored addresses.
It's common to write a marker at the start of SRAM, assuming it's set to random values if you don't find it. You then blank it all and write your marker at 0. You can then read back from 8KB and see if your marker is there; repeat at other likely addresses (e.g. 4KB). And of course check if it's at 0, to decide if SRAM exists at all.
If you can write the replay data with RLE then it's very likely you will fit it in 8KB, unless the player manages to change the pressed buttons on average more than 8 times per second for the whole 5 minutes.
|
|
|
- Joined: 01 Feb 2014
- Posts: 877
|
Posted: Fri Dec 07, 2018 6:38 pm
|
Maxim wrote It's common to write a marker at the start of SRAM, assuming it's set to random values of you don't find it. You then blank it all and write your marker at 0. You can then read back from 8KB and see if your marker is there; repeat at other likely addresses (e.g. 4KB). And of course check if it's at 0, to decide if SRAM exists at all.
I actually already have a marker in place at 0, to check if I have initialized the sram. I wipe it and reset highscores to defaults if it‘s not found. I‘ll try what you suggest and hope I can fix the glitch that way.
|
|
|
- Joined: 05 Sep 2013
- Posts: 3828
- Location: Stockholm, Sweden
|
Posted: Sat Dec 08, 2018 7:25 pm
|
isn't there an option to set SRAM size on the emulator?
The point is that it might be wrongly emulating a game cart with only 8 KB in there so, to emulate that correctly, it will ignore the highest address' bit (and it would then wrap)
|
|
|
- Site Admin
- Joined: 19 Oct 1999
- Posts: 14745
- Location: London
|
Posted: Sun Dec 09, 2018 8:36 am
|
Since we don't have feature headers on SMS ROMs, there's no indication of the correct SRAM size. No games take advantage of this to detect when they have the "wrong" size available, so emulators can just give games as much as possible, or try to detect what is used, but assuming 8KB is definitely wrong.
|
|
|
- Joined: 05 Sep 2013
- Posts: 3828
- Location: Stockholm, Sweden
|
Posted: Sun Dec 09, 2018 10:54 am
|
yeah - my point is: you don't need to update your game if there's a problem in an emulator - eventually it's the emulator author that has to update his program!
|
|
|
- Joined: 01 Feb 2014
- Posts: 877
|
Posted: Sun Dec 09, 2018 12:06 pm
|
I'm not really concerned about emulator users. So far, the glitch has only shown in a single, fairly obscure one. Additionally, there are plenty of alternatives for the users.
What bothers me is that the glitch seems to appear on some flashcarts too. Personally, I have never seen it (using the Master Everdrive), but some screenshots and videos found online suggest it happens occasionally. Altering the code so replays are deactivated if not enough sram is present seems like a possible solution.
|
|
|
- Site Admin
- Joined: 19 Oct 1999
- Posts: 14745
- Location: London
|
Posted: Sun Dec 09, 2018 3:58 pm
|
I suggest you detect the size and then write RLE as you go - bitmask + 0 for new buttons pressed and then increment the counter while the bitmask is unchanged. (There are other options for encoding more efficiently but this is fairly simple.) Then stop when you run out of space. This will allow it to work on any carts limited to 8KB without losing the functionality, and also enables cartmods of 8KB games. Or maybe you don't want to encourage that?
|
|
|
- Joined: 05 Sep 2013
- Posts: 3828
- Location: Stockholm, Sweden
|
Posted: Sun Dec 09, 2018 6:41 pm
|
Kagesan wrote What bothers me is that the glitch seems to appear on some flashcarts too.
I missed that completely. Which flashcarts? Homemade? If so, they may be well 8 KB total (in a single bank)... on the fly RLE encoding might be a good solution in any case. The two highest bits can be even used to signal if a length byte follows or if it's just a single/two/three frames.
You won't even need such a slightly more complex solution, likely.
|
|
|
- Joined: 01 Feb 2014
- Posts: 877
|
Posted: Mon Dec 10, 2018 4:57 pm
|
sverx wrote Which flashcarts?
Research so far has shown that the glitch appears on homemade carts (which is to be expected) and on chinese Everdrive clones like the Jack Diy (which is surprising).
I have a few days off next week, maybe I'll find the time to fix it then.
Maxim wrote Or maybe you don't want to encourage that?
No, I don't really want to encourage that. Besides, I am currently looking into the possibility of producing a physical edition, and a fully working replay feature would be a great selling point for that.
|
|
|
- Joined: 01 Feb 2014
- Posts: 877
|
Posted: Tue Dec 18, 2018 9:35 am
|
Just a quick heads-up that version 1.1 is up. This should make the SRAM glitch disappear. It did in all my tests, but I have a limited number of setups, so I couldn't really test all and evrything. I hope I haven't introduced any new bugs while removing the glitch.
|
|
|