NITRO-SDK CHANGELOG

# NITRO-SDK Revision History

NITRO-SDK 3.0 Release version (01/16/2006)
  Note 35-01: (CARD) Added an overview of function references
  Note 35-02: (DevEnv) Added a reference manual for the packnlf tool
  Note 35-03: (DevEnv) Unified the source code format
  Note 35-04: (MI) Corrected LZ compression problems with the MI_CompressLZFast function and ntrcomp.exe
  Note 35-05: (OS) Corrected problems in the OS_ResetSystem function
  Note 35-06: (OS) Edited the Chinese version startup screen
  Note 35-07: (PRC) Added figure dictionary data for demo
  Note 35-08: (WM) Corrected the display of the debug string in the sample demo
  Note 35-09: (WM) Revised internal communications parameters
  Known issues in SDK 3.0 release version

NITRO-SDK 3.0 RC3 (12/26/2005)
  Note 34-01: (MATH) Added bit operation function
  Note 34-02:(MB) Fixed a bug when specifying MB_ReadSegment function with insufficient memory
  Note 34-03:(MB) Improved MP communication effectiveness under adverse conditions
  Note 34-04:(OS) Fixed the DC_TouchRange function reference
  Note 34-05: (OS) Corrected the OS_CreateThread function
  Note 34-06: (WBT) Corrected the wbt-1 sample demo.
  Note 34-07:(WBT) Fixed a bug in the user callback
  Note 34-08:(WM) Fixed a bug in the MP communications parameters
  Note 34-09:(WM) Made changes to the method for setting the WH parameters
  Note 34-10:(WM) Made improvements to the internal operations when communications are terminated
  Known problems with SDK 3.0 RC3
  NITRO-SDK 3.0 RC2 (12/05/2005)
    Note 33-01:(CARD) Corrected a problem with backup operation functions
    Note 33-02:(CTRDG) Added access permission function for AGB cartridges
    Note 33-03:(DevEnv) Added macro for comparing SDK versions
    Note 33-04:(DevEnv) Added SDK_INLINE and SDK_DECL_INLINE
    Note 33-05: (DevEnv) Corrected makebanner tool
    Note 33-06:(DevEnv) Updated ntexconv
    Note 33-07:(DevEnv) Added the packnlf tool
    Note 33-08:(MB) Corrected the MBP sample module
    Note 33-09:(MB) Added the MB_FAKE_WORK_SIZE definition
    Note 33-10:(MB) Corrected problem regarding the parent beacon flag
    Note 33-11:(MI) Added the MI_CompressLZFast function
    Note 33-12:(OS) Added an automatic build switch for ARM7 debug output
    Note 33-13:(OS) Made changes to the V-Blank wait function definition
    Note 33-14:(OS) Deleted OS_InitPrintServer and OS_PrintServer from the sample demo
    Note 33-15:(OS) Deleted the PXI_Init function from the sample demo
    Note 33-16:(OS) Made changes to the SCV_WaitVBlankIntr function in the sample demo
    Note 33-17:(OS) Revised the start location of extended main RAM arena
    Note 33-18: (WBT) Corrected WFS sample module.
    Note 33-19:(WBT) Corrected WFS-related sample demos
    Note 33-20:(WM) Updated the 2D_CharBg_3 and Sub_CharBg_3 sample demos
    Note 33-21:(WM) Added a timing configuration function for MP communications
    Note 33-22:(WM) Added a send size configuration function for MP communications
    Note 33-23:(WM) Added a control feature for the MP communication interval
    Note 33-24:(WM) Updated the dataShare-Model sample demo
    Note 33-25:(WM) Made a correction to the display of the dataShare-Model sample demo
    Note 33-26:(WM) Added a setting value for the maximum number of MP communications per frame.
    Note 33-27:(WM) Changed specifications for reception strength level
    Note 33-28:(WM) Added an option for disabling the pre-check of the send/receive buffer size
    Note 33-29:(WM) Added a caution regarding the wireless communication event counter
    Known problems with SDK 3.0 RC2
  NITRO-SDK 3.0 RC (11/07/2005)
    Note 32-01: (CARD) Revised internal processing of EEPROM device operations
    Note 32-02: (CARD) Added removal detection after ROM access
    Note 32-03: (CARD) Support for new backup devices
    Note 32-04: (DevEnv) Corrected the #pragma define_section parameters
    Note 32-05: (DevEnv) Added tools for converting resource data for the ENV library
    Note 32-06: (DevEnv) Corrected the NITRO-SDK Package creation script
    Note 32-07: (DevEnv) Changed the version of CodeWarrior used for SDK package build
    Note 32-08: (DevEnv) Added a reference to the compile target
    Note 32-09: (ENV) Added a reference to the ENV library
    Note 32-10: (ENV) Changed the ENV library
    Note 32-11: (GX) Corrected G3BS_LoadMtx43 function
    Note 32-12: (GX) Re-corrected Sub_Double3D sample demo.
    Note 32-13: (WM) Fixed bug in the MATH_QSort function
    Note 32-14: (OS) Corrected the HI address calculations for the ARM7 specific WRAM arena.
    Note 32-15:(OS) Added the OS_GetTotalOccupiedSize function
    Note 32-16: (OS) Corrected OS_PutString function
    Note 32-17: (OS) Added SDK_COMPILER_ASSERT
    Note 32-18: (OS) Improved the wait for VBlank function
    Note 32-19: (OS) Changed the argument const of the cache function
    Note 32-20: (OS) Corrected the stack overflow check function
    Note 32-21: (OS) Support for the argument data buffer switch
    Note 32-22: (OS) Corrected the change macro for the real time check value
    Note 32-23: (OS) Updated the Chinese version’s startup screen
    Note 32-24:(OS) Corrected the thread cue operations including the ending thread
    Note 32-25:(PRC) Corrected the sample tool pdic2c.pl
    Note 32-26: (RTC) Changed the method for getting RTC day of the week information
    Note 32-27: (SND) Fixed the problem of the SND_CalcDecibel function not returning a suitable value when the argument 0 is entered.
    Note 32-28: (STD) Added STD library
    Note 32-29: (WBT) Fixed the GetBlock request notification bug.
    Note 32-30: (WBT) Corrected WFS sample module.
    Note 32-31: (WM) Changed the WM test tool
    Note 32-32:(WM) Corrected the WM_SetLifeTime function’s reference description
    Note 32-33: (WM) improved mongoose components
    Note 32-34: (WM) Added information notified to the port receive callback
    Note 32-35: (WM) Added notification when the port receive callback initializes
    Note 32-36: (WM) Added API for tests
    Note 32-37: (WM) Correct bug that stops the wireless connection function when the Child devicecalls the WM_EndMP function
    Note 32-38: (WM) Added a disconnection notification when you disconnect
    Note 32-39: (WM) Re-corrected internal operations for connecting and disconnecting.
    Known issues in SDK 3.0 RC
  ¦NITRO-SDK 3.0 PR4 (09/08/2005)
    Note 31-01: (CARD) Added CARD_CancelBackupAsync function
    Note 31-02: (CARD) Fixed internal process in FRAM device operation (Released in NITRO-SDK 2.2 release version)
    Note 31-03: (CARD) Added CARD_RESULT_NO_RESPONSE error code
    Note 31-04: (DevEnv) Support for overlay groups in lsf files
    Note 31-05: (DevEnv) Fixed bug in certain section names of makelcf
    Note 31-06: (DevEnv) Revised makelcf
    Note 31-07: (DevEnv) Added loadrun and nitrorun tool commands
    Note 31-08: (ENV) Added libenv*.a environment resource library
    Note 31-09: (CARD) Revised FS_EndOverlay function (Released in NITRO-SDK 2.2 official release)
    Note 31-10: (FS) Revised documents (Released in NITRO-SDK 2.2 official release)
    Note 31-11: (FX) Revised FX_FX64C_TO_F32 macro
    Note 31-12: (CARD) Fixed bug in FX_InvSqrt function (Released in NITRO-SDK 2.2 official release)
    Note 31-13: (CARD) Added MB_GetMultiBootDownloadParameter function (Released in NITRO-SDK 2.2 official release)
    Note 31-14: (NVRAM) Fixed bug with error determination when loading data from NVRAM
    Note 31-15: (OS) Added reference for debug output functions on ARM7 side (Released in NITRO-SDK 2.2 official release)
    Note 31-16: (OS) Fixed bug in upper address of DTCM arena
    Note 31-17: (OS) Added NitroStaticInit function reference (Released in NITRO-SDK 2.2 official release)
    Note 31-18: (OS) Cleaned up const type arguments in OSThread related functions
    Note 31-19: (OS) Added OS_GetOpt function.
    Note 31-20: (SND) Optimized the cache invalidation process (Released in NITRO-SDK 2.2 official release)
    Note 31-21: (WM) Fixed bug in disconnect detection process for communication (Released in NITRO-SDK 2.2 official release)
    Note 31-22: (WM) Added scan types that are performed by specifying the matching length of SSID
    Note 31-23: (WM) Corrected scan SSID matching length in infrastructure mode
    Note 31-24: (WM) Revised internal process for child connection (Released in NITRO-SDK 2.2 official release)
    Note 31-25: (WM) Added interface that indicates more detailed information about causes of connection failure time
    Known issues in SDK 3.0 PR4
  ¦NITRO-SDK 3.0 PR3 (08/10/2005)
    Note 30-01: (CARD) Added CARD_CheckPulledOut function reference (Released in NITRO-SDK 2.2 official release)
    Note 30-02: (CARD) Added argument restrictions for CARD_IdentifyBackup function (Released in NITRO-SDK 2.2 official release)
    Note 30-03: (MB) Revised sample demos (Released in NITRO-SDK 2.2 official release)
    Note 30-04: (OS) Added the OS_SetThreadDestructorStack function
    Note 30-05: (OS) Alarm cancel process used in OS_Sleep function
    Note 30-06: (WM) Changed process during overload on child
    Note 30-07: (WM) Changed internal operation for disconnect (Released in NITRO-SDK 2.2 official release)
    Known issues in SDK 3.0 PR3
  ¦NITRO-SDK 3.0 PR2 (08/04/2005)
    Note 29-01: (DevEnv) Revised ISD_NITRO_DEBUGGER path (Released in NITRO-SDK 2.2 official release)
    Note 29-02: (MB) Revised the Sub double3D sample demos again (Released in NITRO-SDK 2.2 official release)
    Note 29-03: (GX) Added const modifier to arguments of function that gets display list state (Released in NITRO-SDK 2.2 official release)
    Note 29-04: (OS) Added OS_GetLowEntropyData function.
    Note 29-05: (PM) Fixed restore process after transitioning to sleep mode from the LCD off state. (Released in NITRO-SDK 2.2 official release)
    Note 29-06: (WM) Added notification to WM_SetIndCallback function callback
    Note 29-07: (WM) Added WM_SetPowerSaveMode function
    Note 29-08: (WM) Fixed bug at time of setting ignoreFatalError (Released in NITRO-SDK 2.2 RC )
    Note 29-09: (WM) Changed receive process on child.
    Note 29-10: (WVR) Corrected bug in thumb build version of ichneumon component. (NITRO-SDK 2.2 RC ????)
    Known issues in SDK 3.0 PR2
  NITRO-SDK 3.0 PR (07/22/2005)
    Note 28-01: (Cht) Added Pictocatch demo
    Note 28-02: (DevEnv) Support for nitro.h precompiled headers
    Note 28-03: (FS) Changed overlay function operation (Released in NITRO-SDK 2.2 official release)
    Note28-04: (GX) Corrected GX demos
    Note 28-05: (MATH) Increased speed for MD5 function (Released in NITRO-SDK 2.2 official release)
    Note 28-06: (OS) Added mechanism to check for stack overflow in IRQ stack.
    Note 28-07: (OS) Added argument support using OS_GetArgc function and OS_GetArgv functions
    Note 28-08: (OS) OS_KillThread and OS_KillThreadWithPriority functions added
    Note 28-09: (OS) Implementation of thread destructors
    Note 28-10: (OS) Added user parameters to thread structure
    Note 28-11: (OS) Removed limit on maximum number of threads
    Known issues in SDK 3.0 PR

  #### The NITRO-SDK 3.0 andNITRO-SDK 2.2 series are maintained as parallel versions branching from NITRO-SDK 2.2 PR.
  However, all the changes in the 2.2 series are included in the 3.0 series.
  For details on the 2.2 series, click here.

  NITRO-SDK 2.2 PR (07/15/2005)
    Note 27-01: (CARD) Added the CARD_CheckPulledOut function.
    Note 27-02: (CARD) Made compatible with new backup devices.
    Note 27-03: (CTRDG) Corrected cache operations when getting cartridge information
    Note28-04: (DevEnv) Added the bin2obj tool
    Note 27-05: (DevEnv) Provided support for times where the cygdrive prefix of CYGWIN is not /cygdrive.
    Note 27-06: (DevEnv) Corrected the LCF template.
    Note 27-07: (DevEnv) Corrected problem with the StackSize specification for rsf.
    Note 27-08: (DevEnv) Changed the default value for TS_VERSION.
    Note 27-09: (DevEnv) Changed the #include search path.
    Note 27-10: (FS) Added the functions FS_CreateFileFromMemory and FS_CreateFileFromRom.
    Note 27-11: (FS) Added the FS_End function.
    Note 27-12: (FS) Corrected problem with the FS_WaitAsync function.
    Note 27-13: (FS) Corrected problem during overlay unloading.
    Note 27-14: (FX) Corrected problem with the arc tangent functions.
    Note 27-15: (GX) Corrected the Sub_Double3D sample demo.
    Note 27-16: (GX) Corrected problem with ASSERT inside functions that manipulate display lists.
    Note 27-17: (MATH) Corrected problem with the MATH_QSort function.
    Note 27-18: (MATH) Accelerated the SHA-1 functions.
    Note 27-19: (MATH) Added Fast Fourier Transform functions.
    Note 27-20: (MB) Added multiboot-wfs sample.
    Note 27-21: (MB) Released the debug use expanded memory region.
    Note 27-22: (MB) Added user definition expanded parameters.
    Note 27-23: (MI) Corrected problems with the MI_CompressHuffman function and Hufmann compression by ntrcomo.exe.
    Note 27-24: (OS) Corrected internal operation of `OS_Sleep` function
    Note 27-25: (OS) Corrected problem with the OS_TryLockMutex function.
    Note 27-26: (OS) Added the OS_YieldThread function.
    Note 27-27: (OS) Made internal corrections to initialization process at startup time.
    Note 27-28: (OS) Expanded the startup screen process for Chinese-language version.
    Note 27-29: (OS) Corrected problems with flushing of data cache.
    Note 27-30: (OS) Corrected problem when multiple OSMutex are locked.
    Note 27-31: (OS) Added header file-related references.
    Note 27-32: (RTC) Added functions to convert back and forth between date/time and total passage of seconds.
    Note 27-33: (RTC) Added restrictions to APIs for changing date and time.
    Note 27-34: (WBT) Corrected wbt-fs sample demo
    Note 27-35: (WBT) Corrected WBT sample demos
    Note 27-36: (WM) Clarified the specification changes and planned abolition of Key Sharing functions.
    Note 27-37: (WM) Changed the internal operations of the WM_StartScanEx function.
    Note 27-38: (WM) Updated WMTestTool.srl
    Note 27-39: (WM) Deterred MP communications when child not connected.
    Note 27-40: (WM) Corrected problem with notification when child disconnects
    Note 27-41: (WM) Added restriction on number of MP communications per frame.
    Known issues in SDK 2.2 PR
  Previous Revision Histories

  ## NITRO-SDK Version 3.0 Release

  (2006/01/16)

  ### Note 35-01: (CARD) Added an overview of function references

  Added an "overview" item to the function references in the CARD library.

  ### Note 35-02: (DevEnv) Added a reference manual for the packnlf tool

  Added a reference manual for the packnlf tool.

  ### Note 35-03: (DevEnv) Unified the source code format

  The code format has been unified regarding indents and carriage returns in the library and demos.

  ### Note 35-04: (MI) Corrected LZ compression problems with the MI_CompressLZFast function and ntrcomp.exe

  There was a possibility of causing memory over access when using LZ compression with the MI_CompressLZFast function.
  The same problem was found in ntrcomp.exe after NITRO-SDK 3.0 RC2, and there was a possibility of unusual termination or a slight increase in the size of compressed data.
  These problems have been fixed.

  ### Note 35-05: (OS) Corrected problems in the OS_ResetSystem function

  The OS_ResetSystem function internally accesses the cartridge. This caused a problem when it was called with the cartridge bus locked resulting in an infinite loop within the library. This problem was corrected. This problem only appears in NITRO-SDK 3.0 RC3.

  ### Note 35-06: (OS) Edited the Chinese version startup screen

  The update described in Note 32-23 caused the text on the startup screen to be corrupted. This problem was corrected.

  ### Note 35-07: (PRC) Added figure dictionary data for demo

  The stroke order for the Japanese character "KE" in the figure dictionary data for the demo was wrong, so "KE" in the figure dictionary demo was corrected.

  ### Note 35-08: (WM) Corrected the display of the debug string in the sample demo

  Changed the debug output of the sample libraries wh, wfs, and wc in $NitroSDK/build/demo/wireless_shared to display "0x" before hexadecimal numbers.

  ### Note 35-09: (WM) Revised internal communications parameters

  There was a problem that caused MP communications to fail easily depending on the environment, so improvements were made by adding revisions to communications internal parameters.

  ### Known issues in SDK 3.0 release version

  None.

  ## NITRO-SDK Version 3.0 RC3

  (2005/12/26)

  ### Note 34-01: (MATH) Added bit operation function

  The following inline function groups that perform bit operations were added:

  - The MATH_CountTrailingZeros and MATH_CTZ macros
  - The MATH_GetLeastSignificantBit and MATH_LSB macros
  - The MATH_GetMostSignificantBit and MATH_MSB macros

  ### Note 34-02:(MB) Fixed a bug when specifying MB_ReadSegment function with insufficient memory

  When a small buffer size was designated with the MB_ReadSegment function and the distribution data was dynamically loaded from the archive, block transfer became unable to proceed. This problem has been fixed.

  ### Note 34-03:(MB) Improved MP communication effectiveness under adverse conditions

  Fixed the problem that caused transfer rates to be adversely affected where WM_ERRCODE_SEND_FAILED was issued frequently on the parent device in bad communication environments during implementation of block transfer in the MB library.

  ### Note 34-04:(OS) Fixed the DC_TouchRange function reference

  Because ARM946E-S, which is a CPU on Nintendo DS, has the specification that does nothing, such description has been added in the reference for the DC_TouchRange function that uses this feature.

  ### Note 34-05: (OS) Corrected the OS_CreateThread function

  There was a bug where, depending upon the initial value of the thread structure initialized with OS_CreateThread, an access exception error would occur when the thread was executed. That bug has been fixed.

  ### Note 34-06: (WBT) Corrected the wbt-1 sample demo.

  A compilation error prevented a correct build when the macro switch NOT_USE_ALLOC in the sample source of the $NitroSDK/build/demos/wbt/wbt-1 sample demo was enabled. This error has been corrected.

  ### Note 34-07:(WBT) Fixed a bug in the user callback

  The values of the result member of the arguments in the user callbacks which notify of each command completion were indeterminate. This problem has been corrected.

  ### Note 34-08:(WM) Fixed a bug in the MP communications parameters

  The configurations for each of the MP communication parameters added in 3.0 RC2 were not operating normally. This problem has been corrected.

  ### Note 34-09:(WM) Made changes to the method for setting the WH parameters

  All of the SDK demos which use WH directly referenced $NitroSDK/build/demos/wireless_shared/wh/wh_config.h and had shared configurations. Now, each demo has its own individual configuration.
  Because of this change, the location of wh_config.h has been changed to $NitroSDK/build/demos/wireless_shared/wh/default/.

  ### Note 34-10:(WM) Made improvements to the internal operations when communications are terminated

  Internal operations are sometimes affected immediately after a disconnect. Processes were added within the WM library to address this.

  ### Known problems with SDK 3.0 RC3

  There were none.

  ## NITRO-SDK Version 3.0 RC2

  (2005/12/05)

  ### Note 33-01:(CARD) Corrected a problem with backup operation functions

  Corrected a problem that might cause a return of CARD_RESULT_TIMEOUT even if the backup write succeeds when a backup write with a small size specification executes during wireless communication.

  ### Note 33-02:(CTRDG) Added access permission function for AGB cartridges

  Added the following group of functions for controlling access permissions to AGB cartridges.

  - CTRDG_IsEnabled
  - CTRDG_Enable
  - CTRDGi_CheckEnableld

  ### Note 33-03:(DevEnv) Added macro for comparing SDK versions

  Added the macro SDK_VERSION_NUMBER for converting the SDK version to a numeric value.
  Also added the constant SDK_CURRENT_VERSION_NUMBER to represent the current SDK version.

  ### Note 33-04:(DevEnv) Added SDK_INLINE and SDK_DECL_INLINE

  Added SDK_INLINE and SDK_DCL_INLINE as macro symbols for inline function specifications.
  This allows the format of inline specifications to be changed all at once.
  The entire NITRO-SDK must be rebuilt if these macro values are changed.
  Since this environment uses a compiler version where problems related to compiling inline functions have been corrected, code size can be reduced by changing these macros from static inline to inline only in those cases where they were switched from inline to static inline to avoid the problem mentioned with earlier compiler versions.
  Since the result of changing these macros is essentially not guaranteed, please base the decision on the application in question.

  ### Note 33-05: (DevEnv) Corrected makebanner tool

  A problem was corrected where character strings could not be included in a banner file if the start of the game title or descriptive text in question happened to matched a specifiable parameter described in the bsf file used by the makebanner tool.

  ### Note 33-06:(DevEnv) Updated ntexconv

  $NitroSDK/tools/bin/ntexconv.exe has been updated the version of netconv.exe inside the latest release of the TXLib package.
  Although operations do not change under the SDK due to the fact that ntexconv.exe is only used during the creation of icon images, the version of ntexconv.exe inside the SDK can now be used even when creating textures.

  ### Note 33-07:(DevEnv) Added the packnlf tool

  The tool paknlf has been added to collect all file specifications referenced by a .nlf file as absolute paths and output them as a ZIP file.
  Although this tool was included under NITRO-SDK 3.0 RC, mention of its addition was left out of the changelog.

  ### Note 33-08:(MB) Corrected the MBP sample module

  We made the following correction to the MBP sample module included in$NitroSDK/build/demos/wireless_shared/mbp:

  - A problem was corrected where processing by the parent device would hang if the parent called MBP_StartRebootAll and the last child still connected cancelled its connection just as the other children were attempting to reboot.

  ### Note 33-09:(MB) Added the MB_FAKE_WORK_SIZE definition

  The buffer size required in order to call the MB_FakeInit function has been defined as MB_FAKE_WORK_SIZE. This value is defined as a constant equal in value to the size of data retrieved by the conventional MB-FakeGetWorkSize function.

  ### Note 33-10:(MB) Corrected problem regarding the parent beacon flag

  A problem was corrected where it was possible for applications sharing the same GGID under wireless play and download play to fail to detect the situation due to the fact that the WM_ATTR_FLAG_MB flag remained disabled, and only the WM_ATTR_FLAG_ENTRY flag was enabled, for the first beacon sent by an MB parent device.

  ### Note 33-11:(MI) Added the MI_CompressLZFast function

  Rather than requiring a work buffer of about 9KB, the function M_CompressLZFast has been added to perform LZ compression at rates several times faster than MI_CompressLZ, which has been available.

  ### Note 33-12:(OS) Added an automatic build switch for ARM7 debug output

  NITRO_ENABLE_ARM7_PRINT has been added as a build switch for setting the debugger to automatically call the OS_InitPrintServer and OS_PrintServer functions from inside the OS library.
  Conventional specifications are used if this switch is not specified.
  This build switch is only enabled for the OS library. The OS library must be rebuilt if the setting is changed.

  ### Note 33-13:(OS) Made changes to the V-Blank wait function definition

  Specifications are such that SVC_WaitVBlankIntr does not release resources to low-priority threads. Since this would cause problems depending on how the function was used, specifications have been changed so that a call to SVC_WaitVBlankIntr is automatically replaced by a call to OS_WaitVBlankIntr. Note, however, that this replacement is made using defines inside a header file and that the desired result is achieved after the first rebuild.
  The result of this change is actually a slight increase in overhead until V-blank interrupt wait operations are entered. Although there is almost no effect on application behavior, if you must use conventional system calls for some reason, you can disable this change by defining the environment variable NITRO_SVC_WAITVBLANK_COMPATIBLE. Be sure to verify your code thoroughly as the problem with threads remains unresolved if you do this.
  Although it was reported in Note 32-18:(OS) Improved V-blank wait function that the SVC_WaitVBlankIntr function could now be overwritten by another definition using weak symbols, specifications have been returned to original status because the need for weak symbols has been eliminated under this revision.

  ### Note 33-14:(OS) Deleted OS_InitPrintServer and OS_PrintServer from the sample demo

  Deleted OS_InitPrintServer and OS_PrintServer from all NITRO-SDK sample demo source code.

  ### Note 33-15:(OS) Deleted the PXI_Init function from the sample demo

  Deleted PXI_Init from all NITRO-SDK sample demo source code.
  Demo operations are not affected by this change.

  ### Note 33-16:(OS) Made changes to the SCV_WaitVBlankIntr function in the sample demo

  The parts of all NITRO-SDK sample demo source code that used to call SVC_WwaitVBlankIntr have been changed to call OS_WaitVBlankIntr.
  Demo operations are not affected by this change.

  ### Note 33-17:(OS) Revised the start location of extended main RAM arena

  0x240000 is used for the lcf template definition even though the start address of the extended main memory arena given on the OS arena overview page is 0x23e0000. (If there is an overlay, an even higher address results.
  0x23e0000 is used so as to match the information on the OS overview page.

  ### Note 33-18: (WBT) Corrected WFS sample module.

  We fixed the following problems with the WFS sample module compiled in $NitroSDK/build/demos/wireless_shared/wfs.

  - In the case of several functions, better decisions have been made regarding the appropriateness of making calls before initialization and after exiting.

  ### Note 33-19:(WBT) Corrected WFS-related sample demos

  Processing inside the sample demo below, which uses the WFS sample module, has been revised so that parent disconnections during a read by a child calling FS_ReadFile can be detected.

  - $NitroSDK/build/demos/wbt/wbt-fs
  - $NitroSDK/build/demos/mb/multiboot-wfs

  ### Note 33-20:(WM) Updated the 2D_CharBg_3 and Sub_CharBg_3 sample demos

  Corrected a problem in the $NitroSDK/build/demos/gx/UnitTours/{2D_CharBg_3,Sub_CharBg_3} sample demo where execution would stop due to an assert if the object was shrunk too much.

  ### Note 33-21:(WM) Added a timing configuration function for MP communications

  Previously, the V alarm count was fixed at 260 for the parent and at 240 for children during frame synchronous communication mode when beginning to prepare the first MP communication of each frame. The WM_SetMPTiming function has been added to make this setting. Due to restrictions on the implementation these values must be set in the range 220 to 260 or 0 to 190.
  The ARM7 operates actively during communication processing and frequently stalls the ARM9 from accessing main memory. The average operational performance of the ARM9 can sometimes be improved by adjusting communication timing to help alleviate the situation. The conventional setting values are used as defaults unless other settings are explicitly made.

  ### Note 33-22:(WM) Added a send size configuration function for MP communications

  Up until now, the size of transmissions sent using MP communications have been fixed at values given by the parentMaxSize and childMaxSize fields of the WMParentParam structure as set by the parent using the WM_SetParentParameter function before communications start. The parent send size and child send size can be set using the functions WM_SetMPParentSize and WM_SetMPChildSize.
  The send size of the parent and child are initialized to the values set for parentMaxSize and childMaxSize in the WMParentParam structure when the WM_StartParent function is executed by the parent. Smaller values than these can be set using the WM_SetMPParentSize and WM_SetMPChildSize functions, but the default initial values cannot be exceeded. Even though setting the parent send size on the child side is meaningless, the setting used for the child send size is used to overwrite the child send size setting on the parent side every time MP communications are carried out.
  There is not much advantage in changing the setting for parent transmissions because the smaller the amount of data, the shorter the radio signal output. Still, the child side always sent out a radio signal of the number of bytes designated with childMaxSize, so by reconfiguring the necessary size, the transmission time can be reduced and communications can be stabilized. Note that under the current implementation, if an amount of data larger than the send size modified using these functions has already been prepared for sending by the WM_SetMPDataToPort function, that data will not be sent and will just continue to collect on the send queue.

  ### Note 33-23:(WM) Added a control feature for the MP communication interval

  The function WM-SetMPInterval has been added to allow setting the time interval between one MP communication and the next during MP communications in continuous communication mode beginning from the second transmission in frame synchronous mode. This can be specified independently for the parent and children in units of microseconds.
  The default values are 1000 microseconds for the parent and 0 microseconds (no interval) for children. Although throughput can be increased by adjusting this value, throughput may also be worsened due to dropped data if the MP communication interval for the parent is shorter than the time it takes children to process the received data. Note that bandwidth availability will also be adversely affacted if useless resends are attempted under these conditions.

  ### Note 33-24:(WM) Updated the dataShare-Model sample demo

  A feature for displaying information about the parent to be connected to has been added to the parent list window in the sample demo $NitroSDK/build/demos/wm/dataShare-Model.

  ### Note 33-25:(WM) Made a correction to the display of the dataShare-Model sample demo

  A problem was corrected where the text output screen displayed at startup of the sample demo $NitroSDK/build/demos/wm/dataShare-Model would sometimes break.

  ### Note 33-26:(WM) Added a setting value for the maximum number of MP communications per frame.

  Although the maximum number of MP communications per frame (including resends) was fixed at six in the past, specifications have been changed so that this can now be set to other values. Set WMMMPParam.maxFrequency using WM_SetMPParameter. The processing of the fixFreqMode argument by WM_StartMPEx has been changed internally so that maxFrequency is also set to the value of mpFreq.

  ### Note 33-27:(WM) Changed specifications for reception strength level

  If a send fails, correction is applied to the receive signal strength level that can be retrieved by WM_GetLinkLevel; however, this correction has been performed differently for the parent than for the children and the receive signal strength level for parent and children can differ greatly even under the same conditions.
  To solve this problem, the standard to detect failed transmission of a parent were loosened so that the behavior of the reception strength level of the parent and child were more similar.

  ### Note 33-28:(WM) Added an option for disabling the pre-check of the send/receive buffer size

  A special option has been added for ignoring various validity checks (pre-check of the send/receive size setting value, send/receive buffer size, and communication time limit of 5600 microseconds) previously carried out internally by the WM_StartMP function. Be sure to set WMMPParam.ignoreSizePrecheckMode to TRUE using the WM_SetMPParameter function before calling WM_StartMP.
  Combining this feature with the WM_SetMPParentSize and WM_SetMPChildSize functions allows the send size to be flexibly adjusted according to changing conditions such as the number of connected children. Note, however, that you must be careful in the application not to exceed the communication time limits and the send/receive buffer size. If a setting is made such that the send buffer size is insufficient and an attempt is made by the parent to start MP communications, the situation will be detected at time of execution and the communication will be cut-off due to a timeout on the MP lifetime that will occur if the condition continues.

  ### Note 33-29:(WM) Added a caution regarding the wireless communication event counter

  Unexpected behavior was reported where several even counters would be cleared when accessing buffers located in a particular address space in wireless hardware.
  Due to this problem, the count accumulating in an event counter being managed in software would sometimes be less than the actual number of events that had occured.
  Note that there is a possibility that some event counts retrieved by WM_GetWirelessCounter may not represent the correct value.
  Information has also been added to the reference manual about the event counters that may be adversely effected.

  ### Known problems with SDK 3.0 RC2

  There were none.

  ## NITRO-SDK Version 3.0 RC

  (2005/11/07)

  ### Note 32-01: (CARD) Revised internal processing of EEPROM device operations

  When an EEPROM device is being used for backup, there was an occasional problem with abnormalities in the initial values of the hardware internal status at startup. A process was added to deal with this issue.

  ### Note 32-02: (CARD) Added removal detection after ROM access

  Added a process to detect whether the card has been removed every time the read process completed with the CARD_ReadRom function or the CARD_ReadRomAsync function.
  This way, the application will no longer refer to invalid data before it receives a notification of the remove-detection callback.

  ### Note 32-03: (CARD) Support for new backup devices

  Made the Card Library support the 4MB Flash Backup Device and added CARD_BACKUP_TYPE_FLASH_2MBITS to the CARDBackupType enumerated type.
  In relation, the reference and sample demos were updated.

  ### Note 32-04: (DevEnv) Corrected the #pragma define_section parameters

  The #pragma define_section parameters were separated by commas like this:
  “#pragma define_section DTCM ".dtcm",".dtcm",abs32,RWX.”
  This made for an incorrect description, so they were changed to be separated by spaces like this:
  “#pragma define_section DTCM ".dtcm" abs32 RWX.”
  Please correct any other mistaken descriptions, like the one above, in the same way.

  ### Note 32-05: (DevEnv) Added tools for converting resource data for the ENV library

  Added the xml2env tool to convert resource data for the ENV library written in XML format to the C Source file format, and the init2env tool for converting resource data for the ENV library written in INIT format to the C Source file format.

  ### Note 32-06: (DevEnv) Corrected the NITRO-SDK Package creation script

  In the NITRO SDK 3.0 PR - 3.0 PR4 packages, there was a flaw in the script used when creating packages causing a problem where the THUMB version ichneumon components did not operate correctly.
  This has been fixed.

  ### Note 32-07: (DevEnv) Changed the version of CodeWarrior used for SDK package build

  (DevEnv) Changed the version of CodeWarrior used for SDK package build to 1.2SP1.
  Also made it so the build numbers of the CodeWarrior compiler and linker used to build to $NitroSDK/include/nitro/version.h are recorded.

  ### Note 32-08: (DevEnv) Added a reference to the compile target

  Added an explanation of the compile target to the function information in the function reference.

  ### Note 32-09: (ENV) Added a reference to the ENV library

  Added a reference to the ENV library

  ### Note 32-10: (ENV) Changed the ENV library

  Changed the ENV_Init function features and added a new ENV_AppendResourceSet function. Until now, it has been delivering ENVResource as an argument to the ENV_Init function, but now several ENVResources can be registered.

  ### Note 32-11: (GX) Corrected G3BS_LoadMtx43 function

  There was a bug where the condition parameters of the ASSERT being used by G3BS_LoadMtx43 were wrong. This has been corrected.

  ### Note 32-12: (GX) Re-corrected Sub_Double3D sample demo.

  The following correction was made to the `$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D` sample demo: The correction described in Note 29-02 was not complete and the same symptoms still appeared occasionally. The problem was corrected again, and explanations were added as comments to the SwapBuffers command and the geometry engine.

  ### Note 32-13: (WM) Fixed bug in the MATH_QSort function

  There was a bug in the MATH_QSort function, and there was a possibility that some values would not line up properly in either ascending or descending order after being sorted.
  This bug was fixed.

  ### Note 32-14: (OS) Corrected the HI address calculations for the ARM7 specific WRAM arena.

  If the IRQ stack size on the ARM7 side was set to 0 or negative, the domain was determined by the first position in WRAM. The cause was a mistake in the HI address calculations of the ARM7 specific WRAM arena.
  It should have been based on the end of a program domain which occupies the first position of WRAM.
  After being corrected, they calculate properly.
  However, since the stack area is defined with a positive value in conventional mongoose as well as ichneumon, there is no difference in operation whether it is before or after the correction.
  Since mongoose and ichneumon of SDK attachments are used in usual game applications, they are not influenced by this change.

  ### Note 32-15:(OS) Added the OS_GetTotalOccupiedSize function

  Added the OS_GetTotalOccupiedSize function that gets the memory size used in the heap.
  The OS_GetTotalAllocSize function which existed until now had totaled the size of the data area of the memory block currently used, but the OS_GetTotalOccupiedSize function added this time is also adds the size of the header portion of the memory block.

  ### Note 32-16: (OS) Corrected OS_PutString function

  When the FINALROM is built, the OS_PutString function was transposed to the uninfluential code, but the dead strip of the argument was not performed. This was corrected, and now none of this function is performed, but the dead strip of the argument is made.

  ### Note 32-17: (OS) Added SDK_COMPILER_ASSERT

  Conditions are inspected when compiling, and the SDK_COMPILER_ASSERT macro was added to make a compile error if conditions are not met.

  ### Note 32-18: (OS) Improved the wait for VBlank function

  When waiting for a VBlank interrupt using the SVC_WaitVBlankIntr system call, the thread called for this function does not stop, and there is a problem that resources are not opened in threads that are of lower priority than itself while waiting for the interruption. The cause is an internal correction in the system call, so the OS_WaitVBlankIntr function was prepared as an alternative that stops the tread while waiting for a VBlank interruption. Also, the SVC_WaitVBlankIntr function which calls the system call was made into a weak symbol, and was corrected so that it could be overwritten by another definition.

  ### Note 32-19: (OS) Changed the argument const of the cache function

  Within the function that takes the memory pointer of a cache operation function starting with DC or IC as an argument, use const for internal operations that don't change the content. The functions that were changed are below:

  - DC_StoreRange
  - DC_FlushRange
  - DC_TouchRange
  - DC_LockdownRange
  - DC_CleanRange
  - DC_CleanAndInvalidateRange
  - IC_PrefetchRange
  - IC_LockdownRange

  ### Note 32-20: (OS) Corrected the stack overflow check function

  In the check stack overflow functions OS_SstIrqStackWarningOffset and OS_SetThreadStackWarningOffest that set the check code in the middle of the stack, the overflow check code set at the bottom of the stack was being over-written. For this reason, the stack check was not operating correctly; this has been corrected.

  ### Note 32-21: (OS) Support for the argument data buffer switch

  In the ROM image, there is a feature with which you can get argument data embedded with the tool command buryarg from the program using functions such as OS_GetArgv function and OS_GetOpt. This argument data buffer can now be changed in run time. See the OS_SetArgumentBuffer function and the OS_GetArgumentBuffer function. Moreover, in order to create data in the argument data buffer, the OS_ConvertToArguments function changed from a character string was prepared.

  ### Note 32-22: (OS) Corrected the change macro for the real time check value

  The Macro that changes the real time and tick values in functions such as OS_SecondsToTicks and OS_TicksToSeconds was corrected.
  Until this correction, since it was calculating in 32-bit accuracy with a symbol internally, when a slighlty larger argument was specified, overflow occurred and the correct value was not returned.
  The correction details are as follows:
  -For Macros used so far, internal operation has been changed to 64 bit.
  -When you explicitly want to use 32 bit internal operation, the following functions have been prepared:

  - OS_SecondsToTicks32 Function
  - OS_MilliSecondsToTicks32 Function
  - OS_MicroSecondsToTicks32 Function
  - OS_TicksToSeconds32 Function
  - OS_TicksToMilliSeconds32 Function
  - OS_TicksToMicroSeconds32 Function
  were prepared.

  ### Note 32-23: (OS) Updated the Chinese version’s startup screen

  The Chinese version startup screen displayed with OS_InitChina was updated.

  ### Note 32-24:(OS) Corrected the thread cue operations including the ending thread

  When a certain thread registered with the thread cue was completed with functions such as OS_DestroyThread or OS_KillThread , the information in the thread was removed from thread cue. This includes when that certain thread ends another thread while waiting for it to end in the OS_JoinThread function. Until now, deleted thread information remained in the thread cue, so when the OS_WakeupThread function was used to make all threads in the cue executable, the deleted threads were also included. This caused a bug in the thread list status. This was corrected this time.

  ### Note 32-25:(PRC) Corrected the sample tool pdic2c.pl

  The pdic2c.pl sample tool used together with the PRC demo was in an old format. This has been corrected. Also, an option has been added to output header files and source files to separate files.

  ### Note 32-26: (RTC) Changed the method for getting RTC day of the week information

  When data including the day of the week is read from RTC, it will now return the day of the week calculated from the date. Until now, the value stored in RTC was returned as-is, but after passing the latest date that can be displayed by RTC - 12/31/2099 23:59 - the day of the week information was wrong until the RTC was re-set.

  ### Note 32-27: (SND) Fixed the problem of the SND_CalcDecibel function not returning a suitable value when the argument 0 is entered.

  With the function SND_CalcDecibel (or SND_CalcDecibelSquare), -723 has been returned when the argument is set at 0, but this was corrected to return -32768. Until now, when using the volume module, even if the player had set the valume to 0, sound could still be heard. This problem was fixed.

  ### Note 32-28: (STD) Added STD library

  Created an STD library to handle the string operation related API group. The following functions are included in the STD library:

  - STD_CopyString (STD_StrCpy)
  - STD_CopyLString (STD_StrLCpy)
  - STD_SearchString (STD_StrStr)
  - STD_GetStringLength (STD_StrLen)
  - STD_ConcatenateString (STD_StrCat)
  - STD_CompareString (STD_StrCmp)
  - STD_CompareNString (STD_StrNCmp)
  - STD_CompareLString (STD_StrLCmp)
  - STD_TSScanf
  - STD_TVSScanf
  The functions in the () such as STD_StrCpy are defined as others names for the functions on the left such as STD_CopyString.

  ### Note 32-29: (WBT) Fixed the GetBlock request notification bug.

  Originally, there was a problem that the system callback notification WBT_CMD_REQ_GET_BLOCK_DONE, which whould only be generated when a partner's WBT_GetBlock function finishes, was being generated by the WBT_GetBlockInfoi as well. This was fixed so it won't be generated. Applications that do not use this notification have no problems.

  ### Note 32-30: (WBT) Corrected WFS sample module.

  We fixed the following problems with the WFS sample module compiled in $NitroSDK/build/demos/wireless_shared/wfs.

  - When WFS_Init is called multiple times, the function would return still in the interrupt prohibit state. This bug has been fixed.
  - Changed so that what was statically perminant internal work memory can now be stored from the allocator when the WFS_Init function is called.
  - This was corrected because WM_PORT_BT reserved by SDK as a port number was used in the various sample demonstrations using WFS.

  ### Note 32-31: (WM) Changed the WM test tool

  Made the channel information on the same parent device change when WMTestToll.srl Scans.

  ### Note 32-32:(WM) Corrected the WM_SetLifeTime function’s reference description

  There was a mistake in the description in the WM_SetLifeTime function reference. This was corrected. The description said that the frame lifetime default value was "no lifetime," but the correct description is "beacon interval x 5."

  ### Note 32-33: (WM) improved mongoose components

  When mongoose is used as an ARM7 component, there is a problem that access to the ARM9 main memory during the asymmetric operation to transition the state of the WM library is prevented considerably. This problem has been solved by improving the mongoose component. Note that this problem was not necessarily solved, but improved.

  ### Note 32-34: (WM) Added information notified to the port receive callback

  Added the connectedAidBitmap field to the WMPortRecvCallback. The AID bitmap during the current connection is stored.

  ### Note 32-35: (WM) Added notification when the port receive callback initializes

  WM_STATECODE_PORT_INIT was added to WMStateCode, and it was changed so that the port receive callback in this state code is called when WM_SetPortCallback is called. This is assuming the initialization operation using the connectedAidBitmap field or myAid field of WMPortRecvCallback is run. In order to maintain the connection notification consistency, keep in mind the call-back call by WM_STATECODE_PORT_INIT also happens during an interrupt prohibited state. Due to this change, there is a possibility that a similar incompatibility to Note 32-38 might appear.

  ### Note 32-36: (WM) Added API for tests

  The test API in the WM library was expanded. These API are for testing and do not normally need to be used. Also, based on this expantion, WMlibrary operations do not change when these are used normally. However, the WMApiid listing type is extended by the addition of API., so keep in mind that programs which depend on the row order of the listing may be affected.

  ### Note 32-37: (WM) Correct bug that stops the wireless connection function when the Child devicecalls the WM_EndMP function

  When the parent device was continuing an MP connection, there was a bug that stopped the wireless communication feature after a child device called the WM_EndMP function at a specific time. This was corrected. This bug appears in SDK versions after 3.0. When wireless communications are ended, the finish callback for wireless-communications-related asymmetric functions will no longer be called. We know the bug happens when several child devices are connected using fake_child. Further, when communications are ended by an operation from the parent device, there is no influence from this bug.

  ### Note 32-38: (WM) Added a disconnection notification when you disconnect

  Until now, when WM functions, such as a WM_DisconnectChildren function, were called clearly and communications were disconnected, the specification was that a disconnection notification was not generated. WM_STATECODE_DISCONNECTED_FROM_MYSELF was added to WMStateCode in the parent which change it to give a disconnection notification. Due to this change, there is a chance that an incompatibility will arise.
  State codes which may go into the state field of WMStartParentCallback, WMStartConnectCallback, and WMPortRecvCallback are increasing, so use caution when when runnign operations such as those to stop the execution of programs when a state code other than the known WM_STATECOD_* is received.
  Also, even if DataSharing clearly disconnects the child from the parent using this notice, it won't stop.
  The following functions were added with this correspondence.

  - WM_GetAID function
  - WM_GetConnectedAIDs function

  ### Note 32-39: (WM) Re-corrected internal operations for connecting and disconnecting.

  The corrected items released in Note 31-24 and Note 30-07 did not fully correspond to the problem, so these were re-corrected.

  ### Known issues in SDK 3.0 RC

  - The ntexconv in this SDK ($NitroSDK/tools/bin/ntexconv.exe) is an older version than the ntexconv in the TXLib package of the current release. Since SDK only uses ntexconv to create icon images, using an old version does not pose a problem, but there would be a problem if ntexconv was used to create textures. Please use ntexconv in the latest TXLib package.

  ## ¦ NITRO-SDK Version 3.0 PR4

  (2005/09/08)

  ### Note 31-01: (CARD) Added CARD_CancelBackupAsync function

  Added the CARD_CancelBackupAsync function as a function for aborting the asynchronous process on the backup device.
  Also added CARD_RESULT_CANCELED to the CARDResult enumerated values as a result for processes that were aborted with this function.

  ### Note 31-02: (CARD) Corrections to internal processing of FRAM device operations

  When a FRAM device is being used for backup, there was an occasional problem with inconsistency of the hardware internal status. A process was added to deal with this issue.

  ### Note 31-03: (CARD) Added CARD_RESULT_NO_RESPONSE error code

  Added CARD_RESULT_NO_RESPONSE to the CARDResult enumerated values as a result value for backup manipulation functions.
  This is an error value that was split off of CARD_RESULT_TIMEOUT. It is returned when contact with the card appears to be poor.

  ### Note 31-04: (DevEnv) Support for overlay groups in lsf files

  Added support for overlay groups.
  The linker assumes that overlays belonging to the same group are located in the same memory region.
  By specifying mutually exclusive overlay modules as belonging to the same group, it is possible to use the function calls between overlays to detect errors during linking.
  To maintain compatibility, the group with the same name as the current section name is set if the overlay group specification is omitted.

  ### Note 31-05: (DevEnv) Fixed bug in certain section names of makelcf

  In some cases, if the section description in an lsf file had sections named "existing section name" + "_bss," such as with "main"and "main_bss," problems would occur.
  In addition to "_bss," the same problem occurred with some text strings, such as "_DATA," "_BSS."
  This is a lcf.template file problem.
  We fixed the `*.lcf.`template files under `$NitroSDK/include/nitro/specfiles`.
  As a result, you can no longer directly reference symbol information about overlays that existed in previous versions.
  Because applications that directly reference symbols may malfunction, for now, the *.lcf.template files for the old version is included in `$NitroSDK/include/nitro/specfiles/2.x`.
  Overwrite these in $NitroSDK/include/nitro/specfiles as needed.
  (When building with make, specify the LCFILE_TEMPLATE variable.)
  The official way to obtain information about overlays is to reference the overlay table using the overlay ID as an index.

  ### Note 31-06: (DevEnv) Revised makelcf

  When an overlay was placed in DTCM, a bug occurred with the arena configuration of the main memory area. This was corrected.
  We also fixed the ITCM arena configuration for use with a ITCM overlay.
  We added support for overlays in extended main memory, which was not possible previously.

  ### Note 31-07: (DevEnv) Added loadrun, nitrorun tool commands

  loadrun is a command that downloads and runs binary data to the IS-NITRO-EMULATOR.
  It can be terminated with an operation time or call of the OS_Exit function.
  nitrorun is a script that calls the buryarg command, which embeds argument data in the binary, and the loadrun command at the same time.
  This allows to execute a binary in a manner similar to passing arguments from the command line.

  ### Note 31-08: (ENV) Added libenv*.a environment resource library

  Added the ENV library, which retrieves a value corresponding to a resource from its resource name. This is used to provide the program with operating environment parameters. Although the library must be recompiled, it is convenient for rewriting parameters and configuring an environment common to several programs.

  ### Note 31-09: (FS) Corrections to the FS_EndOverlay function.

  Due to the operation changes noted in Note 28-03, there was a problem that the destructor for the global object array in the overlay would not start correctly when unloading the overlay. This has been fixed.

  ### Note 31-10: (FS) Corrections to document

  Made numerous corrections to the following document explaining the FS library:

  - $NitroSDK/docs/TechnicalNotes/AboutFileSystem.pdf

  ### Note 31-11: (FX) Revised FX_FX64C_TO_F32 macro

  There was a bug in the FX_FX64C_TO_F32 macro, which converted from fx64c to f32 types. It did not return a precise value.
  This has been fixed.

  ### Note 31-12: (FX) Corrected problem with FX_InvSqrt function

  When the argument passed to the `FX_InvSqrt` function was above a fixed value, the calculation would be incorrect. This problem has been fixed.

  ### Note 31-13: (MB) Added the MB_GetMultiBootDownloadParameter function

  In conjunction with the features added in Note 27-22, a `MB_GetMultiBootDownloadParameter` function was added to reference the user definition expanded parameters when downloading.

  ### Note 31-14: (NVRAM) Fixed bug with error determination when loading data from NVRAM

  When reading data from NVRAM, the read failed when the target read buffer address exceeded 0x02400000.
  This bug was fixed.

  ### Note 31-15: (OS) Added reference for debug output functions on ARM7 side.

  Added references for the `OS_InitPrintServer` and `OS_PrintServer` functions, which are used for ARM 7 debug output. Also added that these functions do not need to be used in the application.

  ### Note 31-16: (OS) Fixed bug in upper address of DTCM arena

  There was a problem where the upper address of the DTCM arena is determined.
  This was caused when a negative value was specified for the stack size in the rsf file.
  This has been fixed.

  ### Note 31-17: (OS) Added reference for NitroStaticInit function.

  Added an explanation of the `NitroStaticInit` function to the Function Reference that was in line with the addition made in Note 27-31.

  ### Note 31-18: (OS) Organized const-type arguments in OSThread-related functions

  In OSThread-related functions, we determined and changed some "OSThread*" type arguments to be defined as "const OSThread*."
  These are the functions we revised.

  - OS_IsThreadTerminated
  - OS_CheckStack
  - OS_GetThreadPriority
  - OS_GetThreadDestructor
  - OS_GetThreadParameter
  - OS_GetStackStatus
  - OS_DumpThreadCallTrace

  ### Note 31-19: (OS) Added OS_GetOpt function.

  Added OS_GetOpt functionthat makes obtaining strings that start with '-' as program execution options from argument data in binary files convenient (e.g., srl file that were embedded using the buryarg tool command).
  For execution, the parameters should come after the options. Added code that uses the OS_GetOpt function in the `$NitroSDK/build/demos/os/argument-1` sample demo.

  ### Note 31-20: (SND) Optimized the cache disabling process.

  At the point when the `DC_InvalidateRange` function is called from the Sound library, the specified range was unnecessarily large; so made a correction to make it an appropriate size. This correction reduces the load of the sound process.

  ### Note 31-21: (WM) Corrected problem in process that detects disconnection during MP communications.

  During MP communications, if the communication partner disappears (e.g., the power gets cut), there is a timeout and notification about the disconnection. However, because of a timeout process bug, notification about the disconnection was not always made. This bug was fixed.

  ### Note 31-22: (WM) Added scan types that are performed by specifying the matching length of SSID

  Added WM_SCANTYPE_ACTIVE_CUSTOM and WM_SCANTYPE_PASSIVE_CUSTOM to WMScanExParam.scanType to support special usage that limits SSID matching confirmations performed with the WM_StartScanEx function to certain lengths.
  When these scanType are used, SSID match confirmations will be made only up to the length specified with WMScanExParam.ssidMatchLength.
  As a result, we changed the WMScanExParam structure.

  ### Note 31-23: (WM) Corrected scan SSID matching length in infrastructure mode

  In infrastructure mode, by specifying SSIDs using WM_StartScanEx during scans, matching confirmation was made for only the first eight bytes.
  We modified it so that matching confirmation is taken for the length specified by WMScanExParam.ssidLength.

  ### Note 31-24: (WM) Fixed internal process related to connecting to child.

  In environments where communication status is very bad and the child repeatedly tries to connect to the parent, there was a bug that put the parent into an abnormal internal state. That bug has been fixed.

  ### Note 31-25: (WM) Added interface that indicates more detailed information about causes of connection failure time

  We added a feature that notifies the status code of the communication partner, which uses a callback function to help analyze the cause of failure when a connection attempting to use WM_StartConnect[Ex] fails.
  Specifically, we added the wlStatus member to the WMStartConnectCallback structure.
  During normal usage, there is no need to reference this from the application.

  ### Known issues in SDK 3.0 PR4

  - We did a test release of the STD library as a library compatible with C standard functions. Currently only some of the functions can be used, but they are not included in the reference.

  ## ¦ NITRO-SDK Version 3.0 PR3

  (2005/08/10)

  ### Note 30-01: (CARD) Corrected reference to CARD_CheckPulledOut function.

  Added a statement to the `CARD_CheckPulledOut` function reference indicating that the `CARD_LockRom` function must be called, and CARD-ROM bus needs to be locked before calling this function .

  ### Note 30-02: (CARD) Argument restriction for CARD_IdentifyBackup function.

  Added a restriction so that `CARD_BACKUP_TYPE_NOT_USE` cannot be specified as the device type passed to the `CARD_IdentifyBackup` function. This change was added in 3.0 PR, but it was left out of the changelog.

  ### Note 30-03: (MB) Made corrections to the sample demo.

  The following correction was made to the `$NitroSDK/build/demos/mb/cloneboot` sample:

  - When the `ConnectMain` function on the parent failed, the function reattempted connection without ending the WH module. This bug has been fixed.

  ### Note 30-04: (OS) Added the OS_SetThreadDestructorStack function

  Added the `OS_SetThreadDestructorStack` function, which specifies the stack used when a thread destructor is executed.
  If there is no specification, the stack pointer does not change when its own thread is destroyed. When the thread is destroyed by other threads, the pointer changes to the stack's top address.

  ### Note 30-05: (OS) Alarm cancel process used in OS_Sleep function

  When a thread that was paused with the `OS_Sleep` function is destroyed by another thread, the alarm set for the `OS_Sleep` function is destroyed.
  Previously, because the alarm was not destroyed, the unneeded alarm handler was sometimes called or the alarm list was overwritten.

  ### Note 30-06: (WM) Changed process during overload on child

  We changed the processing during overload on the child because of internal processing conditions. This is related to Note 29-08.
  Previously, when the child side ARM was overloaded and the transmit data settings were not on time, a null response was generated. It was changed to no response.
  As a side effect, when a child machine is overloaded, the receive processing is skipped. This impairs communications efficiency slightly but reduces the load.

  ### Note 30-07: (WM) Changed internal operations during disconnection process.

  As mentioned in Note 25-22, internal operations were changed to wait when disconnecting for a signal strength that can send a disconnection notification. But this now timeouts after a set period of time. This corrects those cases where the process did not end when `WMTestTool.srl` was used to set the Noise rate to 100%.

  ### Known issues in SDK 3.0 PR3

  None.

  ## ¦ NITRO-SDK Version 3.0 PR2

  (2005/08/04)

  ### Note 29-01: (DevEnv) Corrected path for ISD_NITRO_DEBUGGER.

  Corrected the path location indicated by `ISD_NITRO_DEBUGGER`, which is defined in `$NitroSDK/build/buildtools/commondefs.emtype.ISD`.

  ### Note 29-02: (GX) Further corrections to Sub_Double3D sample demo.

  The following correction was made to the `$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D` sample demo:
  The correction described in Note 27-15 was not complete and the same symptoms still appeared occasionally. The problem was corrected again.

  ### Note 29-03: (GX) Added the qualifier 'const' to the arguments of the functions that get the status of the display list.

  The contents of the pointer passed to the arguments of the following functions have not been rewritten; however, the `const` qualifier had not been added to the arguments so `const` has been added to them.

  - `G3_GetDLStart`
  - `G3_GetDLLength`
  - `G3_GetDLSize`

  ### Note 29-04: (OS) Added OS_GetLowEntropyData function.

  We added the `OS_GetLowEntropyData function`, which generates and returns different data each time it is executed based on the system status.
  We also added `$NitroSDK/build/demos/os/entropy-1` as a demo.

  ### Note 29-05: (PM) Corrected the return process after LCD has transitioned from OFF state to sleep mode.

  When transitioning from the LCD Off state to sleep mode and then returned, a discrepancy arose between the actual state and the internal state of the GX library. This has been fixed. (Reference:Note 22-23:(PM) Changed the recovery process after transitioning from LCD OFF state to sleep mode.)

  ### Note 29-06: (WM) Added notification to WM_SetIndCallback function callback

  Added `WM_STATECODE_INFORMATION` for notification of the callback of `WM_SetIndCallback` function. This provides a notification containing information about the events occurring internally.
  The contents of the notification are expressed with the`WMIndCallback` reason callback argument. `WM_INFOCODE_FATAL_ERROR`, which is notified when `ignoreFatalError` of the `WM_StartMPEx` function is set to TRUE and a fatal error occurred, is defined as a reason value.

  ### Note 29-07: (WM) Added WM_SetPowerSaveMode function

  Added the `WM_SetPowerSaveMode` function, which switches to power save mode during infrastructure communication.

  ### Note 29-08: (WM) Corrected problems with return process when ignoreFatalError has been set.

  When the `ignoreFatalError` argument of the `WM_StartMPEx` function is set to TRUE, it should not automatically disconnect even when a fatal error occurs with the child. However,because of a problem in this process, communication becomes unavailable after this point. This has been fixed.

  ### Note 29-09: (WM) Changed receive process on child.

  Previously, when a child received an MP frame not addressed to it, the `WM_StartMP` function would receive a notification that the "state" was `WM_STATECODE_MP_IND` and the `errcode` was `WM_ERRCODE_INVALID_POLLBITMAP`. This was changed so that no notification is sent at all.
  The MP ACK frame's `WM_STATECODE_MPACK_IND` notification was changed in a similar way.
  This change does not affect sending and receiving using ports.

  ### Note 29-10: (WVR) Corrected problem with the thumb build version of the ichneumon component

  It was confirmed that programs do not operate when the thumb build version of the ichneumon component is used. This has been corrected.

  ### Known issues in SDK 3.0 PR2

  None.

  ## ¦ NITRO-SDK Version 3.0 PR

  (2005/07/22)

  ### Note 28-01: (Cht) Added Pictocatch demo

  Added sample demo that uses Pictocatch process to `$NitroSDK/build/demos/cht/catch-min`.
  This sample implements only the bare minimum functionality so that it has less code than the previous Pictocatch sample demos.

  ### Note 28-02: (DevEnv) Support for nitro.h precompiled headers

  We added support for precompiled headers for `$NitroSDK/include/nitro.h`.
  The build system precompiles `$NitroSDK/include/nitro.h` before the build, and reads the result during building the file.
  This should result in a faster build.
  If you want to stop the compilation temporarily, set a value fo `NITRO_NO_STD_PCHDR`.

  ### Note 28-03: (FS) Changed the operations of the overlay functions.

  When there was a global object in an overlay that required a destructor to be unloaded, the destructor was called automatically. The operation has been changed so that the destructor is not called.

  ### Note28-04: (GX) Corrected sample demos

  In the `$NitroSDK/build/demos/gx/UnitTours/2D_Oam_256_16` sample demo, a bug made the +Control Pad unusable in the FINALROM build.
  This problem was fixed.

  ### Note 28-05: (MATH) Accelerated the MD5 functions

  Replaced the MD5 functions implementations. The code sizes are about half of what they were before, and the functions operate approximately 20% faster than previous implementation. The interface has not been changed. This change was added in 2.2 PR, but it was left out of the changelog.

  ### Note 28-06: (OS) Added mechanism to check for stack overflow in IRQ stack.

  Added a mechanism to check for stack overflow in the IRQ mode stack, similar to that in the thread stack.
  A check code is written at the top and bottom of the stack (or between, if necessary); by checking if these sections are rewritten, it helps to determine if the stack is filled to those points.
  Below are the functions that were added for this purpose.

  - OS_SetIrqStackChecker
  - OS_SetIrqStackWarningOffset
  - OS_CheckIrqStack
  - OS_GetIrqStackStatus

  ### Note 28-07: (OS) Added argument support using OS_GetArgc function and OS_GetArgv functions

  A mechanism that allows you to pass argument data to the ROM file, and then obtains this data using the program.
  You can use the `$(NitroSDK)/tools/bin/buryarg` tool to embed argument data and then use the data from a program by using the `OS_GetArgc` and `OS_GetArgv functions`. By using this feature, you can change the program's execution conditions without compiling.
  We added a demo that uses this feature. It is called `$NitroSDK/build/demos/os/argument-1`.
  This feature is provided for debugging purposes and is invalid in FINALROM builds.

  ### Note 28-08: (OS) OS_KillThread and OS_KillThreadWithPriority functions added

  We added the `OS_KillThread` and `OS_KillThreadWithPriority` functions, which terminate other threads. You can select one based on whether you want to set the thread priority when terminating the thread.
  The difference between `OS_KillThread` and `OS_DestroyThread` is whether the thread destructor of the terminated thread is called.
  We added a demo that compares these two functions. It is called `$NitroSDK/build/demos/os/thread-9`.

  ### Note 28-09: (OS) Implementation of thread destructors

  We implemented thread destructors that call preset functions when a thread is terminated.
  The destructors are set using the `OS_SetThreadDestructor` function.
  Thread destructors are called under the following circumstances.

  - A thread's task is executed until the end.
  - A thread is terminated with the `OS_ExitThread` function.
  - A thread is terminated from another thread with the `OS_KillThread*` function.
  - A thread terminates itself using the `OS_KillThread*` function.
  Thread destructors are not called under the following circumstances.
  - A thread is terminated from another thread with the `OS_DestroyThread` function.
  - A thread terminates itself using the `OS_DestroyThread` function.
  We added a thread destructor demo. It is `$NitroSDK/build/demos/os/thread-7`.

  ### Note 28-10: (OS) Added user parameters to thread structure

  We added a user parameter member to the OSThread thread structure.
  The system does not reference or change this area.
  This may be used for any purpose in each application.
  The following functions are for setting and getting thread parameters.

  - OS_SetThreadParameter
  - OS_GetThreadParameter

  ### Note 28-11: (OS) Removed limit on maximum number of threads

  Previously, the maximum number of threads that could be used by the OS at the same time was 16. (Normally 16, but by rewriting the header definitions, 8 to 32 is possible.) This limit was removed.
  The thread-related APIs have not changed.
  Reflecting this change, we have added two sample demos that create large numbers of threads: `$NitroSDK/build/demos/os/thread-8` and `$NitroSDK/build/demos/os/thread-10`.

  ### Known issues in SDK 3.0 PR

  None.

  ## ¦ NITRO-SDK Version 2.2 PR

  (2005/07/15)

  ### Note 27-01: (CARD) Added the CARD_CheckPulledOut function.

  Added the `CARD_CheckPulledOut` function, which determines directly from ARM9 without waiting for the notification of the result of the card removal detection process that the ARM7 performs periodically. This function is not needed for normal scenes, where the Card is not being accessed, but in scenes where you need to know without delay that the Card has been removed, you can use this function instead of `CARD_IsPulledOut`.

  ### Note 27-02: (CARD) Made compatible with new backup devices.

  Added `CARD_BACKUP_TYPE_EEPROM_512KBITS` and `CARD_BACKUP_TYPE_FRAM_256KBITS` to the enum type `CARDBackupType` so the CARD library can support 512KB EEPROM and 256KB FRAM as backup devices.

  ### Note 27-03: (CTRDG) Corrected cache operations when getting cartridge information

  Corrected the cache operations involved in the reading of the cartridge information region during the execution of the `CTRDG_Init` function. Up until now, when the cartridge information such as the maker and game code was obtained, sometimes incorrect values were returned. This problem has been corrected.

  ### Note28-04: (DevEnv) Added the bin2obj tool

  Added the bin2obj tool for converting binary files into object files. This tool operates the same way as the BinToElf tool in the CodeWarrior for NINTENDO DS package, so you can use either one.

  ### Note 27-05: (DevEnv) Provided support for times where the cygdrive prefix of CYGWIN is not /cygdrive.

  When a build was performed from the CYGWIN command line, building process failed if the cygdrive prefix was not `/cygdrive`, the default setting . This has been corrected so that builds are possible when the cygdrive prefix has been changed.

  ### Note 27-06: (DevEnv) Corrected the LCF template.

  In programs that used the LCF template in `$NitroSDK/include/nitro/specfiles/ARM9-TS-cloneboot-C.lcf.template`, the `.sinit` sections were not linked and the features of the static initializer could not be used. This problem has been fixed.

  ### Note 27-07: (DevEnv) Corrected problem with the StackSize specification for rsf.

  With `StackSize` specified in `rsf` (linker spec file), the specification that subtracts the absolute value from the maximum possible specified size when a negative number was specified for the first parameter was not valid. This has been fixed.

  ### Note 27-08: (DevEnv) Changed the default value for TS_VERSION.

  Changed the default value of the `SDK_TS_VERSION` constant that indicates the PMIC version. The value was 100 but has been changed to 200. `SDK_TS_VERSION` = 200 appears in versions E and later for the IS-NITRO-EMULATOR hardware and corresponds to the PMIC version embedded in the Nintendo DS retail product. This change does not alter the internal operations of the NITRO-SDK features, but you should be aware that this could affect applications that use this constant as a build switch for changing the behavior (such as sample demos that use the microphone) . When `NITRO_TS_VERSION` is specified as the environment variable, `SDK_TS_VERSION` takes the specified value and not the default value.
  NITRO-SDK has an OS and an SPI library prepared for every TS_VERSION.
  This is relevant when the development environment uses the TS breadboard, etc. and has owner information in an old save format. But when the save format is the same as that used for the retail DS system, the library is exactly the same.
  When the make system is used, the library for linking is selected automatically based on the environment variable. But in a development environment using IDE, you need to manually select which library to link.
  However, except in cases where the development environment used the TS breadboard, etc., there is really no meaning in selecting a library, and it is OK to use the library that gets linked by default.

  ### Note 27-09: (DevEnv) Changed the #include search path.

  Changed the `#include` search path when building with `Makefile` to include the directory of the file that has called `#include`. If the previous search path is required, enter a specification as `MACRO_FLAGS += -cwd proj` inside `Makefile`.

  ### Note 27-10: (FS) Added the functions FS_CreateFileFromMemory and FS_CreateFileFromRom.

  Added the `FS_CreateFileFromMemory` function and `FS_CreateFileFromRom` function to treat a specific memory region or Card as a temporary file to open it. Also added the sample demo `$NitroSDK/build/demos/fs/file-3` that demonstrates the operation of these functions.

  ### Note 27-11: (FS) Added the FS_End function.

  Added the `FS_End` function to return the state to what it was before the FS library was initialized.

  ### Note 27-12: (FS) Corrected problem with the FS_WaitAsync function.

  When the `FS_WaitAsync` function was called for a file handle and an asynchronous command was not yet processing in the archive, the archive processing would stop. This problem has been fixed.

  ### Note 27-13: (FS) Corrected problem during overlay unloading.

  When the `FS_UnloadOverlay` or `FS_EndOverlay` function unloaded an overlay, the destructor was not called correctly. The problem has been fixed. This applies to objects when all of the following circumstances occur simultaneously:

  - Placed in the overlay's `*.data` section.
  - The entity of the destructor is not placed in the overlay.

  ### Note 27-14: (FX) Corrected problem with the arc tangent functions.

  The arctangent functions below returned incorrect values when the (x,y) slope is extremely close to 1. This has been fixed.

  - FX_Atan2
  - FX_Atan2Idx
  This applies to (x,y) when the following conditions are met:
  ((x != y) && (FX_Div(y, x) == FX32_ONE))

  ### Note 27-15: (GX) Corrected the Sub_Double3D sample demo.

  The following correction was made to the `$NitroSDK/build/demos/gx/UnitTours/Sub_Double3D` sample demo:
  When double screen 3D and a heavy load process were put together, the image on the upper screen would occasionally instantly wrap around to the bottom screen (or visa-versa). This problem has been fixed.

  ### Note 27-16: (GX) Corrected problem with ASSERT inside functions that manipulate display lists.

  When the `G3C_UpdateGXDLInfo` and `G3B_UpdateGXDLInfo` functions were called from inside functions that manipulate display lists, the ASSERT criterion would be applied when a display list was being created that was the same size as the buffer. This bug was fixed.

  ### Note 27-17: (MATH) Corrected problem with the MATH_QSort function.

  When sorting with the `MATH_QSort` function, in some cases the target array would face over access. This bug was fixed.

  ### Note 27-18: (MATH) Accelerated the SHA-1 functions.

  Replaced the implementations of the SHA-1 functions. The code size has hardly changed, but they can operate approximately twice as fast as before. The interface has not been changed.

  ### Note 27-19: (MATH) Added Fast Fourier Transform functions.

  Added functions that perform fast Fourier transforms. Also added the demos `$NitroSDK/build/demos/math/fft-1` and `fft-2` to confirm the operation of these functions.

  ### Note 27-20: (MB) Added multiboot-wfs sample.

  Added `$NitroSDK/build/demos/mb/multiboot-wfs` as a sample of the child in Single-Card Play using the file system via wireless communications.

  ### Note 27-21: (MB) Released the debug use expanded memory region.

  For a child booted with the MB protocol, there was a restriction that prevented the use of expanded memory and forcibly set main memory to 4MB. The restriction has been removed, enabling use of expanded memory by IS-NITRO-EMULATOR and other hardware that have 8MB of main memory.

  ### Note 27-22: (MB) Added user definition expanded parameters.

  Added the `userParam` member to the `MBGameRegistry` structure. Set as much as 32 bytes of any kind of data in this buffer and use the `MB_RegisterFile` function to allow a Single-Card Play child to reference this data after startup.

  ### Note 27-23: (MI) Corrected problems with the MI_CompressHuffman function and Hufmann compression by ntrcomo.exe.

  The `MI_CompressHuffman` function and `ntrcomp.exe` had a bug that sometimes caused abnormal compression of data filled with a single value. This bug was fixed.

  ### Note 27-24: (OS) Corrected internal operation of `OS_Sleep` function

  If the `OS_WakeupThreadDirect` function was called for a thread that was in the wait state after a call to the `OS_Sleep` function, after that there would be problems with the alarm process. That has been fixed.

  ### Note 27-25: (OS) Corrected problem with the OS_TryLockMutex function.

  There were errors in the list operations on mutex stored in the OS when mutex was locked by the `OS_TryLockMutex` function. As a result, sometimes the `OS_UnlockMutex` function would cause exceptions, and problems would arise when a thread ended while mutex was still locked. This has been fixed. The `OS_LockMutex` function (which is different from the `OS_TryLockMutex` function mentioned) operates normally and has no problems.

  ### Note 27-26: (OS) Added the OS_YieldThread function.

  Added the `OS_YieldThread` function, which performs thread rescheduling and gives executable threads with the same priority level as the current thread an opportunity to execute.

  ### Note 27-27: (OS) Made internal corrections to initialization process at startup time.

  Corrected the internal processes that confirms the cache has been cleaned/invalidated at program startup time for autoload and at the time of initialization of each segment.

  ### Note 27-28: (OS) Expanded the startup screen process for Chinese-language version.

  The startup screen display process for Chinese language applications can be modified with `SDK_WEAK_SYMBOL` and made public with the `OS_ShowAttentionChina` function. Its implementation can be changed by external definitions.
  In conjunction with this, added the sample `$NitroSDK/build/demos/os/forChina-fs` to show how to load the data for images that are only used at startup from the file system without a static link.

  ### Note 27-29: (OS) Corrected problems with flushing of data cache.

  The cause of the bugs mentioned in Note 24-10 and Note 25-16 has been clarified. Along with this, the internal implementations of the functions `DC_FlushRange` and `DC_FlushAll` have been changed so that the CPU flush command is realized. Specifically, a command to wait for the write buffer to be empty had been inserted immediately before the flush command and when returning from the interrupt handler. This was done in order to avoid the symptoms of the problem, which was that a clean cache line would be invalidated when the flush command was executed when the write buffer was full. The function specifications have not changed.

  ### Note 27-30: (OS) Corrected problem when multiple OSMutex are locked.

  There was a problem with the list process of mutex stored in OSMutex. Specifically, a problem arose when one thread used the `OS_LockMutex` or `OS_TryLockMutex` function to lock more than one `OSMutex` at the same time. This has been fixed.
  The problem dose not occur when one thread only locks one OSMutex at a time.

  ### Note 27-31: (OS) Added header file-related references.

  Added explanations about the main items and the special features of the NITRO-SDK header files, placing the explanations inside the OS category of the Function Reference. Explanations were added about the following files:

  - `nitro.h`
  - `nitro_win32.h`
  - `nitro/sinit.h`
  - `nitro/code32.h, nitro/code16.h, nitro/codereset.h`
  - `nitro/dtcm_begin.h, nitro/dtcm_end.h`
  - `nitro/itcm_begin.h, nitro/itcm_end.h`
  - `nitro/parent_begin.h, nitro/parent_end.h`
  - `nitro/version_begin.h, nitro/version_end.h`
  - `nitro/wram_begin.h, nitro/wram_end.h`
  - `nitro/version.h`

  ### Note 27-32: (RTC) Added functions to convert back and forth between date/time and total passage of seconds.

  Added functions to the RTC category that convert between type `RTCDate` and `RTCTime` date/time data and the total number of seconds that have passed since January 1 of the year 2000. Also added functions that convert between type `RTCDate` data and the total number of days that have passed. The demo that can be used to confirm these operations is `$NitroSDK/build/demos/rtc/convert-1`.

  ### Note 27-33: (RTC) Added restrictions to APIs for changing date and time.

  APIs have been prepared for debugging purposes that can change the RTC's date and time. To avoid incorrect use of these APIs in non-debugging applications, a restriction has been introduced that causes any request to write to the RTC to fail if `NITRO_FINALROM` has been specified. Following are the APIs whose operations have been changed:

  - `RTC_SetDateTimeAsync`
  - `RTC_SetDateTime`
  - `RTC_SetTimeAsync`
  - `RTC_SetTime`
  - `RTC_SetDateAsync`
  - `RTC_SetDate`

  ### Note 27-34: (WBT) Corrected wbt-fs sample demo

  The following correction was made to the sample demo `$NitroSDK/build/demos/wbt/wbt-fs`:
  Table memory processed with the FS_LoadTable function would not be released with every connection and disconnection, but instead would continue to be maintained, causing memory leaks. The problem has been fixed.

  ### Note 27-35: (WBT) Corrected WBT sample demos

  The following revisions were made to the `$NitroSDK/build/demos/wireless_shared/wc` sample module and the `$NitroSDK/build/demos/wbt/wbt-1` demo:
  During continuous MP communications, the wireless parent would unconditionally overwrite the Send buffer when a new child was connected. Depending on the timing, data would be sent to wireless hardware while data was being loaded to the Send buffer, and this would result in WBT packet mismatches. This problem has been fixed.
  To fix the problem, a process was added to `$NitroSDK/build/demos/wbt/wbt-1/src/main.c` that defines one of three actions for the WBT parent to take based on the information it has on the current child connection situation:
  1) If it is the first child, commence MP communications.
  2) If it is the second or higher child, do nothing. (It is OK to do nothing, since continuous MP communications are taking place.)
  3) If there is no child, end continuous MP communications.
  Since the above process requires information about the disconnection of child units, `$NitroSDK/build/demos/wireless_shared/wc/wc.c` has been revised so that a callback is called on the sample side when a child is disconnected.

  ### Note 27-36: (WM) Clarified the specification changes and planned abolition of Key Sharing functions.

  In order to reduce the amount of memory used by WM, the specifications have been changed for these three functions that are almost never used: `WM_StartKeySharing`, `WM_EndKeySharing` and `WM_GetKeySet`. Along with this change, a fixed buffer for Key Sharing is now secured when WM is initialized. In addition, since the Key Sharing features are scheduled to be abolished at a later date, a section was added to the document asking that programmers instead use the functions `WM_StartDataSharing`, `WM_EndDataSharing`, and `WM_StepDataSharing`.

  ### Note 27-37: (WM) Changed the internal operations of the WM_StartScanEx function.

  It has been determined that when an SSID filter is specified by the `WM_StartScanEx` function, sometimes the SSID inside the discovered parent information has invalid data that differs from the specified SSID. To deal with this problem, a process has been added inside the WM library that, when necessary, overwrites the filter-specified SSID with the SSID inside the discovered parent information.
  Note that this only happens when the parent is using infrastructure mode communications and is hiding its SSID.

  ### Note 27-38: (WM) Updated WMTestTool.srl

  Updated the tool that is used for testing wireless communications: `NitroSDK/bin/ARM9-TS/Rom/WMTestTool.srl`. Up until now, when an access point was discovered during scanning, the message "WLAN AP" was displayed. That has been changed so that now the SSID is displayed. This was was implemented for both Scan Test mode and ScanEx Test mode.

  ### Note 27-39: (WM) Deterred MP communications when child not connected.

  Up until now, when the wireless communications parent called the `WM_StartMP` function, it would send an MP frame even if no child was connected. This has been changed so the parent does not do this. The basic behavior of the port's send/receive callbacks has not changed.

  ### Note 27-40: (WM) Corrected problem with notification when child disconnects

  During MP communications, when the child responded with nothing but NULL and the communications timed out, the notification `WM_STATECODE_DISCONNECTED` would get posted multiple times to the parent's callback `WMStartParentCallback`. This has been fixed.
  This problem mainly occurred when a child was started by IS-NITRO-DEBUGGER and was paused for a long time during MP communications.

  ### Note 27-41: (WM) Added restriction on number of MP communications per frame.

  Up until now, during continuous communications mode and after communications failed repeatedly, transmissions would just keep on happening. But in a situation where only empty data is being sent and received, the number of MP communications expands rapidly and the child's data-receiving process cannot keep up. This can trigger problems. To counter this problem, a restriction has been set that limits the number of MP communications that the parent can send in one frame to 6 (including resends). This restriction is not placed on normal communications.

  ### Known issues in SDK 2.2 PR

  None.

  NINTENDO Technical Support Center