Releases: blocksds/sdk
Version 0.10.0
-
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 replaceddlditool
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.
- The default makefiles no longer rely on the toolchain being in the current
-
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()
andfstat()
, the fieldsst_dev
andst_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 bylibnds
. - 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 oflibnds
. - 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
- Revert changes in maxmod that duplicated some symbols.
Version 0.9.0
-
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.
- Make
-
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
-
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
-
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
andstderr
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
andpcx
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
-
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.
- Improved some old examples. Fix memory leaks in all examples that used
BlocksDS 0.6
-
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'sbin2s
. - 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()
andfstatvfs()
. -
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
-
SDK:
- Defined a default location for BlocksDS:
/opt/blocksds/
- Integrated
libxm7
as a core library. - Use
mkfatimg
(distributed with FatFs) instead ofimgbuild.sh
to reduce the number of dependencies. - Fixed
mmutil
target in Makefiles in parallel builds.
- Defined a default location for BlocksDS:
-
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
-
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
andpicolibc
. - Removed
picolibc
andavr-libstdcpp
as submodules (all previous history has been condensed to one commit).
- As a result, BlocksDS now targets a specific version of
- Simplified the build system of tests and examples.
- Use the Wonderful toolchain's to get full C++ standard library support.
-
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.
-