@@ -229,19 +229,24 @@ void gw_main(void)
229229
230230 while (true)
231231 {
232+ const int64_t startTime = rg_system_timer ();
233+ uint32_t joystick = rg_input_read_gamepad ();
234+ bool drawFrame = true;
235+
232236 /* refresh internal G&W timer on emulated CPU state transition */
233237 if (previous_m_halt != m_halt )
234238 gw_check_time ();
235239
236240 previous_m_halt = m_halt ;
237241
238- // hardware keys
239- uint32_t joystick = rg_input_read_gamepad ();
240-
241- if (joystick & RG_KEY_MENU )
242- rg_gui_game_menu ();
243- else if (joystick & RG_KEY_OPTION )
244- rg_gui_options_menu ();
242+ if (joystick & (RG_KEY_MENU |RG_KEY_OPTION ))
243+ {
244+ if (joystick & RG_KEY_MENU )
245+ rg_gui_game_menu ();
246+ else if (joystick & RG_KEY_OPTION )
247+ rg_gui_options_menu ();
248+ continue ;
249+ }
245250
246251 // soft keys emulation
247252 if (softkey_duration > 0 )
@@ -253,14 +258,21 @@ void gw_main(void)
253258 softkey_alarm_pressed = 0 ;
254259 }
255260
256- int64_t startTime = rg_system_timer ();
257- bool drawFrame = true;
258261
259262 /* Emulate and Blit */
260263 // Call the emulator function with number of clock cycles
261264 // to execute on the emulated device
262265 gw_system_run (GW_SYSTEM_CYCLES );
263266
267+ /* copy audio samples for DMA */
268+ rg_audio_sample_t mixbuffer [GW_AUDIO_BUFFER_LENGTH ];
269+ for (size_t i = 0 ; i < GW_AUDIO_BUFFER_LENGTH ; i ++ )
270+ {
271+ mixbuffer [i ].left = gw_audio_buffer [i ] << 13 ;
272+ mixbuffer [i ].right = gw_audio_buffer [i ] << 13 ;
273+ }
274+ gw_audio_buffer_copied = true;
275+
264276 // Our refresh rate is 128Hz, which is way too fast for our display
265277 // so make sure the previous frame is done sending before queuing a new one
266278 if (rg_display_sync (false) && drawFrame )
@@ -272,15 +284,6 @@ void gw_main(void)
272284
273285 // Tick before submitting audio/syncing
274286 rg_system_tick (rg_system_timer () - startTime );
275-
276- /* copy audio samples for DMA */
277- rg_audio_sample_t mixbuffer [GW_AUDIO_BUFFER_LENGTH ];
278- for (size_t i = 0 ; i < GW_AUDIO_BUFFER_LENGTH ; i ++ )
279- {
280- mixbuffer [i ].left = gw_audio_buffer [i ] << 13 ;
281- mixbuffer [i ].right = gw_audio_buffer [i ] << 13 ;
282- }
283287 rg_audio_submit (mixbuffer , GW_AUDIO_BUFFER_LENGTH );
284- gw_audio_buffer_copied = true;
285288 } // end of loop
286289}
0 commit comments