OS_Sleep function
(2006/08/28)
Added a note that the CARD_GetRomHeader function can obtain the correct information only with an actual production console.
A bug was corrected where the anti-alias ON/OFF display in the $NitroSDK/build/demos/gx/UnitTours/AntiAlias sample demo was incorrectly displayed in the initial state (and only in the initial state).
Added OS_CheckFunctionCostBuffer and OS_CheckStatisticsBuffer functions to check whether the buffer used for the function cost calculation is full.
An issue was corrected where the backlight occasionally turns off when a card is removed during wireless communication.
The following changes have been made to the individual sample library of $NitroSDK/build/demo/wireless_shared.
None.
(2006/08/17)
A bug was corrected where the console would not power down properly when a card was removed during wireless communication with the clamshell closed.
When the status of a divider was restored using the CP_RestoreContext function inside an interrupt, the status of the divider was occasionally not completely restored at the completion of the interrupt.
To correct this issue, a wait was added in the CP_RestoreContext function.
The precautions regarding the use of CP functions inside interrupts were included only on the function reference pages for the CP_SetDiv function, the CP_SetSqrt function, and the CP_RestoreContext function. A caution and sample code were added to the CP overview page and the function reference pages for the other CP functions.
Furthermore, a link to this precaution was added to all the function reference pages of functions that use a divider internally.
An issue was corrected where, if a soft reset was performed with a Game Pak inserted after first powering up without one, that Game Pak would actually be recognized. This occurred due to the fact that Game Pak recognition was performed during a soft reset in addition to the recognition performed during the usual console startup.
The function OS_SleepThreadDirect, capable of putting a specified thread directly into sleep mode, was added.
Made changes so that thread switching in the OS_RescheduleThread function is executed with interrupts disabled.
Added a wait process so that the default V count value is constant at program startup.
A problem was corrected where some code in the PRC SuperFine algorithm was using the divider without having interrupts disabled.
Function specifications have been changed so that the number of source characters that have been converted can also be retrieved in the same manner as the number of characters stored after conversion.
A problem was corrected where the WBT_CMD_REQ_GET_BLOCK_DONE notification was not being issued at the time of completion when using the WBT_CMD_PREPARE_SEND_DATA notification with a NULL buffer specified for the WBT_RegisterBlock function.
A problem was corrected where it was not possible to manage the connection status normally with the $NitroSDK/build/demos/wbt/wbt-1 sample demo when disconnection and connection was carried out repeatedly and the same mode was selected two or more times.
A problem was corrected with the WM_SetWEPKey/Ex function where the function would not function normally if NULL was specified for wepkey when wepMode was WM_WEPMODE_NO.
A problem was corrected where wepMode would not reset in certain cases, such as when the status changed from parent to child.
A bug was found where the wepMode of the parent attempting a connection was being set to the child side. This has been changed to reflect instead the value from the WM_SetWEPKey/Ex function called from the child.
The following changes were added to the wh sample library located in $NitroSDK/build/demo/wireless_shared.
None.
(2006/07/25)
In certain instances, the console did not power down when the card was removed with the clamshell closed.
This problem was corrected.
During the ITCM/DTCM allocated area overflow check using the lcf template file, the allocated area had been calculated as non-overlapped. This was still seen when an overlay area was configured in ITCM/DTCM and the area was actually overlapped through the use of overlays.
In certain cases, this resulted in errors when free space was still available.
Because the ITCM/DTCM size check process with added overlay is not very well implemented in the lcf template, the overlay area will not be part of the used area check.
For this reason, application developers must pay careful attention to the management of the size of the overlay region on ITCM/DTCM.
Specifically, attach a dummy variable at the end of the ITCM/DTCM region and check whether the variable address is out of bounds.
In the function reference page for MATHCompareFunc, the description given in "Return Values" was the opposite of the actual operation. This was corrected.
Following the changes described in Note 39-05, MATH_QSortStackSize function was changed to not return a value less than or equal to 0.
In the $NitroSDK/build/demos/mb/multiboot-PowerSave sample, the MB_SetPowerSaveMode function was not actually being called. This was corrected.
Specifications have changed so that the default lifetime value used for wireless control within the MB library is the same as that set for the WM library.
The following changes have been made in the character code conversion functions.
The following changes were made to the VIB library.
The WH_SetSsid function was added to the WH sample module in $NitroSDK/build/demo/wireless_shared/wh.
When terminating a parent using the WM_EndParent and WM_Reset functions, a new child would sometimes connect immediately after the parent disconnected as part of termination processing. The specifications have changed so that the newly connected child is now automatically disconnected in such cases.
The WM_DISCONNECT_REASON_NO_ENTRY notification will be sent to the child as the reason for the disconnection.
None.
(2006/07/07)
A bug was corrected where the automatic card removal detection did not work properly on the ARM7 processor side if a card was removed immediately after the program started.
Added a note to the AGB backup access function reference page stating that IS-NITRO-DEBUGGER version 1.66 and earlier cannot properly access the AGB backup device.
Numerous errors were corrected in the following document describing AGB cartridge backup access for the Nintendo DS.
$NitroSDK/docs/TechnicalNotes/AboutAGBBackupforDS.pdf
We ended support for the older versions of CodeWarrior, namely, version 1.0.2 and earlier, in the common definition file commondefs.cctype.CW used by the make system.
Due to this change, the supported version of the compiler is version 1.2 and later.
A problem was corrected where the function would not execute normally if the number of pieces of data to be sorted was 0 or 1.
When compressing data using the MI_CompressLZ or MI_CompressLZFast functions, the compression failed if the data after compression was larger than the data before compression. When this occurred, a 1byte out-of-bounds access was seen in the compression target buffer.
This problem has been corrected.
8-bit versions of functions for Endian conversion have been added.
These have been created to standardize the look of the source code. They do not perform an actual conversion.
Due to an error in the conditions set by the exception handler, there was a problem such that the user-specified exception handler could not be called when a program was executed by loadrun.
This has been corrected so that the correct conditions are used.
During function cost calculation, an interrupt occasionally recorded a new cost calculation during the _PROFILE_ENTRY and _PROFILE_EXIT function input/output record save operation. This prevented accurate cost calculations. The issue was circumvented by prohibiting interrupts in the appropriate section of os_functioncost.c.
As a result of the changes described in "Note 36-13: (PM), Changes to the PM_ForceToPowerOffAsync function," the device would not power down when a card was removed while the LCD was turned off even if the device was closed because PM_ForceToPowerOffAsync could not be called while interrupts were disabled.
This problem has been corrected.
The description on the function reference page for the PM_GoSleepMode function did not take into account the applicable guidelines. This has been corrected.
There have been cases where the RTC alarm interrupt stopped working after recovering from sleep mode if the RTC alarm was not included in the recovery parameter.
This has been corrected.
An error on the STD_CopyLString function reference page has been corrected.
The STD_CopyLString function has been changed to operate in the same manner as the strlcpy function since it was implemented under a different specification from the standard strlcpy.
The function return value has been changed from a 'char' type pointer, which indicates the copy target pointer, to an 'int' type value, which returns the length of the source string.
In addition, the old STD_CopyLString function, implemented under different specifications from strlcpy, has been added as the function STD_CopyLStringZeroFill. The return value has been changed to an int type value that returns the character string length of the source string just like the function STD_CopyLString.
The difference between these two functions lies in the fact that, if the copy size for STD_CopyLStringZerofFill is larger than the source string, the difference is padded with NULLs.
Functions for performing conversion between Shift_JIS and Unicode character strings have been added to the STD library.
We have also added the demo, $NitroSDK/build/demos/std/unicode-1, to show how to use these functions.
Beginning with CodeWarrior 2.x, a symbol search target overlay group may be specified when linking.
The lsf file format was extended and the SearchSymbol command supported in order to support this feature.
The makelcf command and lcf template file were also modified in line with this change.
For details, see the makelcf manual.
With this change, CodeWarrior 2.0 is now officially supported.
A description of the -f option has been added to the function reference page for the compstatic tool.
Part of the ROM format has been changed to support the new 1Gbit/2 Gbit ROMs. For a ROM image of 1Gbit or larger, a fixed size area of the top level became a system reserved area.
Beginning with NITRO-SDK 3.2 PR, the ROM format output that conforms to this new specification will be the default setting for makerom.
Add -V1 to the makerom options to output a ROM image in the old format that was used before NITRO-SDK 3.2 PR.
We have made an addition to the rsf file, which specifies the operation of the makerom tool, to check whether the given RomSize and RomSpeedType combination can actually be made into a ROM.
If RomSpeedType is MROM, RomSize must be 512 Mbit or less.
If RomSpeedType is 1TROM, RomSize must be 128 Mbit or more.
Made the following changes to the WM sample demo.
The state check inside the WM_EndDataSharing function has been deleted in line with the change described in Note 39-23.
The link level value that can be retrieved using the WM_GetLinkLevel function has been adjusted for the case where a Wii console is the MP parent.
Functionality to call the WM_EndDataSharing function has been added inside both of the wc and wh Reset functions. This was done because the WM_EndDataSharing function was not called by either the wh or the wc sample libraries located under $NitroSDK/build/demo/wireless_shared.
When a WM library function was called from a different thread or an interrupt handler during the execution of the WM_Init function, initialization was taken to be completed even if it was not. This created the risk of unexpected or illegal operations.
A similar state management problem was seen in the WM_Finish function as well.
These problems have been corrected.
An issue with the port callback initialization in WM initialization function resulted in unnecessary warnings. This has been corrected.
The internal state of WM would occasionally become invalid if repeated connections and disconnections were made frequently. This has been corrected.
None.
(2006/05/02)
Variables adjacent to the transfer destination buffer used for DMA transfer from ROM were being affected by cache operations if the buffer cache line was not aligned on a 32-byte boundary. This has been corrected.
Added functions to the CTRDG library to access the backup device installed in the AGB cartridge.
The CTRDG_SetPhiClock and CTRDG_GetPhiClock functions have been created for setting and getting the clock value output from the PHI terminal of the cartridge.
MI_SetPhiClock and MI_GetPhiClock provided the same functionality in previous versions, but this was changed to CTRDG_ when categories were reviewed.
Even for internal operations, the CTRDG_SetPhiClock function was changed to set the clocks of both the ARM7 and the ARM9.
Previously, it changed only the setting of the ARM9. However, the clock output pattern would change when moving the cartridge access right to the ARM7.
The operation of the CTRDG_GetPhiClock function for getting the clock settings is the same as the MI-GetPhiClock function.
Processing would not complete if the callback function set using CARD_SetPulledOutCallback returned FALSE and an attempt was made to access ROM files using a function like FS_OpenFile before the CARD_TerminateForPulledOut function could be called. This problem has been corrected.
This problem did not occur when loading a file table into memory using FS_LoadTable.
Changed FX_Mul so that a message was displayed by SDK_WARNING if digits overflow.
Additions were also made to the function reference page.
Correct results could not be obtained when the value passed to this function was greater than a particular value. It was changed so that a message is displayed by the SDK_WARNING macro when the value is greater than that particular value. This problem has been fixed.
Additions were also made to the function reference page.
Added a note to the function reference page for the G2_SetBlendAlpha function that a backdrop cannot be specified for the first target screen.
This function is used when sorting using the MATH_QSort function. A note was added to the function reference page for MATHCompareFunc stating that 0 must be returned if the two elements being compared are equal.
The problem where out-of-bounds access would occur during LZ compression that was revised in Note35-04 is not reflected in MI_CompressLZ, which is the low-speed version of the LZ compression function.
This problem has been corrected.
A problem was corrected where OS_GetConsoleType might return a value that differs from that described on the function reference page.
When using CodeWarrior 2.0 in the $NitroSDK/build/demos/os/exceptionDisplay-2 sample demo, the required function would be dead stripped. This problem has been corrected to explicitly prevent the dead stripping.
The stroke order for the Japanese character "GE" in the demo figure dictionary data was incorrect. This problem has been corrected.
- Provisional support for CodeWarrior 2.0. However, accompanying changes will have no effect on current applications.
We plan to officially support the extended language codes in the next release.
(2006/04/11)
Made the Card Library compatible with the 8 MB Flash Backup Device. Added CARD_BACKUP_TYPE_FLASH_8MBITS to the CARDBackupType enumerated type.
The function reference page and sample demos were updated accordingly.
Data placed in a .bss section that did not include initial values was accidentally being placed in the .data section. This occurred because a .bss section had not been specified in the .itcm/.dtcm/.wram section.
Changed $NitroSDK/build/tools/makelcf and $NitroSDK/include/nitro/section.h. Changed the .template files found under $NitroSDK/include/nitro/specfiles and $NitroSDK/build/components/ichneumon. Added a .bss section to .itcm/.dtcm/.wram.
A NITRO-SDK build error would sometimes occur depending on the version of the sed command that was run. This problem has been corrected.
Added descriptions of the MTX_Copy* functions to the FX category of the Function Reference.
The following were added to the Function Reference:
Added 0xFF, an undefined geometry command, as the dummy command G3OP_DUMMY_COMMAND.
It has been confirmed that the number of command cycles corresponding to each source increases when an environment map is used.
Information about this was added to the geometry command cycle list in the Function Reference.
Added a group of functions for reading and writing memory with full awareness of little-endian and big-endian issues.
An error would be returned if the heap handle specification was OS_CURRENT_HEAP_HANDLE.
This problem has been fixed.
Corrected a mistake in the graphic about arena management and memory allocation in the OS arena overview in the Function Reference. Also added descriptive text.
Adjusted stack processing so that the stack pointer is always aligned on an 8-byte boundary during a function call.
Corrected a problem with the specification changes given in Note 36-13.
Added the SND_SetTrackMuteEx function for selecting the processing to apply to a sound that is played while a sequence track is muted.
Changed the description for getting the authentication code on the function reference page for the attachsign tool.
When an attempt was made to convert ppm files created with Photoshop (using a NetPBMformats plug-in), the message "Cannot convert file "xxxx.ppm" was displayed and conversion failed.
The problem was due to the fact that the processing implemented for analyzing file headers did not fully cover ppm specifications.
This problem has been fixed.
Several ppm files that could not be converted previously can now be converted.
This fix has no impact on the ppm files that could already be converted correctly.
The SVC_WaitVBlankIntr function, which was deleted from the source code for all sample demos in the NITRO-SDK (as described in Note 36-15), was being used in the pulse_vib sample demo. Consequently, this function was changed to OS-WaitVBlankIntr.
Furthermore, the specifications were changed so that the sample does not stop even if parameters that violate restrictions on the Rumble Pak library are entered.
If the number of children specified by the user (WH_CHILD_MAX) was less than WM_NUM_MAX_CHILD, the WM_GetSharedDataAddress function would be called instead of WH__CHILD_MAX. This problem has been fixed.
Added the sample demo $NitroSDK/build/demos/wm/wireless-all to show the comprehensive use of WM library functions.
Made the following changes to the WM sample demos.
- Added a series of functions to the CTRDG library for accessing the backup device installed in the AGB cartridge.
However, correction functioning is not guaranteed because verification of these newly added AGB backup access functions is not complete.
We plan to officially support the extended language codes in the next release.
- Provisional support for CodeWarrior 2.0. However, accompanying changes will have no effect on current applications.
We plan to officially support the extended language codes in the next release.
(2006/03/14)
In the past, it was not possible to execute pull-out detection of another device when continuously locking one of the card or cartridge buses using the OS_Lock* function over an extended period of time. This has been changed in the current release so that pull-out detection can be performed.
Specifications have been changed when the CARD_CheckPulledOut function is called multiple times so that a callback function is not called every time. The callback can now be called only once when calling the CARD_CheckPulledOut function or because of ARM7 pull-out detection.
In order to avoid sudden write access to the AGB cartridge region, processing for changing the initial settings of the protection region have been added to the CTRDG_Init function. When writing to a cartridge, cartridge information must be checked and the CTRDG_Enable function must be called.
Note that processing will be forcibly stopped when outputting a debug string using OS_Printf or another function unless you are using IS-NITRO-DEBUGGER version 1.65, which is compatible with this function.
The function CTRDG_CheckPulledOut has been added for quick cartridge pull-out detection from the ARM9.
Changes were made so that correct settings are made by the G2_SetBG3ControlDCBmp function before the GX_LoadBG3Bmp function when using the sample demo $NitroSDK/build/demos/gx/UnitTours/2D_CharBg_Direct.
There were incorrect descriptions of the bitmap BG in the Function Reference information for the G2_GetBG2ScrPtr and G2_GetGB3ScrPtr functions. This problem has been fixed.
MB_FAKESCAN_PARENT_BEACON was added to the events about which the MBFakeScanCallbackFunc callback receives notification. This notification is sent each time an MB parent beacon is received.
In line with this, processing for using the MB_GetUserVolatData function with the sample demos multiboot-Model and fake_child has been added.
The magicNumber and ver members of gameinfo, which should usually be specified inside the MB_ReadMultiBootParentBssDesc function, remained uninitialized. This problem has been fixed.
The changes described in Note 20-08: were not applied to the clone boot sample. Further, retry was impossible if even one attempt at connection to the parent failed when reconnecting to a parent after a child's boot. This problem has been fixed.
The following document about the MB library has been updated.
$NitroSDK/docs/technicalNotes/AboutMultiBoot.pdf
A note was added to the Function Reference that there is a restriction which does not allow extended main memory to be specified as a buffer for storing sampling results when performing auto-sampling for the microphone. No change has been made to library operations.
The constant PM_AMPGAIN_DEFAULT used inside the PM_GAINAMP_DEFAULT macro was not actually defined. This has been corrected and PM_AMPGAIN_DEFAULT has been added to the PMAmpGain enumerator type.
When an application attempts to turn off power to the DS unit, the DS main unit will occasionally restart if main power was turned off during the LCD OFF status.
The specifications of the PM_ForceToPowerOff and PM_ForceToPowerOffAsync functions have therefore been changed so that power is turned off after the LCDs are turned on.
When using wildcards to specify files to be stored in ROM with makerom, the order in which the files were stored depended on the order in which the entries appeared in the PC file system. Consequently, the order in which files were stored would change across different PCs regardless of the fact the same application was being built.
This problem was fixed so that files are now sorted by name before being stored when using makerom.
The VIB library has been added to control the Rumble Pak option cartridge for the Nintendo DS.
We fixed the following problems with the WFS sample module compiled in $NitroSDK/build/demos/wireless_shared/wfs.
The fact that the following commands can be directly issued from one child to another was described incorrectly in the Function Reference. This problem has been fixed.
The item "Overview" was added to the WBT library function reference page.
Specifications were changed so that a Null response would not be returned from children in the middle of MP communication as described in Note 30-06. However, this would occasionally result in unstable operations depending on the environment. Consequently, the change described in Note 30-06 has been canceled and the previous specification has been restored.
In addition, instead of allowing Null responses from child devices, if a parent device receives a Null response from a child device, it assumes that the child device had a communication failure.
Since the WM_SetMPInterval function has been added, excess load problems on the child side should not result even if changes are made later on to allow Null responses to be returned.
The definition of the WMGameInfo structure has been changed. The version field was eliminated and the name was changed to magicNumber. The magicNumber field is fixed at 0x0001 when used as a DS beacon. In addition, the ver field has been established using one byte from reserved memory.
In the current version, the ver field is always 0. In the future, this will increase as the format of the WMGameInfo structure changes. To ensure backward compatibility in the future, there must be no restriction on operations based on checking the ver field. Due to these changes, it is necessary to re-write programs that accessed WMGameInfo.version.
In addition, the name of the field gameNameCount_attribute has been changed to "attribute." Although this field can be accessed using the old name, be sure to use the new field name from now on.
In addition, support of the compile switch WM_GAMEINFO_TYPE_OLD, which is never used, has ended due to this change.
WM_IsValidGameBeacon and WM_IsValidGameInfo functions were added to determine whether or not the scan result beacon is that of a DS wireless play parent. Internally, a determination is made whether or not WMGameInfo.magicNumber is correct. In addition, each WM demo has been changed to use this function.
Communications would be discontinued after a set time interval and the MP lifetime would run out when the MP communications option minPollBmpMode was enabled. This problem has been fixed.
Only titles that perform special communications using minPollBmpMode are affected by this problem.
The following document about the WM library has been updated: $NitroSDK/docs/technicalNotes/AboutWirelessManager.pdf
Corrected the descriptions of macros where () were not attached to arguments.
This change has no effect so long as no arguments are being used where the functionality changes depending on the presence or absence of parentheses.
The following macros have been changed.
None.
(2006/01/16)
Added overviews to the Function Reference pages in the CARD library.
Added a Function Reference page for the packnlf tool.
The source code format with respect to indents and carriage returns has been standardized in the library and demos.
There was a possibility when using the MI_CompressLZFast function for LZ compression that there would be out-of-bound memory accesses.
The same problem was found in ntrcomp.exe after NITRO-SDK 3.0 RC2. There was also the possibility of unusual termination or a slight increase in the size of compressed data.
These problems have been fixed.
An infinite loop inside the library would result if the cartridge bus was locked when the OS_ResetSystem function was called because this function internally accesses cartridges. This problem has been fixed.
This problem appears only in NITRO-SDK 3.0 RC3.
Changes described in Note 32-23 resulted in the display of garbage characters on the startup screen. This problem has been fixed.
The stroke order of the Japanese character "KE" in the figure dictionary data for the demo was wrong, so "KE" in the figure dictionary demo was corrected.
Changed the debug output of the sample libraries wh, wfs, and wc in $NitroSDK/build/demo/wireless_shared to display "0x" before hexadecimal numbers.
MP communications could fail easily depending on the environment. Improvements were therefore made by making changes to the communications internal parameters.
None.
(2005/12/26)
The following inline function groups which perform bit operations were added:
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.
Transfer rates were adversely affected where WM_ERRCODE_SEND_FAILED was issued frequently on the parent device in bad communication environments during block transfers in the MB library. This problem has been fixed.
The ARM946E-S, a CPU on the Nintendo DS, does nothing when the pld instruction is executed. This fact has been added to the function reference page for the DC_TouchRange function, which executes that instruction.
Depending upon the initial value of the thread structure initialized with OS_CreateThread, an access exception error would be raised when the thread was executed. This problem has been fixed.
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 problem has been fixed.
The value of the result member of the arguments to the user callbacks that indicates command completion was not being set. This problem has been fixed.
The configuration of each of the MP communication parameters added in 3.0 RC2 was not functioning properly. This problem has been fixed.
Previously, all of the SDK demos that used WH referenced $NitroSDK/build/demos/wireless_shared/wh/wh_config.h directly 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/.
Internal operations are sometimes affected immediately after a disconnect. The WM library was modified to address this.
None.
(2005/12/05)
CARD_RESULT_TIMEOUT can be returned even if the backup write succeeds if the backup write is small and it executes during wireless communication. This problem has been fixed.
Added the following group of functions for controlling access permissions to AGB cartridges.
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.
Added SDK_INLINE and SDK_DCL_INLINE as macros for specifying inline functions.
This allows the format of inline specifications to be changed all at once.
The entire NITRO-SDK must be rebuilt if these macros are changed.
Code size can be reduced by changing these macros from static inline to inline. This applies only when using the environment with the compiler version in which the inline function problem was fixed and only when using functions that changed from inline to static inline.
Since changing these macros could produce uncertain results, base the decision to use them on the needs of the application.
Character strings could not be included in a banner file if the start of the game title or descriptive text happened to match a specified parameter described in the bsf file used by the makebanner tool. This problem has been fixed.
$NitroSDK/tools/bin/ntexconv.exe has been updated to the version of netconv.exe inside the latest release of the TXLib package.
Although the functioning of the SDK does not change because ntexconv.exe is used only during the creation of icon images, the version of ntexconv.exe in the SDK can now be used even when creating textures.
The paknlf tool has been added. This tool collects all file specifications referenced by a .nlf file as absolute paths and outputs them as a ZIP file.
Although this tool was included it NITRO-SDK 3.0 RC, it was not mentioned in the changelog.
The following correction was made to the MBP sample module included in $NitroSDK/build/demos/wireless_shared/mbp:
The buffer size required to call the MB_FakeInit function has been defined as MB_FAKE_WORK_SIZE. This value is defined as the size of the data retrieved by the conventional MB-FakeGetWorkSize function.
Applications could fail to detect that they were sharing the same GGID when using wireless play and download play. This could happen because the WM_ATTR_FLAG_MB flag remained disabled while only the WM_ATTR_FLAG_ENTRY flag was enabled for the first beacon that was sent by an MB parent device.
The function M_CompressLZFast, which requires a work buffer of about 9 kB, has been added to perform LZ compression at rates several times faster than MI_CompressLZ, the function that has been available for LZ compression.
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.
Standard specifications are used if this switch is not specified.
This build switch is enabled only for the OS library. The OS library must be rebuilt if the setting is changed.
SVC_WaitVBlankIntr does not release resources to low-priority threads. Since this would cause problems depending on how the function was used, a call to SVC_WaitVBlankIntr is now automatically replaced by a call to OS_WaitVBlankIntr. Note, however, that this replacement is made using defines inside a header file. The desired result is achieved only after the first rebuild.
The result of this change is actually a slight increase in overhead until V-blank interrupt wait operations are executed. 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 since the problem with threads remains unresolved if you do this.
or Note 32-18: Although it was reported in Note 32-18:(OS) Improved V-blank wait function that the SVC_WaitVBlankIntr function could be overwritten by another definition using weak symbols, the original functionality has been restored because the need for weak symbols has now been eliminated.
Deleted OS_InitPrintServer and OS_PrintServer from all NITRO-SDK sample demo source code.
Deleted PXI_Init from all NITRO-SDK sample demo source code.
Demo operations are not affected by this change.
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.
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.
We fixed the following problems with the WFS sample module compiled in $NitroSDK/build/demos/wireless_shared/wfs.
Processing inside the sample demo below, which uses the WFS sample module, has been changed so that parent disconnections during a read by a child calling FS_ReadFile can be detected.
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.
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 effect this setting. Due to restrictions on the implementation, these values must be set either in the range 220 to 260 or the range 0 to 190.
The ARM7 operates actively during communication processing and frequently blocks 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.
Until now, the size of transmissions sent using MP communication have been fixed at values given by the parentMaxSize and childMaxSize fields of the WMParentParam structure that the parent sets with the WM_SetParentParameter function before communication starts. 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 parent executes the WM_StartParent function. Smaller values than these can be set using the WM_SetMPParentSize and WM_SetMPChildSize functions. However, the default initial values cannot be exceeded. Setting the parent send size on the child side is meaningless. However, the setting 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 since the smaller the amount of data, the shorter the radio signal output. Still, the child side always sends out a radio signal with the number of bytes designated in childMaxSize. Thus, by reconfiguring the necessary size, the transmission time can be reduced and communications can be stabilized. Given the current implementation, if an amount of data larger than the send size (as modified using these functions) has already been configured by the WM_SetMPDataToPort function, that data will not be sent. Instead, it will just continue to collect in the send queue.
The function WM-SetMPInterval has been added to allow setting the time interval between one MP communication and the next. This occurs during MP communications in continuous communication mode and 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 the children. Throughput can be increased by adjusting this value. However, throughput may also be worsened due to dropped data if the MP communication interval for the parent is shorter than the time it takes the children to process the received data. Generating unnecessary resends will also adversely affect the bandwidth efficiency.
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.
The text output screen displayed at the startup of the sample demo $NitroSDK/build/demos/wm/dataShare-Model would sometimes break. This problem has been fixed.
Although the maximum number of MP communications per frame (including resends) used to be fixed at six, 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 so that maxFrequency is also set to the value of mpFreq.
If a send fails, a correction is applied to the receive signal strength level that can be retrieved by WM_GetLinkLevel. However, this correction is performed differently for the parent than for the children. The receive signal strength level for the parent and for the children can differ greatly even under the same conditions.
To solve this problem, the standard to detect failed transmission of a parent was relaxed. In this way, the reception strength level of the parent became closer to that of the child.
A special option has been added to ignore various validity checks (pre-check of the send/receive size setting value, send/receive buffer size, and communication time limit of 5600 microseconds) that were done in the WM_StartMP function. 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 adjusted according to changing conditions, such as the number of children that are connected. In the application, do not to exceed the communication time limits or the send/receive buffer size. If the send buffer size is insufficient and an attempt is made by the parent to start MP communications, this will be detected at execution time. If the condition continues, communication will be cut off because of the timeout on MP lifetime.
Unexpected behavior was reported where several event counters were cleared when accessing buffers located in a particular address space in wireless hardware.
Consequently, the event counters may have a value that is less than the actual event counts.
Some event counters retrieved by WM_GetWirelessCounter may not have the correct values.
Information has been added to the Function Reference about this.
None.
(2005/11/07)
When an EEPROM device was 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.
Added detection of whether the card had been removed after every read performed by the CARD_ReadRom function or the CARD_ReadRomAsync function.
As a result, the application will no longer refer to invalid data before it receives a notification of the remove-detection callback.
Modified the Card Library to support the 4 MB Flash Backup Device. Added CARD_BACKUP_TYPE_FLASH_2MBITS to the CARDBackupType enumerated type.
The Function Reference and sample demos were updated accordingly.
The #pragma define_section parameters were incorrectly written as being delimited by commas, namely:
“#pragma define_section DTCM ".dtcm",".dtcm",abs32,RWX.”
They were changed to be delimited by a space, namely:
“#pragma define_section DTCM ".dtcm" abs32 RWX.”
Correct any other erroneous descriptions like the one above in the same way.
Added the xml2env tool to convert resource data for the ENV library written in XML format to the C source file format. Also added the init2env tool for converting resource data for the ENV library written in INIT format to the C source file format.
In the NITRO SDK 3.0 PR - 3.0 PR4 packages, there was a flaw in the script used when creating packages that resulted in the THUMB version ichneumon components not operating correctly.
This problem has been fixed.
(DevEnv) Changed the version of CodeWarrior used for the SDK package build to 1.2SP1.
Also made it so that the build numbers of the CodeWarrior compiler and linker used to build to $NitroSDK/include/nitro/version.h are recorded.
Added an explanation of the compilation target to the function information in the Function Reference.
Added a reference to the ENV library
Changed the ENV_Init function. Added the function ENV_AppendResourceSet. Previously, ENVResource was passed as an argument to the ENV_Init function. Now, several ENVResources can be registered.
The condition parameters of the ASSERT used by G3BS_LoadMtx43 were wrong. This problem has been fixed.
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.
There was a bug in the MATH_QSort function. It was possible that some values would not be sorted properly in either ascending or descending order after being sorted.
This problem has been fixed.
If the IRQ stack size on the ARM7 side was set to 0 or was 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 the fix, the calculations were correct.
However, since the stack area specification was defined with a positive value in the previous mongoose and ichneumon, there functioning is the same whether before or after the correction.
Since the mongoose and ichneumon SDK attachments are used in typical game applications, they are not influenced by this change.
Added the OS_GetTotalOccupiedSize function, which gets the memory size used in the heap.
The existing OS_GetTotalAllocSize function totaled the size of the data area of the memory block being used. The OS_GetTotalOccupiedSize function, on the other hand, also adds in the size of the header portion of the memory block.
When the FINALROM is built, the OS_PutString function was replaced with unreachable code, but the dead code stripping of the argument was not executed. This problem has been corrected. Now, none of this function is executed and the dead code stripping of the argument is performed.
Conditions are inspected when compiling. The SDK_COMPILER_ASSERT macro was added to generate a compilation error if those conditions are not met.
When waiting for a VBlank interrupt using the SVC_WaitVBlankIntr system call, the thread called for this function does not stop. There is thus a problem that resources are not obtained by lower priority threads while waiting for the interrupt. The cause is in the system call. The OS_WaitVBlankIntr function was created as an alternative that stops the thread while waiting for a VBlank interrupt. Also, the SVC_WaitVBlankIntr function which calls the system call was made into a weak symbol. It was also modified so that it could be overwritten by another definition.
In functions that take as an argument a pointer to a cache operation function that starts with DC or IC, use const for internal operations that do not change the content.
The functions that were changed are:
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 overwritten. For this reason, the stack check was not operating correctly. This problem has been fixed.
In the ROM image, 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 at run time. See the OS_SetArgumentBuffer function and the OS_GetArgumentBuffer function.
Also, we have made available the OS_ConvertToArguments function for converting a character string to an argument data buffer.
The macro that changes both actual time and tick values in functions such as OS_SecondsToTicks and OS_TicksToSeconds was corrected.
Calculations were being done with 32-bit accuracy. When too large argument was given, overflow occurred and the correct value was not returned.
The correction is as follows.
-Internal operations in existing macros have been changed to use 64 bits.
-If you explicitly want to use 32-bit internal operations, the following functions are available:
The Chinese version startup screen, which is displayed with OS_InitChina, has been updated.
When a certain thread registered with the thread queue was terminated by functions such as OS_DestroyThread or OS_KillThread, the information about the thread was removed from the thread queue. This information includes when that thread terminates another thread while waiting for that thread to end in the OS_JoinThread function.
Until now, deleted thread information remained in the thread queue. As a result, when the OS_WakeupThread function was executed to make all threads in the queue executable, the deleted threads were included also. This caused a bug in the thread list status. This problem has been fixed.
The pdic2c.pl sample tool used 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.
When data including the day of the week is read from the RTC, the day of the week calculated from the date is now returned. Previously, the value stored in the RTC was returned as is. However, after passing the last date that can be displayed by the RTC -- 12/31/2099 23:59 -- the day of the week information was wrong until the the RTC was reset.
With the function SND_CalcDecibel (or SND_CalcDecibelSquare), -723 was returned when the argument was set at 0. This was corrected to return -32768.
Up until this correction, when using the volume modulation, sound could still be heard even if the player volume had been set to 0.
This problem has been fixed.
Created an STD library to handle the string operation related to the API group. The following functions are included in the STD library:
The system callback notification WBT_CMD_REQ_GET_BLOCK_DONE, which should be generated only when a partner's WBT_GetBlock function finishes, was also being generated by WBT_GetBlockInfo. This problem has been fixed. Applications that do not use this notification are unaffected.
We fixed the following problems with the WFS sample module compiled in $NitroSDK/build/demos/wireless_shared/wfs.
Made the channel information on the same parent device change when WMTestToll.srl scans.
There was a mistake in the description on the WM_SetLifeTime Function Reference page. This problem has been fixed. The description said that the frame lifetime default value was "no lifetime". However, the correct description is "beacon interval x 5."
When mongoose is used as an ARM7 component, access to the ARM9 main memory during the asymmetric operation of transitioning the state of the WM library is largely inhibited. This problem has been solved by improving the mongoose component. Note that this problem was not necessarily solved, merely improved.
Added the connectedAidBitmap field to WMPortRecvCallback. The AID bitmap during the current connection is stored there.
WM_STATECODE_PORT_INIT was added to WMStateCode. It was changed so that the port receive callback in this state code is called when WM_SetPortCallback is called. This assumes that the initialization operation is run using the connectedAidBitmap field or the myAid field of WMPortRecvCallback. In order to maintain connection notification consistency, keep in mind that the callback 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 with Note 32-38 might occur.
The test API in the WM library has been expanded. This API is used for testing and is otherwise not normally used. Despite this new API, WMlibrary operations have not been altered when this library is used normally. However, the WMApiid listing type has been extended by the addition of this API. Bear in mind that programs which depend on the row order of the listing may be affected.
When the parent device maintained an MP connection, the wireless communication feature was stopped after a child device called the WM_EndMP function at a specific time. This problem has been fixed. This bug appears in the SDK after version 3.0. When wireless communication has finished, the termination callback for asymmetric functions related to wireless communcations will no longer be called. We know the bug occurs when several child devices are connected using fake_child. Further, when communication is terminated by an operation from the parent device, this bug is not an issue.
Previously, when WM functions (such as WM_DisconnectChildren) were called and communication was disconnected, a disconnection notification was not generated. WM_STATECODE_DISCONNECTED_FROM_MYSELF has now been added to WMStateCode in the parent to provide a disconnection notification.
Because of this change, there is a chance that an incompatibility may arise.
The state codes that can go into the state field of WMStartParentCallback, WMStartConnectCallback, and WMPortRecvCallback are increasing. Therefore, use caution when stopping the execution of programs when a state code other than one of the known WM_STATECOD_* state codes has been received.
Also, even if DataSharing explicitly disconnects the child from the parent using this notification, DataSharing will not stop.
The following functions were added as a result of this change.
The fixes described in Note 31-24 and Note 30-07 did not fully address the problems. As a result, these problems have been fixed again.
(2005/09/08)
Added the CARD_CancelBackupAsync function for aborting the asynchronous process on the backup device.
As a result, added CARD_RESULT_CANCELED to the CARDResult enumerated values for processes that were aborted with this function.
When a FRAM device was 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.
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 from CARD_RESULT_TIMEOUT. It is returned when contact with the card appears to be poor.
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 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.
In some cases, if the section description in an lsf file had sections named "<existing section name>" + "_bss," such as "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 there may be problems with applications that directly reference symbols, the *.lcf.template files for the older version are for now included in $NitroSDK/include/nitro/specfiles/2.x.
Overwrite the files 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.
When an overlay was placed in DTCM, a bug occurred with the arena configuration of the main memory area. This problem has been fixed.
We also fixed the ITCM arena configuration for use with a ITCM overlay.
We added support for overlays of the extended main memory region, which was not possible previously.
loadrun is a command that downloads and runs binary data to the IS-NITRO-EMULATOR.
It can be terminated with a timeout or a call to 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 execution of the binary in a manner that is similar to passing arguments from the command line.
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.
Due to the operation changes noted in Note 28-03, the destructor for the global object array in the overlay would not start correctly when unloading the overlay. This problem has been fixed.
Made numerous corrections to the following document explaining the FS library:
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 problem has been fixed.
When the argument passed to the FX_InvSqrt function was greater than a certain value, the calculation would be incorrect. This problem has been fixed.
In conjunction with the features added in Note 27-22, the MB_GetMultiBootDownloadParameter function was added to reference the user definition expanded parameters when downloading.
When reading data from NVRAM, the read failed when the target read buffer address was greater than 0x02400000.
This problem has been fixed.
Added information to the Function Reference about the OS_InitPrintServer and OS_PrintServer functions, which are used for ARM7 debug output. Also added that it is not necessary to use these functions in the application.
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 problem has been fixed.
Added an explanation of the NitroStaticInit function to the Function Reference, in line with the addition made in Note 27-31.
In functions related to OSThread, we determined and changed some "OSThread*" type arguments to be defined as "const OSThread*."
These are the functions that were changed.
Added the OS_GetOpt function, which makes it convenient to obtain strings that start with '-' as program execution options from argument data in binary files (e.g., srl files that were embedded using the buryarg tool command).
Parameters should come after the options. Added code that uses the OS_GetOpt function in the $NitroSDK/build/demos/os/argument-1 sample demo.
At the place where the DC_InvalidateRange function is called from the Sound library, the specified range was larger than necessary. This was corrected to be of an appropriate size. This correction reduces the load on the sound process.
If an MP communications partner disappears (for example, the power gets cut), there is a timeout, after which notification is sent regarding the disconnection. Because of a bug in the timeout process, notification of the disconnection did not occur sometimes. This problem has been fixed.
Added WM_SCANTYPE_ACTIVE_CUSTOM and WM_SCANTYPE_PASSIVE_CUSTOM to WMScanExParam.scanType. These support special usage that limits SSID matching confirmations performed with the WM_StartScanEx function to certain lengths.
When these scanTypes 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.
In infrastructure mode, by specifying SSIDs using WM_StartScanEx during scans, matching confirmation was performed for only the first eight bytes.
We modified it so that matching confirmation is performed for the length specified by WMScanExParam.ssidLength.
In environments where communications status was extremely bad and the child repeatedly tried to connect to the parent, the parent was put into an abnormal internal state. This problem has been fixed.
We added a feature that notifies the status code of the communication partner. This partner uses a callback function to help analyze the cause of failure when a connection fails that is attempting to use WM_StartConnect[Ex].
Specifically, we added the wlStatus member to the WMStartConnectCallback structure.
Under normal circumstances there is no need to reference this from the application.
(2005/08/10)
Added a statement to the CARD_CheckPulledOut Function Reference page indicating that the CARD_LockRom function must be called and CARD-ROM bus needs to be locked before calling CARD_CheckPulledOut.
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.
The following correction was made to the $NitroSDK/build/demos/mb/cloneboot sample:
ConnectMain function on the parent failed, a reattempt was made without ending the WH module. This problem has been fixed.
Added the OS_SetThreadDestructorStack function, which specifies the stack used when a thread destructor is executed.
If jnone is specified, 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.
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 canceled.
Previously, because the alarm was not canceled, the alarm handler was sometimes called needlessly or the alarm list was overwritten.
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. This was changed to no response.
As a side effect, when a child machine is overloaded, the receive processing is skipped. This impairs communication efficiency slightly but reduces the load.
As mentioned in Note 25-22, internal operation was changed to wait for the required signal strength to send the disconnection notification when disconnecting. This was changed to time out 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%.
None.
(2005/08/04)
Corrected the path location that ISD_NITRO_DEBUGGER indicates. This is defined in $NitroSDK/build/buildtools/commondefs.emtype.ISD.
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.
The contents of the pointer passed to the arguments of the following functions have not been rewritten. However, the const qualifier has been added to them.
G3_GetDLStartG3_GetDLLengthG3_GetDLSizeWe 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.
After the transition from the LCD Off state to sleep mode and then back, a discrepancy arose between the actual state and the internal state of the GX library. This problem has been fixed. (Reference:Note 22-23:(PM) Changed the recovery process after transitioning from LCD OFF state to sleep mode.)
Added WM_STATECODE_INFORMATION for notification of the callback of WM_SetIndCallback. This provides a notification containing information about the events occurring internally.
The contents of the notification are found in the WMIndCallback.reason callback argument. WM_INFOCODE_FATAL_ERROR is defined as a reason value. This value is used when ignoreFatalError in the WM_StartMPEx function is set to TRUE and a fatal error occurred, .
Added the WM_SetPowerSaveMode function, which switches to power save mode during infrastructure communication.
When the ignoreFatalError argument of the WM_StartMPEx function is set to TRUE, there should be no auto-disconnect even if a fatal error occurs with the child. Despite this, communication would still become unavailable. This problem has been fixed.
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.
It was confirmed that programs do not operate when the thumb build version of the ichneumon component is used. This problem has been fixed.
None.
(2005/07/22)
Added a sample demo that uses the 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.
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 while building the file.
This should result in a faster build.
If you want to stop the compilation temporarily, set a value for NITRO_NO_STD_PCHDR.
When there was a global object in an overlay to be unloaded that required a destructor, the destructor was called automatically. This has been changed so that the destructor is not called.
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 has been fixed.
Replaced the implementation of the MD5 functions. The code size is about half of what they were before and the functions operate approximately 20% faster compared to the previous implementation. The interface has not been changed. This change was added in 2.2 PR but it was left out of the changelog.
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 up to those points.
Below are the functions that were added for this purpose:
Added a mechanism that allows you to pass argument data to the ROM file and then obtain this data in the program.
You can use the $(NitroSDK)/tools/bin/buryarg tool to embed argument data. You can then use the data in a program by calling the OS_GetArgc and OS_GetArgv functions. By using this feature, you can change the program's execution conditions without recompiling.
We added a demo that uses this feature called $NitroSDK/build/demos/os/argument-1.
This feature is provided for debugging purposes and is invalid in FINALROM builds.
We added the OS_KillThread and OS_KillThreadWithPriority functions. These functions terminate other threads. You select which function to use 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.
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:
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.
Previously, the maximum number of threads that could be used by the OS at the same time was 16. (Normally the maximum was 16. However, by rewriting the header definitions, it was possible to vary the maximum from 8 to 32.) This limit has been 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.
None.
(2005/07/15)
Added the CARD_CheckPulledOut function, which determines status directly from ARM9. In other words, it does not wait 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. However, in scenes where you need to know without delay that the Card has been removed, you can use this function instead of CARD_IsPulledOut.
Added CARD_BACKUP_TYPE_EEPROM_512KBITS and CARD_BACKUP_TYPE_FRAM_256KBITS to the enumerated type CARDBackupType so the CARD library can support 512 kB EEPROM and 256 kB FRAM as backup devices.
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, incorrect values were sometimes returned. This problem has been fixed.
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. You can use either one.
When a build was performed from the CYGWIN command line, the build would fail if the cygdrive prefix was not /cygdrive, the default setting . Builds are now possible even if the cygdrive prefix has been changed to another value.
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.
With StackSize specified in rsf (linker spec file), subtracting the absolute value from the maximum possible specified size when a negative number was provided as the first parameter was not valid. This problem has been fixed.
Changed the default value of the SDK_TS_VERSION constant that indicates the PMIC version. The value was 100; it has been changed to 200. SDK_TS_VERSION = 200 appears in versions E and later for the IS-NITRO-EMULATOR hardware. It 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. However, this could affect applications that use this constant as a build switch for changing 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, 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. However, 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 an IDE, you need to manually select which library to link.
Nonetheless, except in cases where the development environment used the TS breadboard, etc., there is really no meaning to selecting a library. Consequently, it is all right to use the library that is linked by default.
Changed the #include search path when building with Makefile to include the directory of the file that called #include. If the previous search path is required, enter a directive such as MACRO_FLAGS += -cwd proj inside Makefile.
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.
Added the FS_End function to return the state to what it was before the FS library was initialized.
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.
When the FS_UnloadOverlay or FS_EndOverlay function unloaded an overlay, the destructor was not called correctly. This problem has been fixed. This applies to objects when both of the following are true:
*.data section.
The arctangent functions below returned incorrect values when the (x,y) slope was extremely close to 1. This problem has been fixed.
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 vice versa). This problem has been fixed.
When the G3C_UpdateGXDLInfo and G3B_UpdateGXDLInfo functions were called from inside functions that manipulate display lists, ASSERT would be applied when a display list was being created that was the same size as the buffer. This problem has been fixed.
When sorting with the MATH_QSort function, the function would sometimes access the target array out of bounds. This problem has been fixed.
Replaced the implementation of the SHA-1 functions. The code size has hardly changed, but they run approximately twice as fast as before. The interface has not been changed.
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.
Added $NitroSDK/build/demos/mb/multiboot-wfs as a sample of a child in Single-Card Play using the file system over wireless communication.
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 4 MB. This restriction has been removed, thus enabling the use of expanded memory by IS-NITRO-EMULATOR and other hardware that has 8 MB of main memory.
Added the userParam member to the MBGameRegistry structure. Store as much as 32 bytes of any kind of data in this buffer. Use the MB_RegisterFile function to allow a Single-Card Play child to reference this data after startup.
The MI_CompressHuffman function and ntrcomp.exe had a bug that sometimes caused abnormal compression of data that was filled with a single value. This problem has been fixed.
OS_Sleep functionIf the OS_WakeupThreadDirect function was called for a thread that was in the wait state after a call to the OS_Sleep function, there would be problems with the alarms. This problem has been fixed.
There were errors in the list operations on the mutex stored in the OS when the mutex was locked by the OS_TryLockMutex function. As a result, sometimes the OS_UnlockMutex function would cause exceptions. Problems would also arise when a thread ended while the mutex was still locked. This problem has been fixed. Note that the OS_LockMutex function (which is different from the OS_TryLockMutex function just mentioned) works correctly and has no problems.
Added the OS_YieldThread function. This function performs thread rescheduling. It also gives executable threads with the same priority level as the current thread an opportunity to execute.
Corrected the internal processes that confirm that the cache has been cleaned/invalidated at program startup for autoload and at the initialization of each segment.
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 with 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 used only at startup from the file system without a static link.
The cause of the bugs mentioned in Note 24-10 and Note 25-16 has been clarified. Along with this, the internal implementation of the functions DC_FlushRange and DC_FlushAll have been changed so that the CPU flush command is works properly. 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 if the write buffer was full. The function specifications have not changed.
There was a problem with the list processing of mutexes stored in OSMutex. Specifically, a problem arose when a thread used the OS_LockMutex or OS_TryLockMutex function to lock more than one OSMutex at the same time. This problem has been fixed.
The problem does not occur if a thread locks only one OSMutex at a time.
Added explanations about the main items and the special features of the NITRO-SDK header files in 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
Added functions to the RTC category that convert between type RTCDate and RTCTime date/time data and the total number of seconds that have elapsed since January 1, 2000. Also added functions that convert between type RTCDate data and the total number of days that have elapsed. The demo that can be used to confirm these operations is $NitroSDK/build/demos/rtc/convert-1.
Functions have been created 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 functions whose operations have been changed:
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, thus causing memory leaks. This problem has been fixed.
The following changes 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. 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, begin MP communications.
2) If it is the second or later child, do nothing. (It is all right to do nothing, since continuous MP communications are taking place.)
3) If there is no child, terminate 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 changed so that a callback is called on the sample side when a child is disconnected.
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 obtained when WM is initialized. In addition, since the Key Sharing features are scheduled to be deleted 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.
It has been determined that when an SSID filter is specified by the WM_StartScanEx function, the SSID inside the discovered parent information sometimes 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 happens only when the parent is using infrastructure mode communications and is hiding its SSID.
Updated the tool that is used for testing wireless communications: NitroSDK/bin/ARM9-TS/Rom/WMTestTool.srl. Previously, when an access point was discovered during scanning, the message "WLAN AP" was displayed. This has been changed so that now the SSID is displayed. This was was implemented for both Scan Test mode and ScanEx Test mode.
Previously, 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.
During MP communications, when the child responded with nothing but NULL and the communication timed out, the notification WM_STATECODE_DISCONNECTED would be posted multiple times to the parent's callback WMStartParentCallback. This problem has been fixed.
This problem occurred mainly when a child was started by IS-NITRO-DEBUGGER and was paused for a long time during MP communications.
Previously, during continuous communications mode and after communications failed repeatedly, transmissions would continue. However, in a situation where only empty data is being sent and received, the number of MP communication transmissions grows rapidly and the child's data-receiving process cannot keep up. This can trigger problems. To mitigate this problem, a restriction has been set that limits the number of MP communication transmissions that the parent can send in a single frame to 6 (including resends). This restriction is not placed on normal communications.
None.
Nintendo Technical Support Center
CONFIDENTIAL