Skip to content

Releases: blocksds/sdk

Version 0.10.0

11 Nov 13:31
Compare
Choose a tag to compare
  • Build system:

    • The default makefiles no longer rely on the toolchain being in the current PATH. Now, the default Makefiles have the default path to Wonderful Toolchain, which can be overriden by the user if desired.
    • The makefiles used by the tests and examples have been moved to a system location so that they are more easily reused.
    • dldipatch has replaced dlditool as the default to apply DLDI patches, due to bugs in dlditool's patch application process: https://problemkaputt.de/gbatek-ds-cart-dldi-driver-guessed-address-adjustments.htm
    • Update your makefiles to take advantage of the updates.
  • Filesystem improvements:

    • Replaced NitroFAT by a new Zlib-licensed implementation of the NitroFS filesystem by @asiekierka. This fixes the performance drawbacks of NitroFAT.
    • In stat() and fstat(), the fields st_dev and st_ino are now properly populated.
    • Fixed stat() not acknowledging / as a directory.
    • Remove NitroFAT support from ndstool.
    • The example makefiles have been modified to stop using mkfatimg.
  • DSP:

    • Initial experimental, incomplete support for the Teak DSP of the DSi. This isn't ready to be used, it's still under development and it's going through a lot of changes. Most of the code is derived from @Gericom's prototype code.
    • Support for building DSP binaries won't be present on Windows until it's more stable. However, if you already have pre-built DSP binaries, it's possible to use them on Windows.
    • Introduced teaktool, which converts ELF files into TLF (Teak Loadable Format) files that can be loaded by libnds.
    • Added ARM9 functions to libnds to handle the DSP, load TLF files and communicate with programs running on the DSP.
    • Introduce libteak, a library with helpers to use the AHBM, DMA, APBP, ICU and timer peripherals. It has been documented and added to the Doxygen pages of libnds.
    • Added a few examples of how to use the currently supported DSP features.
    • Update user instructions and Dockerfile to use and mention the LLVM Teak toolchain.
    • Add NWRAM defintions and helpers.
  • DLDI improvements:

    • The DLDI template now automatically calculates the "size" and "fix flags" fields of the header.
    • The binary R4 DLDI driver, used for DeSmuMe compatibility, has been replaced by a Zlib-licensed impementation built from source.
  • libnds:

    • Microphone samples can now be captured using full 16-bit precision on DSi.
    • Cleaned up and added some missing MMIO/bitfield defines throughout libnds.
    • Implemented inlined BIOS calls based on gba-hpp. This should make code using BIOS calls slightly smaller and faster.
    • Small reorganization of syscalls code.
    • Slightly optimized coroutine threading code.
    • Added documentation about ARM7 audio helpers.
  • Submodules:

    • Before this version, repositories owned by third parties were added as submodules to the SDK repository. This can be a problem if the owner isn't responsive, changes name, deletes the repository... In order to avoid issues, forks have been created under the BlocksDS organization. It is expected to contribute to the original repositories and update the fork to stay in sync. Contributing to the forks is a last resort option.
  • Tests:

    • Added a new test for SWI functions.

Version 0.9.1

18 Oct 23:46
Compare
Choose a tag to compare
  • Revert changes in maxmod that duplicated some symbols.

Version 0.9.0

18 Oct 20:44
Compare
Choose a tag to compare
  • SDK:

    • Native windows support added. Wonderful toolchains now distribute native Windows binaries, and the only required change in BlocksDS was to change a library used by Grit. Thank you, Generic and asie!

    • The stdio implementation of picolibc provided by Wonderful Toolchains has been patched by asie and this has substantially improved direct SD card read and write speeds.

    • The RTC interrupt is no longer used in any test, example or template. Users are now expected to timer interrupt instead because the RTC interrupt isn't supported on 3DS in DS/DSi mode or most emulators. Check the new code to see how to adapt old code. The RTC interrupt functions will still be supported to preserve compatibility with old projects that aren't updated.

    • Document the ARM9 <-> ARM7 boot synchronization routine.

    • In the dockerfile, set a locale to be able to pass UTF-8 characters to ndstool to appear in the title of the NDS ROM.

    • Add a test to ensure that the libnds modules that use the ARM9 <-> ARM7 transfer memory region don't break.

    • New examples:

      • Getting key input state.
      • Using NitroFAT, DLDI and DSi SD in the same program.
      • Send a buffer in main RAM to the ARM7 from the ARM9.
      • Read battery status.
      • Set the real time clock of the NDS.
  • libnds:

    • RTC:

      • Add new helpers to get and set the date. They use typedefs to move values between functions instead of byte arrays.
      • The old helpers that use byte arrays have been deprecated.
      • Using the RTC interrupt as a way to update the time every second has been deprecated.
    • Documentation:

      • Document values returned by the battery read function.
      • Document RTC helpers.
      • Add some ARM7 modules to the front page of the Doxygen documentation.
    • Memory:

      • Disable data cache and instruction fetch access to DTCM.
      • Rumble detection functions won't try to detect anything on DSi.
      • Change location of transfer region area on DSi so that it's uncached.
      • Import safe DMA helpers written by Gericom and use them from all DMA helpers.
    • Video:

      • Make glGetInt() wait for the GPU to be idle when getting the polygon and vertices count. It is common for developers to forget to wait.
      • Cleanup some helpers and add some missing VRAM definitions.
      • Document hardware bug of the DMA in GFX FIFO mode.
    • Other:

      • FatFs updated to R0.15p3.
      • Support the debug button (only available in emulators and debug consoles).
      • Switch to using ARM unified syntax (UAL).
  • Grit:

    • Switch from libfreeimage to libplum. This allows us to build Grit on Windows easier.

Version 0.8.1

01 Aug 00:45
Compare
Choose a tag to compare
  • libnds:

    • Fixed NitroFAT in emulators. It only worked when DLDI was initialized correctly, which isn't the case in emulators like no$gba.
    • Set the right CPU as owner of the Slot-1 bus in NitroFAT handling functions.
  • SDK:

    • Updated build systems to generate Maxmod soundbanks in the NitroFAT filesystem if the filesystem is used. This isn't supported by ARM9 + ARM7 makefiles for now, only by ARM9 makefiles.
    • Fixed segmentation fault in mkfatimg when not enough arguments are provided.
    • Stopped relying on make -j in Makefiles. It is passed by make to any sub-make, so it isn't required.
    • Added basic Maxmod and Maxmod + NitroFAT examples.

Version 0.8

16 Jul 21:20
Compare
Choose a tag to compare
  • libnds:

    • Filesystem:

      • fatInit() now correctly sets the current working directory.
      • NitroFAT now changes directory to nitro:/ on initialization.
      • Fixed code that selects the default filesystem (DSi SD or DLDI).
    • Added asynchronous math functions to complement the previous synchronous ones.

    • Added support for redirecting stdout and stderr to user functions.

    • Added support for more rumble packs.

    • Improved support for DSi regions in guruMeditationDump().

    • Documented MPU setup code properly.

    • Cleaned up exception handling code.

    • Added missing DLDI_SIZE_2KB define.

    • Fixed leaking file handlers in truncate().

    • Fixed memory leaks and handling in image and pcx modules.

  • ndstool:

    • Fixed warnings.
    • Removed non-homebrew-related functionality.
  • SDK:

    • Automatically link with libc and libstdc++ rather than forcing users to do it explicitly.
    • Support *.arm.c and *.arm.cpp filenames for compatibility with devkitARM-utilizing projects.
    • Fixed TLS initialization on the ARM7.
    • Improved bin2c.
    • Updated libc documentation.
    • Improved and cleanup some examples.

BlocksDS 0.7

19 Apr 21:57
Compare
Choose a tag to compare
  • libnds:

    • Keyboard:

      • Fixed initialization glitch where it could blink for a frame.
      • Fixed backspace handling.
      • Added support for non-blocking keyboard capture when using cothreads.
    • cothread:

      • Fixed stack alignment.
      • Fixed the stack size of the scheduler thread.
    • Fixed no$gba debug messages on the ARM9.

    • Added support of no$gba debug messages to the ARM7.

    • Implemented fatInit().

    • Improved sassert() so that it can exit to the loader instead of locking the application.

    • Unified all coding and documentation style of the codebase.

    • Changed license of GL2D to Zlib (with the author's permission).

    • Reduced the size of OamState structures.

  • mmutil:

    • Fixed segfault with samples with implied zero loop.
  • SDK:

    • Improved some old examples. Fix memory leaks in all examples that used getcwd().
    • Fixed ARM9 linkerscript to place ITCM sections in ITCM correctly.
    • Added new examples: Exception handling, assertions, no$gba debug console.
    • Prevent mkfatimg from generating FAT images that are so small that FatFs can't mount them.
    • Improved installation instructions.

BlocksDS 0.6

11 Apr 00:40
Compare
Choose a tag to compare
  • SDK:

    • Added a DLDI driver template.
    • Refactored install targets of the SDK components. Now, all components can be installed on their own, and they copy the licenses of the components to the installation directory.
    • Tweak bin2c behaviour to more closely match devkitPro's bin2s.
    • Use SPDX license identifiers in all libraries and components that end up in the NDS application binary.
    • Some cleanup of code formatting.
  • libnds:

    • FIFO subsystem:

      • The FIFO subsystem has been cleaned up and documented.
      • Some bugs in the FIFO subsystem have been fixed (the stress test still fails, though).
      • Prevent using cothread_yield() in the ARM7.
    • Alignment of thread local storage sections has been fixed.

    • Added support for calling stat() on the root directory of a filesystem.

    • Added support for statvfs() and fstatvfs().

    • Avoid pulling in the default keyboard data when stdin-requesting code is used. This saves over 10 KB of data in any situation where the default keyboard is not used (no keyboard or non-default keyboard alike).

    • Allow setting the duration of the lid sleep check, and to disable it completely.

    • Build release versions of the library as well as debug.

    • Document MPU setup steps and CP15 registers.

    • Enable more warnings in the Makefile and fix them.

  • ndstool:

    • Support multiple languages in the banner.
    • Support more file formats for icons (GIF, PNG).
    • Support animated icons (from GIF files).

BlocksDS 0.5

31 Mar 01:43
Compare
Choose a tag to compare
  • SDK:

    • Defined a default location for BlocksDS: /opt/blocksds/
    • Integrated libxm7 as a core library.
    • Use mkfatimg (distributed with FatFs) instead of imgbuild.sh to reduce the number of dependencies.
    • Fixed mmutil target in Makefiles in parallel builds.
  • libnds:

    • Peripherals:

      • Improved rumble peripheral handling (including detection of the DS Rumble Pak).
      • Cleaned up REG_EXMEMCNT initialization for the Guitar Grip and Paddle peripheral drivers.
    • Improved error recovery in glInit(). This allows recovering the geometry engine from certain situations where a program exited in the middle of 3D engine processing.

    • Improved error recovery in getcwd().

    • Fixed and simplified exit to loader code on the ARM7 side.

    • Improved documentation of exit to loader logic and BoxTest().

BlocksDS 0.4

30 Mar 19:04
Compare
Choose a tag to compare
  • SDK:

    • Use the Wonderful toolchain's to get full C++ standard library support.
      • As a result, BlocksDS now targets a specific version of binutils, gcc and picolibc.
      • Removed picolibc and avr-libstdcpp as submodules (all previous history has been condensed to one commit).
    • Simplified the build system of tests and examples.
  • libnds:

    • Multithreading:

      • Added cooperative multithreading scheduler.
      • Enabled scheduler in the ARM9 by default.
      • Added examples of having multiple threads, mutexes, and asynchronous file loading.
      • Added support for thread-local storage.
      • Added mutexes to FIFO handling and removable storage accesses.
    • Added initial support and example of DSi camera (thanks, asie!).

    • Added support for malloc() on the ARM7.

    • Implemented stubs for fchmod(), fchmodat(), fchown(), fchownat(). readlink(), symlink(), getentropy().

    • Updated FatFS to R0.15p2.

    • Fixed glTexImage2D() not flushing textures before copying them with DMA.