OS_Sleep
function
(2006/01/16)
Added an "overview" item to the function references in the CARD library.
Added a reference manual for the packnlf tool.
The code format has been unified regarding indents and carriage returns in the library and demos.
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.
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.
The update described in Note 32-23 caused the text on the startup screen to be corrupted. This problem was corrected.
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.
Changed the debug output of the sample libraries wh, wfs, and wc in $NitroSDK/build/demo/wireless_shared to display "0x" before hexadecimal numbers.
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.
None.
(2005/12/26)
The following inline function groups that 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.
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.
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.
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.
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.
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.
The configurations for each of the MP communication parameters added in 3.0 RC2 were not operating normally. This problem has been corrected.
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/.
Internal operations are sometimes affected immediately after a disconnect. Processes were added within the WM library to address this.
There were none.
(2005/12/05)
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.
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 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.
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.
$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.
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.
We made the following correction to the MBP sample module included in$NitroSDK/build/demos/wireless_shared/mbp:
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.
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.
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.
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.
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.
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 revised 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 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.
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.
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.
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.
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.
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.
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.
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.
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.
There were none.
(2005/11/07)
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.
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.
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.
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.
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.
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.
(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.
Added an explanation of the compile target to the function information in the function reference.
Added a reference to 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.
There was a bug where the condition parameters of the ASSERT being used by G3BS_LoadMtx43 were wrong. This has been corrected.
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, 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.
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.
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.
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.
Conditions are inspected when compiling, and the SDK_COMPILER_ASSERT macro was added to make a compile error if 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, 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.
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:
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.
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.
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:
The Chinese version startup screen displayed with OS_InitChina was updated.
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.
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.
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.
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.
Created an STD library to handle the string operation related API group. The following functions are included in the STD library:
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.
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 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."
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.
Added the connectedAidBitmap field to the WMPortRecvCallback. The AID bitmap during the current connection is stored.
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.
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.
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.
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.
The corrected items released in Note 31-24 and Note 30-07 did not fully correspond to the problem, so these were re-corrected.
(2005/09/08)
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.
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.
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.
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.
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.
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.
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.
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, 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.
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 has been fixed.
When the argument passed to the FX_InvSqrt
function was above a fixed value, the calculation would be incorrect. This problem has been fixed.
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.
When reading data from NVRAM, the read failed when the target read buffer address exceeded 0x02400000.
This bug was fixed.
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.
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.
Added an explanation of the NitroStaticInit
function to the Function Reference that was in line with the addition made in Note 27-31.
In OSThread-related functions, we determined and changed some "OSThread*" type arguments to be defined as "const OSThread*."
These are the functions we revised.
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.
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.
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.
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.
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.
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.
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.
(2005/08/10)
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 .
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, the function reattempted connection without ending the WH module. This bug has been fixed.
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.
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.
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.
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%.
None.
(2005/08/04)
Corrected the path location indicated by ISD_NITRO_DEBUGGER
, which 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 had not been added to the arguments so const
has been added to them.
G3_GetDLStart
G3_GetDLLength
G3_GetDLSize
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.
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.)
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.
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, 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.
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 has been corrected.
None.
(2005/07/22)
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.
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
.
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.
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.
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.
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.
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.
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
.
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.
OS_ExitThread
function.
OS_KillThread*
function.
OS_KillThread*
function.
OS_DestroyThread
function.
OS_DestroyThread
function.
$NitroSDK/build/demos/os/thread-7
.
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 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
.
None.
(2005/07/15)
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
.
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.
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.
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.
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.
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), 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.
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.
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
.
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. The problem has been fixed. This applies to objects when all of the following circumstances occur simultaneously:
*.data
section.
The arctangent functions below returned incorrect values when the (x,y) slope is extremely close to 1. This 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 visa-versa). This problem has been fixed.
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.
When sorting with the MATH_QSort
function, in some cases the target array would face over access. This bug was fixed.
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.
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 the child in Single-Card Play using the file system via wireless communications.
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.
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.
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.
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, after that there would be problems with the alarm process. That has been fixed.
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.
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.
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.
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.
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.
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.
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
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
.
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
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.
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.
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
.
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.
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.
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.
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.
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.
None.
NINTENDO Technical Support Center