https://bugs.dolphin-emu.org/https://bugs.dolphin-emu.org/favicon.ico?12017-06-29T22:34:50ZDolphin bug trackerEmulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7292592017-06-29T22:34:50ZJMC4789JMC4789@gmail.com
<ul></ul><p>Yeah, it looks like the game is crashing now.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7299022017-08-11T00:47:27ZJMC4789JMC4789@gmail.com
<ul><li><strong>Status</strong> changed from <i>New</i> to <i>Accepted</i></li><li><strong>Priority</strong> changed from <i>Normal</i> to <i>High</i></li><li><strong>Milestone</strong> set to <i>Current</i></li><li><strong>Regression</strong> changed from <i>No</i> to <i>Yes</i></li></ul> Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7314372017-12-18T01:07:13Zkolanokolano@gmail.com
<ul></ul><p>Have never played in enough to determine, but there was also an older crash issue with this title on the wiki...<br>
"After completion of the third scam there is an error that causes a crash in which you cannot move on to the fourth scam."</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7326202018-04-08T20:04:57Zkolanokolano@gmail.com
<ul></ul><p>Reported as also effecting Scooby-Doo! Night of 100 Frights, refer: <br>
<a href="https://forums.dolphin-emu.org/Thread-gc-scooby-doo-night-of-100-frights?pid=468139#pid468139" class="external">https://forums.dolphin-emu.org/Thread-gc-scooby-doo-night-of-100-frights?pid=468139#pid468139</a></p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7326212018-04-08T20:11:26Zkolanokolano@gmail.com
<ul></ul><p>Though Scooby-Doo! Night of 100 Frights is apparently working at least through 5.0-4607, so if this started in 5.0-2431 the Scooby-Doo! crash may be a different issue.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7326222018-04-08T21:49:23ZJMC4789JMC4789@gmail.com
<ul></ul><p>I thought they originally both broke the first time on the same version?</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7326232018-04-08T22:14:19ZJMC4789JMC4789@gmail.com
<ul></ul><p>I think I just bought Scooby Doo in my last pile of shovelware so maybe I can actually report back.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7329042018-05-05T20:43:29Zstoo
<ul><li><strong>File</strong> <a href="/attachments/6744">GE9E5D_log.txt</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/6744/GE9E5D_log.txt">GE9E5D_log.txt</a> added</li></ul><p>Scooby Doo Night of 100 Frights is 100% working in latest build. I've tested EU, US v1.00 and US v1.01. The reported crash seems likely to have been user error, and unrelated to this issue.</p>
<p>Ed, Edd, n Eddy: The Mis-Edventures still freezes at the loading screen at around 25% load progress in all builds after 5.0-2431.</p>
<p>Log file attached.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7385802020-02-10T15:44:35Zdanileon95danileon95@gmail.com
<ul></ul><p>Just chiming in to inform that this issue is still present :(</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7385812020-02-10T15:46:07Zdanileon95danileon95@gmail.com
<ul></ul><p>And yeah, a workaround is to set CPU override to like 6% for the loading, and then disable it.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7385822020-02-10T16:46:47ZJMC4789JMC4789@gmail.com
<ul></ul><p>This might be dcache issues...</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7385832020-02-10T16:53:11Zmysteryman141
<ul></ul><p>I fixed this issue on my machine by deleting every trace of the emulator from my computer and reinstalling it. Including registry entries.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7395852020-07-02T10:12:11Zhthhdougall.no.spam@gmail.com
<ul></ul><p>I think I've found the root cause of this... it looks like a timing issue.</p>
<p>The game uses asynchronous I/O with double buffering to read from the DVD and upload the data ARAM:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="kt">void</span> <span class="kr">__fastcall</span> <span class="nf">read_complete_callback2_80121BC0</span><span class="p">(</span><span class="kt">int</span> <span class="n">currrent_chunk_size</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">current_chunk</span><span class="p">;</span> <span class="c1">// r30</span>
<span class="kt">int</span> <span class="n">aram_destination</span><span class="p">;</span> <span class="c1">// r31</span>
<span class="n">arq_manager</span> <span class="o">*</span><span class="n">v4</span><span class="p">;</span> <span class="c1">// r3</span>
<span class="n">arq_manager</span> <span class="o">*</span><span class="n">v5</span><span class="p">;</span> <span class="c1">// r0</span>
<span class="n">arq_request</span> <span class="o">*</span><span class="n">arq_request</span><span class="p">;</span> <span class="c1">// r3</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">next_read_size</span><span class="p">;</span> <span class="c1">// r31</span>
<span class="kt">int</span> <span class="n">file_offset</span><span class="p">;</span> <span class="c1">// [sp+8h] [-18h]</span>
<span class="n">DCFlushRange</span><span class="p">(</span><span class="n">buffer2_803D352C</span><span class="p">,</span> <span class="mh">0x8000</span><span class="p">);</span>
<span class="n">current_chunk</span> <span class="o">=</span> <span class="n">buffer2_803D352C</span><span class="p">;</span>
<span class="n">aram_destination</span> <span class="o">=</span> <span class="n">aram_base_803D3530</span> <span class="o">+</span> <span class="n">aram_bytes_copied_803D628C</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="n">arq_request_manager_803D3968</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">v4</span> <span class="o">=</span> <span class="p">(</span><span class="n">arq_manager</span> <span class="o">*</span><span class="p">)</span><span class="n">new_800D643C</span><span class="p">(</span><span class="mh">0x382Cu</span><span class="p">);</span>
<span class="n">v5</span> <span class="o">=</span> <span class="n">v4</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">v4</span> <span class="p">)</span>
<span class="n">v5</span> <span class="o">=</span> <span class="n">init_arq_manager_801188C0</span><span class="p">(</span><span class="n">v4</span><span class="p">);</span>
<span class="n">arq_request_manager_803D3968</span> <span class="o">=</span> <span class="n">v5</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">arq_request</span> <span class="o">=</span> <span class="n">allocate_arq_request_8011A178</span><span class="p">(</span><span class="n">arq_request_manager_803D3968</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="n">arq_request</span> <span class="p">)</span>
<span class="k">while</span> <span class="p">(</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">{</span> <span class="p">}</span>
<span class="n">ARQPostRequest_80155944</span><span class="p">(</span>
<span class="n">arq_request</span><span class="p">,</span>
<span class="n">arq_request</span><span class="p">,</span>
<span class="mi">0</span><span class="p">,</span>
<span class="mi">1</span><span class="p">,</span>
<span class="n">current_chunk</span><span class="p">,</span>
<span class="n">aram_destination</span><span class="p">,</span>
<span class="n">currrent_chunk_size</span><span class="p">,</span>
<span class="n">arq_complete_callback_80121E08</span><span class="p">);</span>
<span class="n">file_offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">tell_8010393C</span><span class="p">(</span><span class="o">&</span><span class="n">current_file_803D6290</span><span class="p">,</span> <span class="o">&</span><span class="n">file_offset</span><span class="p">);</span>
<span class="n">next_read_size</span> <span class="o">=</span> <span class="p">((</span><span class="n">file_length_803D6294</span> <span class="o">+</span> <span class="mi">31</span><span class="p">)</span> <span class="o">&</span> <span class="mh">0xFFFFFFE0</span><span class="p">)</span> <span class="o">-</span> <span class="n">file_offset</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">chunk_size_803D9710</span> <span class="o"><</span> <span class="n">next_read_size</span> <span class="p">)</span>
<span class="n">next_read_size</span> <span class="o">=</span> <span class="n">chunk_size_803D9710</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">next_read_size</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">sub_80102D2C</span><span class="p">(</span><span class="o">&</span><span class="n">dword_8038AAEC</span><span class="p">,</span> <span class="n">current_file_803D6290</span><span class="p">);</span>
<span class="n">read_from_dvd_async_8010368C</span><span class="p">(</span>
<span class="o">&</span><span class="n">current_file_803D6290</span><span class="p">,</span>
<span class="n">buffer1_803D3528</span><span class="p">,</span>
<span class="n">next_read_size</span><span class="p">,</span>
<span class="c1">// identical to this function but with buffer1 and buffer2 swapped</span>
<span class="n">read_complete_callback1_80121BC0</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>Each time a chunk is uploaded to ARAM it counts up the number of bytes written until the whole file has been uploaded, then sets a global flag indicating this asynchronous file load is complete:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="kt">void</span> <span class="kr">__fastcall</span> <span class="nf">arq_complete_callback_80121E08</span><span class="p">(</span><span class="n">arq_request</span> <span class="o">*</span><span class="n">req</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">arq_request</span> <span class="o">*</span><span class="n">self</span><span class="p">;</span> <span class="c1">// r31</span>
<span class="n">arq_manager</span> <span class="o">*</span><span class="n">allocation</span><span class="p">;</span> <span class="c1">// r3</span>
<span class="n">arq_manager</span> <span class="o">*</span><span class="n">manager</span><span class="p">;</span> <span class="c1">// r0</span>
<span class="n">aram_bytes_copied_803D628C</span> <span class="o">+=</span> <span class="n">req</span><span class="o">-></span><span class="n">dword18</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">aram_bytes_copied_803D628C</span> <span class="o">==</span> <span class="n">file_length_803D6294</span> <span class="p">)</span>
<span class="n">aram_upload_complete_803D6298</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">self</span> <span class="o">=</span> <span class="n">req</span><span class="o">-></span><span class="n">self</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="n">arq_request_manager_803D3968</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">allocation</span> <span class="o">=</span> <span class="p">(</span><span class="n">arq_manager</span> <span class="o">*</span><span class="p">)</span><span class="n">new_800D643C</span><span class="p">(</span><span class="mh">0x382Cu</span><span class="p">);</span>
<span class="n">manager</span> <span class="o">=</span> <span class="n">allocation</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">allocation</span> <span class="p">)</span>
<span class="n">manager</span> <span class="o">=</span> <span class="n">init_arq_manager_801188C0</span><span class="p">(</span><span class="n">allocation</span><span class="p">);</span>
<span class="n">arq_request_manager_803D3968</span> <span class="o">=</span> <span class="n">manager</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">self</span><span class="o">-></span><span class="n">owner_id</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
<p>However (without the 6% CPU override hack) "aram_upload_complete_803D6298" never gets set, causing the load to hang. Looking in the debugger, I see that "arq_complete_callback_80121E08" is called the correct number of times. It should add 0x8000 bytes every time, except for the final chunk, which is 0x1160 bytes, but under the debugger it appears to add 0x1160 instead of the second-last value as well.</p>
<p>This is partially explained by "allocate_arq_request_8011A178" returning the same structure every time, because of the 0 argument passed in both "read_complete_callback" functions:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="n">arq_request</span> <span class="o">*</span><span class="kr">__fastcall</span> <span class="nf">allocate_arq_request</span><span class="p">(</span><span class="n">arq_manager</span> <span class="o">*</span><span class="n">manager</span><span class="p">,</span> <span class="kt">int</span> <span class="n">owner_id</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">arq_manager</span> <span class="o">*</span><span class="n">v2</span><span class="p">;</span> <span class="c1">// r6</span>
<span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="mi">20</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span> <span class="n">manager</span><span class="o">-></span><span class="n">requests</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">owner_id</span> <span class="o">==</span> <span class="mi">0</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">manager</span><span class="o">-></span><span class="n">requests</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">owner_id</span> <span class="o">=</span> <span class="n">owner_id</span><span class="p">;</span>
<span class="k">return</span> <span class="o">&</span><span class="n">manager</span><span class="o">-></span><span class="n">requests</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
<p>Because of this, I believe the hang will occur if the final 0x1160 byte DVD read completes before the prior 0x8000 byte ARAM upload completes. Unfortunately, I have no idea if DVD reads are too fast or ARAM upload is too slow, so I haven't tried to fix it.</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7395982020-07-03T11:14:08Zhthhdougall.no.spam@gmail.com
<ul></ul><p>I took a closer look at the current (5.0-12245) emulated timings:</p>
<ul>
<li>First, the 0x8000 byte ARAM DMA begins</li>
<li>4us later (1914 ticks), the 0x1160 byte DVD read begins</li>
<li>433us later (210227 ticks), the DVD read completes</li>
<li>81us later (39763 ticks), the ARAM DMA ends</li>
</ul>
<p>The ARAM DMA duration is 518us (251904 ticks), and the disc read duration is 432us (210227 ticks).</p>
<p>So, at the moment, we're off by a minimum of 81us. It'd work if this disc read were ~20% slower, or this ARAM DMA were ~15% faster (or they met in the middle somehow), but it's not immediately clear what's happening that causes a deviation from the prior hardware measurements. (Could multiple DMAs at the same time cause contention or something?)</p>
<p>I think current ARAM DMA timing is from around 2014 (<a href="http://dolp.in/pr1012" class="external">http://dolp.in/pr1012</a>), and DVD timing is from around 2017 (<a href="http://dolp.in/pr4829" class="external">http://dolp.in/pr4829</a> - which led to this issue).</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7395992020-07-03T11:32:38ZJosJuice
<ul></ul><p>My hunch is that the startup latency for reading data out of the DVD controller's cache hasn't been measured in much detail. (I'm assuming that the read in question is cached, since less than 1 ms is very fast.) Right now the startup latency for this is set to the same constant as the startup latency of every other command, including simple ones like "report status". This is just a guess from my side, so I'm not sure that something is wrong with it, but I think it would be a good place to start looking.</p>
<p>(I should probably do so myself at some point, but I haven't been succeeded in bothering to make hardware tests at any point yet...)</p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7396142020-07-05T13:50:35ZJosJuice
<ul><li><strong>Status</strong> changed from <i>Accepted</i> to <i>Fix pending</i></li></ul><p><a href="https://github.com/dolphin-emu/dolphin/pull/8935" class="external">https://github.com/dolphin-emu/dolphin/pull/8935</a></p>
Emulator - Emulator Issues #10373: Ed, Edd, n Eddy: The Mis-Edventures gets stuck on loading screen after menuhttps://bugs.dolphin-emu.org/issues/10373?journal_id=7399952020-09-08T08:54:24ZJosJuice
<ul><li><strong>Status</strong> changed from <i>Fix pending</i> to <i>Fixed</i></li><li><strong>Fixed in</strong> set to <i>5.0-12548</i></li></ul><p><a href="https://dolphin-emu.org/download/dev/48cfc32bf3e4e4c5ac591e38fea4b205e74a4cc0/" class="external">https://dolphin-emu.org/download/dev/48cfc32bf3e4e4c5ac591e38fea4b205e74a4cc0/</a></p>