gbadev
Game Boy Advance homebrew development forum
default profile picture

SkyLyrac

Moderator
Last seen 5 months ago
Joined:
Posts:
13
Topics:
2

Hi! I've waited for a few months, but I think it's about time I make an actual introduction post for BlocksDS.

This is the official location: https://github.com/blocksds/sdk

BlocksDS is a Nintendo DS SDK built on top of GCC, and using libraries like libnds, maxmod, dswifi, and Elm's FatFs. The idea is to have an SDK that is mostly backwards-compatible with projects developed with devkitARM, while cleaning up the code and adding new features.

You can see a more in-depth explanation in this blog post, but I'll summarize below the points of the article that may be of interest to most people.

Some of the current advantages over devkitARM are:

  • Smaller binary size and smaller RAM usage.
  • The licences of all the code have been clarified and documented.
  • A lot of system code of libnds has been documented to help future work on it.
  • There is basic multithreading support.
  • The DSi camera is supported.
  • NDS ROMs can be generated with animated icons.

I'd like to thank a few contributors, including lifehackerhansol and Pk11, but specially asie, which has been super helpful.

The main disadvantages over devkitARM:

  • BlocksDS is Linux-only. There are Docker images that you can use on other OSes, and you can install it in WSL if you're using Windows, but there is no native support, which may be a problem for some potential users.
  • The compatibility with devkitARM isn't perfect. You will need to heavily modify any project that uses features provided by the fork of newlib in devkitARM, like devoptab (but this is a very niche situation).

Also, I've done a lot of work to bring NFlib and Nitro Engine up to date, clean their code and their documentation, check them out too!

Thank you for your interest!

Hi! Even though this isn't new, I'm going to leave a post here to get some exposure.

https://github.com/AntonioND/gbt-player

GBT Player is my music player for GBA (old versions supported GB/GBC). It uses the PSG channels (1 to 4, the ones that come from the GB). This means that the music you can make with them is fairly limited, but it doesn't need to use any CPU for mixing audio. Other players, like Maxmod or Apex Audio System, target the DMA channels, which means the music can be as complex as desired, but by using a lot of CPU to mix audio.

With GBT Player, you use a mod tracker like OpenMPT, create a S3M file with your song, and convert it with a python script. It generates files with the converted song. Then, you pass this data to the music player library (which is very small), and that's it!

PSG music players like GBT Player can be very useful for games that need a lot of CPU for other tasks (like for 3D software rendering), or for multiboot games.

Also, there is always the option of using both systems at once! This is an example that combines Maxmod and GBT Player. The music composer has to create a S3M file in which the first 4 channels are special (they correspond to the PSG channels of the GBA), and the rest are free to use as needed. GBT Player includes an utility that will split this S3M file into two, so that you can use the PSG part with GBT Player, and the rest of the S3M file with any player you like!

https://github.com/AntonioND/gbt-player/tree/efd8e754c9ae0ca444d48fced58ca99f0510faaf/gba/examples/combined_maxmod

And it isn't needed to use devkitARM to use this library, it's self-contained, all you need is a C compiler to use it!

Feel free to leave suggestions and bug reports in the repository, and I'm happy to help here if there are doubts about how to use it!