NITRO-SDK Revision History

NITRO-SDK 2.0 RC3 (11/29/2004)
Note 20-01: (MB) Added the pseudo Single-Card Play child feature
Note 20-02: (MB) Corrected the problem of the MB_GetParentSystemBufSize( ) function
Note 20-03: (MB) Expanded the features of the MB_ReadSegment( ) function
Note 20-04: (MB) Changed the names of the MB_StartParentEx( ) and MB_EndEx( ) functions
Note 20-05: (MB) Added the MB_DisconnectChild( ) function
Note 20-06: (MB) Eliminated the parent receive buffer size change
Note 20-07: (MB) Added a clone boot sample
Note 20-08: (MB) Corrected the problem of retries when reconnecting to the Multiboot-Model parent
Note 20-09: (MB) Added a document about the Single-Card Play procedure
Note 20-10: (WM) Corrected the ARM7 wireless library
Note 20-11: (WM) Introduced the MP communication life time
Note 20-12: (WM) Added the "Wireless Communication Tutorial"
Note 20-13: (FS) Added the FS_LoadOverlayImageAsync( ) function
Note 20-14: (FS) Eliminated the FS_RegisterOverlayToDebugger( ) function
Note 20-15: (GX) Added the GX_GetVCountEqVal( ) function and changed other VCOUNT match interrupt related API
Note 20-16: (GX) Added the GX_SetBankForBGEx( ) function
Note 20-17: (CARD) Changed the card removal post-processing function CARD_TerminateForPulledOut()
Note 20-18: (MI) Added the Difference Filter Restoration function
Note 20-19: (MI) Added the Memory Clear Process function only for startup
Note 20-20: (OS) Corrected the problem with VAlarm
Note 20-21: (OS) Made debug functions to weak symbols
Note 20-22: (SND) Corrected the problem that stopped the SND_InvalidateWaveData( ) function from generating some sounds
Note 20-23: (MIC) Corrected the problem in which the MIC_GetLastSamplingAddress( ) function did not return the accurate address
Note 20-24: (PRC) Changed the identifier names
Note 20-25: (WM) Enhanced the WM_SetMPDataToPort*( ) argument check
Known problems with SDK 2.0 RC3

NITRO-SDK 2.0 RC2 (11/04/2004)
Note 19-01: (WM) Changed the return value of WM_GetAllowedChannel() when an error occurs
Note 19-02: (WM) Changed part of the internal specifications of the WM_End library termination function
Note 19-03: (WM) Added WMDisconnectCallback structure
Note 19-04: (WM) Corrected initialization of WM_Reset()
Note 19-05: (WM) Corrected processing at end of data sharing
Note 19-06: (WM) Changed upper limit of data size in data sharing
Note 19-07: (MB) Corrected invalid nameLength problem in MBUserInfo
Note 19-08: (MB) Added MB_StartParentEx() and MB_EndEx()
Note 19-09: (MB) Added warning to MB_UnregisterFile() reference
Note 19-10: (MB) Added a demo that surveys the channel signal usage
Note 19-11: (MB) Implemented new method to set the tgid value in the multiboot demo
Note 19-12: (MB) Changed some of the specifications of the MB_End library end process
Note 19-13: (WBT) Corrected error in wbt-fs sample demo that occurred during disconnect
Note 19-14: (WBT) Corrected wbt-fs sample demo
Note 19-15: (WBT) Corrected WBT library
Note 19-16: (FS) Added FS_RegisterOverlayToDebugger()
Note 19-17: (OS) Changed V-count alarm processing
Note 19-18: (OS) Added function to get owner information (favorite color)
Note 19-19: (OS) Fixed function cost profiler
Note 19-20: (OS) Corrected OS_SetTick()
Note 19-21: (OS) Corrected OS_ResetSystem()
Note 19-22: (OS) Fixed data section transfer to DTCM
Note 19-23: (CARD) Added CARD_GetRomHeader function
Note 19-24: (CARD) Added detection of automatically initiated DMA during Game Card access
Note 19-25: (ARM7) Added detection of Game Card/Game Pak removal to ferret
Note 19-26: (PM) Corrected LCD state during restore from sleep
Note 19-27: (MI) Corrected address checking during DMA
Note 19-28: (MI) Corrected MI_DmaFill*()
Note 19-29: (GX) Changed names of G3X_IsLineBufferOverflow() and G3X_ResetLineBufferOverflow()
Note 19-30: (GX) Corrected error in register definition
Note 19-31: (GX) Corrected clearing problem with G3X_InitTable table
Note 19-32: (SND) Updated sound library
Note 19-33: (CTRDG) Added references for CTRDG_IsNumberID() and CTRDG_IsBitID()
Note 19-34: (DevEnv) Included IPL GUI version of mb_child and WMTestTool for checking wireless connections
Known problems with SDK 2.0 RC2

NITRO-SDK 2.0 RC1 (10/07/2004)
Note 18-01: (WM) Changes in WM library
Note 18-02: (WB) Corrected the problem that the mb_child.srl program had stopped processing the maximum number of characters
Note 18-03: (MB) Changed the download sequence of the multiboot-Model demo
Note 18-04: (MB) Changed the display characters of the mb_child.srl program to English
Note 18-05: (WBT) Added the WBT_CancelCurrentCommand function
Note 18-06: (DEMO) Dealt with warning in WM demo bell
Note 18-07: (DEMO) Changed the user name process in the multiboot demo
Note 18-08: (DevEnv) Included the NITRO-SDK version display tool
Note 18-09: (DevEnv) Included the final version of the banner display tool
Note 18-10: (DevEnv) Linked the description of the resident area name of lsf file and the module compression process
Note 18-11: (OS) Changed the protection region setting for main memory
Note 18-12: (OS) Sound stopping process when reset
Note 18-13: (OS) Corrected OS_CreateThread()
Note 18-14: (OS) Corrected the function trace profiler
Note 18-15: (PM) Corrected the LCD switching function PM_SetLCDPower()
Note 18-16: (PM) Corrected to avoid residual image when entering sleep
Note 18-17: (PM) Corrected the IRQ mask return process during sleep
Note 18-18: (PM) Added callback call process for sleep
Note 18-19: (CARD) Corrected the processing of multiple card initialization calls
Note 18-20: (CTRDG) Added cartridge functions
Note 18-21: (RTC) Changed the method for monitoring RTC alarm
Note 18-22: (RTC) Corrected the problem with consistency of date and day of the week
Note 18-23: (GX) Added use of clear image for clear depth image by itself
Known problems with SDK 2.0 RC1

NITRO-SDK 2.0 FC (09/30/2004)
Note 17-01: (WBT) Official release of the wireless block transfer library
Note 17-02: (WM/TP) Corrected the problem that the wireless processes stopped the auto sampling of the touch panel
Note 17-03: (WM) Changed WM library
Note 17-04: (DEMO) Corrected multiboot-Model demo
Note 17-05: (DevEnv) Corrected makebanner tool
Note 17-06: (DevEnv) Corrected the LIBSYSCALL process and changed the storage location of libsyscall.a
Note 17-07: (DevEnv) Corrected the compression process of overlay with NITRO_COMPRESS
Note 17-08: (DevEnv) Changed the font set in banner file
Note 17-09: (DevEnv) Restricting the location of the banner file in ROM spec file and counter measures.
Note 17-10: (GX) Corrected the register definition problem
Note 17-11: (MI) Corrected MI_SendGXCommandAsyncFast
Note 17-12: (MI) Corrected MI_SendGXCommand()
Note 17-13: (FS) Corrected the problem of calling FS_GetPathName()
Note 17-14: (OS) Added initialization function to be called by OS_Init()
Note 17-15: (CARD) Changed the card removal detection process
Note 17-16: (TP) Changed the validity conditions
Known problems with SDK 2.0 FC
Additional information for SDK 2.0 FC

Previous Revision Histories


NITRO-SDK Version 2.0 RC3

(11/29/2004)

Note 20-01: (MB) Added the pseudo Single-Card Play child feature.

The function was added to allow a pseudo Single-Card Play child device to be entered into the Single-Card Play parent device in the application that is running from a DS card. By using this feature, it is possible to have both the Single-Card Play child device and the Multi-Card Play child device in the wireless play.

Also, as a demo program, the fake_child demo that makes an entry to the Multiboot-Model parent device was added to the following folder.

$NitroSDK/build/demos/mb/fake_child

Note 20-02: (MB) Corrected the problem of the MB_GetParentSystemBufSize( ) function

In NITRO-SDK 2.0 RC2, there was a problem that the buffer size that was returned by the MB_GetParentSystemBufSize( ) function was smaller than the actual value by WM_SYSTEM_BUF_SIZE bytes. This problem was solved. However, MB_SYSTEM_BUF_SIZE that is defined in nitro/mb.h for the same buffer size is not affected by this problem.

Note 20-03: (MB) Expanded the features of the MB_ReadSegment( ) function

Expanded the feature so that it is possible to specify a buffer length value that is smaller than the return value of the MB_GetSegmentLength( ) function which would be passed as an argument to the MB_ReadSegment( ) function.

The smallest size is defined as MB_SEGMENT_BUFFER_MIN. For details on the instance where this extended function is used, see the reference for the MB_ReadSegment( ) function.

Note 20-04: (MB) Changed the names of the MB_StartParentEx( ) and MB_EndEx( ) functions

To integrate with other categories, the current MB_StartParentEx( ) and MB_EndEx( ) functions were changed to MB_StartParentFromIdle( ) and MB_EndToIdle( ). The old names have been eliminated.

Note 20-05: (MB) Added the MB_DisconnectChild( ) function

There was a problem that caused inconsistency in the internal state of the MB library when a child was disconnected from a parent by using the WM_Disconnect( ) function while distributing Single-Card Play data. MB_DisconnectChild( ) function which allows for the safe disconnection of a child even during MP communication.

Note 20-06: (MB) Eliminated the parent receive buffer size change

The following problems were found when the receive buffer size setting was changed with the Single-Card Play parent.

For this reason, the specification was changed so that the receive buffer size of the MB parent cannot be changed. Because of this, the argument that sets the receive buffer size in the following functions was eliminated.

Note 20-07: (MB) Added a clone boot sample

Added a sample clone boot that illustrates the creation procedure of the clone boot program.

Note 20-08: (MB) Corrected the problem of retries when reconnecting to the multiboot-Model parent

There was a problem that caused the retry to fail if the connection to the parent failed even once when reconnecting to a parent after a child booted in the multiboot-Model demo.

This problem was solved as shown below:

Check the points above if you create an application by using this demo as an example.

Note 20-09: (MB) Added a document about the Single-Card Play procedure

Added a document regarding the Single-Card Play procedure, reconnection with the Single-Card Play parent, and performing a clone boot in $NitroSDK/docs/TecnicalNotes/AboutMultiBoot.doc.

Note 20-10: (WM) Corrected the ARM7 wireless library

In the release and debug versions of the mongoose component, the work area that is required for operating the driver cannot be allocated in some cases. Also, there was a problem with the process of reusing the mongoose work area in all versions. When the APIs were called in a specific order and the connection and disconnection were repeated, the work area may run out and the connection process may not work properly. These problems are resolved.

Note 20-11: (WM) Introduced the MP communication life time

When the ARM7 on a child device freezes because of a change to the halt state while performing communication, the child device's wireless hardware automatically continues to return Null and the generated error cannot be detected by the application on the parent device. To deal with this issue, the internal process was changed to cut off the connection if a child device continues to return a Null value for a certain period of time.

When the ARM7 on a parent device freezes because of a change to the halt state, the parent device's wireless hardware automatically continues to keep sending a beacon and the generated error cannot be detected by the application on the child device. A change was made to automatically disconnect if the no MP frames are received from the parent device for a certain period of time. The default value is set to 4 seconds on both the parent and child devices.

In addition to this change, the mpLifeTime argument was added to WM_SetLifeTime( ).

Normally, the Null response or MP frame send skip occurs when the load on the ARM7 is temporarily increased. They do not occur continuously.

Note 20-12: (WM) Added the "Wireless Communication Tutorial

Published the "Wireless Communication Tutorial" – a tutorial for creating the wireless communication program based on the wireless communication program sample dataShare-Model that uses the WM library.

Note 20-13: (FS) Added the FS_LoadOverlayImageAsync( ) function

Added the FS_LoadOverlayImageAsync( ) function that loads overlays asynchronously.

Note 20-14: (FS) Eliminated the FS_RegisterOverlayToDebugger( ) function

The feature of the FS_RegisterOverlayToDebugger( ) function that registers overlays that were loaded asynchronously to the debugger was integrated into FS_StartOverlay( ). Because of this, it is not necessary to call the FS_RegisterOverlayToDebugger( ) function explicitly. To maintain compatibility, this API was left as an empty function.

Note 20-15: (GX) Added the GX_GetVCountEqVal( ) function and changed other VCOUNT match interrupt related API

The GX_GetVCountEqVal( ) API is provided to obtain the current setting of the VCOUNT match interrupt. Also, the name of the related APIs GX_SetVCounterEqVal( ) and GX_IsVCounterEq( ) were changed to GX_SetVCountEqVal( ) and GX_IsVCountEq( ). The old API names can be used by defining a different name in the macro.

Note 20-16: (GX) Added the GX_SetBankForBGEx( ) function

The GX_SetBankForBGEx() function was added as a function to use the combination that cannot allocate consecutive addresses such as VRAM-A and VRAM-B for the VRAM bank setting for the BG. By using this function, VRAM-EFG is allocated to 0x6000000-0x6017FFF and the biggest one of the VRAM-ABCD is allocated to 0x6020000-0x607FFFF.

demo/gx/UnitTours/2D_CharBg_BankEx was added as a demo that uses this function.

Note 20-17: (CARD) Changed the card removal post-processing function CARD_TerminateForPulledOut( )

Changed the process that prevents the CARD_TerminateForPulledOut( ) function (that is called by default after a card removal is detected) from stopping by using the OS_Terminate( ) function to stopping normally if the cover is open and to forcibly turn the power OFF if the cover is closed.

Note 20-18: (MI) Added the Difference Filter Restoration function

Added the following functions that restore the data that was filtered with ntrcomp by using runtime.

MI_COMPRESSION_DIFF was added to the data type that is obtained with the MI_GetCompressionType( ) function.

Note 20-19: Added the Memory Clear Process function only for startup

The function which CPU clears memory was defined in crt0.c, and other libraries (OS and MI) were using this function. When a Nintendo DS multiboot child device cancels out of the data receive process, there were instances in which this region was destroyed. The memory clear function that is used in crt0 and the memory clear function that is used by other libraries were separated.

Note 20-20: (OS) Corrected the problem with VAlarm

If multiple alarms were set to VAlarm, there were some instances in which the order of the alarm was not controlled properly depending on the V count that was set, the number of lines allowed for the delay, or the timing in which the interrupt is generated. Because of this problem, the automatic sampling of the touch panel during the wireless communication was not performed properly in some cases. This problem is resolved.

Note 20-21: (OS) Made debug functions to weak symbols

The following OS functions for debugging were made to be the weak symbols. If the user defined the function with the same name, that function will have priority.

The entities of OS_Panic( ), OS_Warning( ), OS_TPanic( ), and OS_TWarning( ), which are OSi_Panic( ), OSi_Warning( ), OSi_TPanic( ), and OSi_TWarning( ) respectively, were also made to be weak symbols.

Note 20-22: (SND) Corrected the problem that stopped the SND_InvalidateWaveData( ) function from generating some sounds

There was a problem in which the SND_InvalidateWaveData( ) function stopped the generation of some sounds. Because of this problem, if the sound data in the memory was discarded in the surround mode, the sound was not generated until the surround mode was stopped. This problem is resolved.

Note 20-23: (MIC) Corrected the problem in which the MIC_GetLastSamplingAddress( ) function did not return the accurate address

The following are problems in the MIC_GetLastSamplingAddress( ) function.

These problems were corrected, and there was a specification change for the MIC_GetLastSamplingAddress( ) function to return the memory location that stores the last sampled data, or return a value of NULL if the data was not sampled even once.

Note 20-24: (PRC) Changed the identifier names

Of the pattern recognition APIs, the identifier names that contained the word "regularize" were changed to "normalize."

The member variables of each of the following structures were changed:

Also, the constant value in the C program which is output by tools/bin/pdic2c.pl was changed to PDIC_NORMALIZE_SIZE.

Note 20-25: (WM) Enhanced the WM_SetMPDataToPort*( ) argument check

To prevent allocating the same buffer to the sendBuf argument of WM_StartMP*( ) and the sendData argument of WM_SetMPDataToPort*( ), changes were made to generate an error if these two buffers are the same.

Known issues in SDK 2.0 RC3

This note pertains to the GX_SetBankForBGEx( ) function that is described in "Note 20-15: (GX)." The GX_GetVCountEqVal( ) function was added and the other VCOUNT match interrupt related API was changed with this version. The region check will not be performed for the DEBUG build. When the invalid address was written, it will not be stopped by ASSERT. These problems will be fixed in the next or later versions to be released.




NITRO-SDK Version 2.0 RC2

(11/04/2004)

Note 19-01: (WM) Changed the return value of WM_GetAllowedChannel() when an error occurs

In WM_GetAllowedChannel(), when an error occurs (WM_Init() was not called in advance), the return value, which was previously 0, is now 0x8000.

This allows you to distinguish between this error and the error that occurs when there is no available channel (return value of 0x0000).

Note 19-02: (WM) Changed part of the internal specifications of the WM_End library termination function

The WM_End() function used to perform the library force quit process and memory release after the user callback was called. But we changed the method so that all end processes are completed before the callback is called.

This change is in response to requests from people who want to call the next WM_Initialize() function in the callback for the WM_End() function.

Note 19-03: (WM) Added WMDisconnectCallback structure

We added a new structure that is passed to the callback for WM_Disconnect() and WM_DisconnectChildren(). This structure is similar to the WMCallback structure, but has additional members, which contain an AID bitmap of the devices that requested the disconnect and an AID bitmap of the devices that were disconnected.

The member variables at the beginning of the newly created WMDisconnectCallback structure match those of previous WMCallback structure and the new structure can be treated as a WMCallback structure.

Note 19-04: (WM) Corrected initialization of WM_Reset()

When WM_Reset() was called after MP communication was established, the automatic processing for MP communication would not be reset.

We corrected this bug and now the automatic processing is always reset. This may reduce the processing burden.

Note 19-05: (WM) Corrected processing at end of data sharing

If MP communication occurred between WM_EndDataSharing() and WM_EndMP(), erroneous processing occurred in some cases. This bug was corrected.

Please note that if WM_EndDataSharing() is called immediately before calling WM_StartDataSharing(), a problem may occur.

Note 19-06: (WM) Changed upper limit of data size in data sharing

When using data sharing with libraries before RC1, the maximum shared data size multiplied by the number of shared machines was 252 bytes. We expanded this value to 508 bytes. As a result, the size of the WMDataSharingInfo structure has increased by 1K byte. To return to the previous state, change WM_DS_DATA_SIZE_508 in wm.h to #undef.

Note 19-07: (MB) Corrected invalid nameLength problem in MBUserInfo

When setting MBUserInfo, which is an argument of MB_Init(), the termination of the user name was indicated by a NULL, and even when the nameLength variable was changed, the change was not reflected on the child screen. This bug was corrected.

Note 19-08: (MB) Added MB_StartParentEx() and MB_EndEx()

We added MB_StartParentEx(), which can be called even when the wireless library is in the idle state, and MB_EndEx(), which sets the wireless library to the idle state and then stops. They correspond to the standard MB_StartParent() and MB_End(). In other respects, they can be used in the same way as the standard functions.

Note 19-09: (MB) Added warning to MB_UnregisterFile() reference

If a multiboot parent running the MB library calls MB_RegisterFile() and MB_UnregisterFile() alternately to dynamically change a saved program, if the GGID of the program before the change matches the GGID of the program after the change, the change is not detected on the IPL side.

We have added a warning about this to the reference for MB_UnregisterFile().

Note 19-10: (MB) Added a demo that surveys the channel signal usage

We added a demo that surveys signal usage during MB preprocessing for multiboot. It is in $NitroSDK/build/demos/mb/mbm.

Because MBM_MeasureChannel() will get the optimal channel and then turn off power to the wireless system, after obtaining the callback, you should begin multiboot processing from MB_Init() as usual.

Note 19-11: (MB) Implemented new method to set the tgid value in the multiboot demo

In the multiboot sample demo's parent operations, we changed the tgid setting value, which is used to manage wireless connection sessions, so that when possible, it changes each time the power is turned ON. The minute and second values from the current time obtained with RTC are used as tgid values.

Note 19-12: (MB) Changed some of the specifications of the MB_End library end process

In the MB_End() function, library end processing such as memory release was performed after the user callback was called. Revised it so that all end processing is completed before the callback is called.

This revision is the same as Note 19-05, and is to deal with the situation where MB re-initialization is performed in the MB_End() user callback. As such, the documentation and actual operation do not match for this revision.

Note 19-13: (WBT) Corrected error in wbt-fs sample demo that occurred during disconnect

When connection with parent failed during child's file access in the wbt-fs sample demo, file operations invoked thereafter would fail to complete. This problem was fixed.

Note 19-14: (WBT) Corrected wbt-fs sample demo

During caching of received data in the wbt-fs sample demo, some areas that should have been flushed were invalidated. This problem was fixed.

Note 19-15: (WBT) Corrected WBT library

Two problems with the WBTlibrary were corrected.

Note 19-16: (FS) Added FS_RegisterOverlayToDebugger()

We added the function FS_RegisterOverlayToDebugger() to the FS library. This function is used to notify the debugger of an overlay load when you use a series of low-level functions (such as file read) to load an overlay module rather than using high-level functions, such as FS_LoadOverlay().

If you use FS_GetOverlayFileID(), FS_ReadFile() and FS_StartOverlay() in combination to load an overlay, call this function before calling FS_StartOverlay(), so that you will be able to trace the operation in the debugger.

We added a demo, $NitroSDK/build/demos/fs/overlay, which contains an example of the function's usage.

Note 19-17: (OS) Changed V-count alarm processing

We changed the routine for alarms resulting from the V-count (VAlarm). Previously, the "first VAlarm in the loop resulting from an interrupt" only calls a handler when the V-count was the precisely the specified value. This resulted in processing delays in the wireless library and other libraries that relied on this feature.

The "first VAlarm in the loop resulting from an interrupt," is, as its name suggests, a VAlarm handler called by a V-count interrupt. After this handler is called, the call count of other registered alarms is checked and handlers are called if necessary.

This processing was changed so that the VAlarm handler called by the interrupt is called even when the V-count exceeds the specified value. The amount that the V-count can exceed this value (the delay) can be set by the programmer. (If the call is not in time, it will be performed in the next frame.)

One argument (delay) was added to the VAlarm configuration function, OS_SetVAlarm(), for this purpose. Previously, the function call was:

OS_SetVAlarm( alarm, vcount, handler, arg );

Now it is:

OS_SetVAlarm( alarm, vcount, delay, handler, arg );

For details see the reference for OS_SetVAlarm().

There has always been a way to specify a delay with a periodic VAlarm, but with an interrupt-triggered VAlarm, the delay did not work. Now you can specify the precise delay for the alarm.

OS_SetVAlarm() now has one more argument, but if you want to use the previous function call and not specify a delay, use the same arguments and call OS_SetOneTimeVAlarm() instead of OS_SetVAlarm(). This function will set the delay to 10. (Internally, the delay has always been treated as being 10.)

The maximum value for the delay is OS_VALARM_DELAY_MAX. If this value is specified, the specified VAlarm handler will be called no matter how much time elapses.

Note 19-18: (OS) Added function to get owner information (favorite color)

We added the following color information definitions and functions. We also added a reference.

Note 19-19: (OS) Fixed function cost profiler

An error occurred when cost calculations were performed with the function cost profiler OS_CalcThreadStatistics() and a thread other than the current thread was targeted. The cost buffer is cleared after the cost calculation results are stored in the statistics buffer. However, the current thread's buffer was cleared rather than the targeted thread's buffer. This error was fixed.

Note 19-20: (OS) Corrected OS_SetTick()

There was a problem with the tick value setting function (OS_SetTick()). The other interrupt request flags were disabled. This was fixed.

This function could affect the operation of alarm systems in use. Please be careful when using OS_SetTick() in an application.

Note 19-21: (OS) Corrected OS_ResetSystem()

The reset function, OS_ResetSystem(), does not initialize the hardware, so you must explicitly stop the hardware functions or confirm that they are stopped before calling this function. For safety reasons, we have added code to the function that stops several hardware functions.

Because part of reset processing takes place in main memory, the reset process would not work correctly when this section was corrupted. This problem was also fixed.

Note 19-22: (OS) Fixed data section transfer to DTCM

There was a problem when an autoload was performed using a data section created in DTCM. This was fixed.

Note 19-23: (CARD) Added CARD_GetRomHeader function

The function CARD_GetRomHeader was added. This function allows the program initiated by wireless download to obtain ROM header information stored in the DS CARD that is currently inserted.

Note 19-24: (CARD) Added detection of automatically initiated DMA during Game Card access

The card library and upper-level library functions did not check for possible conflicts with other automatically initiated DMA during DS CARD access. Code that checks for this was added.

Note 19-25: (ARM7) Added detection of Game Card/Game Pak removal to ferret

When ferret was used as an ARM7 component there was no way to detect whether the Game Card or Game Pak was removed. We added this feature to ferret.

This detection feature is valid only the TS edition of the library.

Note 19-26: (PM) Corrected LCD state during restore from sleep

A fix in NITRO-SDK 2.0 RC1 (Note 18-16: (PM) Eliminating ghost images during sleep mode) caused the following problem. As a result of the fix of the ghost image problem, when the machine was woken up after being transitioned into sleep mode by PM_GoSleepMode(), the GX library's status changed from its pre-sleep status, and this caused the LCD to restore incorrectly in some cases. This was fixed and now the LCD will restore correctly after being in sleep mode.

Note 19-27: (MI) Corrected address checking during DMA

The debug MI library uses an ASSERT to check whether the transfer address for DMA is included in ITCM and DTCM. The ITCM start address was 0x00000000. This was changed to the regular value of 0x01FF8000.

Note 19-28: (MI) Corrected MI_DmaFill*()

The function MI_DmaFill*(), which uses DMA to fill memory with a uniform value, would sometimes transfer values incorrectly when an interrupt was generated during execution. This problem was corrected and MI_DmaFill*() is now an interrupt-safe function.

Note 19-29: (GX) Changed names of G3X_IsLineBufferOverflow() and G3X_ResetLineBufferOverflow()

Two function names were changed. They are functions relating to the underflow (lines over) flag of the rendering engine's line buffer.

G3X_IsLineBufferOverflow() and G3X_ResetLineBufferOverflow()

were changed to

G3X_IsLineBufferUnderflow() and G3X_ResetLineBufferUnderflow()

Note 19-30: (GX) Corrected error in register definition

The following constants in include/nitro/hw/ARM9 were declared incorrectly.

They were corrected.

Note 19-31: (GX) Corrected clearing problem with G3X_InitTable table

When the table in G3X_initTable was cleared to zero, the last 16 bytes in the toon table were not cleared. This problem was corrected.

Note 19-32: (SND) Updated sound library

The sound library distributed with NITRO-SDK is now the NITRO-SYSTEM 10/12/2004 version. The update was also added to patches after 2.0RC1plus3.

Note 19-33: (CTRDG) Added references for CTRDG_IsNumberID() and CTRDG_IsBitID()

Added reference information for CTRDG_IsNumberID() and CTRDG_IsBitID(), which check if specified peripheral devices are installed in the Game Pak.

Note 19-34: (DevEnv) Included IPL GUI version of mb_child and WMTestTool for checking wireless connections

Included mock-production version IPL mb_child program under $NitroSDK/bin/ARM9-TS/Rom.The name of the previous one was changed to mb_child_simple.srl. Also, included in the same directory WMTestTool.srl, which is a tool for testing wireless. You can use the following test modes. We are currently preparing detailed manuals.

Known issues in SDK 2.0 RC2

None.




NITRO-SDK Version 2.0 RC1

(10/07/2004)

Note 18-01: (WM) Changes in WM library

Note: Due to the changes with WM library in version 2.0 RC1, programs with 2.0 FC or older versions cannot be compiled as is.

Following are some major updates.

  1. Deleted the test mode operation functions WM_StartTestMode() and WM_StopTestMode().
  2. The specification of WM_GetAllowedChannel() was that even though it was a synchronous function, it did not return a valid value unless it was in IDLE state after executing WM_PowerOn(). However, this specification had a potential for confusing the library users, so the changes were made to return a valid value any time after it was initialized with the WM_Init() function.
  3. Noise was added when using the sound library to play high pitched sounds during the wireless communication. This issue was improved significantly.
  4. The specification was changed to disconnect the device when an unrecoverable and fatal error occurred with the wireless communication protocol due to the influence by other wireless communication devices other than Nintendo DS. The application receives the same notification as normal disconnection, so there is no need to write corresponding codes.
  5. An unique setting value that is required for each Nintendo DS system during the wireless communication is kept internally in Nintendo DS. If this setting value is destroyed for some reason, the communication cannot be executed properly. Therefore, the program stops automatically if the wireless setting value is destroyed when there was an attempt for the wireless communication.
  6. For game group ID, both u16[2] type definitions and u32 type definitions are used. It caused confusion, so they were standardized as u32 types. Interface changes in APIs were executed for the following. Due to this change, sample demos that perform the wireless communication were updated.
  7. The argument ignoreFatalError was added to WM_StartMPEx(). Normally, FALSE should be given.
  8. The maximum value of the maximum numbers of bytes that can be sent by parent or child that is specified with WMParentParam increased from 508 bytes to 512 bytes. However, the 5600-microsecond limitation required for MP communication has not been changed, so the number of bytes must be set within the limits. The value of MB_COMM_PARENT_SEND_MAX in MB library is not changed.
  9. As the distance between the parent and child increases while minPollBmpMode of WM_StartMPEx is set to TRUE, the communication was disconnected with the return value of WM_GetLinkLevel set to the maximum level of 3. This problem was solved. At the same time, the behavior of the radio receive strength that is taken by WM_GetLinkLevel was changed. The frequency of the value change became slow.
  10. Both the u16[3] type definitions and u8[6] type definitions were used for MAC addresses, and it was causing confusions. This was standardized as u8[6] types. Interface has changed in the following APIs. Also with this change, sample demos that perform the wireless communication was updated.
  11. For all of the wireless sample demos that use the setting value that exceeds the required time for MP communication as it is defined in the programming guidelines, made changes to use the value within the proper range.

Note 18-02: (WB) Corrected the problem that the mb_child.srl program had stopped processing the maximum number of characters

With mb_child.srl, when the user name of the parent was 10 characters, it did not work properly. This problem was corrected.

Note 18-03: (MB) Changed the download sequence of the multiboot-Model demo

Previously, according to the display sequence confirmation, when IPL was downloaded, this demo waited until the parent completed the boot preparation after the data transfer. It was changed to wait for all children before the data transfer.

Note 18-04: (MB) Changed the display characters of the mb_child.srl program to English

The program mb_child.srl, which is used by children for multiboot, used Japanese characters for display, but it was changed to display in English.

Note 18-05: (WBT) Added the WBT_CancelCurrentCommand function

Added the WBT_CancelCurrentCommand function that is used for canceling the file receiving operation that is being processed with the WBT_GetBlock function.

Note 18-06: (DEMO) Dealt with warning in WM demo bell

The warning "Failed sound alarm OS_SendMessage" was output in the ball demo, but it was changed not to be output. This warning indicates that the sound process on ARM7 is being executed properly. When playing 44kHz sounds on all of the 16 channels at 3 octaves higher, this warning may be output because the heavy load on CPU processes. Do not play the sound that can cause the heavy load on the CPU processes.

Note 18-07: (DEMO) Changed the user name process in the multiboot demo

Changes were made so that the user name used by the parent for the mb/multiboot demo process is obtained from the owner information in the Nintendo DS system.

However, the fixed value is used, as it was done previously in the old environment which the OS_GetOwnerInfo() function cannot use, such as TS and TEG of TS_VERSION < 200 and NVRAM_FORMAT < 100.

Note 18-08: (DevEnv) Included the NITRO-SDK version display tool

Included the tool showversion that displays the NITRO-SDK version that is embedded in ROM file. Valid only with NITRO-SDK 2.0 FC or later versions. For details on restrictions, see the reference manual.

Note 18-09: (DevEnv) Included the final version of the banner display tool

Included the final version of the banner display tool. Compared to the last version, fonts that can be used are changed.

Note 18-10: (DevEnv) Linked the description of the resident area name of the lsf file and the module compression process

When the application-specific lsf file is being used, the segment name in the resident module and srl/nef target name are set differently, an error was generated during the module compression process when NITRO_COMPRESS is enabled.

By correcting the lcf template file to output the intermediate file component.files from the description of lsf file, and to use compstatic to reference that file, the description of the resident area name in lsf file and the module compression process are linked.

Note 18-11: (OS) Changed the protection region setting for main memory

Previously, the size of the protection region for main memory was always set to 4 MB at startup, and the protection region setting was set to 8 MB only if SDK 8M was defined when OS_InitArenaEx() was called (called in OS_Init()) and 8 MB memory was mounted.

However, if there was an attempt to use autoload to transfer the module to the extended memory region, that transfer occurred before OS_InitArenaEx(), and it was not possible to proceed because of exception that was generated.

Because of that, the rules regarding the protection region size for main memory have been changed.

This change allowed the transfer to the extended memory region.

Note 18-12: (OS) Sound stopping process when reset

Changes were made to stop the sound playback with ARM7 when OS_ResetSystem() is called.

Note 18-13: (OS) Corrected OS_CreateThread()

These were added to the thread initialization executed by OS_CreateThread().

Note 18-14: (OS) Corrected the function trace profiler

There was an error with the buffer underflow check that is performed by one of the profile features, PROFILE_EXIT, which is a function trace. This error was corrected. Also, the register for detecting underflow was not displayed properly, and it was corrected.

Note 18-15: (PM) Corrected the LCD switching function PM_SetLCDPower()

When using PM_SetLCDPower() to switch the LCD status, LED was forcibly turned ON. However, it was changed so that the LED status does not change.

Note 18-16: (PM) Corrected to avoid residual image when entering sleep

When entering sleep, the image displayed before entering sleep sometimes stayed displayed. Changes were made to wait for one frame after the screen output was turned off to avoid residual images.

Note 18-17: (PM) Corrected the IRQ mask return process during sleep

There was an error with the IRQ mask return process on ARM7 after the sleep process. Depending on the cause for awakening from sleep, the cause was left as valid even when awakening from sleep after the necessary IRQ causes were enabled. To be more precise, the card removal check after sleep was not detected by card interrupts. This problem was solved.

Note 18-18: (PM) Added callback call process for sleep

Added APIs for calling callbacks for sleep. They can be registered for before changing into sleep mode and after awakening from sleep mode. In addition, multiple callbacks can be registered.

Note 18-19: (CARD) Corrected the processing of multiple card initialization calls

When CARD_Init() was called twice, the FIFO Callback overridden warning was given. (It calls FS_Init() and CARD_Init(), so it is the same when calling CARD_Init() and FS_Init().) It was corrected so that the warning is not given.

Note 18-20: (CTRDG) Added cartridge functions

The following cartridge functions are now the official release, and references were added.

Note 18-21: (RTC) Changed the method for monitoring RTC alarm

Previously, there was a problem that RTC alarm interrupt was not generated properly because of the conflict between the interrupt for generating RTC alarm and IS-NITRO-EMULATOR hardware. To deal with this problem, the temporary measure was taken to make ARM7 execute polling to monitor the RTC alarm status at fixed intervals. Since the hardware conflict issue was solved with IS-NITRO-DEBUGGER software version 1.11, the polling method was abolished and changed to the method that handles interrupts.

Note 18-22: (RTC) Corrected the problem with consistency of date and day of the week

There was a possibility of causing inconsistency between the date structure that can be obtained with functions such as RTC_GetDate(), and the day of the week in the calendar. This problem was solved.

Note 18-23: (GX) Added use of clear image for clear depth image by itself

To use only the clear depth image without allocating VRAM to the clear color image slot, the following settings were added.

When using these settings, all of the clear images are cleared with 0x0000, and the alpha value is also set to 0. With this setting, the texture image slot 2 is disabled, so make sure that VRAM is not allocated to this slot.

A demo that uses these settings is added to demos/gx/ClearDepthOnly.

Known problems with SDK 2.0 RC1

None.




NITRO-SDK Version 2.0 FC

(09/30/2004)

Note 17-01: (WBT) Official release of the wireless block transfer library

The test release version of the wireless block transfer library (WBT) became the official release. There are references and samples wbt-1 and wbt-fs.

Note 17-02: (WM/TP) Corrected the problem that the wireless processes stopped the auto-sampling of the touch panel

There was a problem that stopped the auto-sampling process of the touch panel when starting the wireless process.

This problem was fixed.

Note 17-03: (WM) Changed WM library

  1. Corrected the problem that the exclusive control of the data sharing function was not executed.
  2. There was a problem that stopped auto-sampling when starting the wireless communication with the auto-sampling of the touch panel enabled. This problem was solved.
  3. When calling wireless asynchronous APIs at different threads at the same time, the result of the process became invalid. This problem was solved.
  4. There was a problem with the exclusive control of send/receive for data sharing, and in rare cases data sharing was stopped. This problem was solved.
  5. The specification was changed so that when a recoverable error occurs during send/receive of the data sharing, WM_StepDataSharing keeps returning WM_ERRCODE_FAILED.
  6. There was a possibility that the child was not recognizing the parent properly when WM_StartScan was executed. This was solved.

To be more precise, when the beacon without the Gameinfo information is obtained, the GameInfo obtained by the precedingWM_StartScan is carried over, and by referencing GameInfo directly without evaluating gameInfoLength, the wrong parent information is obtained.

To deal with this problem, changes were made so that when a parent was found with WM_StartScan and it was the beacon without GameInfo, GameInfo is zero-cleared. In additional, the sample demo was changed to actually check the evaluation.

Note 17-04: (DEMO) Corrected multiboot-Model demo

With the multiboot-Model demo, when a child reconnects to the parent, the channel of the parent changed unexpectedly and the connection could not be established.

When using a cable to connect IS-NITRO-EMULATOR hardware, all channels can be used for connections, and this problem occurs when using the actual wireless feature.

This problem was solved.

Note 17-05: (DevEnv) Corrected makebanner tool

In the makebanner tool that was added in 2.0 PR 6 to generate banner files, there was a problem that caused the first line of the description in the banner spec file to be ignored. This problem occurred when the first line in the banner spec file was not a comment line. It has been solved.

When the character code in the banner spec file was not correct, the empty file was output without generating errors. This problem was solved and changed the description regarding the character code of the reference to "UTF-16LE with BOM."

Note 17-06: (DevEnv) Corrected the LIBSYSCALL process and changed the storage location of libsyscall.a

Even though libsyscall.a that is embedded in the final ROM was specified with the make variable LIBSYSCALL, due to the link order of linkers and libsyscall.a was linked as in the default setting.

To avoid relying on the link order specification when specifying LIBSYSCALL, the storage location of the default libsyscall.a was separated from other SDK libraries. By doing so, libsyscall.a files that are specified with LIBSYSCALL is linked preferentially, not according to the link order specification.

The default libsyscall.a is now stored in the following location. libsyscall.a is common for Debug/Release/ROM versions.

$NitroSDK/lib/ARM9-TS/etc/libsyscall.a

The CodeWarrior IDE users must change the storage location of libsyscall.a in the project file as needed.

Note 17-07: (DevEnv) Corrected the compression process of overlay with NITRO_COMPRESS

When using the compstatic tool to perform the overlay compression process, a problem occurred and in some cases the proper compressed data was not generated. This problem was solved.

Note 17-08: (DevEnv) Changed the font set in banner file

The font set used in banner file was replaced with an updated version. Note that some characters were deleted. For details regarding banner files, see the guidelines documents regarding the IPL banners.

Note 17-09: (DevEnv) Restricting the location of the banner file in ROM spec file and countermeasures

If the beginning of the banner file stored in ROM was not 512-byte aligned, it does not operate properly. If the value that is smaller than 512 bytes was specified with the AlignAll command in the spec file, a problem may occur.

To avoid this problem, changes were made so that the operation of Segment All is 512-byte aligned without using the value set with AlignAll.

Note that when the AlignAll command is not being used, it is necessary to insert Align 512 before the BannerFile command.

Note 17-10: (GX) Corrected the register definition problem

There were some errors in the definition values regarding the hardware register map. These values are not used in SDK, and they will not affect the operation of SDK directly.

This problem was solved.

Note 17-11: (MI) Corrected MI_SendGXCommandAsyncFast

Changes were made so that a separate MI_SendGXCommandAsyncFast() can be started from the DMA callback that was started by MI_SendGXCommandAsyncFast().

Note 17-12: (MI) Corrected MI_SendGXCommand()

MI_SendGXCommand() was using the automatic DMA, and there was a possibility of conflicting with another automatic DMA. Because of this, MI_SendGXCommand() was made to loop with immediate DMA and the automatic startup was eliminated. The former MI_SendGXCommand() was changed to MI_SendGXCommandFast(), but this includes automatic DMA and should be used with caution.

Note 17-13: (FS) Corrected the problem of calling FS_GetPathName()

When the FS_GetPathName() function is called, there is a possibility of stopping by SDK_ASSERT because of the errors in the internal process.

This problem was solved.

Note 17-14: (OS) Added initialization function to be called by OS_Init()

A change was made on the ARM9 side to call CARD_Init() from OS_Init().

Note 17-15: (CARD) Changed the card removal detection process

Corrected the card removal detection process. Previously, some parts such as the card removal during sleep were not working properly.

Previously, to detect card removal, the CARD_IREQ interrupt was checked by ARM9, but the new method uses polling with ARM7. Normally it checks whether the CARD_IREQ interrupt is generated, but when the ROM header information is referenced and then that card uses the CARD_IREQ interrupt, it is done by loading the card ID. When the removal is detected, ARM7 notifies ARM9.

Note 17-16: (TP) Changed the validity conditions

As a countermeasure for the coordinate jumping which occurs when the pen is released, the conditions that becomes INVALID were changed, and the determination is based on the stricter rules. There may be a possibility of increasing the number of cases where the INVALID flags become on.

Known problems with SDK 2.0 FC

Additional Information for SDK 2.0 FC

To recover from sleep by the IREQ interrupts of the Game Pak, it may recover, not only by the removal of the Game Pak, but also by the interrupt from the Game Pak device whose IREQ interrupt is being used for other things.

Consequently, to make the system wake up from sleep by the removal of the Game Pak, proceed only when the Game Pak inserted in the slot is the one expected in the application. Otherwise, do not specify PM_TRIGGER_CARTRIDGE for the trigger for waking from sleep.

Additional information for using the Game Pak

To recover from sleep by the IREQ interrupts of the Game Pak, it may recover, not only by the removal of the Game Pak, but also by the interrupt from the Game Pak device whose IREQ interrupt is being used for other things.

Consequently, to make the system wake up from sleep by the removal of the Game Pak, proceed only when the Game Pak inserted in the slot is the one expected in the application. Otherwise, do not specify PM_TRIGGER_CARTRIDGE for the trigger for waking from sleep.


NINTENDO Technical Support Center