another sonic homebrew for saturn ?

Hi TrekkiesUnite118,

Neither :)

It's software rendered mode7 (software because there is no hardware instruction to do that on the Sega Saturn unlike the Super Nintendo).

You can move in any direction. but I disable rotation recently because it's useless.

Indeed, it's better and faster to use 3D rendering in this case.

I added PCM audio file support.
You can now play PCM file from CD.

To convert any audio file to PCM under Linux or Windows =>

Just some restriction due to the Sega Saturn hardware:
  • Compatible Samplerate : 8000 to 44100 Hz (-ar option)
  • Compatible PCM format : s8 (-f option)
  • Compatible mode: 8/16 bit mono/stereo
Some command line:
  • ffmpeg -i A.WAV -f s8 -ar 44100 A.PCM
  • ffmpeg -i A.MP3 -f s8 -ac 1 -ar 8000 A.PCM
Now in Jo Engine:

jo_sound my_snd;
jo_audio_load_pcm("A.PCM", JoSoundMono16Bit, &my_snd);
jo_audio_play_sound(&my_snd, 0);

Bye :)
Last edited:
great job ! just a question, how do you handle multi channels and random number of pcms to play ?
The channel number is the second param of jo_audio_play_sound();
yes i saw that but each time i used multiple PCMs i had some problems with playback and some sfx were lost.
for instance on xrick i had to loop on channels to find which one is available, with hardcoded channel number it never worked or maybe just on emulators.
         slSndFlush() ;
         PCM_SetLoop(pcm, cnt_loop);

         //slSndFlush() ;
just for that, i have pushed xrick on github :
New version updated with VBT audio fix.

I also added the possibility to change printf color and use multiple color at the same time :)

New update available with a new demo with advanced animation :)


jo engine is now on twitter !


  • FIX : jo_sprite_add_bin() and jo_sprite_add_bin_tileset() doesn't work properly
  • NEW : Image loading from CD improved (faster)
  • NEW: Memory fragmentation reduced when using tileset
  • NEW: Get tile count on a jo_tile table using JO_TILE_COUNT()
    • Demo Tileset updated
  • NEW: jo_printf_with_color() print a text using specific color palette index
  • NEW: Per-pixel collision : jo_map_per_pixel_vertical_collision()
  • NEW: Map Demo improved with per-pixel and hitbox collision
  • NEW: New functions in order to swap little and big endian
    • jo_swap_endian_ushort()
    • jo_swap_endian_uint()
  • NEW: Jo Map Editor 3.2
  • FIX : Strange behaviour when using sprite rotation and horizontal flip twice o_O
  • FIX: jo_is_sprite_anim_stopped() doesn't work properly
  • NEW: Math functions & constants
    • JO_MIN()
    • JO_MAX()
    • jo_is_float_equals_zero()
  • NEW: Sidescroller physics (gravity, friction, etc)
    • jo/physics.h
  • NEW: Sonic Demo (Physics & Collision)
    • It's not the Sonic that I'm working on, but you can now write your own :)
  • NEW: Jo Engine is now C99 compliant (stdbool, etc.)
    • I change many function prototypes to use bool type instead of unsigned char
  • NEW: New prototype for jo_map_per_pixel_vertical_collision()
  • NEW: Jo Map Editor 4.0
Hi Jo, first off excellent work on Jo Engine. Do you have any plans for removing the Sega libraries and other dependencies that would prevent projects using this from releasing something commercially? Thank you.
Hi Amon,

Yes, the last step of the project is removing the SGL.
It's not the hardest point. In fact, I already use my own functions for Gouraud Shading for example.

Btw, I added 3D support to the engine yesterday (Only basic, I working on mesh loading for the next release).