Releases: blocksds/sdk
Releases · blocksds/sdk
Version 1.1.0
-
libnds:
- Add
keyboardExit()
function to deinitialize keyboard structures. - Add
realpath()
implementation. - Adjust
keyboardInit()
to only link the default keyboard if no custom keyboard is being used. - Fix
getcwd()
result when called in the root NitroFS directory. - Fix Slot-1 card reads not being aligned to 512 bytes.
- Minor allocation/string handling bugfixes.
- Fix some memory allocation issues found by GCC 14.
- Add
-
SDK:
- Add examples (paletted textures, rotation backgrounds, 16-bit backgrounds, sprites in sub screen, FAT file attributes, GL2D usage).
- Add tests for
realpath()
. - Fix warnings found by GCC 14 in examples.
Version 1.0.0
-
libnds:
- Fix C++ builds (there was a missing cast from enum to int, and the Makefile
was using the wrong program to link binaries). - Optimize some videoGL functions (compile them as ARM instead of Thumb to
take advantage of the faster multiplication instructions). - Fix bug in
readdir()
. - Implement
__retarget_lock_*()
family of functions to allow libc functions
to work in a multithreaded environment. - Make
glCallList()
take avoid
pointer instead ofu32
. - Add checks to NWRAM functions to see if MBK1-MBK5 are writable.
- Don't remap NWRAM-A when starting the DSP (only B and C are needed).
- Fix
swiUnpackBits()
. - Fix some casts to respect "const".
- Fix some warnings.
- Improve some documentation comments.
- Deprecate typedef
fp
(the name is too short!) andPUnpackStruct
. - Add missing files to the Doxygen documentation.
- Fix C++ builds (there was a missing cast from enum to int, and the Makefile
-
SDK:
- Add examples (3D object picking, 3D toon shading, building 3D display lists,
3D volumetric shadows, compressed textures, orthogonal projections, using
console windows with the default console API). - Improve C++ test to prevent regressions like during the last few versions.
- Document memory map of the DS.
- Add note about the Makefiles of BlocksDS not supporting paths outside of the
root folder of the project (thanks, @lifehackerhansol). - Fix linking C++ projects in default makefiles.
- Add examples (3D object picking, 3D toon shading, building 3D display lists,
-
maxmod:
- Fix return type of
mmEffectCancel()
in ARM9 code.
- Fix return type of
Version 0.14.0
-
libnds:
- The GRF loading functions have been modified to be actually useful. In some cases it wasn't possible to infer the size of some data chunks of the file (it was impossible to calculate the size of a tileset, for example). The new functions break compatibility with the old ones, but this change was required.
- Added
glTexSizeToEnum()
to convert sizes in pixels toGL_TEX_SIZE_ENUM
values. Also, the funcitonglTexImage2D()
now accepts sizes in pixels as well asGL_TEX_SIZE_ENUM
values. - Added a function to return the default drive (
sd:
in the case of DSi,fat:
in the case of a DS). - FatFs has been moved to an external repository (wf-fatfs) which is included in libnds as a submodule. The documentation of FatFs has been removed from this repository.
- Added some missing 3D polygon attribute definitions.
- Fixed the return type of
swiSHA1Verify()
. - The
fatfs.h
header has been removed, it is redundant.
-
SDK:
-
Refactor documentation.
- It now uses Hugo, and it is available as a static website.
- Some old sections have been updated.
- The documentation of all libraries has been integrated with the documentation of BlocksDS so that everything is linked.
- Document how to use Slot-2 flashcards with BlocksDS applications.
- Reword devkitARM porting guide.
- A doxygen theme has been applied to the documentation of all the libraries used by BlocksDS.
-
Add lots of examples:
- 3D and 2D graphics.
- DSWifi.
- How to use multiple DSP binaries in the same application
- General NitroFS usage in an application (such as loading music for LibXM7 or graphics to be used as 2D backgrounds or sprites).
- DSi SHA1 functions.
- Hardware timers.
- Video capture (render to texture, dual screen 3D, save screenshot as PNG).
- More text console examples.
-
Small change to makefiles that modifies the destination folder of build artifacts.
-
-
LibXM7:
- It now uses timer 0 instead of timer 1, so that Maxmod and LibXM7 use the same timer and it's easier to switch libraries.
- The documentation has been improved.
-
DSWifi:
- WEP modes have been documented.
- The prototypes of some functions have been cleaned up.
- The documentation has been improved.
-
Maxmod:
- The return type of
mmEffectCancel()
has been fixed. - Some definitions have been turned into enums.
inline
functions in headers have been turned intostatic inline.
- The return type of
Version 0.13.0
-
libnds
:- Breaking change: Refactor input handling in the ARM9. In order to fix a race condition where the touch screen state could be updated between calls to
scanKeys()
andtouchRead()
it has become mandatory to callscanKeys()
beforetouchRead()
,keyboardGetChar()
,keyboardUpdate()
and the deprecatedtouchReadXY()
. Most programs are already doing this, but this may break a small number of programs that don't do it. - Implemented
isHwDebugger()
, which returns 1 if the console running the code is a hardware debugger, regardless of the DS model and CPU state. This is meant to replaceswiIsDebugger()
, which only works if the cache is disabled, and only in DS models (not DSi). The documentation ofswiIsDebugger()
has been updated to mention its limitations. - Fix Slot-2 tilt API introduced in version 0.11.0, which hadn't been tested on hardware. The old
peripheralSlot2TiltUpdate()
has been replaced byperipheralSlot2TiltStart()
andperipheralSlot2TiltRead()
. - Implemented
utime()
andutimes()
for changing file modification dates. - Implemented
scandir()
,alphasort()
andversionsort()
, - Fixed
statvfs()
andfstatvfs()
on NitroFS paths and files. - Added stubs for
getwd()
andget_current_dir_name()
. - Added stubs for
getuid()
,getgid()
, etc. - Add helpers to load GRF files generated by grit.
- Reintroduce logic to read Slot-1 cartridges with card commands from the ARM7 to save CPU cycles on the ARM9.
- The value of the RAM size field in
REG_SCFG_EXT
in the ARM9 is now set to 16 MB or 32 MB instead of being fixed to 32 MB even in retail DSi units. - Some CP15 defines have been fixed.
- Simplify logic in ARM7 input handler.
- Generate default font from a PNG at build time instead of doing it from a preconverted BIN file to make it easier to replace it in the future.
- Breaking change: Refactor input handling in the ARM9. In order to fix a race condition where the touch screen state could be updated between calls to
-
grit:
- Added the
-D
argument, specifying the destination folder for non-shared data as a counterpart to-O
. - Fixed a situation in which the first color in an image's palette would be used as transparent if the user-provided color (with
-gT
) was not present in the image. - Breaking change: Fixed GRF file output to properly follow the RIFF chunk format. It will also export new information in the file header, like using special magic values to specify the formats A3I5, A5I3 and TEX4x4, and specifying the number of colors contained in the palette (for 16-bit
textures it's 0). In order for the new information to fit in the header, some fields have been increased in size. - Fixed palette size calculation for DS textures.
- Improvements to error messages.
- Added the
-
libxm7
:- Make types
XM7_XMModuleHeader_Type
andXM7_MODModuleHeader_Type
private. Developers consider their MOD/XM files as a typeless blob of data, they shouldn't need to cast it to anything, the library should do it itself. - The structs that define the MOD and XM formats have been made private, as well as some definitions internal to the player.
- Some defines have been turned into enums, which will help developers and IDEs identify what to use in which functions.
- The documentation has been updated.
- Make types
-
Tests:
- Add test to read DSi SCFG registers to see which DSi features are available with the loader that has been used to launch the application.
- Add test to display all configured MPU regions.
Version 0.12.0
-
libnds
:- Dot and dot-dot entries are now properly emitted in readdir(). In line
with common software expectations, they mirror standard FAT filesystem
behaviour, that is are present for all subdirectories. For NitroFS,
these entries are emulated accordingly. - The
d_ino
field inreaddir()
output is now correctly populated, to
matchstat()
andfstat()
. - Added
nitroFSOpenById()
andnitroFSFopenById()
functions, allowing
opening files directly without paying the cost of a directory lookup. - Accordingly, NitroFS file systems which contain a FAT table but no FNT
table can now be opened. - Optimized
glMaterialShinyness()
.
- Dot and dot-dot entries are now properly emitted in readdir(). In line
-
SDK:
-
The default Makefiles have been simplified and now use compiler-provided
.specs
files. In turn, a few additional features have been added:- Support for picolibc's compiler define-based selection of the printf
and scanf implementations. - The
__BLOCKSDS__
define, which can be used to detect a BlocksDS
environment during building.
- Support for picolibc's compiler define-based selection of the printf
-
Fixed camera initialization with the default ARM7 binary.
-
-
grit:
- Added the
-ftB
argument, which outputs files with.img
,.map
,
.meta
,.pal
extensions, as opposed to.img.bin
,.map.bin
,
.meta.bin
and.pal.bin
.
- Added the
Version 0.11.3
-
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 normalmain()
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.
- Breaking: Instead of providing alternate-language banner text using
-
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.
- The superfluous
-
Version 0.11.2
-
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.
- Move crt0 and linkerscript to
Version 0.11.1
-
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.
- Added BTDMP helpers to stream audio from the DSP to the speakers. Added an
Version 0.11.0
-
libc:
- Fixed an important regression in
memcpy()
andmemset()
implementations.
- Fixed an important regression in
-
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 of16384
, such as8192
(if your application is highly RAM-constrained - this may break support with some cartridges, however) or32768
(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
- NitroFS: Fix file traversal not working without running a
chdir()
first.