Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Opening OSD Menu Breaks Games/Core #175

Closed
Chromagram opened this issue Sep 1, 2021 · 8 comments
Closed

Opening OSD Menu Breaks Games/Core #175

Chromagram opened this issue Sep 1, 2021 · 8 comments

Comments

@Chromagram
Copy link

Hello, I've been having a great time with the MiSTer, but this one core has been having some weird issues, wanted to know if it was known or if something was wrong on my end. It's a bit of a multi-symptom issue so I'll do my best to describe it.

The core works really well as is. However, when I open the OSD to pause the game or adjust some settings, sometimes when I exit, either the core will crash completely forcing a reboot, or the game will exhibit weird changes that slowly make it literally unplayable. This usually occurs when the OSD is left open for longer. Some examples I came across so far:

In General

  • The sound drops a channel or something. It will start sounding weird, missing half the audio like the percussion.

Donkey Kong Land II

  • After the OSD issue occurs, one of the swimming levels spawned and was literally a block of repeating tiles I couldn't move through. Had to reboot the entire MiSTer and return from a save file, and it was fine.

Pokemon Trading Card Game (1 & 2)

  • This one has the issue quite frequently. Once the OSD issue occurs, eventually you'll start a card battle and get stuck in an infinite loop of your opponent shuffling their deck, drawing their hand and it being 7 of the exact same energy/trainer card. This forces them to reshuffle and redraw, trying to get a Pokemon card into their hand, but all they ever can do is draw the same 7 energy/trainer cards over and over and over. Only a full MiSTer reboot and load from save will fix this.

That's just the examples I've come across so far, but it only happens on this core. I can leave the OSD menu open for days if I wanted on the other cores with no problem, but if I even leave it open for something like 10-15 minutes on this core, these problems may or may not happen, either immediately or slowly over time afterwards. It's really weird.

I'm really hoping someone can provide a fix or an answer as to what's happening at the least. I never really experienced anything like this on my software emulators so it's new to me. I hope it's something simple, otherwise if it's a known issue, I know I can do my reboot workarounds until it is fixed.

Thank you!

@darkworon
Copy link

Having same issue on the latest versions in Donkey Kong 94 with “Pause when OSD is open” enabled. First I thought it’s hardware/memory issue, but memtest result is fine

@darkworon
Copy link

@HiroiSekai could you try this test - https://github.com/antoniovillena/MiSTer_DB9/blob/master/Old/SDRAM.zip?
You need to run all 8 rbf with same rom. If all 8 would pass ok - you are safe :)

I have fail on jtcps1_-520ps.rbf with "rom no good", so it could be problem with SDRAM v2.5 on my side.
https://misterfpga.org/viewtopic.php?f=8&t=2480&start=25

@Chromagram
Copy link
Author

Thanks for posting the test.

I ran all 8, and they all say OK with just "ROM" at the end and it loads the Ghouls demo. Looks like mine is okay.

@paulb-nl
Copy link
Collaborator

paulb-nl commented Nov 6, 2021

@RobertPeip This seems to happen when the core is paused when cart_act is high. The core is paused but the SDRAM is not refreshed anymore as you can see in the trace below. Can you look into it?

I made the trace in the first level in Donkey Kong Land 2 and just toggling Pause when OSD is open.
gb_pause_refresh

@paulb-nl
Copy link
Collaborator

paulb-nl commented Nov 6, 2021

Looks like it gets stuck here waiting for cart_act to go low which won't happen because it doesn't generate a ce:

if (pause = '1' and clkdiv = "111") then
if (cart_act = '0') then
state <= PAUSED;
unpause_cnt <= 0;
end if;

Changing it to below makes it still generate ce's until cart_act goes low:

if (pause = '1' and clkdiv = "111" and cart_act = '0') then
    state       <= PAUSED;
    unpause_cnt <= 0;

@RobertPeip
Copy link
Member

Yes, that should be the prefered way: don't go into paused state as long as cart_act is high.

I cannot remember why I have not put cart_act directly into the if clause as you did now.
Very likely just my fault.

@paulb-nl
Copy link
Collaborator

paulb-nl commented Nov 7, 2021

Thanks Robert. I will send a pull request.

@paulb-nl
Copy link
Collaborator

paulb-nl commented Nov 8, 2021

This should be fixed now with release 1107.

@sorgelig sorgelig closed this as completed Nov 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

5 participants