ducalex / retro-go

Retro emulation for the ODROID-GO and other ESP32 devices
GNU General Public License v2.0
543 stars 125 forks source link

Does this filmware work with esp32-s3? #95

Closed hello-world12 closed 8 months ago

hello-world12 commented 9 months ago

I am having issues trying to get this filmware to function on my esp32-s3 for some time. Has anyone made this filmware work with esp32-s3? I'm pretty new to this type of stuff, So I may be missing infromation.

ducalex commented 9 months ago

It can be built for esp32-s3 (we have a target called ESPLAY-S3 and it used to build and work fine to my knowledge) but I think the current tree doesn't build with esp-idf 5.0+ so that might be a problem.

The changes needed are probably fairly minor, though.

queenkjuul commented 8 months ago

I have been thus far unable to build the esplay-s3 target on ubuntu 23.10, from the main branch or the 1.38.1 tag.

I will keep playing with it, but I'm pretty new to C and ESP32 programming so I'm not really sure I'm understanding what's wrong

My command line is ./rg_tool.py --target esplay-s3 build-img so I'm not sure why it's complaining about odroid-go

/home/qkj/esp32doom/retro-go/components/retro-go/rg_storage.c: In function 'rg_storage_init':
/home/qkj/esp32doom/retro-go/components/retro-go/targets/odroid-go/config.h:79:37: error: 'GPIO_NUM_22' undeclared (first use in this function); did you mean 'GPIO_NUM_42'?
 #define RG_GPIO_SDSPI_CS            GPIO_NUM_22
                                     ^~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/rg_storage.c:84:27: note: in expansion of macro 'RG_GPIO_SDSPI_CS'
     slot_config.gpio_cs = RG_GPIO_SDSPI_CS;
                           ^~~~~~~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/targets/odroid-go/config.h:79:37: note: each undeclared identifier is reported only once for each function it appears in
 #define RG_GPIO_SDSPI_CS            GPIO_NUM_22
                                     ^~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/rg_storage.c:84:27: note: in expansion of macro 'RG_GPIO_SDSPI_CS'
     slot_config.gpio_cs = RG_GPIO_SDSPI_CS;
                           ^~~~~~~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/targets/odroid-go/config.h:77:37: error: 'GPIO_NUM_23' undeclared (first use in this function); did you mean 'GPIO_NUM_43'?
 #define RG_GPIO_SDSPI_MOSI          GPIO_NUM_23
                                     ^~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/rg_storage.c:86:24: note: in expansion of macro 'RG_GPIO_SDSPI_MOSI'
         .mosi_io_num = RG_GPIO_SDSPI_MOSI,
                        ^~~~~~~~~~~~~~~~~~
In file included from /home/qkj/esp32doom/retro-go/components/retro-go/config.h:17,
                 from /home/qkj/esp32doom/retro-go/components/retro-go/rg_system.h:12,
                 from /home/qkj/esp32doom/retro-go/components/retro-go/rg_display.c:1:
/home/qkj/esp32doom/retro-go/components/retro-go/rg_display.c: In function 'spi_init':
/home/qkj/esp32doom/retro-go/components/retro-go/targets/odroid-go/config.h:68:37: error: 'GPIO_NUM_23' undeclared (first use in this function); did you mean 'GPIO_NUM_43'?
 #define RG_GPIO_LCD_MOSI            GPIO_NUM_23
                                     ^~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/rg_display.c:142:24: note: in expansion of macro 'RG_GPIO_LCD_MOSI'
         .mosi_io_num = RG_GPIO_LCD_MOSI,
                        ^~~~~~~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/targets/odroid-go/config.h:68:37: note: each undeclared identifier is reported only once for each function it appears in
 #define RG_GPIO_LCD_MOSI            GPIO_NUM_23
                                     ^~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/rg_display.c:142:24: note: in expansion of macro 'RG_GPIO_LCD_MOSI'
         .mosi_io_num = RG_GPIO_LCD_MOSI,
                        ^~~~~~~~~~~~~~~~
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c: In function 'rg_audio_init':
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:97:53: error: 'I2S_MODE_DAC_BUILT_IN' undeclared (first use in this function); did you mean 'I2S_MODE_MASTER'?
             .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN,
                                                     ^~~~~~~~~~~~~~~~~~~~~
                                                     I2S_MODE_MASTER
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:97:53: note: each undeclared identifier is reported only once for each function it appears in
make[3]: *** [esp-idf/retro-go/CMakeFiles/__idf_retro-go.dir/build.make:188: esp-idf/retro-go/CMakeFiles/__idf_retro-go.dir/rg_storage.c.obj] Error 1
make[3]: *** Waiting for unfinished jobs....
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:107:19: error: implicit declaration of function 'i2s_set_dac_mode'; did you mean 'i2s_set_clk'? [-Werror=implicit-function-declaration]
             ret = i2s_set_dac_mode(RG_AUDIO_USE_INT_DAC);
                   ^~~~~~~~~~~~~~~~
                   i2s_set_clk
make[3]: *** [esp-idf/retro-go/CMakeFiles/__idf_retro-go.dir/build.make:90: esp-idf/retro-go/CMakeFiles/__idf_retro-go.dir/rg_display.c.obj] Error 1
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c: In function 'rg_audio_deinit':
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:193:36: error: 'I2S_DAC_CHANNEL_RIGHT_EN' undeclared (first use in this function); did you mean 'I2S_CHANNEL_FMT_RIGHT_LEFT'?
         if (RG_AUDIO_USE_INT_DAC & I2S_DAC_CHANNEL_RIGHT_EN)
                                    ^~~~~~~~~~~~~~~~~~~~~~~~
                                    I2S_CHANNEL_FMT_RIGHT_LEFT
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:194:13: error: implicit declaration of function 'dac_output_disable'; did you mean 'esp_intr_disable'? [-Werror=implicit-function-declaration]
             dac_output_disable(DAC_CHANNEL_1);
             ^~~~~~~~~~~~~~~~~~
             esp_intr_disable
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:194:32: error: 'DAC_CHANNEL_1' undeclared (first use in this function); did you mean 'I2S_CHANNEL_MONO'?
             dac_output_disable(DAC_CHANNEL_1);
                                ^~~~~~~~~~~~~
                                I2S_CHANNEL_MONO
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:195:36: error: 'I2S_DAC_CHANNEL_LEFT_EN' undeclared (first use in this function); did you mean 'I2S_CHANNEL_STEREO'?
         if (RG_AUDIO_USE_INT_DAC & I2S_DAC_CHANNEL_LEFT_EN)
                                    ^~~~~~~~~~~~~~~~~~~~~~~
                                    I2S_CHANNEL_STEREO
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:196:32: error: 'DAC_CHANNEL_2' undeclared (first use in this function); did you mean 'I2S_CHANNEL_MONO'?
             dac_output_disable(DAC_CHANNEL_2);
                                ^~~~~~~~~~~~~
                                I2S_CHANNEL_MONO
/home/qkj/esp32doom/retro-go/components/retro-go/rg_audio.c:197:9: error: implicit declaration of function 'dac_i2s_disable'; did you mean 'esp_intr_disable'? [-Werror=implicit-function-declaration]
         dac_i2s_disable();
         ^~~~~~~~~~~~~~~
         esp_intr_disable
queenkjuul commented 8 months ago

I tried using a docker container, installing esp-idf v4.3 per the esp-idf docs, then building retro-go per these docs.

I get similar but different errors, this time about undeclared functions called RTC_SLEEP_PD_*

ducalex commented 8 months ago

There was indeed an issue with esplay-s3 not being respected, it's now fixed in the current dev branch.

But to get a successful S3 build you will need esp-idf 5.0 (I think 4.4 maybe had early S3 support too?).

Following those steps in esp-idf 5.0 I get a successful build:

  1. Pull my recent changes and switch to the dev branch
  2. In components/retro-go/CMakeLists.txt near the top you need to comment the first COMPONENT_REQUIRES line and uncomment the second one.
  3. Build with rg_tool.py --target=esplay-s3 --no-networking launcher
  4. You'll get several warnings but they can be ignored.
ducalex commented 8 months ago

We'll track this issue at https://github.com/ducalex/retro-go/issues/98