Skip to content

Releases: blocksds/sdk

Version 1.7.3

15 Jan 18:30
Compare
Choose a tag to compare
  • libnds:

    • Use custom version of swiSoftReset() instead of instruction swi #0 to prevent crashes on DSi mode, where swi #0 isn't implemented.
    • swi*() functions that don't actually use swi instructions (because of bugs in the implementation in the BIOS) have been documented.
    • nitroFSInit() now sets errno correctly if there is no NitroFS filesystem in the ROM.
    • The DSi mode checks of soundExtSetFrequencyTWL() have been moved out of twl sections so that this function can be safely called even in DS mode (even if it doesn't have any effect).
    • Calling irqSet(flags, NULL) or irqSetAUX(flags, NULL) is now safe. Previously, this would cause NULL to be used as interrupt handler instead of disabling the interrupt handler as expected.
    • The type IntFn has been deprecated in favour of VoidFn. Even the interrupts.h header didn't use IntFn, it was only used internally in interrupts.c.
  • SDK:

    • Docker:

      • The Docker images are now built in a GitHub Actions pipeline in the SDK repository instead of locally in the computers of the developers.
    • Examples:

      • In the LibXM7 example that uses NitroFS, set pointer to NULL when it stops being used so that the program keeps track of whether songs are playing or not. This fixes a crash when trying to start a song after stopping a song.
    • Documentation:

      • Document the release process for new BlocksDS versions.
      • Document the existence minimal ARM7 core.
      • Remove references to scripts related to the release process used before using GitHub Actions.
      • Add link to ndslib-archive repository so that it can be used as reference to understand old NDS homebrew source code.
      • Clarify how to build examples in the setup instructions.
    • Other:

      • Use the right system header in dldipatch to fix a compiler warning.
      • PAlib is now available as a pacman package: blocksds-palib

Version 1.7.2

07 Jan 19:42
Compare
Choose a tag to compare
  • libnds:

    • Fix compilation error due to incorrect names of slot-2 rumble functions.
    • Add debug assertions to check that cothread_yield_irq() is never called with interrupts disabled (when IME is 0).
    • Small optimization in cothread_yield_irq() wait loop on the ARM9.
    • Add helper constants for swiUnpackBits().
    • Implement getBatteryLevel() on the ARM7 to mirror the ARM9 implementation.
    • Add function to check if FatFs cache has been initialized or not.
    • Fix code to read official cartridges from the ARM7. The previous code wasn't able to read data when the destination was in the stack (DTCM isn't visible by the ARM7).
    • Add error checks on the ARM7 to crash if DLDI is used before being setup.
    • Fix undefined C behaviour with some left shifts.
    • Add missing system include to ARM7 console header.
  • SDK:

    • ARM7:

      • Restructure default ARM7 code to allow for multiple built-in ARM7 cores. Add ARM7ELF to the default makefiles to easily select the ARM7 core. Thanks, @GalaxyShard.
    • Documentation:

      • Document the new pre-built ARM7 cores.
    • Examples:

      • Use the new pre-built ARM7 core in LibXM7 examples instead of custom ARM7 cores.
      • Update the BIOS bit unpack example to use the new constants introduced to libnds.
    • Other:

      • In the makefiles of DSWiFi, LibXM7 and Maxmod use ar from the ARM toolchain rather than the host to build the library.
      • Improve scripts to release new SDK versions.

Version 1.7.1

25 Dec 00:36
Compare
Choose a tag to compare
  • libnds:

    • Fixed a bug where some assembly functions would be removed by the linker. This happened when a function is supposed to fall through the following one, but it is in a different section. If this other section isn't referenced anywhere, the linker would remove it.
    • A new system to send formatted text messages from the ARM7 to the ARM9 has been implemented. This works by using a ring buffer in main RAM that is allocated from the ARM9, so the user can adjust its size easily. This is still being tested and it may change.
  • SDK:

    • Docker:

      • Install BlocksDS from pacman packages instead of building it from source. This will make it easier to install other third-party packages. It won't be needed to build them from source and install them, you will be able to simply install the package. The slim image only has the blocksds-toolchain package, the dev image has all the blocksds-* packages.
    • Documentation:

      • Update setup instructions.
    • Examples:

      • New example of how to use the ARM7 console to print text on the screen.

Version 1.7.0

23 Dec 12:12
Compare
Choose a tag to compare

IMPORTANT NOTICE

If you're updating your previous BlocksDS installation with wf-pacman, run this command twice instead of once:

wf-pacman -Syu

This is required because of the new repository that contains the BlocksDS pacman packages.

Changelog

  • libnds:

    • An exception handler has been added to the ARM7. This one is a lot less useful than the ARM9 one because it's only called on undefined instructions and internal libnds errors.
    • Add dldiRelocate(), which allows relocating a DLDI driver to a different memory address.
    • Fix DLDI memory pointers not being relocated for non-BSS/noinit areas.
    • Update FatFs to R0.15a.
    • glColorSubTableEXT() now supports allocating empty palettes by passing a NULL pointer in the table argument. This is a small compatibility break because this used to free the palette. However, the old behaviour stays as long as width is 0. In most cases, table would be NULL and width would be 0, so this change is only a problem in unusual cases.
    • Disable MPU safely before calling the exit-to-loader ARM9 hook in case the hook doesn't do it properly.
  • maxmod:

    • Remove non-standard .struct directives.
  • SDK:

    • picolibc:

      • Add asnprintf() and vasnprintf(), matching newlib.
      • Fix memory leak in asprintf() and vasprintf().
    • Docker:

      • curl has been added to both the development and slim images.
      • Add new BlocksDS pacman repository during setup.
    • pacman:

      • The pacman server of BlocksDS is now independent from Wonderful Toolchain.

        • The repository with the package build files is now in the BlocksDS GitHub organization in this URL: https://github.com/blocksds/packages

        • BlocksDS still uses Wonderful Toolchain as source for the compiler and the standard C and C++ libraries. It will keep using wf-pacman for the forseeable future as well.

        • Special thanks to asie for all his help.

        • Updating old installations requires the user to run the following commands:

          wf-pacman -Sy wf-pacman
          wf-pacman -Syu
          wf-pacman -Syu
      • New libraries are now available as pacman packages (µLibrary, libwoopsi, dsmi) as well as the tool ptexconv.

      • The GitHub pipeline of the SDK repository has been removed and added to the packages repository.

    • Documentation:

      • Update documentation with the instructions to use the new pacman repository.
      • Some outdated licensing information has been updated.
      • The docs generation script has been split into a script that generates it and a script that pushes the built documentation to the repository.
      • The updating guide has been updated for versions between 1.3.0 and 1.7.0.
    • Examples:

      • New example of gesture recognition using the $N Multistroke Recognizer.
      • New example of how to use CMake to build a project with BlocksDS.
      • Update the exception handler example to also support triggering ARM7 exceptions.
    • Other:

      • BlocksDS now has a dedicated URL (https://blocksds.skylyrac.net/) which means that it doesn't rely on GitHub URLs anymore. This main page redirects to the documentation, GitHub organization, and a NDS homebrew development manual.
      • A new prototype CMake build system has been added to the repository.
      • CC makefile variables have been renamed to HOSTCC when they refer to building host tools. This will make it possible to overwrite the host toolchain without also overwriting the ARM toolchain.
      • Use standard C types and fix includes in mkfatimg.
      • bin2c now has an option (--noext) that lets it export files excluding the extension from the name, the way some very old homebrew projects expect it.
      • Some sample defines have been added to the makefiles of the templates to clarify its syntax.

Version 1.6.3

11 Nov 18:13
Compare
Choose a tag to compare
  • libnds:

    • Add compile-time warnings about unused result values to various library methods.
    • Ensure nitroFSInit() checks for successful FAT initialization.
    • Protect the alternate vector base region (0x0000000 onwards) from writing and, if said base is not explicitly enabled, reading. This allows catching null pointer accesses at runtime as data aborts.
  • SDK:

    • crt0:

      • Fix thread-local storage not being initialized properly during global constructor initialization.
      • Fix thread-local storage not being initialized at all on ARM7.
    • picolibc:

      • Add memset_explicit().
      • Improve wctype compatibility.
      • Update ctype case conversion table to Unicode 15.1.0 .
    • Other:

      • Add regression test for setVectorBase().
      • Modify templates to use toolchain gcc-ar over host ar for packaging libraries; this ensures correct operation on systems without binutils installed, as well as when building libraries with link-time optimized objects.
      • Update ARM assembly code to always use UAL syntax.
      • Update official Docker image to Ubuntu 24.04.

Version 1.6.2

04 Nov 01:06
Compare
Choose a tag to compare
  • libnds:

    • Filesystem:

      • Fixed a bug involving incorrect reads of recently written sectors.
  • SDK:

    • Changes to examples:

      • Clean the 8-bit double-buffered bitmap example.
    • Other:

      • Improve FAQ and updating guide.

Version 1.6.1

03 Nov 18:56
Compare
Choose a tag to compare
  • libnds:

    • Filesystem:

      • This version was supposed to include a fix for a bug involving incorrect reads of recently written sectors, but the submodule wasn't updated correctly so the fix was left out.

Version 1.6.0

03 Nov 13:34
Compare
Choose a tag to compare
  • libnds:

    • Peripherals:

      • Add support for the "retail" (ATTiny-based) Motion Pack accelerometer to the DS Motion Card/Pak driver.
      • Clean up the DS Motion Card/Pak driver.
      • Fix the DS Motion Card driver not working on DSi consoles.
      • Fix the solar sensor not being detected on Boktai 1 cartridges.
      • Fix peripheralSlot2SolarScanFast() not working correctly.
    • GL2D:

      • Fix off-by-one errors when drawing textures with GL2D when the textures aren't flipped.
      • Reorganize GL2D setup code to reduce code duplication.
    • Other:

      • Fix return types and improve performance of integer square root helpers.
      • In initSystem(), fix video register clearing ranges and remove redundant VRAM configuration.
      • The GRF "HDR" RIFF chunk has been deprecated and it has been replaced by a new chunk called "HDRX", which is exactly the same, but it includes a version field so that it is future-proof.
      • Fix some issues that prevented LLVM from building the library. Add missing arguments to UDF instructions in the codebase. Add some explicit casts. Use inttypes.h definitions in printf() instead of explicit size modifiers.
      • Fix undefined behaviour warnings due to left shifts of signed integers.
  • grit:

    • Update GRF export code to match the new format used by libnds.
  • ndstool:

    • Use git describe output as version string instead of a hardcoded outdated version number.
  • SDK:

    • crt0 and linker script files:

      • It is now possible to place DTCM variables and data at the end of DTCM instead of the beginning. This means the stack can grow downwards without affecting the variables at the beginning of DTCM. This is done by setting the value of the new symbol __dtcm_data_size to a non-zero value. The linker will helpfully point out if the data area is too small for a given program.
      • The user-configurable symbol __shared_wram_size has been added.
      • Assertions have been added to check that the user-defined sizes produce a valid executable.
      • Support for .noinit sections has been added.
      • Missing copyright notices have been added to linker scripts.
      • Minor cleanups and adjustments have been done to the crt0 code.
    • picolibc:

      • Add implementation of <uchar.h>.
      • Improve powf() accuracy.
    • Documentation:

      • Provide information about the build process of .nds files.
      • Add a FAQ to the documentation.
      • Add IRC channels to the support channels page.
      • Add notes about what to do after installing BlocksDS.
      • Credit all known contributors to all repositories of BlocksDS.
    • Examples:

      • Add NDS Motion card example.
      • Add example of scaling and rotating GL2D sprites.
      • Add inttypes.h include in some examples that require it after picolibc changes.

Version 1.5.0

10 Sep 17:32
Compare
Choose a tag to compare
  • libnds:

    • Exception handling:

      • Add trivial crash handler to inform the user of unrecoverable error conditions, such as stack corruptions with stack smash protection enabled.
      • Add trivial release exception handler to inform the user of data aborts and other exception conditions even in release builds. This is enabled by default; this implementation omits stack and register dumps, making the .nds size increase negligible.
      • Tweak default exception handler to use a darker red for the background.
    • Filesystem:

      • Fix using Slot-2 direct access on .nds files over 32 MB. In particular, this fixes accessing large NitroFS filesystems under NO$GBA.
    • GRF loader:

      • Improve performance by using fast memcpy() over swiCopy().
      • Rework loader to only read requested chunks from the filesystem, as opposed to reading all chunks and filtering them at a later stage.
    • Sound:

      • Add functions to play PSG, noise and sound samples on specific channels.
      • Add soundCaptureStart and soundCaptureStop high-level helpers for the sound capture functionality.
    • Other:

      • Add additional error checks to NitroFS and GRF functions.
      • Add unused result warnings to functions which can cause memory leaks if their result is not deallocated.
      • Document high-level DSi camera functions.
      • Fix console 'K' ANSI escape code not clearing characters on the line.
      • Fix includes for the latest picolibc commits.
  • SDK:

    • New examples:

      • Add ANSI escape code tests.
      • Add sound capture example.
    • Changes to examples:

      • Add .MOD files to LibXM7 examples.
      • Add missing fclose() error checks.
      • Adjust examples using GRF files to showcase the loader's built-in asset decompression functionality.
      • Clean up camera and LibXM7 examples.
    • picolibc:

      • Add support for C11 Annex K functions (_s-suffixed functions).
      • Deprecate BSD-specific <sys/tree.h>.
      • Fix handling NaN in scanf() and strtod().
      • Fix return values for glob().
      • Fix the FD_ZERO() macro.
      • Initial support for POSIX.1-2024 in header files.
      • Other minor header file cleanups.
      • Replace <_ansi.h> with <sys/cdefs.h>.
    • Other:

      • Fix support for placing the Maxmod soundbank file in the NitroFS file system.
      • Make the SD card root directory configurable in default Makefile templates.
      • Remove Teak LLVM from the -slim Docker image. Most people don't need this toolchain, as it is in a highly experimental and unmaintained state; in addition, removing it from the image does not prevent people from installing it on top, but significantly reduces the download size for everyone else.
      • Remove usage of __DATE__ in teaktool.

Version 1.4.0

08 Aug 17:55
Compare
Choose a tag to compare
  • libnds:

    • Console:

      • Fix 'D' ANSI escape code, which was broken in version 1.3.1.
      • Document console struct fields. Some of them are only meant to be used by libnds, which has been documented.
      • The size of some fields in the console struct has been reduced, and the fields have been reordered to reduce padding in the struct. Some fields were unused, and they have been removed.
      • Now it's possible to specify the 16-color palette to be used when loading custom fonts with their own palette.
      • fontCharOffset now works, which means that it is possible to specify that a font should be loaded after another font, so that two fonts can use the same tile block and save VRAM.
      • In order to be able to specify the palette and the fontCharOffset, a new function has been created: consoleInitEx().
      • Mark the defaultConsole struct as const. It is needed to keep that data untouched because the user may initialize the default console several times in a program, and it's important to be able to return to the right initial state.
      • Some variables have been made private.
      • When a character outside of the character set of the font is printed, a space is now printed instead. Previously, it printed tiles outside of the font, which could result in garbage being printed on the screen.
      • New functions have been added to control the console without using awkward ANSI escape sequences: consoleSetCursor(), consoleGetCursor(), consoleAddToCursor() and consoleSetColor().
    • Keyboard:

      • Make custom keyboards work. This seems to have never worked because libnds overwrote the custom keyboard struct with the default keyboard struct.
      • Keyboard struct fields have been refactored. Some field sizes are now smaller, some fields are now const. The order has been changed to reduce padding between fields and save even more RAM.
      • Ensure that the keyboard is always initialized to the right state with keyboardShow(). This lets you make a keyboard start in uppercase or lowercase state depending on your preferences.
      • Prevent keyboard functions from hanging if no keyboard is actually visible.
    • Other:

      • Fix crash when calling peripheralSlot2InitDefault() in a DSi retail unit. This didn't happen in DS, or in debugger DSi units.
      • Add helper to tell the GPU to apply fog to the clear buffer.
      • Flush RAM before copying console graphics to VRAM.
      • Implement assert() in the ARM9 and ARM7. In the ARM9 it works like sassert(), in the ARM7 it prints a no$gba debug message.
      • Clarify some comments about decompression routines of the BIOS.
      • Stop using ANSI escape sequences everywhere. Use direct console API functions instead, which are more self-explanatory.
      • The functions sysGetCartOwner() and sysGetCardOwner() have been added to be able to check the CPU owner of the Slot-1 and Slot-2 buses.
      • Add documentation to some functions without it, and fix some Doxygen comments.
  • DSWiFi:

    • Stop generating dswifi_version.h as part of the build process.
    • Some warnings have been fixed.
  • LibXM7:

    • Fix a crash when unloading MOD files.
  • ndstool:

    • Fix NitroFS filesystem corruption when no banner is generated.
  • grit:

    • Fix libplum build error with LLVM.
  • mmutil:

    • Fix some incorrect types.
  • SDK:

    • New examples:

      • Using fog in a 3D scene.
      • Sorting 3D translucent objects based on their distance to the camera and drawing them in the correct order.
      • How to use Maxmod song events.
      • How to stream a WAV file from the filesystem using Maxmod.
      • How to use the sound API of libnds to play PSG, noise and PCM audio.
      • How to use custom keyboards with libnds.
    • Changes to examples:

      • The basic Maxmod example now also shows how to play sound effects.
      • The example that loads custom fonts with the libnds console has been improved to load 2 fonts with custom 16-color graphics on one screen and one font with 256-color graphics on the other one.
      • Examples and test now don't use ANSI escape sequences. This makes the code a lot harder to understand.
    • Other:

      • Add page to the documentation about how to debug programs with libnds.
      • dlditool: Use stdbool.h instead of a custom boolean type.
      • Doxygen comments have been reorganized in all repositories so that they are uniform across all the codebase.
      • All Doxyfiles have been updated.