Skip to content

Releases: blocksds/sdk

Version 0.11.3

04 Dec 20:27
Compare
Choose a tag to compare
  • libnds:

    • Added helpers to control microphone power independently from recording. This can be used for scenarios in which the DSP is tasked from recording microphone input.
    • Added helpers and definitions for the DSi GPIO registers.
    • Added function to detect availability of NWRAM.
    • Fixed atexit() handlers not being called during a normal main() return.
    • Fixed TSC configuration for enabling 47 kHz input/output in DSi mode.
    • Improved error handling in Teak DSP code execution helpers.
    • The Teak DSP is now powered off before loading a DSP binary.
  • dswifi:

    • Reduced memory usage, especially while Wi-Fi is not initialized.
  • ndstool:

    • Breaking: Instead of providing alternate-language banner text using -bt5 "Text", the form -bt 5 "Text" is now required.
    • Added support for providing mutliple root directories for building NitroFS images. All specified root directories are combined to create the root of the file system.
    • Fixed -w treating other options as file masks.
    • Improved argument handling.
  • SDK:

    • Updated compiler flags:

      • The superfluous -mtune=arm7tdmi has been removed from ARM7 Makefiles.
      • -march=armv5te -mtune=arm946e-s has been replaced with -mcpu=arm946e-s+nofp in ARM9 Makefiles.
      • -Wl,--use-blx has been added to ARM9 linker flags. This allows the use of the BLX opcode for linking ARM/Thumb code in place of trampolines, slightly improving final executable size and performance.

Version 0.11.2

27 Nov 17:29
Compare
Choose a tag to compare
  • libnds:

    • Fixed a bug introduced in version 0.11.1 that didn't initialize audio hardware correctly in DSi mode.
    • Some superfluous audio helpers added in version 0.11.1 have been removed.
    • Move libteak to its own repository so that it can be reused by other toolchains.
    • Modify functions to load DSP binaries to return int instead of bool for more flexibility.
  • DSP:

    • Move crt0 and linkerscript to libteak repository.
    • Preprocess all assembly files, not just the crt0.

Version 0.11.1

25 Nov 12:35
Compare
Choose a tag to compare
  • libnds:

    • Fixed an edge case which could read to invalid small reads/writes to DSi/ARM7-controlled removable storage.
    • Added helpers to control REG_SNDEXTCNT from the ARM9 (to enable DSP audio output to the speakers, for example).
    • Some DSP functions have been moved to twl sections to save memory when the game runs in a regular DS.
    • Wrapped camera functions to prevent crashes when used in NDS mode.
    • Change license of DLDI-related files to Zlib with permission from the authors.
    • Fix Doxygen documentation of peripherals.
  • DSP:

    • Added BTDMP helpers to stream audio from the DSP to the speakers. Added an
      example to show how to generate audio from the ARM7 and the DSP at the same time.
    • Added an example of how to use DMA to transfer data from the DSP memory to the ARM9 memory.

Version 0.11.0

19 Nov 14:46
Compare
Choose a tag to compare
  • libc:

    • Fixed an important regression in memcpy() and memset() implementations.
  • Improved file I/O performance:

    • Added support for batch reads and writes of contiguous clusters, improving SD card performance for very large sequential reads/writes.
    • Added fatInitLookupCacheFile(). This allows opting a file into having a special in-memory cache which significantly speeds up file seek operations.
    • Provisionally automatically enabled the in-memory cache for NitroFS files. If you're experiencing slowdowns, make sure to defragment your SD card - this requirement will be loosened in future releases (but it's still a good idea).
    • Integrated profi200's dsi_sdmmc driver, improving reliability and performance for reading from and writing to the DSi's SD card.
    • Optimized unaligned buffer I/O performance for the DSi's SD card.
    • Only cluster table/directory-related reads will now be cached by the built-in sector cache. This allows better use of this sector cache; one can use setvbuf() to enable a larger cache for file I/O.
    • Other minor optimizations have been made throughout the code.
  • Added a new Slot-2 API (arm9/peripherals/slot2.h).

    • Added support for detecting external RAM cartridges (SuperCard, M3, G6, DS Memory Expansion Pak, EZ-Flash variants, EverDrive).
    • Added support for enabling and disabling the data cache on the Slot-2 memory area. Combined with suitable bus speed detection for these cartridges, this allows efficient usage of such an external RAM area.
    • Added support for detecting and using the Gyro, Solar and Tilt sensors available on various GBA game cartridges.
    • Fixed detection of GBA cartridge rumble (WarioWare, Drill Dozer).
    • Modify rumble example to show how to use the new API.
  • DLDI:

    • Moved the built-in sector cache into unused memory occupied by the reserved DLDI driver area. This effectly saves ~20KB of heap RAM for most homebrew.
    • The DLDI driver area size can now be changed by defining the __dldi_size symbol to a value away from the default of 16384, such as 8192 (if your application is highly RAM-constrained - this may break support with some cartridges, however) or 32768 (restores compatibility with MoonShell versions at the cost of an additional 16KB of RAM).
    • The DLDI driver area is now guaranteed to be close to the beginning of the .nds file, which may slightly improve load times.
  • DSP:

    • Add BTDMP and ICU helpers.
    • Refactor crt0.s.
    • Add examples of handling interrupts, including timer interrupts.
  • libnds:

    • Rename some cache helpers for consistency.
    • Fixed a file handle leak that could occur if nitroFSInit() was pointed to an .nds file which does not contain a NitroFS file system.
    • Fixed a rare case in which nitroFSInit() could try reading from the GBA slot on the DSi, causing an exception.
    • Added readFirmwareJEDEC() function to read the ID of the DS firmware flash chip. (lifehackerhansol)
    • Minor optimizations have been done to readUserSettings().
    • Fixed the NDMA_DST_FIX macro definition.

Version 0.10.2

11 Nov 19:24
Compare
Choose a tag to compare
  • NitroFS: Fix file traversal not working without running a chdir() first.

Version 0.10.1

11 Nov 17:37
Compare
Choose a tag to compare
  • Fix NitroFS directory reads occasionally failing on non-DLDI environments.

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.