Difference between revisions of "About RGB-Pi and Raspberry Pi4"

From RGB-Pi Wiki
Jump to: navigation, search
Line 2: Line 2:
  
 
As many of you are asking whether the RGB-Pi devices will be supporting the latest Raspberry Pi4 models, we wanted to clarify some points here:
 
As many of you are asking whether the RGB-Pi devices will be supporting the latest Raspberry Pi4 models, we wanted to clarify some points here:
* From the GPIO specification point of view, all current RGB-Pi devices are 100% compatible with Raspberry Pi4.
+
* From the GPIO specification point of view, all current RGB-Pi devices are 100% compatible with Raspberry Pi4/Pi400.
* From the software perspective, the introduction of the new VideoCore6 and FKMS/KMS video drivers are preventing us using from using the current on the fly resolution mode switch.  
+
* From the software perspective, the introduction of the new KMS video driver, made impossible to use the old way of changing resolutions via firmware custom driver.  
  
 
==About Raspberry Video Drivers==
 
==About Raspberry Video Drivers==
  
 
* Legacy - up to Pi3, Raspberry used a custom video driver that communicated directly to the firmware (which only had a custom implementation of OpenGL ES) and had direct access to the framebuffer. This is now legacy and not fully supported in Pi4 anymore.
 
* Legacy - up to Pi3, Raspberry used a custom video driver that communicated directly to the firmware (which only had a custom implementation of OpenGL ES) and had direct access to the framebuffer. This is now legacy and not fully supported in Pi4 anymore.
* FKMS (Fake/Firmware KMS) - uses the custom Dispmanx API to communicate with the firmware. It is the new default driver for Pi4 and does not support the use of framebuffer changes via fbset, tvservice or vcgencmd commands.
+
* FKMS (Fake/Firmware KMS) - uses the custom Dispmanx API to communicate with the firmware. It was the default Pi4's driver for some time, and did not support the use of framebuffer changes via fbset, tvservice or vcgencmd commands.
* KMS - the kernel communicates directly to the hardware registers bypassing the firmware. As of today, this is the standard industry driver and the one that will become the default driver in all future Pi models once its development is fully finished.
+
* KMS - the kernel communicates directly to the hardware registers bypassing the firmware. As of today, this is the standard industry video driver and the new default driver in all current and future Pi models.
  
==Issues==
+
==Development Status==
  
 
===Frontend===
 
===Frontend===
  
* The current frontend makes use of Pygame SDL1 and surface objects. Since the release of Pygame SDL2, the current UI performs terrible due to unknown reasons. This results in the UI barely running at 4 FPS and 100% of CPU use.
+
* The frontend, which makes use of Pygame SDL1 and surface objects, has been remade from scratch to avoid the performance issues that suffered in Pi4 due to changes in video libraries. Now it is sprite based and it is prepared to be easily migrated to Pygame SDL2. There is a bug in Pygame SDL2 that prevents us from reinit the video while the frontend is running. This issue is currently being addressed by Pygame development team.
* The ALSA audio drivers have been changed to make some of the internal virtual devices comply with the standard naming and configuration, resulting in some current audio features like EQ broken.
+
* The ALSA audio drivers was changed to make some of the internal virtual devices comply with the standard naming and configuration That resulted in some audio features like EQ and audiojack broken. All issues with ALSA audio have been resolved.
* Raspberry USB PCI hub descriptors and sorting has also changed resulting in controller ordering not matching with Retroarch anymore.
+
* Raspberry USB PCI hub descriptors and sorting has changed resulting in controller ordering not matching with Retroarch anymore. Also RetroArch changed their sorting engine. After some work on our controller engine, it is now already fully adapted to match all these changes.
 
 
===Device Tree Overlay .dtbo===
 
 
 
* The current device descriptor is not compatible/working anymore in KMS/DRI mode
 
  
 
===Video Driver and Timings===
 
===Video Driver and Timings===
  
* As stated by Raspberry Pi engineers, a full KMS driver for Pi4 is being worked on by a subcontractor, and will be mainlined in the future.
+
* The new KMS driver is now finished and working.
* Pi4 still has the same DPI, DSI, and VEC blocks. The HVS and HDMI blocks have significant updates, and the pixel valve routing has been changed.
+
* A new Device Tree Overlay .dtbo has been created to make it 100% KMS compatible.
* The I2C block connected to the HDMI ports is different from previous versions.
+
* A new custom kernel module has been created to provide a bridge between KMS and DPI.
* Using the old legacy driver in Pi4 results in the following issues:
+
* A new custom kernel has been created to support interlaced (480i) resolutions.
** fbset only works in 32 bit depth mode
+
* A new custom kernel has been created to support native CSYNC.
** fbset is not able to properly change the framebuffer size, hanging or setting a virtual resolution instead
+
* A new custom RetroArch has been created to support KMS and the new custom DynaRes video subsystem (more info in the 'New Features' section down below).
** tvservice/vcgencmd only works with composite and HDMI
 
* Using the new KMS video driver results in the following issues:
 
** Custom timings (drm modes) are not supported when using GPIO DPI
 
** When using DPI, there is not edid information available
 
** Neither tvservice nor vcgencmd are supported by any means
 
 
 
===Additional Misc. Blocking Issues===
 
 
 
* SDL2 version provided by Raspbian not being compatible with SDL2 in CLI with no X
 
* Image formats and True Type font modules not supported in SDL2 Pi version
 
* Changes in config.txt
 
 
 
==Current Status==
 
 
 
===Frontend===
 
  
* A new fully refactored UI based on Sprites is being developed. Current pre-Alpha is working properly in both SDL1 software render, and SDL2 hardware accelerated mode. There is a bug in Pygame SDL2 that prevents us from reinit the video while the frontend is running that is already addressed by Pygame development team. Since Pygame SDL2 still has issues with software rendering, we will continue using the current Pygame SDL1 in soft. mode until the patch arrives and we can migrate to the new SDL2 hard. accel. version.
+
==New Features==
* All issues with ALSA audio have been resolved.
 
* USB ordering engine have been updated, so it is working properly again. When the migration to SDL2 is feasible, a refactor of this module will be required due to changes in the way SDL2 works with joysticks as compared with SDL1.
 
  
===Device Tree Overlay .dtbo===
+
===DynaRes===
 
 
* A new universal custom .dtbo has been created to support all DPI RGB addons. The same is already working properly in KMS mode.
 
 
 
===Video Driver and Timings===
 
  
* KMS driver is almost complete and working properly in Raspberry Pi4.
+
We have developed a custom version of RetroArch which includes a new video subsystem (DynaRes) to fully manage all the video modes and options. the main features of DynaRes are the following ones:
* Retroarch is now also working properly with KMS video driver.
+
* Does not require any external timings database.
* A new custom kernel module has been created to provide a bridge between KMS and DPI, and also provide a full timing database (due to edid lack).
+
* Can set the proper resolution and native refresh rate, as provided by the core, when launching games.
* A new kernel patch has been created to support interlaced (480i) resolutions.
+
* Can change the resolution on the fly as requested by the core/game while playing.
* A new feature was introduced in Retroarch to support manual video mode switch via special configuration file.
+
* Support different monitor types (15khz, 25khz, 31khz, etc.)
 +
* Timings calculated based on Calamity switchres.
 +
* Automatic H and V image positioning and centering.
 +
* Has different working modes (all of them using native refresh rates):
 +
** Native: games will run on native H and V resolutions. On the fly timing changes will happen on both H and V resolution changes.  
 +
** SuperX: games will run on native V resolution. H resolution is super res dynamically calculated using integer scale with 8px of overscan. On the fly timing changes will happen only on V resolution changes.
 +
** Custom Fixed: games will run in a fixed resolution. This is useful for scenarios like Dreamcast 240p/480i, or TATE games played rotated.
 +
** Handheld Full: systems like GBA and NGP can be displayed in special fullscreen mode.
  
===Additional Misc. Blocking Issues===
+
===Lightgun===
  
* Retropie SDL2 compilation is now fully working in pure CLI mode.
+
We have developed a custom driver to support original Namco GunCon 2 lightgun. Currently, only original blue(EU), black(JP) and orange(US) original guns are supported. We are working on supporting clones and original XBOX gun in the future if feasible.
* We now only use sprite based fonts and indexed BMP image formats so no more compatibility or performance issues will be faced in this regard in the future.
+
It is very important to know that there are 4 different kinds of gun games based on the hardware they used. While nothing prevents us on playing any of them, different results could be faced:
* All config.txt issues were addressed.
+
* Lightgun blanking based. The main example is the NES Zapper. These games play really well. Some cores like Genesis Plus GX do not provide any precision adjustment, so SMS games for instance become more challenging.
 +
* Lightgun beam read based. The main example is PSX GunCon. These games work and play perfectly fine.
 +
* Lightgun + IR receiver based. Sega Menacer is the main example. These games play well as long as they do not have big black areas. An example of game that do not work well is Megadrive T2 the Arcade. The sky in this game is black, so the gun cannot read the beam. On the other hand, SNES version which is prepared for beam read based gun plays well since the sky changes to a blue color.
 +
* Fake Lightgun. There are many examples of this in arcade. For example Operation Wolf arcade cabinet uses a joystick disguised as gun. Again, the playability here relies on games not having many and/or big black areas on the screen.
  
 
==Final Words==
 
==Final Words==
  
A lot of work and improvements have been done and still much more is still pending, but the current status looks promising.
+
While we are still working on more and new features, fixing bugs, etc., the system is currently in a very advanced Alpha status and working very nicely.
Do note that we are in direct discussions with many of top people in the scene for making all this things a reality in the mid term. Some of the people involved are Cpasjuste, Alphanu, Substring, Calamity, robertpfeiffer, digitalLumberjact and of course me (rTomas) and aTg from RGB-Pi team.
+
Please be patient, all this work is made in my spare time (rTomas). The system will be for sure released at some point in 2022.
 +
For quick updates, photos, videos, etc. you can follow me on Twitter @rtomasal
  
 
To be continued...
 
To be continued...

Revision as of 00:30, 24 January 2022

RGB-Pi in Raspberry Pi4 and Beyond

As many of you are asking whether the RGB-Pi devices will be supporting the latest Raspberry Pi4 models, we wanted to clarify some points here:

  • From the GPIO specification point of view, all current RGB-Pi devices are 100% compatible with Raspberry Pi4/Pi400.
  • From the software perspective, the introduction of the new KMS video driver, made impossible to use the old way of changing resolutions via firmware custom driver.

About Raspberry Video Drivers

  • Legacy - up to Pi3, Raspberry used a custom video driver that communicated directly to the firmware (which only had a custom implementation of OpenGL ES) and had direct access to the framebuffer. This is now legacy and not fully supported in Pi4 anymore.
  • FKMS (Fake/Firmware KMS) - uses the custom Dispmanx API to communicate with the firmware. It was the default Pi4's driver for some time, and did not support the use of framebuffer changes via fbset, tvservice or vcgencmd commands.
  • KMS - the kernel communicates directly to the hardware registers bypassing the firmware. As of today, this is the standard industry video driver and the new default driver in all current and future Pi models.

Development Status

Frontend

  • The frontend, which makes use of Pygame SDL1 and surface objects, has been remade from scratch to avoid the performance issues that suffered in Pi4 due to changes in video libraries. Now it is sprite based and it is prepared to be easily migrated to Pygame SDL2. There is a bug in Pygame SDL2 that prevents us from reinit the video while the frontend is running. This issue is currently being addressed by Pygame development team.
  • The ALSA audio drivers was changed to make some of the internal virtual devices comply with the standard naming and configuration That resulted in some audio features like EQ and audiojack broken. All issues with ALSA audio have been resolved.
  • Raspberry USB PCI hub descriptors and sorting has changed resulting in controller ordering not matching with Retroarch anymore. Also RetroArch changed their sorting engine. After some work on our controller engine, it is now already fully adapted to match all these changes.

Video Driver and Timings

  • The new KMS driver is now finished and working.
  • A new Device Tree Overlay .dtbo has been created to make it 100% KMS compatible.
  • A new custom kernel module has been created to provide a bridge between KMS and DPI.
  • A new custom kernel has been created to support interlaced (480i) resolutions.
  • A new custom kernel has been created to support native CSYNC.
  • A new custom RetroArch has been created to support KMS and the new custom DynaRes video subsystem (more info in the 'New Features' section down below).

New Features

DynaRes

We have developed a custom version of RetroArch which includes a new video subsystem (DynaRes) to fully manage all the video modes and options. the main features of DynaRes are the following ones:

  • Does not require any external timings database.
  • Can set the proper resolution and native refresh rate, as provided by the core, when launching games.
  • Can change the resolution on the fly as requested by the core/game while playing.
  • Support different monitor types (15khz, 25khz, 31khz, etc.)
  • Timings calculated based on Calamity switchres.
  • Automatic H and V image positioning and centering.
  • Has different working modes (all of them using native refresh rates):
    • Native: games will run on native H and V resolutions. On the fly timing changes will happen on both H and V resolution changes.
    • SuperX: games will run on native V resolution. H resolution is super res dynamically calculated using integer scale with 8px of overscan. On the fly timing changes will happen only on V resolution changes.
    • Custom Fixed: games will run in a fixed resolution. This is useful for scenarios like Dreamcast 240p/480i, or TATE games played rotated.
    • Handheld Full: systems like GBA and NGP can be displayed in special fullscreen mode.

Lightgun

We have developed a custom driver to support original Namco GunCon 2 lightgun. Currently, only original blue(EU), black(JP) and orange(US) original guns are supported. We are working on supporting clones and original XBOX gun in the future if feasible. It is very important to know that there are 4 different kinds of gun games based on the hardware they used. While nothing prevents us on playing any of them, different results could be faced:

  • Lightgun blanking based. The main example is the NES Zapper. These games play really well. Some cores like Genesis Plus GX do not provide any precision adjustment, so SMS games for instance become more challenging.
  • Lightgun beam read based. The main example is PSX GunCon. These games work and play perfectly fine.
  • Lightgun + IR receiver based. Sega Menacer is the main example. These games play well as long as they do not have big black areas. An example of game that do not work well is Megadrive T2 the Arcade. The sky in this game is black, so the gun cannot read the beam. On the other hand, SNES version which is prepared for beam read based gun plays well since the sky changes to a blue color.
  • Fake Lightgun. There are many examples of this in arcade. For example Operation Wolf arcade cabinet uses a joystick disguised as gun. Again, the playability here relies on games not having many and/or big black areas on the screen.

Final Words

While we are still working on more and new features, fixing bugs, etc., the system is currently in a very advanced Alpha status and working very nicely. Please be patient, all this work is made in my spare time (rTomas). The system will be for sure released at some point in 2022. For quick updates, photos, videos, etc. you can follow me on Twitter @rtomasal

To be continued...