@@ -39,7 +39,7 @@ extern char *syscard_filename;
39
39
#include "../components/odroid/odroid_hud.h"
40
40
int ACTION ;
41
41
#endif
42
-
42
+
43
43
#define NOINLINE __attribute__ ((noinline))
44
44
45
45
const char * SD_BASE_PATH = "/sd" ;
@@ -70,7 +70,7 @@ void dump_heap_info_short() {
70
70
}
71
71
72
72
void * my_special_alloc (unsigned char speed , unsigned char bytes , unsigned long size ) {
73
- uint32_t caps = (speed ?MALLOC_CAP_INTERNAL :MALLOC_CAP_SPIRAM ) |
73
+ uint32_t caps = (speed ?MALLOC_CAP_INTERNAL :MALLOC_CAP_SPIRAM ) |
74
74
( bytes == 1 ?MALLOC_CAP_8BIT :MALLOC_CAP_32BIT );
75
75
/*
76
76
if (speed) {
@@ -169,7 +169,7 @@ void videoTask_mode0_w336(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mod
169
169
170
170
#ifdef MY_SND_AS_TASK
171
171
#define AUDIO_SAMPLE_RATE (22050)
172
- #define AUDIO_BUFFER_SIZE (4096)
172
+ #define AUDIO_BUFFER_SIZE (4096)
173
173
//(1920*4)
174
174
#define AUDIO_CHANNELS 6
175
175
short * sbuf_mix [2 ];
@@ -179,7 +179,7 @@ void audioTask_mode0(void *arg) {
179
179
audioTaskIsRunning = true;
180
180
printf ("%s: STARTED\n" , __func__ );
181
181
uint8_t buf = 0 ;
182
-
182
+
183
183
while (1 )
184
184
{
185
185
if (xQueuePeek (audioQueue , & param , 0 ) == pdTRUE )
@@ -205,7 +205,7 @@ void audioTask_mode0(void *arg) {
205
205
uchar lvol, rvol;
206
206
lvol = (io.psg_volume >> 4) * 1.22;
207
207
rvol = (io.psg_volume & 0x0F) * 1.22;
208
-
208
+
209
209
short *p = sbuf_mix[buf];
210
210
for (int i = 0;i < AUDIO_BUFFER_SIZE/2;i++)
211
211
{
@@ -227,7 +227,7 @@ void audioTask_mode0(void *arg) {
227
227
uchar lvol , rvol ;
228
228
lvol = (io .psg_volume >> 4 ) * 1.22 ;
229
229
rvol = (io .psg_volume & 0x0F ) * 1.22 ;
230
-
230
+
231
231
short * p = sbuf_mix [buf ];
232
232
for (int i = 0 ;i < AUDIO_BUFFER_SIZE /2 ;i ++ )
233
233
{
@@ -246,7 +246,7 @@ void audioTask_mode0(void *arg) {
246
246
* (p + 1 ) = rval ;
247
247
p += 2 ;
248
248
}
249
-
249
+
250
250
odroid_audio_submit ((short * )sbuf_mix [buf ], AUDIO_BUFFER_SIZE /4 );
251
251
buf = buf ?0 :1 ;
252
252
}
@@ -285,13 +285,13 @@ NOINLINE void update_display_task(int width)
285
285
printf ("VIDEO: Task: Stop\n" );
286
286
StopVideo ();
287
287
printf ("VIDEO: Task: Stop done\n" );
288
-
288
+
289
289
printf ("VIDEO: Clear display\n" );
290
290
//odroid_display_lock();
291
291
ili9341_clear (0 );
292
292
//odroid_display_unlock();
293
293
}
294
-
294
+
295
295
TaskFunction_t taskFunc ;
296
296
if (width == 224 )
297
297
taskFunc = & videoTask_mode0_w224 ;
@@ -331,12 +331,33 @@ void DoMenuHome(bool save)
331
331
uint16_t * param = TASK_BREAK ;
332
332
void * exitAudioTask = NULL ;
333
333
334
- #ifdef CONFIG_IN_GAME_MENU_YES
334
+ #ifdef CONFIG_IN_GAME_MENU_YES
335
335
//odroid_display_lock();
336
336
EmuAudio (false);
337
337
hud_menu ();
338
- printf ("\nACTION:%d\n" , ACTION );
338
+ printf ("\nACTION:%d\n" , ACTION );
339
339
switch (ACTION ) {
340
+ case 1 :
341
+ // Clear audio to prevent studdering
342
+ printf ("PowerDown: stopping audio.\n" );
343
+ #ifdef MY_SND_AS_TASK
344
+ EmuAudio (false);
345
+ odroid_audio_terminate ();
346
+ #endif
347
+
348
+ // Stop tasks
349
+ printf ("PowerDown: stopping tasks.\n" );
350
+ StopVideo ();
351
+ odroid_display_lock ();
352
+ odroid_sdcard_close ();
353
+ odroid_display_unlock ();
354
+
355
+ gpio_set_level (GPIO_NUM_2 , 0 );
356
+ // Set menu application
357
+ odroid_system_application_set (8 );
358
+ // Reset
359
+ esp_restart ();
360
+ break ;
340
361
case 3 :
341
362
case 4 :
342
363
hud_progress ("Saving..." , true);
@@ -347,11 +368,11 @@ void DoMenuHome(bool save)
347
368
break ;
348
369
case 5 :
349
370
printf ("\nDELETE ROM\n" );
350
- break ;
351
- }
352
- ili9341_clear (0 );
371
+ break ;
372
+ }
373
+ ili9341_clear (0 );
353
374
EmuAudio (true);
354
- odroid_display_unlock ();
375
+ odroid_display_unlock ();
355
376
#else
356
377
// Clear audio to prevent studdering
357
378
printf ("PowerDown: stopping audio.\n" );
@@ -363,7 +384,7 @@ void DoMenuHome(bool save)
363
384
// Stop tasks
364
385
printf ("PowerDown: stopping tasks.\n" );
365
386
StopVideo ();
366
- //DoReboot(save);
387
+ //DoReboot(save);
367
388
DoReboot (false);
368
389
#endif
369
390
}
@@ -372,7 +393,7 @@ void DoMenuHome(bool save)
372
393
NOINLINE void app_init (void )
373
394
{
374
395
printf ("pcengine (%s-%s).\n" , COMPILEDATE , GITREV );
375
-
396
+
376
397
nvs_flash_init ();
377
398
378
399
odroid_system_init ();
@@ -390,22 +411,22 @@ NOINLINE void app_init(void)
390
411
391
412
/////
392
413
check_boot_cause ();
393
-
414
+
394
415
esp_err_t r = odroid_sdcard_open (SD_BASE_PATH );
395
416
if (r != ESP_OK )
396
417
{
397
418
odroid_display_show_sderr (ODROID_SD_ERR_NOCARD );
398
419
abort ();
399
420
}
400
-
421
+
401
422
//char *rom_file = odroid_ui_choose_file("/sd/roms/pce", "pce");
402
423
char * rom_file = odroid_settings_RomFilePath_get ();
403
424
if (!rom_file )
404
425
{
405
426
printf ("No file selected!\n" );
406
427
abort ();
407
428
}
408
-
429
+
409
430
cart_name = (char * )my_special_alloc (false, 1 , PATH_MAX_MY );
410
431
short_cart_name = (char * )my_special_alloc (false, 1 , PATH_MAX_MY );
411
432
short_iso_name = (char * )my_special_alloc (false, 1 , PATH_MAX_MY );
@@ -418,7 +439,7 @@ NOINLINE void app_init(void)
418
439
ISO_filename = (char * )my_special_alloc (false, 1 , PATH_MAX_MY );
419
440
syscard_filename = (char * )my_special_alloc (false, 1 , PATH_MAX_MY );
420
441
cdsystem_path = (char * )my_special_alloc (false, 1 , PATH_MAX_MY );
421
-
442
+
422
443
spr_init_pos = (uint32 * )my_special_alloc (false, 4 , 1024 * 4 );
423
444
SPM_raw = (uchar * )my_special_alloc (false, 1 , XBUF_WIDTH * XBUF_HEIGHT );
424
445
SPM = SPM_raw + XBUF_WIDTH * 64 + 32 ;
@@ -433,7 +454,7 @@ NOINLINE void app_init(void)
433
454
strcpy (ISO_filename , "" );
434
455
strcpy (sav_basepath ,"/sd/odroid/data" );
435
456
strcpy (sav_path ,"pce" );
436
-
457
+
437
458
framebuffer [0 ] = my_special_alloc (false, 1 , XBUF_WIDTH * XBUF_HEIGHT );
438
459
// framebuffer[0] = heap_caps_malloc(XBUF_WIDTH * XBUF_HEIGHT, MALLOC_CAP_8BIT | MALLOC_CAP_DMA);
439
460
if (!framebuffer [0 ]) abort ();
@@ -445,10 +466,10 @@ NOINLINE void app_init(void)
445
466
printf ("app_main: framebuffer[1]=%p\n" , framebuffer [1 ]);
446
467
memset (framebuffer [0 ], 0 , XBUF_WIDTH * XBUF_HEIGHT );
447
468
memset (framebuffer [1 ], 0 , XBUF_WIDTH * XBUF_HEIGHT );
448
-
469
+
449
470
my_palette = my_special_alloc (false, 1 , 256 * sizeof (uint16_t ));
450
471
if (!my_palette ) abort ();
451
-
472
+
452
473
XBuf = framebuffer [0 ];
453
474
osd_gfx_buffer = XBuf + 32 + 64 * XBUF_WIDTH ;
454
475
#ifdef MY_GFX_AS_TASK
@@ -460,9 +481,9 @@ NOINLINE void app_init(void)
460
481
#endif
461
482
462
483
QuickSaveSetBuffer (my_special_alloc (false, 1 , 512 ));
463
-
484
+
464
485
odroid_audio_init (odroid_settings_AudioSink_get (), AUDIO_SAMPLE_RATE );
465
-
486
+
466
487
InitPCE (rom_file );
467
488
osd_init_machine ();
468
489
#ifdef MY_GFX_AS_TASK
@@ -476,10 +497,10 @@ NOINLINE void app_init(void)
476
497
for (int i = 0 ;i < AUDIO_CHANNELS ; i ++ )
477
498
{
478
499
sbuf [i ] = my_special_alloc (false, 1 , AUDIO_BUFFER_SIZE /2 );
479
- }
500
+ }
480
501
sbuf_mix [0 ] = my_special_alloc (false, 1 , AUDIO_BUFFER_SIZE );
481
502
sbuf_mix [1 ] = my_special_alloc (false, 1 , AUDIO_BUFFER_SIZE );
482
-
503
+
483
504
audioQueue = xQueueCreate (1 , sizeof (uint16_t * ));
484
505
EmuAudio (true);
485
506
printf ("VIDEO: Task: Start done\n" );
@@ -490,7 +511,7 @@ NOINLINE void app_loop(void)
490
511
{
491
512
printf ("up and running\n" );
492
513
//if (!(*osd_gfx_driver_list[video_driver].init) ())
493
- odroid_ui_enter_loop ();
514
+ // odroid_ui_enter_loop();
494
515
RunPCE ();
495
516
abort ();
496
517
}
0 commit comments