Tuxality: Infuse (Zeebo / BREW multiplatform emulator) development #4 – Crash Nitro Kart 3D on Windows port


Infuse is a Qualcomm BREW subsystem reimplementation and Zeebo high-level emulator written from scratch, based purely on clean reverse engineering attempts. Currently it is using dynarmic ARM JIT core and runs three Zeebo commercial games in fully playable state which is Double Dragon, Crash Nitro Kart 3D and Zeebo Family Pack as well as some of the BREW samples. Video contains footage of Crash Nitro Kart 3D running on Infuse A1 development preview Windows (x86_64) port.

Audio backend has been vastly improved in order to provide better compatibility which led to Crash Nitro Kart 3D fully running with music and sound effects as well as having better audio quality in general. Infuse audio backend supports basic MIDI, PCM/ADPCM and MP3 playback and multiple streams mixing with resampling functionality independent of host sampling rate and channel count. Currently waveOut API for Windows, Core Audio for macOS, Media Kit for Haiku OS as well as PulseAudio for GNU/Linux sound backends are available.

Gamepad handling has also been improved, now it detects if gamepad is connected and disconnected during runtime. Additionally, alternative keyboard mode was provided that allows to play games to some extent without having gamepad connected. However, input handling is quite limited on Haiku OS port due to the current state of this operating system, other ports are not affected by such as Haiku port uses separate Device Kit input backend implementation.

Many fixes were provided, mostly related to the stability as well as performance areas. Issues with memory leaks and fragmentation which slowed down games after some time were fixed. Such issue allowed me to implement some improvements and new functionality in debugging area, so now I do have some basic profiler in my memory management code. Resamplers are now of higher quality and have separate states as well as resampler initialization is much faster compared to old code fixing lag related to playing new audio samples on low-end native devices. Audio output quality is now acceptable without crunchy or distorted sound nor major clipping issues while still lacking some polish that will be improved in later stage.

User interface is now available with MIF support so games are now automatically detected with information and icons loaded from the assets. Infuse currently uses Zeebo game icons that end-user was not even supposed to see. In the future I do plan to implement partial Z-Wheel support or at least use Z-Wheel animations in the Infuse main menu when provided by the user. If no modules are found message “BREW applets not found” will be shown indicating that user needs to check README for further information how to setup Infuse. There is also an official logo which is used as an icon for the application depending on the port. 🙂

Infuse now also contains both LICENSE and README files with licensing information as well as documentation with detailed information regarding installation, usage, controller and keyboard mapping as well as limitations of each port of the current Infuse development preview release. I strongly recommend to read both of these files before using Infuse, especially for the first time.

Configuration menu allows to set Infuse emulator behavior such as but not limited to changing aspect ratio, switching between fullscreen and windowed mode, selecting soundfont for MIDI rendering, defining behavior of controllers or changing menu theme. User can provide its own *.sf2 soundfonts which are automatically detected by emulator and can be used for MIDI playback.

Scenario in which user tries to execute not supported BREW module using unimplemented API is also now properly handled. If such event occurs, black screen with message “Unimplemented BREW API executed” is shown.

Work on native version of Infuse running on real ARM CPU without emulation was also done, after some minor adaptations it now successfully boots games as expected. However, many issues with performance and audio quality remain due to such native port will be released in later stage depending on the progress while still being treated as experimental version.

Last but not least, Infuse now stores configuration and mod/mif content inside user directory. Each port has different path as described in README Markdown file which allows to separate Infuse as an application with BREW as an emulated environment and ease process of upgrading Infuse release in the future. This also means that initial setup differs slightly on the selected port due to the different path being used, however for most if not all ports it is stored inside user configuration or home directory.

Finally, background music has been selected with approval of the music author, I hope you will like it as much as I do.

Background music:
‘Chasing Daylight’ by Scott Buckley – released under CC-BY 4.0. www.scottbuckley.com.au

Leave a comment below!

This site uses Akismet to reduce spam. Learn how your comment data is processed.