.
) to the initial values used when specifying Reject in makerom
GX_InitEx()
in gx.h
CARD_Init()
with interrupts prohibited
CARD_IdentifyBackup()
PM_Init()
inside OS_Init()
OS_GetConsoleType()
ntrcomp
mic2wav
tool
G3*_MultTransMtx33()
GX_PowerGeometry()
,
GX_Power3D()
GX_SetGraphicsMode()
FS_ReadDir
did not match
make
Related Files
(2005/05/09)
We added DMA channel validity testing to the MI library in Note 21-33, but in the CARD and FS libraries, the code that specifies channels is separated from the code that uses channels and the restrictions were not readily apparent. Accordingly, we added validity testing to the top of functions that request DMA channels in these libraries. We added a warning about this to the function reference.
We added a build switch that defines the floating point library (CW_LIBFP
) and the ability to redefine it in the makefile. Also, the default library was changed from FP_fullI_v5t_LE.a
to FP_fastI_v5t_LE.a
.
The FINALROM version overlay function called unnecessary debugging functions and expanded the code size during link. This was fixed.
We added a sample demo called multiboot-PowerSave that uses the MB_SetPowerSaveMode
function to toggle the power save mode in the Single-Card Play parent.
We implemented a mechanism to add new language codes and added Chinese as an extended language code. We are currently drafting guidelines for the creation of applications that support Chinese.
A feature was added so that the instrument will ignore the specified note length and continue to play to the end of the waveform data if SND_BANK_DISABLE_RELEASE
(=255)
is specified for the release field of the SNDInstData
structure.
The following revisions were made to the $NitroSDK/build/demos/wireless_shared/wfs
sample module and the $NitroSDK/build/demos/wbt/wbt-fs
sample demo:
WFS_End
function was called from an interrupt handle. This was fixed. We added a note in the header file of the WFS sample module indicating that it cannot be called from an interrupt handler.
WFS_End
function was called after the WM library has ended, the port callback failed to release internally and execution stopped with an error, as made in the specifications. However, we changed the specification to simply ignore this section.
SDK_NO_THREAD
is defined during the build.
With the samples that did not call the WcFinish function even though the WcInit function of the WC sample module could be called more than once, the correction was made so that these two functions are called properly. We revised the following demos so that the two functions are properly paired:
There were none.
(2005/04/21)
The reference for the CARD_Init
function did not mention the threads for asynchronous processing that are generated internally. We added a description.
We added the functions CTRDG_IsAgbCartridgePulledOut
and CTRDG_IsOptionCartridgePulledOut
, which are used to detect the removal of the cartridge device. In Note 18-20 for changes in NITRO-SDK 2.0 RC, descriptions were added to the reference but there were no implementations of the functions corresponding to the additions.
Clearly stated in each function reference that CTRDG_IsExisting
function must be called periodically because the ARM7 will not automatically detect removal while the cartridge bus is locked.
The additional text in the reference for Note 23-01, which was released in NITRO-SDK 2.0 official release, was incorrect in saying that the manufacturer's code and game code are only obtained during initialization. The text was corrected.
We revised the memory map and expanded the MainRAM area that is allocated to ARM9 by default. Previously the area allocated to DTCM started at 0x27C0000, but it now starts at 0x27E0000. Also, the MainRAM area allocated to ARM9 was expanded from 0x2000000–0x23BFFFF to 0x2000000–0x23DFFFF. (This increases its size by 128 KB.) The MainRAM area allocated to ARM7 is now 0x27E0000–0x27FEFFF. When the main memory size was 4 MB, under the default protection region setting, the ARM7 program area from 0x23E0000–0x23FFFFF was enabled for reading and writing from the ARM9. We changed the position of protection unit 2 and the area is now protected. When the main memory size is 8 MB, the start address of the extended arena in main memory is now 0x23E0000 rather than 0x2400000. The size was expanded to 128 KB.
We added validity testing code to the FS library functions that cannot be called from inside interrupt handlers.
In the function G3_FrustumW
, the value of element _23
of the matrix that stores the result was wrong. This problem was fixed.
A non-recursive quicksort function was added under the MATH
category as MATH_QSort
.
We added functions that perform data checksum and CRC calculations. We also added references and demos for these functions.
We made the following changes to the demos/os/favorite-color
demo.
demos/spi/mic-2
. This problem was corrected.
Added an option to automatically generate TGID passed as an argument to the MB_Init
function by specifying the newly defined constant MB_TGID_AUTO
. As a result, the tgid
argument was expanded from a u16
to a u32
, but all other specifications are unchanged.
The following functions were added to allow the explicit external setting of parameters in the WM library that are used internally in the MB library.
We made the following correction to the source code of the samples in the $NitroSDK/build/demos/wireless_shared/mbp
directory:
MBP_GetChildMacAddress
and MBP_GetChildInfo
were called for the AID of an unconnected child, a NULL was not returned. This problem was fixed.
The insertion position of the stack underflow detection code for launch threads initialized with OS_InitThread
was 64 bytes lower than the bottom of the stack memory. This problem was fixed.
In the internal implementation of OS_Sleep
function, the period from the setting of the alarm until thread-wait was not thread-safe. This problem was fixed.
As a result of internal implementation changes we made, which are described in Note 24-10, the operation of the DC_FlushAll
function was no longer thread-safe. We corrected this. We also explained in the reference that the processing time of cache operation functions that use an area argument is proportional to the size of the area.
In some of the sample demos in the OS library, interrupts were disabled while the tick system was used. This was fixed so that the OS_EnableIrq
function is called properly.
The references for the following format string functions erroneously said that they do not perform output operations with the final ROM library:
We added provisional support for extended language codes. We changed some of the tools, but there was no impact on the current applications. We plan to officially support the extended language codes in the next release.
Previously, NITRO-SDK contained only the sound library files while NITRO-System contained the sound library files, documentation, and demos. Starting with this release, everything will be included in NITRO-SDK. We have released the source files for the sound library in the $NitroSDK/build/libraries/snd
directory and added sound library sample demos to the $NitroSDK/build/demos/snd directory
. We also added function references for the sound library.
If sequence parameters are changed immediately after calling SND_StartSeq
function, there was a possibility that starting the sequence and updating parameters may not be processed in the same frame. To fix this, we added the functions SND_PrepareSeq
and SND_StartPreparedSeq
. Parameter changes made between SND_PrepareSeq
and SND_StartPreparedSeq
are guaranteed to be processed at the time the sequence starts.
We improved the process to disconnect used by the wireless library when a parent detects a problem with a child. Also, we changed the library's internal operation so that if a parent fails to disconnect from a child by using WM_Disconnect
function, it will attempt to disconnect a prescribed number of times.
We added the function WM_GetNextTgid
, which automatically generates TGIDs based on the RTC time settings.
(2005/04/07)
Added the CARDRomHeader
structure that represents the information in the ROM registration data to the CARD library.
We added process that test-reads 1 byte in CARD_IdentifyBackup
function. The result value of this test-read can be obtained by using CARD_GetResultCode
function. In tandem with this change, the return value type was changed to BOOL
. When calling the function, the access bus must be locked using CARD_LockBackup
function.
In tandem with support for the one-time ROM build option (explained in Note 24-04), we have added demos that specify mask ROM and one-time ROM. They are card/card-mrom
and card/card-1trom
.
In addition to mask ROM, one-time ROM is now supported as a build option for program ROM. RomSpeedType
was added to the section parameters in the makerom.exe
tool so that MROM
, 1TROM
or UNDEFINED
can be specified. Also, we added a NITRO_ROMSPEED
build switch to the NITRO-SDK make environment so that RomSpeedType
can be specified during building. If you don't specify anything, it is set to UNDEFINED
. For details, see the demo in Note 24-03.
Deleted the definition of the SDK_VERSION_PATCH
constant that was always 0 for the SDK version information defined in version.h
header file. In tandem with this change, the 4-byte version information value format contained in the program's resident code was changed. Deleted 4 bits in the SDK_VERSION_PATCH
field, and expanded the SDK_VERSION_MINOR
field to 8 bits. It has been expanded in the lower bit direction. The showversion
tool was changed to reflect these changes. Please note the changes if you develop tools or other applications that read the SDK version information.
The G3_GetDLSize
function sometimes returned a value that was 4 bytes larger than the actual display list size. This problem was fixed.
We added to the MATH category a message digest value calculation function that uses the standard message digest algorithms MD5 and SHA-1. Also, we added calculation functions that use the HMAC-MD5 and HMAC-SHA-1 keyed-hashing algorithms.
We added the MB_GetGameEntryBitmap
function, which gets the AID bitmap of the entered children in the game information being distributed.
When a thread that locked the card bus and a lower priority thread called OS_ResetSystem
function were running, reset internal process became deadlocked. This problem was corrected.
We confirmed that when the cache line management state is valid and dirty, in rare instances, the CPU flush instruction failed to operate. The internal implementation of DC_FlushRange
and DC_FlushAll
functions, which provide this functionality in the SDK was changed so that it is achieved by a combination of the CPU's store and invalidating instructions. The function specifications have not changed.
Made the following changes to the demos/os/favorite-color
sample.
The functions RTC_SetDate
and RTC_SetDateAsync
, which change only the date, did not work correctly and did not change the date. This problem was fixed.
We added functions that obtain sound driver data. The functions are shown below.
SND_COMMAND_IMMEDIATE
can be specified as an additional argument flag of the SND_FlushCommand
function. When SND_COMMAND_IMMEDIATE
is specified, issued commands will be processed without waiting for the next sound frame.
SND_INST_NULL
was added as a value that can be taken for the type member of the SNDInstData
structure that is used by the SND_ReadInstData
function. Instrument data set to SND_INST_NULL
will not make any sound.
Added the description about CLASS1, which is an internal state for "Description of wireless communication library" (AboutWirelessManager.pdf
).
As a result of revisions in NITRO-SDK 2.0 RC5, if a child connected and disconnected before WM_StartMP
function was called, the parent's ARM7 performs an invalid process. Although this problem was fixed in NITRO-SDK 2.0, it was not completely fixed. This is now completely fixed.
There was a problem where the APIID
in the argument passed to the callback function specified by WM_StartScanEx
function could not be differentiated from APIID of the WM_StartScan
function because these two were the same. (As a result, the two APIs could not be used properly.) This problem is fixed.
Some bugs were found in NITRO-SDK 2.0 official release. If the machine being disconnected was unable to communicate, the disconnection would fail and the internal state of the wireless library would become inconsistent. Related to this, when a break was executed from the debugger during communications, other communicating parties did not receive a message indicating normal disconnection due to a timeout. We fixed these bugs.
With DS wireless play, WEP Key encryption can be used only when communicating over a connection. Added a demo that does this: wm/wep-1
.
There were none.
(2005/03/11)
Clearly stated in the function references that the return value of CTRDG_GetAgbMakerCode
and CTRDG_GetAgbGameCode
functions is the value obtained when CTRDG_Init
function is called. Also added that when using a Game Pak in development hardware, the Game Pak slot power must be set to ON before calling CTRDG_Init
function.
The code style has been unified regarding indents and carriage returns in the library and demos.
References for the DS programs included in $NitroSDK/bin
are added to $NitroSDK/man_en_US/romfiles
under the category [Built DS programs].
Where necessary, the function reference now has descriptions of ranges of values that can be passed as arguments.
The macro SDK_WEAK_SYMBOL
is defined as a modifier for the declaration of weak symbols. In CodeWarrior, it is defined as: #define SDK_WEAK_SYMBOL __declspec(weak)
Due to the correction made in RC5, there was a problem where the process did not complete properly because of the internal determination error when the function that loads overlays was called in an application built by specifying NITRO_COMPRESS
. This has been fixed.
Added the option -A4
that adjusts the ending with 0s to make the output file size to be multiples of 4 when compressing data with ntrcomp
.
In the function PRC_GetRecognizedEntriesEx_Superfine
, the conditions to determine validity for SDK_ASSERT
were too strict. These were modified to be appropriate.
The return values of the following function groups were changed from void
to BOOL
, so that they indicate whether it succeeded or failed .
PRC_InitPrototypeDB*
PRC_InitInputPattern*
PRC_ResampleStrokes_*
Due to the correction made in RC5, there was a problem where the parent's ARM7 performed invalid process if a child connected or disconnected before WM_StartMP
function was called. This problem is fixed. This problem does not usually occur in applications that call WM_StartMP
function immediately after WM_StartParent
function succeeds.
Due to changes made in RC5, there was a problem where send was not performed properly if minPollBmpMode
in the WM_StartMPEx
function was set to TRUE. This problem was fixed.
Under certain signal conditions, although this occurred rarely, communication content was erased. This problem was fixed.
Previously, the send queue for port communications had 64 levels. This was changed to 32 levels in order to reduce memory usage by the wireless communications library. For one pair of Data Sharing, the send queue is at most two levels.
The structure passed to the callback for WM_SetMPData*
functions has been changed. Previously, destBitmap
was specified, but for AID of the disconnected DS system, the bit value that corresponded to the restBitmap
field was indeterminate. This has been changed so that it is always 0. In addition, a sentBitmap
field that stores an AID bitmap of a partner capable of sending was newly added. To determine if any DS systems did not receive the transmission because they were not connected or disconnected, compare the destBitmap
field with the sentBitmap
field.
The status check for the ARM7 wireless communications drivers have been improved. As a result, the callback for the following functions can return the WM_ERRCODE_ILLEGAL_STATE
error.
wepkeyid
in WM_SetWEPKeyEx
function.
Previously, WM_EndKeySharing
function always returned an error. This was fixed.
We made the following revisions to the sample source code in $NitroSDK/build/demos/wireless_shared/wh
:
WH_SetUserGameInfo
, which sets user game info for the parent's beacon.
There were none.
(2005/02/25)
A new component, ichneumon, arranges the execution codes for wireless functionality in VRAM. For details, see AboutComponents.pdf
, which was also added. The idle and ferret components, which were provided with NITRO-SDK through 2.0 RC4, are no longer supported.
In the demo that demonstrates the use of the PictoChat functionality, there was a spelling error in the name of the function that enables/disables the PictoChat functionality in WC, which is the common wireless control module.
We revised the source code in the library and demos so that some pedantic warning options are supported. We improved the section that converted integer types that are the same size, but do not both have a symbol.
Added a new sample demo overlay-staticinit
, which demonstrates the explicit addition of a static initializer in the C/C++ source.
Previously, when an archive was unloaded and then loaded, the internal state would partially change to suspended, and asynchronous commands that were issued repeatedly and held would not be executed. This bug was fixed.
If the file that corresponds to the specified overlay was opened successfully during the internal process of the FS_LoadOverlayImage
and FS_LoadOverlayImageAsync
function, TRUE was always returned without reflecting the result of the next FS_ReadFile
function. This has been changed to reflect the result.
The return value of GX_GetOBJVRamModeBmp
function was changed from a GXOBJVRamModeChar
type to a GXOBJVRamModeBmp
type.
The GXBg23ControlAffine
structure contained the invalid member colorMode
. Affine BG is fixed to 256 colors so this member is invalid. The colorMode
definition was deleted from the GXBg23ControlAffine
structure.
When G2_GetBG3Control*
and G2S_GetBG3Control*
functions were called, access to incorrect addresses occurred. This problem was fixed.
The newly added WVR library (for details, see Note 22-40) and the ichneumon component (for details, see Note 22-01) allow you to use the ARM7 wireless library in VRAM. While the wireless library is being used, the VRAM bank cannot be used for anything else. The previously available GX_SetBankFor*
function group was changed so that if a VRAM bank that has been locked by the WVR library is reallocated, OS_Panic
is called and the operation stops. Also, the GX_TrySetBankFor*
function group, which tries to allocate VRAM banks separately was newly added. Note that with these new additions, OS_Init
function needs be called before calling GX_Init
function.
The MATH_CountLeadingZeros
function is replaced by an inline function using the ARM's clz
instruction when outputting ARM code and a function equivalent to the clz
instruction when outputting Thumb code. However, when the default code was set to Thumb code using NITRO_CODEGEN=THUMB
and output code was switched using #include <nitro/code32.h>
, the MATH_CountLeadingZeros
function was not switched to an inline function. This bug was fixed.
The following functions were added as interfaces that allow the user application to place data in the beacon transmitted by the DS download play parent. A fake multiboot child machine using MB_FakeInit
can use this interface to receive specific accompanying information about the user from the parent before a connection is made. The presence or absence of this data will not affect the operation of a DS download child at IPL.
The following new functions can compress data in a DS application at runtime:
The MI_SetAgbCartridgeFastestRomCycle
function was added. This function sets the ROM access cycle for AGB Game Paks. It sets 8-4 access in the DS and is equivalent to 3-1 weight in the AGB.
"Note 21-33: (MI) Dealt with multiple DMA bug," after using DMA0, a dummy empty DMA transfer is performed, but new processing performs a dummy empty DMA transfer also at OS_Init
to handle the first DMA transfer that uses DMA0.
The ARM7 processing of the microphone's automatic sampling engine is now optimized for the ARM7. This change fixed the problem with freezing that occurred when a sampling rate of 32 KHz was used in the mic-1 demo.
A link to the Interrupt Overview page was added to the OS Overview page. The Interrupt Overview page was added in NITRO-SDK2.0 RC4, but there was no link to it.
Functions that pause and restart thread rescheduling were added to the OS library. They are OS_DisableScheduler
and OS_EnableScheduler
.
The functions DC_LockdownRange
and IC_LockdownRange
, which locked the cache to prevent its destruction, left some regions unlocked. This problem was fixed.
The following functions were added. They release locked blocks in the cache and make it possible to update the cache again.
Process was added so that the OS_ResetSystem function internally calls DC_WaitWriteBufferEmpty
after calling DC_FlushAll
. This is because the cache content remaining before reset could overwrite the program data loaded by OS_ResetSystem
.
Added the function OS_GetITCMAddress
, which obtains the base address of instruction TCM. The return value of this function is always the constant 0x01FF8000.
If sleep mode was entered from LCD Off mode, an error occurred with the graphics mode state, and the screen was not displayed in some cases, after the Nintendo DS was restored from Sleep mode. Now, the DS will return to LCD Off mode. This will have no effect on the restore process if the DS entered Sleep mode from Active mode.
The sound library distributed with NITRO-SDK is now the 02/22/2005 version.
During sequential MP communications using ports 8 though 15, packets would be duplicated under certain conditions. This problem was fixed.
When all of the above conditions were met, an identical packet was received in the next transmission as a new packet. This bug would appear as freezing and synchronization problems during DataSharing. If multiple packets are not packed into one payload, this problem will not occur. Accordingly, the problem will not occur if double mode is not used or if the max transmission size set with WM_SetParentParam only allows one DataSharing packet to be sent at a time.
Added description of restrictions to reference for WM_StartMPEx
function. If sequential communication is used when the minPollBmpMode
argument is set to TRUE with this function, you should periodically send "keep alive" data to all the children over all the ports used for sequential communication so that children not receiving over 60 frames of data will still be considered alive.
When WM_SetMPDataToPort*
transmits unsuccessfully, the WM_ERRCODE_SEND_FAILED
acknowledgement callback is passed a restBitmap
that contains invalid members. This problem was fixed.
If WM_Reset
were called during wireless communication when the parent was connected to a child, in some cases, processing would not be completed for a long period (normally 4 seconds, but it can be changed using WM_SetLifeTime
) depending on conditions. This problem was fixed.
WM_IsBssidEqual
and WM_CopyBssid
implicitly required arguments with addresses that were aligned to 16-bit boundaries, and thus they did not operate correctly with odd-numbered addresses. This bug was fixed. We also added the new functions WM_IsBssidEqual16
and WM_CopyBssid16
, which have the same functionality as the old versions.
With WM_StartParent
and WM_StartConnect
, the event acknowledgement following a successful connection is sometimes called before the callback indicating successful completion of asynchronous processing. A warning to this effect was added to the reference manual.
When a resend occurred while data was being sent in a specific pattern, the data that was supposed to be sent would vanish and the callback indicating completion of transmission was not sent. This problem was fixed. This problem can occur when using broadcast communication and communication to certain children at the same time.
We made the following revisions to the sample source code in $NitroSDK/build/demos/wireless_shared/wh
:
WH_SetReceiver
now uses WM_ERRCODE_SUCCESS
to compare the return value when calling WM_SetPortCallback
.
We fixed the following problem with the demo source code in $NitroSDK/build/demos/wireless_shared/wfs
.
WFS_InitParent
and WFS_InitChild
would update the internal state before initialization processing was completed and this caused problems during MP communications callbacks. This problem was fixed. This problem does not occur when initializing WFS after the WM state is READY and before it is PARENT/CHILD.
The following APIs were added to provide processing under more precise settings.
WM_StartConnectEx
, we in-lined the existing WM_StartConnect
function. When building with previous versions of NITRO-SDK, object files and library files that internally call WM_StartConnect
will generate a "function undefined" error during linkage with the program. You must rebuild these files.
When starting MP communications with WM_StartMP(Ex)
, in some cases, the midstream acknowledgement of MP communication was called before the callback of the function was called. This was fixed. We changed the internal operation so that MP-related midstream acknowledgements will not occur before the callback of WM_StartMP(Ex)
. This change caused the operation of the ARM7 to stop in some rare instances if a child connected and disconnected repeatedly. This problem was fixed. Also, we found that if a child disconnected from the parent when WM_StartMP(Ex)
was called but before the callback was called, the library would malfunction in some cases. This problem was fixed.
In rare instances, a parent Nintendo DS using wireless communication would fail to send a beacon even after it successfully became a parent. This was fixed.
Previously, the proper WM_SetMPData*
function was not sent a callback regarding the transmit data left in the transmit queue at the end of communication. Now a callback is always returned. As a result of this change, all asynchronous APIs for WM now return at least one callback.
We confirmed that problems with library operation could occur after a wireless parent nearing its connection capacity connected with additional children, causing it to exceed its connection capacity. This problem was fixed.
The description document for the wireless communication library was officially released as docs/TechnicalNotes/AboutWirelessManager.pdf
.
With the addition of the ichneumon component (details are in Note 22-01), we also added the WVR library, which deploys the wireless executable code in VRAM, starts/stops it and removes it, when this component is in use.
There were none.
(2005/01/14)
Created a CHT library to handle the PictoChat-related API group. The following functions are included in the CHT library:
As of January 13, 2005, there is no description of how to use the PictoChat-related library in the DS Program Guidelines. If you are considering using this library, first contact NOA support.
MATH
was created as a category for mathematical functions. MATH_ILog2
is included, in addition to functions min
and max
. MATH_ILog2
calculates log2(x) in integer range at high speed on the ARM9.
The following functions have been added as random number libraries with the linear congruential method.
Also, $NitroSDK/build/demos/math/rand_lc
was added as a demo.
In the pseudo Single-Card Play child device library MB_FakeChild
, there was a bug that cut communication with a FATAL error when an MP communication error, which can be retried, occurred. This bug was fixed.
When set to use internal thread with MB_ReadSegment
function call, the state management of internal threads did not occur correctly when ending library with the MB_End
function, and operation after reinitialization was abnormal. This bug was fixed.
When terminating the MB library with the MB_End
function or the MB_EndToIdle
function, incorrect operation occurred after MB library termination due to its timing and to MB internal events that occur during the termination process. This bug was fixed.
Added MBP_USING_PREVIOUS_DOWNLOAD
switch in the following source used by the multiboot demo.
When this switch is ON, starts download of as-needed preceding data for entered child device. Using the sequence with this switch ON, it may be possible to keep to a minimum the download wait time, depending on the timing of child connection.
Added the function WM_IsExistAllowedChannel
for confirming the presence or absence of a usable channel for wireless communication. This function does not depend on the internal state of the WM library, and only determines the existence of a permitted channel.
For the WM asynchronous function group, operation is not guaranteed for calls of other functions during asynchronous processing. However, for the WM_SetMPData( ToPort(Ex) )
function only, it is possible to reserve send data by consecutive calls. In this case, the actual data to send may break if you consecutively call over ten times. For this reason, we fixed it so that it performs stricter exclusion processing. As a result of the fix, the method was changed so that WM_ERRCODE_FIFO_ERROR
is explicitly returned by WM_SetMPData( ToPort(Ex) )
when performing a send requests where data is likely to break.
In MP communication, the power save time of the child device was, on rare occasions, longer than normal. This bug was fixed.
In the sample demo with FS using wireless, the internally-set receive callback function was not cleared when WFS_End
is called, and the internal callback function was called unintentionally. This bug was fixed.
The demo was fixed so that it decides the channel using a random number when there are multiple channels using the same wave. This is in order to better distribute channels to use when the parent device decides the channel in the wireless demo. This process is reflected in the following demos:
Fully updated the content of the document AboutFileSystem.rtf
, which describes the file system library, and added it as AboutFileSystem.pdf
.
Added Get functions that read drawing register. The functions are shown below.
In the sub 2D engine, there was a bug where VRAM extension flag of a non-existent bitmap OBJ was defined as the define value. The following definitions were eliminated.
Also, the GXS_SetOBJVRamModeBmp
function was fixed so that it checks, using ASSERT
, arguments that use this flag.
Fixed so that, during data transfer with GX, data is copied by the CPU without using DMA when the data size is small. Transfer by synchronous process is normally processed on the CPU for transfers under 28 bytes for 16-bit copies, and under 48 bytes for 32-bit copies.
When performing VRAM bank settings using the GX_SetBankForBGEx
function, the warning by ASSERT
did not appear even when loading data in an incorrect address during the DEBUG build. This bug was fixed.
The capture enable flag set with the GX_SetCapture
function is usually automatically reset after completion of capture. However, the GX_ResetCapture
function was also added as a separate cancellation function that can reset. However, be aware that you cannot abort a capture that is already in progress.
In the force stop process performed when hot swap of DS Game Card or Game Pak is detected, the wave send sometimes didn't stop completely during wireless communication. Also, it was sometimes unclear whether the LED was illuminated. These bugs have been fixed.
The CARD_ReadRomID
function has been eliminated because there is no purpose in using it from a user application.
Added a function for getting and setting the access permission state in order to prevent child device programs started with wireless download from carelessly accessing the NITRO-CARD. When applications not started from the NITRO-CARD access the NITRO-CARD, you must call the CARD_Enable
function after deciding according to the rules in the Programming Guidelines.
In the TP_GetLatestRawPointInAuto
function, all values sampled in the interval of the previous one frame were treated as touch OFF when they were touch ON and INVALID. It was fixed so that in this situation also the validity value is set and returned as touch ON.
When performing touch panel sampling at a specific timing, there was a combination, depending on the hardware, where a lot of noise from the LCD was picked up. For this reason, we improved the countermeasures against noise during sampling.
Added the following APIs that dynamically change the sampling rate without stopping sampling while auto-sampling is running.
Also, fixed part of the sample demo mic-1, and made the sample also use this API.
The interrupt check flags OS_IE_USER_FLAG0 and OS_IE_USER_FLAG1 were only available on the ARM7. These flags were added in "Note 6-35: (OS) Added interrupt check flags for applications" (NITRO-SDK Version 1.2 PR1). These are now also available on the ARM9.
Added OS_DestroyThread()
, which specifies and terminates a thread. (This function was originally prepared as an internal function.))
Be careful when using this function, as it is a little risky to terminate another thread without notice.
"Note 13-18: (PAD) Eliminated PAD_SetIrq() and PAD_ClearIrq()" (NITRO SDK 2.0 PR4 release), use of key interrupts was prohibited. Therefore, interrupt-key-1 (key interrupt demo) in the OS demo has been eliminated. Furthermore, WaitIrq-2
, which used key interrupts, was changed so that it uses timer interrupts.
Up to now, in order to use extended main memory arena, it was necessary to make OS library with NITRO_MEMSIZE=8M
specified. However, it is now possible to declare whether or not to use extended main memory arena by specifying OS_EnableMainExArena()
and OS_DisableMainExArena()
before OS_Init()
(OS_InitArena()
when not using OS_Init()
).
However, extended main memory arena can never be used when operating in an environment (including actual equipment) with only 4 MB of main memory installed.
There were mistakes in the OS_DisableWriteBufferForProtectionRegion()
function, and it behaved the same as the OS_EnableWriteBufferForProtectionRegion()
function. This has been fixed.
Added the following functions related to heaps.
Also, changed the type of OS_CheckHeap()
from long to s32.
Supported streaming expansion of compressed data. By using this function, it is possible to perform expansion with a smaller buffer while reading LZ-compressed data, Run Length compressed data, or Huffman-compressed data from a Game Card. The following demo has been added as a sample that actually performs streaming expansion of data:
For MI_SendGXCommandAsyncFast()
and MI_SendGXCommandAsync()
, the volatile specification was not appropriate and caused the termination wait to work improperly when the specified DMA was already in use. This has been fixed.
Created restrictions on source address when using DMA0 to deal with the hardware bug when there are multiple DMAs. Specifically, made it impossible to specify 0xmmnnnnnn (mm = 0x04 and 08-ff, nnnnnn is arbitrary) in source address of DMA0. These restrictions also apply for source address when transfer ends.
Also, dummy empty DMA transfer is performed after using DMA0.
There are no restrictions on DMA1 through DMA3.
Changed order of PXI control register clear and PXI interrupt setting from "interrupt setting -> register clear" to "register clear -> interrupt setting".
This was done because with the previous order, data remained in the PXI FIFO register when setting an interrupt, and an interrupt occurred at that point.
In applications using the clone boot function, added functionality to makerom that determines at time of ROM image creation whether or not the region for adding authenticator with the attachsign tool can be allocated in/on the ROM image.
This function is enabled by adding -A
as the start option of makerom. When using a makefile, it is best to set option -A
for MAKEROM_FLAGS
as follows:
MAKEROM_FLAGS = -A
Until now, the documents under $NitroSDK/docs/TecnicalNotes
were in various formats such as doc and rtf. These have been converted and standardized to pdf format.
Provided demo in $NitroSDK/build/demos/tips/MyBuildMessages
that changes link message and compile during/when make -s
.
The emuchild.exe
that prearranges signature to binary when using clone boot normally output full-sized files. However, to reduce the size of output files, it was changed so as to exclude data after the static region of the ARM9 and 7. Use the added -f
option to output full-sized binary.
The sound library distributed with NITRO-SDK is now the 12/27/2004 version.
There were none.
(2004/11/29)
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
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.
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.
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.
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.
The following problems were found when the receive buffer size setting was changed with the Single-Card Play parent.
MBUserInfo
cannot be received.
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.
Added a sample clone boot that illustrates the creation procedure of the clone boot program.
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:
wireless-shared/wh/wh.c
, a correction was made to change to the WH_SYSSTATE_CONNECT_FAIL
state properly when the connection to a parent failed.
WM_Reset()
before retrying the connection if the connection failed.
Check the points above if you create an application by using this demo as an example.
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
.
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 bugs have been fixed.
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.
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.
Added the FS_LoadOverlayImageAsync()
function that loads overlays asynchronously.
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.
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.
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.
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.
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.
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.
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 bug was fixed.
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.
There was a problem in which the SND_InvalidateWaveData()
function stopped the generation of other sounds that are not related. Because of this problem, if the sound data in the memory was deleted while in the surround mode, the sound was not generated until the surround mode was stopped. This bug was fixed.
The following are problems in the MIC_GetLastSamplingAddress()
function.
MIC_StartAutoSampling()
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.
Of the pattern recognition APIs, the identifier names that contained the word "regularize" were changed to "normalize."
Member variables of the structures PRCInputPatternParam
PRCPrototypeDBParam
PRCPrototypeList were changed.
The structure member variables of each of these have changes. Also, the constant value in the C program which is output by $NitroSDK/tools/bin/pdic2c.pl
was changed to PDIC_NORMALIZE_SIZE
.
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.
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.
(2004/11/04)
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).
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.
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.
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.
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.
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
.
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 fixed.
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.
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()
.
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.
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.
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. This corrected a problem where the documentation and actual operation did not match.
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.
During caching of received data in the wbt-fs sample demo, some areas that should have been flushed were invalidated.
This problem was fixed.
Two problems with the WBTlibrary
were corrected.
WBT_GetBlockInfo()
was called when a block was not stored on the other machine, the WBTBlockInfo
structure that was returned by the callback would have unpredictable values. The structure now returns with all members cleared to zero.
WBT_GetBlockInfo()
function had higher priority than WBT_GetBlock()
and this would sometimes cause a deadlock. This was fixed by reducing the priority of WBT_GetBlockInfo()
.
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.
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 );
‚ƂȂè‚Ü‚·BFor 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.
We added the following color information definitions and functions. We also added a reference.
OS_FAVORITE_COLOR_
enumerated constants
OS_FAVORITE_COLOR_VALUE_
color value constants
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 has been fixed.
There was a problem with the tick value setting function (OS_SetTick()
). The other interrupt request flags were disabled. This has been fixed.
This function could affect the operation of alarm systems in use. Please be careful when using OS_SetTick()
in an application.
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.
This problem was also fixed.
There was a problem when an autoload was performed using a data section created in DTCM. This has been fixed.
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.
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.
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.
Correction of 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.
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.
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.
Two function names were changed. They are functions relating to the underflow (lines over) flag of the rendering engine's line buffer.
G3X_IsLineBufferOverflow()
andG3X_ResetLineBufferOverflow()
were changed to
G3X_IsLineBufferUnderflow()
andG3X_ResetLineBufferUnderflow()
‚ɉü–¼‚µ‚Ü‚µ‚½B
The following constants in $NitroSDK/include/nitro/hw/ARM9
were declared incorrectly.
They were corrected.
When the table in G3X_initTable
was cleared to zero, the last 16 bytes in the toon table were not cleared.
This bug was fixed.
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.
Added reference information for CTRDG_IsNumberID()
and CTRDG_IsBitID()
, which check if specified peripheral devices are installed in the Game Pak.
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.
There were none.
(2004/10/07)
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.
Deleted the test mode operation functions WM_StartTestMode()
and WM_StopTestMode()
.
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.
Noise was added when using the sound library to play high pitched sounds during the wireless communication. This issue was improved significantly.
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.
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. Œ^‚É“Ecirc;ꂵ‚Ü‚µ‚½BInterface changes in APIs were executed for the following.
WMParentParam
structure
WM_SetGameInfo()
function
MB_Init()
function
Due to this change, sample demos that perform the wireless communication were updated.
The argument ignoreFatalError
was added to WM_StartMPEx()
. Normally, FALSE should be given.
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.
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.
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 changes in APIs were executed for the following.
WM_SetDCFData
function
WMStartParentCallback
structure
WMStartScanCallback
structure
WMPortRecvCallback
structure
WMScanParam
structure
Due to this change, sample demos that perform the wireless communication were updated.
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.
With mb_child.srl
, when the user name of the parent was 10 characters, it did not work properly. This problem was corrected.
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.
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.
Added the WBT_CancelCurrentCommand
function that is used for canceling the file receiving operation that is being processed with the WBT_GetBlock
function.
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.
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.
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.
Included the final version of the banner display tool. Compared to the last version, fonts that can be used are changed.
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.
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.
OS_InitArenaEx()
is called, if SDK 4M is defined or the amount of mounted memory is 4 MB, the region size changes to 4 MB.
This change allowed the transfer to the extended memory region.
Changes were made to stop the sound playback with ARM7 when OS_ResetSystem()
is called.
These were added to the thread initialization executed by OS_CreateThread()
.
OS_ExitThread()
, OS_JoinThread()
, and OS_DestroyThread()
.
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 has been fixed. Also, the register for detecting underflow was not displayed properly, and it was corrected.
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.
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.
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.
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.
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.
The following cartridge functions are now the official release, and references were added.
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.
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 fixed.
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
.
There were none.
(2004/09/30)
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
.
There was a problem that stopped the auto-sampling process of the touch panel when starting the wireless process. This has been fixed.
Corrected the problem that the exclusive control of the data sharing function was not executed.
There was a problem that stopped auto-sampling when starting the wireless communication with the auto-sampling of the touch panel enabled. This has been fixed.
When calling wireless asynchronous APIs at different threads at the same time, the result of the process became invalid. This problem was solved.
There was a problem with the exclusive control of send/receive for data sharing, and in rare cases data sharing was stopped. This has been fixed.
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.
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 bug was fixed.
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. This has been fixed.
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."
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.
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 bug was fixed.
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.
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.
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.
REG_GX_VRAMCNT_C_MST_SIZE REG_GX_VRAMCNT_C_MST_MASK REG_GX_VRAMCNT_D_MST_SIZE REG_GX_VRAMCNT_D_MST_MASK REG_GX_VRAMCNT_E_MST_SIZE REG_GX_VRAMCNT_E_MST_MASK
This bug was fixed.
Changes were made so that a separate MI_SendGXCommandAsyncFast()
can be started from the DMA callback that was started by MI_SendGXCommandAsyncFast()
.
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.
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 fixed.
A change was made on the ARM9 side to call CARD_Init()
from OS_Init()
.
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.
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.
NITRO_COMPRESS
is specified for make
, an error is generated when the base names (the part without the file extension) for the .nef
file and the .sbin
file, which is the binary for the resident module.
mb_child.srl
is 10 characters, it does not work properly.
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.
(09/21/2004)
WM_Initialize
function was left in cache in dirty state, it affected the operation of the WM library. This problem was solved.
minPollBmpMode
in WM_StartMPEx
was set to TRUE with a parent and the parent communicated with only a certain child for a fixed period of time, other children were disconnected because of the timeout. Especially if the sequential communication was being used at ports with number 8 or higher and some children were forcibly disconnected, the above mentioned problem occurred easily. To solve this problem, change was made so that during the MP communication both the parent and children transmit Keep Alive frame with the number of sendable bytes set to 0, only if minPollBmpMode
is set to TRUE.
WM_GetMPReceiveBufferSize
and WM_MP_SIZE_PARENT_RECEIVE_BUFFER
.
WM_STATECODE_CONNECTED
, DISCONNECTED
, changes were made so that aid is always the AID of the connection targets. Its own AID is assigned to myAid
.
docs/TechnicalNotes/WirelessManager.doc
. A draft was released.
When loading an overlay with the program that was built by specifying NITRO_COMPRESS
, the entire BSS region was not cleared and the variable of the initial value 0 was not initialized properly. This problem was solved.
A system that calls the callback when the Game Pak was pulled out while playing the game. It becomes valid if the Game Pak library was initialized with CARD_Init()
. With the default setting, it does not do anything.
A system that calls the callback when the Card was pulled out while playing the game. With the default setting, both processors become the halt state and stop.
When creating a display list that was packed with G3C, indeterminate data was written because of the processes that deal with the geometry FIFO hardware problems. This problem was solved.
Previously, the RTC interrupt process was emulated by polling at ARM7 because of the conflict problem with IS-NITRO-DEBUGGER. The change was made only with the FinalRom
library, and now the RTC interrupt of the NITRO hardware is used.
With the Debug version and Release version, the RTC interrupt is emulated by polling, as it was done with previous versions.
The MIC_StartAutoSampling
and MIC_StartAutoSamplingAsync
functions used I/F that specifies the structure directly at the parameter. To cut down on the stack usage, it was changed to the I/F that specifies a pointer to the structure.
The sound library included with NITRO-SDK became the 09/16/2004 version.
Included an addbanner tool for creating the test viewer of the banner file. This tool creates the ROM file that displays the banner information on NITRO screens.
Added the demo that creates the final ROM. This demo shows an example of the process that incorporates files that are necessary to be included in the final ROM.
The information in this demo is as of the time of the SDK release. The rules regarding the submission of final ROM may change after the release, so check the latest information on the company's support web site.
Reference for the attachsign tool is not complete.
(09/13/2004)
Added functions that obtain the owner information that is saved in the Nintendo DS system. It allows to obtain the owner information that the end user edited by using the IPL program in the system.
Also, the function that obtains the MAC address of the wireless hardware in the system was added. The MAC address is set to a different value for each hardware system, and it can be used with an application that does not use the wireless feature.
These are the three functions that were newly added.
OS_GetOwnerInfo()
OS_GetOwnerRtcOffset()
OS_GetMacAddress()
Implemented soft reset, and the program can be restarted from the entry point. It is possible to assign any u32 value at the reset time and pass it to the rerun module. This function does not initialize the hardware. Because of this, the processes such as automatic DMA must be terminated before calling this function.
However, the first 16 KB of the ROM data that was loaded at the startup is not reloaded at reset time, and the execution cannot be done if this part is destroyed. The library does not determine it, so it is necessary to make sure that it is not destroyed by the software.
When the system has been started as a child by multiboot, the system cannot be restarted with OS_ResetSystem()
. To proceed safely, call OS_Panic()
inside OS_ResetSystem()
to stop. (after outputting a message, it becomes an infinite loop, except the FINALROM version). If there are any problems with the operation, determine if it is the multiboot child by using MB_IsMultiBootChild()
and switch cases.
Added the OS_ClearAlloc()
function that destroys the memory allocation system after it was build in arena with OS_InitAlloc()
. After calling OS_ClearAlloc()
, a new memory allocation system can be built in the same arena.
When there is an attempt to set a new alarm by using the alarm structure that is being used with alarm and V-count alarm, it stops with OS_Panic()
regardless of the build method. Previously it stopped only the DEBUG build and others entered infinite loop.
Added the bit definition of the DMA registers in $NitroSDK/include/nitro/mi/dma.h
. Previously it was defined in the header file in the library construction tree, but the location has been changed to make it accessible from an application.
Added functions are shown below.
When Initializing | |
---|---|
WM_Init |
Synchronous function that initializes the work buffer required for the library. |
WM_Enable |
Changes the wireless hardware to be the usage permitted state. It also starts the LED to blink. |
WM_PowerOn |
Starts up the wireless hardware and executes initialization that is necessary. |
When Stopping | |
---|---|
WM_PowerOff |
Shuts down the wireless library. |
WM_Disable |
Changes the wireless hardware to be the usage prohibited state. It also stops the blinking of the LED. |
WM_Finish |
Synchronous function that stops the library and releases the work buffer. |
To reduce the battery power consumption, try not to start up the wireless hardware until immediately before the startup of the actual wireless communication (WM_PowerOn
). Also, when the wireless communication is not needed (WM_PowerOff
), shut down the wireless hardware.
WM_SetMPDataToPort()
to return a success value even if the transmission was not complete due to the weak radio wave signals. This change solved the rare problem that stopped the data sharing.
pollBitmap
(Poll map) was not being sent to itself, and it was causing a problem when the target child for the communication was switched by pollBitmap
. This problem was solved.
WM_INVALID_PARAMETER
error is returned when a specified value is larger than the size of the data that can be transmitted with one MP communication. Added a feature to debug output the warning when the transfer data size is larger than the recommended value, as it is explained in the programming guide line.
WM_StartMP()
, was set to WM_STATECODE_MP_IND
, it only passed WM_ERRCODE_SUCCESS
as errcode. With NITRO-SDK 2.0 PR6 and later versions, WM_ERRCODE_INVALID_POLLBITMAP
is returned when itself was not included in pollBitmap of MP.
This situation occurs frequently when there are more than two children in the MP communication, and it should not be treated as unrecoverable error.
WM_ERRCODE_SUCCESS
, WM_ERRCODE_TIMEOUT
, and WM_ERRCODE_FAILED
were passed as errcode when the state value, which is the argument for the callback to WM_StartMP()
, was set to WM_STATECODE_MP_IND
. It was corrected as shown below.
WM_ERRCODE_INVALID_POLLBITMAP
when itself is not included in pollBitmap at the corresponding MP frame. This occurs frequently when more than 2 children are used for the MP communication, and it should not be treated as unrecoverable error.
WM_ERRCODE_FAILED
was returned when itself was included in pollBitmap with MPACK (in other words, when the parent could not receive the reply). This was changed to return WM_ERRCODE_SEND_FAILED
.
WM_ERRCODE_SUCCESS
, WM_ERRCODE_TIMEOUT
, and WM_ERRCODE_FAILED
were used as the errcode that was passed to the callback of WM_SetMPData()
and WM_SetMPDataToPort()
. However, WM_ERRCODE_TIMEOUT
and WM_ERRCODE_FAILED
were combined into WM_ERRCODE_SEND_FAILED
. In doing so, WMPortSendCallback.destBitmap
now includes the bitmap of aid for the child that needs to retry after the communication failure. (the child that was disconnected during the communication is not included in destBitmap.)
WM_StartMP()
was set to WM_STATECODE_MPEND_IND
.
Previously, the order of callbacks was:
WM_SetMPDataToPort()
)
WM_STATECODE_MPEND_IND
(callback of WM_StartMP()
)
WM_SetPortCallback()
)
However, the order was changed to:
WM_SetPortCallback()
)
WM_SetMPDataToPort()
)
WM_STATECODE_MPEND_IND
(callback of WM_StartMP()
)
This change was made so that data that reflects the latest receive data is transmitted immediately when the standard structure such as executing the next WM_SetMPDataToPort()
by the callback of WM_SetMPDataToPort()
is used for the program.
WM_SetMPDataToPortEx()
function. User defined data can be added to the argument of the transmission complete callback.
WMParentParam
was set to the size that was 2 bytes smaller than the specified value. This problem was solved. parentMaxSize
and childMaxSize
were the parameters that specify the maximum size of user data to be transmitted. There is no need to count the size of the control data in the wireless library.
WMParentParam.KS_Flag
.
ksFlag
was added to each of the function macros of WM_SIZE_MP_PARENT_SEND_BUFFER
, WM_SIZE_MP_PARENT_RECEIVE_BUFFER
, WM_SIZE_MP_CHILD_SEND_BUFFER
, and WM_SIZE_MP_CHILD_RECEIVE_BUFFER
.
To calculate the buffer size for key sharing, specify TRUE, if not FALSE, to ksFlag.
WM_Reset
was called.
WM_SetMPFrequency
that changes the frequency of MP communication dynamically.
Included the icon in the following location to indicate the strength of wireless communication. For more rules and regulations, see the guidelines for the wireless communication.
$NitroSDK/data/wl_icons
Test released WBT, the library that enables the block transfer protocol between a parent and a child by using the MP communication of the wireless library (WM).
The following problems have been found in this test release.
The sound library that is distributed with NITRO-SDK became the 09/02/2004 version.
Added feature for compressing the resident module that is loaded with IPL. Because of this, ROM capacity and the initial load size for the startup can be reduced.
In the make system of SDK, this feature is automatically enabled if a value is set to the macro variable NITRO_COMPRESS
. Consider the tradeoffs in the extraction time before using this feature. When the compression is enabled in SDK, the following processes are executed.
crt0.c
after it was executed.
It is possible to compress the overlay module in the same way as the resident module. Extraction of the overlay module is integrated into the related APIs, so there is no need to be conscious about the processing when you access the module via API.
In order to implement this process, the following tool files have been changed from NITRO-SDK 2.0 PR5. When using an unique rsf file and lcf.template
file, these files need to be changed.
$NitroSDK/include/nitro/specfiles/ROM-TS.rsf
$NitroSDK/include/nitro/specfiles/ARM9-TS.lcf.template
This compression and extraction processes can be applied to the execution module in the ROM file that is passed to the multiboot child.
Changes were made to startup nitload of the sample program that is included in the IS-NITRO-DEBUGGER package by specifying run for the make
command target.
Included ferret (ARM7 component without the wireless features) that supports each TS versions of the hardware such as IS-NITRO-EMULATOR. Normally, there should not be any problems with using mongoose (ARM7 component with the wireless feature), so there is no need to use ferret in the TS environment unless you need to compile the source for the TEG environment without any changes.
Previously, it was made to get out of the function with interrupts prohibited when the heap check was executed in OS_CheckHeap()
and the check failed. This problem was corrected.
There was a problem with the runlength compression routine at tools/bin/ntrcomp, and the 129 to 130 bytes at the end of file were not extracted properly if the uncompressed data block size at the end of file was 129 to 130 bytes. This problem has been changed.
With the process that checks to make sure that multiple automatic DMAs are not started, the ones that are started and the ones that are not started were treated the opposite way. This was corrected so that the check is executed properly.
With NITRO-SDK 2.0 PR5, there was a problem that the wireless feature did not work properly when the wireless and sound features were used at the same time. This problem was solved.
However, because of the DMA hardware specification, there is a possibility of interrupting the sound when the playback causes a large burden on the data transfer, such as playing the waveform data with the sampling rate of 44kHz at the pitch that is 3 octaves higher.
A problem was found and the return value of the MB_GetSegmentLength
function was smaller that the size that was actually required. This problem was solved.
There was a problem with the Debug version of the MB demo Multiboot sample in NITRO-SDK 2.0 PR5, and the startup was stopped with GX error. Also with the Debug version, there was a problem that caused the improper operation in the interrupt hander during the downloading process due to the lack of stack area.
When the backup access function of CARD was called, the function failed only at the first time it was called. This problem was solved.
CharacterRecognition-1
demo in NITRO-SDK 2.0 PR5 was not working properly due to the stack overflow. This problem was solved.
Added console output functions such as OS_TPrintf
that reduces the stack consumption size by using OS_VSNPrintf
. With OS_TPrintf
, the code usage and stack usage are reduced by removing floating points from the usable format.
Usable formats depend on OS_VSNPrintf
. For details, see the OS_VSNPrintf
manual.
Reference for compstatic and attachsign tools is not complete.
(8/30/2004)
WM_StartConnect()
function and the interface of the WMStartParentCallback
structure were changed.WM_StartMPEx()
function to allow detailed settings.WM_SetGameInfo()
function has changed.WM_DisconnectChildren
WM_GetMPSendBufferSize
WM_GetMPReceiveBufferSize
WM_GetAllowedChannel
WM_SetEntry
WM_GetLinkLevel
WM_ConvGgid*
WM_Disconnect()
functionAdded processes to deal with hardware restrictions or generate warnings for the automatic DMAs that do not process immediately, listed below:
V-blank startup H-blank startup Display synchronization Work RAM display Memory Card data Game Pak DMA Geometry Command FIFO
The automatic DMAs cannot be used together. When an attempt was made to start multiple DMAs, it was stopped with OS_Panic()
. However, H-blank startup DMA and V-blank startup DMA can be used together.
Also, the following corrections were made to the Geometry Command FIFO DMA.
MI_SendGXCommand()
was moved to ITCM.MI_SendGXCommandAsync()
was changed so it does not use the automatic DMA of the Geometry Command to make it possible to use it with other automatic DMAs. The asynchronous transfer became possible by controlling the immediate DMA using software interrupts.MI_SendGXCommandAsync()
, which uses the automatic DMA, was changed to MI_SendGXCommandAsyncFast()
.Included the mongoose component and libspi.
, a library that support each version of TS hardware. To switch the component and library in the make system of SDK, set the TS board version number for the environment variable NITRO_TS_VERSION. If the NITRO_TS_VERSION is not set, then NITRO_TS_VERSION=100 (IS-NITRO-EMULATOR hardware version D) is selected.
To create an application that supports IS-NITRO-EMULATOR hardware version E, it needs to be set as NITRO_TS_VERSION=200.
The supported components and libraries are shown below.
TS version number | mongoose/libspi.a file names that correspond (e.g. for ARM and Release versions) |
0 |
$NitroSDK/component/mongoose/ARM7-TS/Release/mongoose_sub_TS0.* $NitroSDK/lib/ARM9-TS/Release/libspi_TS0.a
|
100 |
$NitroSDK/component/mongoose/ARM7-TS/Release/mongoose_sub_TS100.* $NitroSDK/lib/ARM9-TS/Release/libspi_TS100.a
|
200- |
$NitroSDK/component/mongoose/ARM7-TS/Release/mongoose_sub_TS200.* $NitroSDK/lib/ARM9-TS/Release/libspi_TS200.a
|
Due to the increasing size of the source code, it is increasingly difficult to support the wireless component of mongoose in the TEG environment. Because of this, support for this feature has been terminated.
makerom
Corrected makerom
, and added file names and file directory names that start with a dot ".?*" to the initial values used for Reject (or with wildcard it is ".?*") By doing so, files in the .svn
directory, which is the control directory of the version management system Subversion, are not added to the ROM file.
As in the previous version of makerom, in order to add the files that start with ".?*" to the ROM file system, Reject must be reset at the beginning of the RomSpec
section in the rsf
file.
Reject CVS vssver.scc
If you were already using the file name that begins with ".", pay special attention.
NITRO SDK PR5 uses version 0.6.1 of CodeWarrior for building the SDK binary file. CodeWarrior 0.6.1 is included in the SDK.
In the ARM9-TS.lcf.template
file, the way the .itcm/.dtcm sections were placed was different from what was expected in makelcf
, and the codes defined in the .itcm/.dtcm sections were not placed in the autoload section of ITCM/DTCM.
Makelcf
was corrected, and in case an Object/Library description did not limit the section, the section placed by this description is now limited to the basic section used by the compiler (such as text, .rodata, .data, and .sdata). It does not include sections such as .itcm/.dtcm that were newly defined in theNITRO-SDK.
When setting the mosaic size, there were problems with G2*_SetBGMosaicSize()
, which clears the OBJ mosaic, and G2*_SetOBJMosaicSize()
, which clears the BG mosaic.
These problems are fixed.
GX_InitEx()
in gx.h
In $NitroSDK/include/nitro/gx.h
, GX_InitEx()
and GX_GetDefaultDMA()
were not declared as inline functions. This problem was corrected.
The CARD module now supports FLASH device as well as EEPROM device. With sub board and flash card, this can be used on the retail product and the debugger.
CARD_Init()
with interrupts prohibitedThere was a problem when calling CARD_Init()
with interrupts prohibited, the control was not returned from the function.
This problem is fixed.
CARD_IdentifyBackup()
After calling CARD_IdentifyBackup()
and its process has completed, the callback function that was specified with the last executed CARD asynchronous function was called again.
This problem is fixed.
When executing a DMA transfer using either the Main memory display startup DMA mode or the H-Blank DMA mode, the access right priority must be "ARM9." Otherwise, the display may not appear properly due to a delay in the DMA automatic startup when ARM7 tries to access the main memory. The access right priority is specified with MI_SetMainMemoryPriority()
.
Changes were made so that switching access rights is done with gx/UnitTours/2D_BmpBg_MainRam
and gx/UnitTours/Window_HDMA
, which use these DMAs. Also, the same information was added to the related reference manuals.
If the Tick value was obtained while the compiler optimization level was at or above a certain level, an correct value could not be obtained when the timer interrupt used with the Tick value was issued at a specfic time.
This problem is fixed.
In NITRO-SDK 2.0 PR4, the interrupt check flag (IrqCheckFlag
) was automatically set to ON during V-Blank. This change was cancelled in the ARM9 library, and it was returned to the previous setting.
Regarding the operation to turn IrqCheckFlag
ON internally in the OS, IrqCheckFlag
can be called multiple times without causing any problems, so there are no problems with IrqCheckFlag
being turned on every time V-Blank is called in the application. However, it was the cause of the malfunction for the application that turns on IrqCheckFlag
once every two frames during the V-Blank process in order to update the status at the timing of 30 frames per second.
This is equivalent of the IrqCheckFlag
patch in version 2.0 PR4.
As announced in Note: 10-02, the DTCM addresses have changed, but there was one part that was not changed.
This part was fixed. As a result of this change, DTCM is always 0x27c0000
, regardless of the environment.
PM_Init()
inside OS_Init()
PM_Init()
is now called from inside OS_Init()
of ARM9.
OS_GetConsoleType()
When using IS-NITRO-DEBUGGER, if the Game Pak slot power was on, the result of the operating environment obtained by OS_GetConsoleType()
was returned as IS-NITRO-EMULATOR
, which was a wrong result.
This problem is fixed, so the function returns IS-NITRO-DEBUGGER
, a correct result
A hardware problem was found in determining whether the touch panel is being touched. If the coordinate value was measured when it was halfway between being touched and not being touched, sometimes it became a correct value.
Now the RTC alarm can serve as a trigger to awaken from sleep.
In previous versions, 12- or 24-hour time notation can be selected for the notation display format. Since the 24-hour notation is used in the boot menu, the time format has been fixed to 24-hour format to avoid problems.
The time display selection API can no longer be used, and the information indicating morning or afternoon has been deleted from the API. Also, the time notation display in the sample demo rtc-1 is fixed to 24-hour notation.
Because of the operation in the NITRO boot menu, the A button is more likely to be pressed when starting up of a game application. It requires some caution if the application causes some actions by pressing A button.
For determining some of the demo button triggers (buttons that were newly pressed in that frame), the initial value was set to 0 (not being pressed). However, this was changed so that the initial value is set with the current status of the button.
ntrcomp
Added reference manuals for the ntrcomp
tool and ppmconv*
tools (ppmconv/ppmconv8/ppmconvbg
).
None.
(8/11/2004)
$NitroSDK/build/demos/wm/dataShare-1
WM_SetLifeTime()
WM_MeasureChannel()
WM_InitWirelessCounter()
WM_GetWirelessCounter()
The DS Download Play library was added to NITRO-SDK. This is the API that provides the DS Download Play function, which sends the game program to the NITRO that has no card. Internally, this library uses the wireless manager (WM) library.
The program for executing multiboot, mb_child.srl
(changed from mb_child.bin
in SDK 2.0 PR5), was included in the directory shown below. This program operates the same way as the retail version of a child that has no card. Use this for the operation tests until the multiboot feature is added to IPL.
$NitroSDK/build/demos/mb/multiboot
Demo sample for the multiboot function that was added at the same time is included in the directory shown below.
$NitroSDK/bin/ARM9-TS/Release/mb_child.srl
This is the API for controlling the power management IC. By using this library, it is now possible to manage the LCD and backlight power supply and to check the power remaining in the battery.
Changes were made so that the one time touch panel sampling can be processed during the microphone auto sampling. When the touch panel request was received during the microphone auto sampling, the touch panel data read process is executed the next time the microphone sampling ends.
If the touch panel sampling was not completed before the next microphone sampling time, it is assumed to that the microphone's data has dropped and the microphone sampling value will be interpolated by using the immediately preceding value.
A demo for this feature is included in the directory shown below:
$NitroSDK/build/demos/spi/spiMonkey2
IS-NITRO-DEBUGGER
With the hardware with the mass produced version of the power management IC (PMIC), the preprocessing is now required to operate the amp in the PMIC to obtain the correct microphone output value. For this, processes that operate parameters such as the PMIC amp gain value were added to the mic-1
, mic-2
, and spiMonkey
demos.
Also with this preprocessing, a macro value SDK_TS_VERSION was introduced to be able to work with different versions of PMIC. The environment variable NITRO_TS_VERSION was added to change the macro value dynamically. The NITRO_TS_VERSION value defined when it was built is passed to SDK_TS_VERSION, which takes the values shown below.
SDK_TS_VERSION | Description of the device |
0 | From TS breadboard to IS-NITRO-EMULATOR Version C. |
100 | IS-NITRO-EMULATOR Version D. |
200 | The device equipped with the next version of PMIC. |
With the PMIC of the IS-NITRO-EMULATOR
Hardware Version D, a significant amount of noise is added to the microphone device if the backlight of the LCD is lit. This hardware problem will be solved but, until then, turn off the LCD when you use the mic-1 demo microphone.
The mic2wav
opened the output file as a text file, and data was not converted properly. This problem is fixed.
The LCD power management function was changed to PM_SetLCDPower
. Along with this change, the following functions and the definitions of the enumerator types were deleted.
GX_PowerLCD(), GX_PowerLCDTop(), GX_PowerLCDBot()
GX_POWER_LCD, GX_POWER_LCDTOP, GX_POWER_LCDBOT
G3*_MultTransMtx33
To shorten the geometry engine execution time, added the G3*_MultTransMtx33
function, which multiplies by packing G3*_MultMtx33
and G3*_Translate
as one matrix.
Added GX_InitEx()
, GX_SetDefaultDMA()
, and GX_GetDefaultDMA()
to use as a function to set and obtain the DMA number used by GX. By specifying GX_DMA_NOT_USE
for the DMA number, it can be set not to use the DMA.
GX_PowerGeometry()
and GX_Power3D()
With GX_PowerGeometry()
, GX_Power3D()
, the power for the geometry engine was not turned off. This problem was solved.
Made changes so that the BG mode and BG0 2D/3D selection flag were reflected to the register even when it is not in display mode. This value is referenced for using display capturing when it is set other than graphics display mode.
Released the function groups for accessing the devices that are on the NITRO-CARD. It can be used on the retail product by using the sub board and flash card.
FS_ReadDir
did not matchWhen using the FS_ReadDir
function to enumerate a directory entry, if a directory entry already exists in these files, the obtained file ID did not match the actual ID. This problem is fixed.
Note 13-14: (DevEnd) Corrected the problem when expanding the
makelcf / makerom
variables; added support for the variable definition files
With makelcf / makerom
, in some cases when setting a character string that exceeds 1000 characters for the variable that can be specified with the –D option, and then expanding it in the template file, an error occurred and stopped the process. This problem is fixed.
Also, the process of passing variables by using command lines will be restricted by the maximum length of the command line set with each command line process. To prevent this problem, the variable definition can be specified from the external file. Because of this, by giving the file with the description of [variable name = value]
to makelcf / makerom
with the –M option, the variable definition can be done without having to worry about the restriction on the command length of the command lines.
The correction was made so that the additional information used by the debugger for tracking the autoloaded codes is output to the overlay name file. To be more precise, the change was made in the definition part of the overlay name file for the *.lcf.template
file in
$NitroSDK/include/nitro/specfiles
By using this additional information, debugging of the autoload module is possible. For more information on the plans for this feature to be added to each debugger system, refer to the release note for each debugger or the support site.
Renaming process of the C++ library to CXX failed in the mingw environment. This problem is fixed.
Set up the V blank counter and added the function OS_GetVBlankCount()
to obtain the value.
PAD_SetIrq()
and PAD_ClearIrq()
Eliminated PAD_SetIrq()
and PAD_ClearIrq()
because the key interrupt could not be used due to the hardware restriction. However, the key interrupt can be used for returning from the sleep mode. In that case, specify the condition with PM_GoSleepMode()
.
For synchronous DMA, the process was added after DMA to make it wait while the DMA is busy.
When these synchronous DMA APIs are placed on the TCM, ARM9 did not wait for the completion and is returned from API even with starting up the DMA. This was corrected so that it always waits for the completion with the synchronous DMA, regardless of the transfer location. If it is not necessary to explicitly execute the process to wait for the DMA completion, use the asynchronous DMA API.
The following instructions have been changed:
MI_DmaCopy16/32 MI_DmaFill16/32 MI_DmaSend16/32 MI_DmaClear16/32 MI_VBlankDmaCopy16/32
Changed the sound libraries distributed with NITRO-SDK to the 08/10/2004 version.
3D_BoxTest
With the GX demo 3D_BoxTest
, because the box text was executed without setting 1 for the PolygonAttr
FAR clip flag and the 1-dot polygon display flag, the proper result may not have been obtained due to the hardware settings. This was corrected by setting a flag immediately before the Boxtest.
LinesOver
With the demo LinesOver
, G3X_GetPolygonListRamCount()
and G3X_GetVtxListRamCount()
were called while the geometry engine was busy, and the value that was being rendered was obtained. The process was added immediately before it to wait for the process of the geometry engine to complete.
Also, before the rendering was complete, G3X_GetRenderedLineCount()
and G3X_IsLineBufferOverflow()
were called. They were moved to after the V-Blank.
spiMonkey
Corrected the output screen of the SPI demo spiMonkey
to be on the touch panel screen.
In the past, the char types switched between signed and unsigned (unsigned for jp) by the value for the NITROSDK LANG
, but it was standardized as signed. This change was introduced with NITRO-SDK 2.0 PR1.
(To be corrected in the next or a later release)
PM_GoSleepMode()
, RTC alarm, game pak, and card interrupts are not yet supported.IS-NITRO-DEBUGGER
, OS_GetConsoleType()
returns a wrong result (IS-CGB-EMULATOR
).(7/29/2004)
Added and revised the section regarding the WM Library in the Reference Manual.
There is no change in the library itself and the library header file between SDK 2.0 PR3plus and SDK 2.0 PR3.
(7/27/2004)
In the memory map definitions, defined macro in the system shared region did not match the definition of the system region structure. This error was made during the revision of the NITRO-SDK 2.0 PR2.
This problem is fixed.
In the NITRO-SDK library header file, the padding warning switch for the structure was turned off, and was not turned back on. Because of this problem, the padding warning switch was left OFF. This was not intentional.
This problem is fixed. Until now the padding warning did not appear when you compiled the program. However, this change may bring up padding warnings that were not generated before. The following methods can prevent this problem.
make CCFLAGS_WARNING='–w all,nopadding'
// suppress the padding warning #pragma warn_padding off struct padded { u16 leng; // double-byte padding inserted here s32 data[4]; }; // restore the padding warning #pragma warn_padding resetTo suppress padding warnings in the entire source file, add
#pragma warn_padding off
at the beginning of the source.
This is an urgent release, so the remaining problems that existed in SDK 2.0 PR2 still exist in this version.
(7/26/2004)
Released the WM (Wireless Manager) as the lower bit library to drive the wireless device.
$NitroSDK/build/demos/wm
This directory contains a sample function. At this point, it operates when the target is set to TS. Success is not guaranteed when the target is set to TEG or when using it with ensata.
The communication functions that are not yet supported in this version, such as wireless DS Download Play (multiboot) and block transfer, and the enhanced version of the upper level library, are under development.
(This item applies only to the TS environment. With the TEG environment, there is no change in the memory map.)
Reviewed the memory map and expanded the MainRAM region that can be allocated to ARM9 by default.
More specifically, DTCM was placed in the region that starts at 0x2380000
, but now starts at 0x27C0000
. Along with this change, the MainRAM region that is allocated to ARM9 was changed from 0x2000000—0x237FFFF
to 0x2000000—0x23BFFFF
(increased by 256KB). The region that can be allocated to ARM7 was changed to 0x37C0000—0x37FEFFF
.
As described in Note 10-02, the DTCM address was changed for the TS environment only. The makelcf's start-up parameter ADDRESS_DTCM
was added to notify the lsf file of the different DTCM addresses used by TEG and TS. When NITRO_PLATFORM is set to TEG, it is 0x02380000
. When NITRO_PLATFORM is set to TS, it is 0x027c0000
(in order to handle 8MB main memory, 0x400000
was added). Use this variable so that TEG and TS can share the lsf file.
For example:
Autoload DTCM { Address $(ADDRESS_DTCM) Object * (.dtcm) }
A link error occurred because the label for the exception table was not defined when the code was created with C++ exceptions. This problem is fixed.
The system call SVS library was updated, and the functions shown below were added. Also updated the reference manual to include the new functions.
Newly added functions:
SVC_Div() SVC_DivRem() SVC_GetCrc16() SVC_Halt() SVC_IsMmemExpanded() SVC_Sleep() SVC_Sqrt() SVC_UncompressHuffman.html() SVC_UncompressLZ.html() SVC_UncompressRL.html() SVC_UnpackBits.html()
There were places where the Lock ID (u16) of the lock functions in the OS was declared as u16 and u32 in the argument. It was standardized to be u16. However, the return value for the function that returns the lock ID or error message was not changed and is still u32.
The lockID type of the argument changed from u32 to u16.
OS_LockByWord() OS_LockCartridge() OS_LockCard() OS_UnlockByWord() OS_UnlockCartridge() OS_UnlockCard() OS_TryLockByWord() OS_TryLockCartridge() OS_TryeUnLockCard()
The return value changed from s32 to u16.
OS_ReadOwnerOfLockWord()
In the manual, added a caution that the return value is s32.
OS_GetLockID()
Changed the notation of the following function names from UnLock to Unlock.
OS_UnlockByWord() OS_UnlockCartridge() OS_UnlockCard()
(As mentioned in Note 9-23, this change was intended for version 2.0 PR1. However, the change was made in this version by mistake.)
The names of the MI_GetCartridgeRomCycle* function was revised and standardized as 1st and 2nd. Along with this change, the enumeration types MICartridgeRomCycle1
and MICartridgeRomCycle2
were changed to MICartridgeRomCycle1st
and MICartridgeRomCycle2nd
.
(To be corrected in the next or a later release)
(7/20/2004)
Note: The bold paragraphs in Note 9-01 were added on 7/26/2004.
To support the IS-NITRO-DEBUGGER and Nintendo DS software developer's board NITRO-TS, the default target changed from TEG to TS. (From now on, IS-NITRO-DEBUGGER and NITRO-TS refer to the same thing, unless otherwise noted.)
The TS module is created by not defining NITRO_PLATFORM for the environment variable or the macro variable of the make command, or by setting the value to "TS". Here is an example.
% make NITRO_PLATFORM=TS
Normally, the directory ARM9-TS or ARM9-TS.thumb is created in the subdirectories bin, lib or obj within the directory that executed make. Each module is generated in this directory.
Also, in order to compile with the existing TEG target version, you must explicitly specify
% make NITRO_PLATFORM=TEG
Support for the TEG target version will continue until at least the end of 2004).
Corrected makerom so it matches the specification of the manufactured ROM image. To be consistent with the inspection process during production, the ROM binary file name extension was changed from .bin to .srl.
However, in the makefile description, the target variable name of the ROM image is left as TARGET_BIN
.
The link methods for overlays were changed.
An asterisk (*
) is no longer used to specify a file with the LCF file.
In the LCF file, all libraries are enumerated, but the positive sign (+
) cannot be used for the library name. Because of this restriction, the name of Metrowerks C++ Runtime Library is changed from MSL_C++_NITRO_Ai_LE_strb.a
to MSL_CXX_NITRO_Ai_LE_strb.a
to make a copy, and the copy is referenced.
In the sample demo in the following directory, the source files are compiled in multiple subdirectories, and are linked by the parent directory.
$NitroSDK/build/demos/tips/MultiLink
Made it possible to add dependent files to the nef and bin files by specifying LDEPENDS_NEF
and LDEPENDS_BIN
.
NITRO_CODEGEN_ALL
Added the compile switch NITRO_CODEGEN_ALL
. Use this switch to create libraries for both ARM and THUMB versions.
% make NITRO_CODEGEN=ARM % make NITRO_CODEGEN=THUMB
The switch results in the compilation executing twice. (The compilation is executed in the order specified with NITRO_CODEGEN
.)
The sound library distributed with the NITRO-SDK became the 06/22/2004 version.
FS_RegisterArchiveName()
Due to the internal processing of the FS_RegisterArchiveName() function, an inconsistency problem occurred when the registered archive was released. This problem is fixed.
Sometimes the wrong character string was displayed when an interrupt occurred during debugging of the thread with the async demo. This problem is fixed.
FS_WaitAsync
is still runningIf the OS_WakeupThreadDirect()
function is called while a thread is set to wait for an FS asynchronous function (using the FS_WaitAsync
function), control is returned even though the process is not complete. This problem is fixed.
GX_SetBankForTex()
, GX_LoadTexEx()
, and GX_LoadTex()
The three functions that process the noncontiguous VRAM banks had problems with the data transfer, but they were fixed.
In the DEMOLib of the GX demo, the default value of the clear color alpha value was changed from 0 to 31.
FX_AtanIdx()
and FX_Atan2Idx()
Added the FX_AtanIdx()
and FX_Atan2Idx()
functions, which return the arctangent within the range of the u16 type. Until now, only FX_Atan()
and FX_Atan2()
, which return the arctangent in units of radian, were available.
Added the following functions as the API that performs only the calculation without setting the data to the geometry engine.
MTX_FrustumW() MTX_PerspectiveW() MTX_OrthoW() MTX_LookAt()
With these functions, you can obtain the same matrix using G3_FrustumW()
, G3_PerspectiveW()
, G3_OrthoW()
, G3_LookAt()
.
NITRO_MEMSIZE
is set to 8MWhen a file that was compiled with NITRO_MEMSIZE
set to 8M during make is executed on a development device with 8MB of main memory, the extended main memory arena is now set properly. Previously, the protection region was not set correctly and had to be set by the application.
Improved thread safety by prohibiting interrupts in a critical section using memory allocation functions, such as OS_Alloc*()
and OS_Free*()
.
OS_JoinThread()
and OS_IsThreadTerminated()
Added OS_JoinThread()
, which combines threads and waits for the specified thread to be terminated, and OS_IsThreadTerminated()
, which checks whether the thread has terminated.
The debug build uses ASSERT to check if it overlaps the TCM address, but there was an error with the boundary condition. This problem was fixed.
OS_SetProtectionRegion()
OS_SetProtectionRegion()
was changed to set and enable the protection region. Before, it was not enabled.
Changed the clock information in the profiler from u16 to u32 to enable the measurement of functions that require more time. Also fixed an error in the calculation of the required compilation time.
Created functions to obtain the compression type and the size of the expanded data in memory. MI_GetCompressionType()
obtains the compression type, and MI_GetUncompressedSize()
obtains the size of the expanded data.
MI_GetCartridgeRomCycle*
functionsStandardized the names of the MI_GetCartridgeRomCycle*
functions as 1st and 2nd. In addition, the names of the enumeration types MICartridgeRomCycle1
and MICartridgeRomCycle2
were changed to MICartridgeRomCycle1st
and MICartridgeRomCycle2nd
.
MI_CpuCopyFast()
At debug time, build with MI_CpuCopyFast()
, ASSERT was required to be a multiple of 32 bytes. It was changed to a multiple of 4 bytes.
Prohibited interrupts with the DMA parameter setting process (internal function MIi_DmaParams*()
) and stop process (MI_StopDma()
).
When a 32-bit divisor is set in the Divider, zeros are entered into the upper 32 bits of the Divider's divisor register. By doing so, even if using a division mode with a 32-bit divisor, the Divide-by-0 error flag is enabled only if all 64 bits of the divisor register are zeros.
With the functions that perform sampling via microphones, the available sampling types were expanded, and you can now specify the output in signed data format.
Test released the PRC library, which permits pattern recognition of data drawn on the touch panel.
$NitroSDK/build/demos/prc
Here is the demo.
For more information, see:
$NitroSDK/docs/TechnicalNotes/PatternRecognition.doc
The precision of the data obtained from the touch panel was changed from 12 bit to 9 bit. The lower 3 bits are masked on the ARM7. This change anticipates a compatibility issue that may occur in the future.
(To be corrected in the next or a later release)
(6/16/2004)
When threads were switched in the IRQ handler, the context of the Divider and Square Root Unit were not saved. This has been revised, and the context is appropriately switched.
Corrected the faulty rounding process for negative numbers when using FX_F32_TO_FX32()
and made FX32_CONST()
an alias for FX_F32_TO_FX32()
. Also added the FX16_CONST()
, FX64_CONST()
, and FX64C_CONST()
macros.
Cleaned up the test code that was mixed in with the loop portion of
OSi_IdleThreadProc()
, the idle thread execution function located in
$NitroSDK/build/libraries/os/common/src/os_thread.c
spiMonkey
demonstrationWhen the spiMonkey
demo was built with the Debug version, the demo ran but the screen update rate was extremely slow. This problem is fixed.
makerom/makelcf
< variable valuesA bug in handling variable values in makerom/makelcf
could prevent normal operations. This bug is fixed.
(To be corrected in the next release)
(2004/6/10)
The defined values for GX_DISP_SELECT_***
, the power control register's "LCD output switching flag," were swapped to conform to the final production product (0 and 1 were reversed).
The same revision was performed on ensata
. When executing applications created with SDK versions 1.2 or 1.2 RC1 or later on ensata
, verify that the version of ensata
being used supports this revision.
Added an API to operate a microphone device and demos that use the API. Also added the spiMonkey
demo that uses the MIC, Touch Panel, and Sound libraries simultaneously.
Changed the maximum sampling rate that can be specified with auto sampling to 4 times/frame. It is expected that higher sampling rates cannot be guaranteed with the anticipated cost reduction in hardware.
When an interrupt was generated directly after transmitting a touch panel control command to ARM7, a bug prevented returning from waiting for a reply from ARM7. This problem is fixed.
Added an argument in RequestAutoSamplingStart()
to specify the buffer size. In doing so, a buffer size larger than the sampling rate can be specified and overwriting with new data can be supported.
TP_SetCallback()
argument formatBecause TP_SetCallback()
arguments were pointers to function pointers, it was changed so that function pointers could be passed directly as arguments.
async
demoThe total size (when loading all threads in the async
demo) is displayed as total **** byte.
However, an error in the size calculation resulted in an incorrect number. This problem is fixed.
Corrected the problem that prevented the data cache update process from being carried out for each of the functions that operate the overlay module.
FS_SetDefaultDMA()
functionA problem caused a file to be loaded incorrectly if DMA settings were changed with FS_SetDefaultDMA()
when
executing in an environment that used a NITRO-CARD. This problem is fixed.
When the logical product of IE and IF was 0 at the beginning of an IRQ handler, it would exit without doing anything. This was caused by an infinite loop when an interrupt was generated during IE configuration. This problem is fixed.
Changed the maximum thread count that can be created with the thread system from 8 to 16.
OS_GetNumberOfThread()
Added the OS_GetNumberOfThread()
function to get the number of threads currently created.
A fixed value had been used when configuring the arena range for ARM7. However, this has been changed to configure an arena for the ARM7 shared WRAM and an arena for the ARM7-dedicated WRAM to take into account the size of the free region after storing the ARM7 program in Shared WRAM and ARM7-dedicated WRAM.
In addition, the two arenas are configured with ARM7 and the
remaining arenas are configured with ARM9 due to reception of defined values from the lcf file when configuring arenas with OS_InitArena()
.
In a previous version, OS_SetProtectionRegion()
was renamed OS_SetProtectionReginParam()
,
and a new function that more directly configured the address and size was named OS_SetProtectionRegion()
.
OS_GetProtectionRegion()
was divided by function into OS_GetProtectionRegionParam()
, OS_GetProtectionRegionAddress()
, and OS_GetProtectionRegionSize()
.
The Profile features were separated from the OS library and made into an independent library. In doing so, it is unnecessary to recompile the OS library when Profile features are used.
The necessary libraries can be linked by specifying
NITRO_PROFILE_TYPE=CALLTRACE
when enabling the call trace function and by specifying
NITRO_PROFILE_TYPE=FUNCTIONCOST
when enabling the cost measuring function.
Corrected the problem in the display of indents beyond four levels in the call trace function.
OS_GetConsoleType()
Added the OS_GetConsoleType()
function to obtain the current operating environment. The value that can be obtained also includes information on the ROM data read device and main memory
size.
OS_Printf()
, are handled in the FINALROM buildChanged the way display functions such as OS_Printf()
are handled in the FINALROM build. Previously, OS_Printf()
was called and became the return function without doing anything, but it is no longer called. In addition, OS_Panic()
stops without displaying anything.
The following TCM function names have been changed to match the name specifications for other functions. The left is the function name before the change; the right is the new function name.
OS_SetParamITCM() → OS_SetITCMParam() OS_SetParamDTCM() → OS_SetDTCMParam() OS_GetParamITCM() → OS_GetITCMParam() OS_GetParamDTCM() → OS_GetDTCMParam()
In addition to eliminating the need to recompile the OS library by dividing the profile related features into a separate library, compilation of callTrace-1, callTrace-2, exceptionDisplay-3, functionCost-1, functionCost-2, and functionCost-3 that had not been previously included in the OS demo Makefile
are now included.
In the AntiAlias
demo, antialiasing
was not applied because ClearColor
was not set and blending did not occur with the background color. This problem is fixed.
In the 2D_Oam_5
and Sub_Oam_5 demos
, problems in operation with the FINALROM build occurred because the data cache was not flushed. This problem is fixed.
Ensata
upgradeDue to an Ensata
upgrade, the operating limitations on AntiAlias
, PosVecTest
, and CurrentMtx
, which could only be used while Ensata
was operating, were lifted.
Extended palette VRAM configuration names defined with
GXVRamBGExtPltt GXVRamOBJExtPltt GXVRamSubBGExtPltt GXVRamSubOBJExtPltt
have been standardized to notation that includes the slot number. The previous names remain as aliases, although this is not mentioned in the manual.
GX_Init
When GX_Init()
was called multiple times, it would stop because the V-Alarm structure held in static internally would initialize each time. This has been changed so that the V-Alarm structure is initialized only once even if GX_Init
is called multiple times.
GX_GetObj
The following in-line functions have been prepared.
G2_GetOBJCharName() G2_GetOBJColorMode() G2_GetOBJEffect() G2_GetOBJColorParam() G2_GetOBJMode() G2_GetOBJPosition() G2_GetOBJPriority() G2_GetOBJShape()
FX32_CONST()
macroAdded the FX_CONST()
macro to define fx32 format constants.
MI_UncompressRL8()
There was a bug in the MI_UncompressRL8()
function that extracted run-length compressed data in 8-bit units. The bug is fixed.
makerom
and makelcf
Added a Tool item to the reference manual that includes an explanation of makerom
and makelcf.
A simple tool was included to rewrite information configured with the Boot menu. Use it as a calibration configuration tool for the touch panel. The execution file is:
$NitroSDK/bin/ARM9-TEG/Release/BootMenu.bin
Executing this on TEG causes the basic menu to start up. Because configuration items other than the touch panel may differ from the final product, think of them as reference material at this time.
Changed so that the "–g" option can be used to compile and link when building the FINALROM version in the build environment created with the SDK-supplied CodeWarrior make.
The "–g" option in CodeWarrior adds only debug information to the NEF file; the ROM image binary is the same.
In addition, the NITRO_NO_OPT_G switch is available to compile and link without the "–g" option.
Use the following to remove the "–g" option to build.
make NITRO_NO_OPT_G=1
makerom
A bug caused the error message, Wrong format list file
to be displayed even when no error had occurred and also stopped the execution of makerom
when makerom
was
executed in certain environments. This bug is fixed.
(To be corrected in the next or a future release)
spiMonkey
, does not operate correctly.(05/24/2004)
Added support for CodeWarrior NITRO V0.5. Added support for the change in library file names and the change in LCF files.
elftobin
to makerom
Changed the ROM binary creation tool from elftobin
to makerom
. This allows the file system and overlay to be supported.
ALIGN(32)
The lcf-related files were correct sot that 32-byte alignment might be maintained for the beginning and end of the overlay segments to prevent problems related to the cache line for the overlay.
Added $(LDEPENDS_NEF)
and $(LDEPENDS_BIN)
to the files dependent on .nef and .bin generation rules, respectively. The specifics are shown below.
$NitroSDK/build/buildtools/modulerule.cctype.CW: $(BINDIR)/%.nef: $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $NitroSDK/build/buildtools/modulerule: $(BINDIR)/%.bin: $(BINDIR)/%.nef $(MAKEROM_ARM7) $(ROM_SPEC) $(LDEPENDS_BIN)
There are cases when you want to include the NitroSDK
header files when C-compiling with a program other than CodeWarrior when creating NITRO-related tools on Windows. But, the processing system for Visual C++ generated an error when nitro.h
was included because variable argument macros are not supported.
$NitroSDK/include/nitro_win32.h
is available to cope with this situation.
By defining the two define values shown below in nitro_win32.h
, it is possible to include header files such as gx.h
, memorymap.h
, and type.h
.
#define SDK_FROM_TOOL #define SDK_HAS_NO_LONG_LONG_INT_
However, the #define of SDK_HAS_NO_LONG_LONG_INT_
is specified as "to replace 64-bit integers from being long long int to _int64
," so this definition is unnecessary in environments where the long long int definition, such as gcc, is enabled.
It was decided that the distribution of the IDE demo sample program for using CodeWarrior would be terminated. Since a NITRO stationary file is already available in CodeWarrior for NITRO, it was decided that the IDE sample was no longer necessary.
Added the ferret integrated component to process various devices. If not specified otherwise, this component connects by default.
The component path is located under
NitroSDK/components/ferret/ARM7-TEG/(Target)
(For the Thumb component, the ARM7-TEG
portion becomes ARM7-TEG.thumb
.)
Added a library to use the ROM file system in applications created with makerom
. Directory list/search, synchronous/asynchronous file read, overlays, etc. are possible.
The FS library supports processes that read access the NITRO-CARD, the NITRO standard software supply medium. The FS library internally switches between using the Game Pak image or NITRO-CARD image as the file system according to the TEG board device connection.
In connection with this, SVC_ReadCard()
was deleted.
The touch panel control related APIs are supported.
Be aware that the TP library and API that were distributed in a separate package have changed in connection with the process assignment change for ARM7 and ARM9. In addition, perform the touch panel calibration process again because of the change in the touch panel calibration parameters that occurred in connection with these changes.
The new touch panel calibration binary is
NitroSDK/bin/ARM9-TEG/Release/BootMenu.bin
. After starting the binary, select TOUCH PANEL from the screen menu and perform the calibration.
To safely use the Divider and Square Root Unit interrupt processes in callbacks, APIs (CP_SaveContext
and CP_RestoreContext
) were prepared to store and return the current status of the Divider and Square Root Unit.
In addition, the Divider and Square Root Unit now support multi-threads.
APIs for operating the 2x2 matrix MtxFx22-type variable 2x2 are available.
MTX_Identity22() MTX_Concat22() MTX_Inverse22() MTX_Transpose22() MTX_Rot22() MTX_Scale22()
Due to a hardware bug in the command FIFO overflow processing on the TEG board, GX_LoadMtx44
and other functions did not process correctly. This was fixed in the library. This hardware bug will be corrected in the production model.
GX_VRAM_ARM7_128_C
to GX_SetBankForARM7()
GX_VRAM_ARM7_128_C
was added as an argument supported by GX_SetBankForARM7()
.
GX_VRAM_BGEXTPLTT_01_F
to the BG extended paletteCorrected the problem that caused configuration to be incorrect when GX_VRAM_BGEXTPLTT_01_F
was set in the API GX_SetBankForBGExtPltt
.
Swapbuffer
process on the geometry engineAdded the demo below as a method using a polygon counter to determine whether the 3D engine calculation experienced process drop-out.
$NitroSDK/build/demos/tips/SwapCrossOver
When a discrepancy exists with the 2D screen due to a process drop-out on the 3D screen calculation, consider using this method for synchronization that uses a polygon counter.
scaleW
Created the following transparent conversion APIs to set scaleW
to a desired value.
G3_FrustumW() G3_PerspectiveW() G3_OrthoW()
In addition, MTX_Frustum()
, MTX_Perspective()
, and MTX_Ortho()
are also separately available to create matrices without transmitting to the geometry engine.
GX_Init
functionThe implementation of the command FIFO reset process was changed. G3_End()
is issued after 128 NOP units are sent as an internal process.
A bug in G3X_SetFog
prevented fogMode
from returning to 0 from 1. This is fixed.
In consideration of the controlling the various systems that may be
connected in the future, the initialization of the thread system was changed to occur by default. OS_InitThread()
is called with OS_Init()
.
If creating a library that does not use the thread system, compile after defining NITRO_NO_THREAD
.
OS_SPrintf()
With a smaller code load than the standard springf()
function, the OS_SPrintf()
format string function and its system were added by partially eliminating output support, such as for floating point decimal values. This function is primarily used on ARM7 for character string processing.
MI_ReadByte()
and MI_WriteByte()
were
prepared for memory byte access in consideration of the convenience of program creation on the TEG version. These will be converted to simple byte access instructions on the production version library.
OS_WaitIrq()
, OS_WaitAnyIrq()
, and OS_WaitInterrupt()
Added the OS_WaitIrq()
function that waits for a specified IRQ and the OS_WaitAnyIrq()
and OS_WaitInterrupt()
functions. OS_WaitIrq()
and OS_WaitAnyIrq()
give processing over to other threads while waiting for an IRQ.
OS_WaitInterrupt()
uses OS_Halt()
to wait, so thread movement does not occur. This has been prepared to operate the same as SVC_WaitIntr()
.
ATTRIBUTE_ALIGN()
Added the ATTRIBUTE_ALIGN()
macro to specify arrangement alignment when defining variables. The macro name
follows the NINTENDO GAMECUBE SDK definitions.
The size of the low priority idle thread stack created when the Thread system is started is set to 128 bytes on ARM9 and 64 bytes on ARM7 for SVC.
OS_GetLockID()
and OS_ReleaseLockID()
Added OS_GetLockID()
and OS_ReleaseLockID()
as a structure to manage lock IDs used by OS.
OS_SetSwitchThreadCallback()
Added a callback feature when switching threads. The callback is registered with OS_SetSwitchThreadCallback()
.
Mutex
with OS_ExitThread()
When a thread is ended with OS_ExitThread()
,
the Mutex
locked by that thread is released.
The main loop process for the ARM7 component is OS_Halt()
.
OS_SetProtectionRegion7()
and
OS_SetProtectionRegion7
Corrected so that OS_SetProtectionRegion7()
and OS_SetProtectionRegion7
operate on Region 7 rather than Region 6.
Defined the CPU clock values HW_CPU_CLOCK_ARM7
and HW_CPU_CLOCK_ARM9
for each processor and the CPU
clock value HW_CPU_CLOCK
for the current compiler target processor.
OS_Panic()
termination operationChanged the OS_Panic()
terminate
operation from OS_Halt
to OS_Terminate()
.
Changed the OS demo structure. waitIrq-1
and waitIrq-2
were added due to this change.
In addition, callTrace-1, callTrace-2, exceptionDisplay-3, functionCost-1, functionCost-2, and functionCost-3 were prepared as demos that do not go in Makefile
. These are not included in Makefile
because they require that the OS library be compiled using a special option.
Due to hardware specifications, a timing problem with enabling/disabling interrupts and IRQ generation caused IME=0 when an IRQ was generated. When this occurs, it exits without doing anything.
Added a call trace the uses the profile feature of CodeWarrior and a mechanism to measure function costs.
See the following file for an explanation of support for the profile feature by NITRO-SDK.
$NitroSDK/docs/TechnicalNotes/MechanismOfProfiler.doc
Prepared the OS_IE_USER_FLAG0
and OS_IE_USER_FLAG1
check flags, which can be freely used with applications similar to the SDK interrupt causes.
The sound library distributed with the NITRO-SDK is version 2004.4.12.
(To be corrected in the next or a future release)
makerom/makelcf
.ensata
.(04/05/2004)
We now support
CodeWarrior NITRO V0.4. Therefore, the compiler start time options -avoid_strb
and
-avoid_byte
have been replaced.
Compiler version
information is stored in verinfo.cw.cc
and
verinfo.cw.ld
, under $NitroSDK/build/buildtools
.
These files will be automatically updated when you upgrade from CodeWarrior
0.3 to 0.4. However, if you downgrade from 0.4 to 0.3, they will not be
updated, which will cause problems. When you downgrade CodeWarrior you must
either manually delete the $NitroSDK/build/buildtools/verinfo.cw.*
files, or input make clean-
verinfo
from the command line.
GX_HBlankOBJProc()
/
GXS_HBlankOBJProc()
In
GX_HBlankOBJProc()
/ GXS_HBlankOBJProc()
, actual
behavior was the opposite of the values in the proc
parameter.
This has been fixed.
G2_SetOBJAttr()
/ G2S_SetOBJAttr()
In G2_SetOBJAttr()
and
G2S_SetOBJAttr()
, when you were operating in GX_OAM_MODE_BITMAPOBJ
mode and
using GX_OAM_EFFECT_AFFINE
, the rsParam
parameter
specifications were not reflected in OAM.
This has been fixed.
GX_DisableBankFor*()
In GX_DisableBankFor*()
,
internal behavior was incorrect, which caused it to behave improperly.
This has been fixed.
NitroPostLinker.bat
The NitroPostLinker.bat
file referenced the environment variable CWFOLDER_IRIS
.
We changed it to
reference the environment variable CWFOLDER_NITRO
.
Due to a link procedure
bug in the fs/file-1 demo, even if you added NitroStartUp()
,
NitroStartUp()
would not be linked.
This has been fixed.
makerom
(beta version)In the makerom tool, which is currently included as a tool evaluation version, if the ARM9's resident module size was too small, an error was generated.
This has been fixed.
makelcf
(beta version)In the lcf template file for the makelcf tool, which is currently included as a tool evaluation version, part of the module size calculation was incorrect.
This has been fixed.
(3/30/2004)
G3_Frustum()
bugThere was a flaw in
$NitroSDK/build/library/gx/src/g3_util.c
and the G3_Frustum()
matrix could not
be properly set up.
This bug was fixed.
An error occurred and
the program stopped when Slot 0 for the texture image in VRAM_A was set aside
and the image was transferred with GX_LoadTex()
. This bug was fixed.
The program stopped with
ASSERT if a process such as a texture load was done when VRAM_B was allocated
to the OBJ.
This bug was fixed.
The return value from
G3X_GetCommandFifoStatus()
was not accurate.
This bug was fixed.
A change was made so the
DTCM position could be changed. This is made possible by
changing the HW_DTCM value in $NitroSDK/include/nitro/hw/common/mmap_global.h
.
However, a full make
must be carried out for the library after the change.
There was a flaw in
$NitroSDK/include/nitro/codereset.h
. It always switched to thumb.
This bug was fixed.
When the debugger was
using the exception vector, the hook process for the vector was incorrect due
to the coexistence of settings in the NITRO-SDK. Accurate operation was not
possible.
This bug was fixed.
Until now, a self-cancel of an alarm in the periodic alarm handle was not possible. This is now possible.
A function
OS_IsThreadAvailable()
was added to initialize the
thread system and check if it can be used.
Stopped use of ldconst
and lda
to specify the assembler for
substituting constants and addresses. It was standardized to ldr
only.
(Before Change) (After Change)
ldconst r0, #CONSTANT -> ldr r0, =CONSTANT lda r0,Address -> ldr r0, =Address
There was a mistake in
the assert determination for $Nitro_SDK/include/nitro/gx/gx_bgcnt.h
.
This bug was fixed.
A fixed point definition
to show 0.5 was added to $NitroSDK/include/nitro/fx/fx_const.h
.
The fixed points of fx16
, fx32
, and fx64
are defined as FX16_HALF
, FX32_HALF
, and
FX64_HALF
.
Standardized the
rounding up process for FX_MUL32x64C
and FX_Mul32x64c
.
The ROM file system function and overlay problems were carried over.
(03/17/2004)
Added a PXI Library for carrying out communication between ARM9 and ARM7.
The following graphics samples were added.
|
Affine extension/256 colors x 16 extension palette character BG display |
|
Affine extension/256 color bitmap BG display |
|
Affine extension/direct color bitmap BG display |
|
Affine extension/256 colors x 16 extension palette OBJ display |
|
|
|
One-dimensional mapping/character OBJ display |
|
Two-dimensional mapping/bitmap OBJ display |
|
OBJ window display |
|
Translucent OBJ display |
|
Carries out box test |
|
|
|
|
|
|
|
|
|
|
|
Displays shadow using shadow polygon |
|
Views anti-aliasing |
|
Motion Blur effect using capture |
|
Sets up clear color |
|
Sets up clear image |
|
Outputs current clip coordinate matrix and direction vector coordinate matrix |
|
Changes texture flip/repeat |
|
Polygon line over display |
|
Master brightness adjustment |
|
Outputs |
|
Overflows polygon list RAM/vertex RAM. |
|
Obtaining and changing V-counter |
|
View port setup change |
|
Window transformation with operation during H-Blank period. |
|
Window transformation with H-Blank DMA. |
|
Common processing |
Added data compression
tool ntrcomp
. It is located in $NitroSDK/build/tools/ntrcomp/
.
Added document about
installing and using both NITRO-SDK and AGBSDK at same time to
$NitroSDK/docs/HowToJoinAGBDevEnv.txt
.
Added the entries 80_EF
and 80_EG
to the VRAM bank combination setup. Changed so VRAM can be
aligned to BG
or OBJ
using EF
and EG
combination.
In addition, to handle
requests for aligning VRAM with combinations not supported with the SDK, a
document was compiled describing how to add entries by revising the SDK source.
The document is located in $NitroSDK\docs\SDKHowTo/HowToMakeMyVRamBankType.txt
.
If the original
PROTECTION matrix stack level was 0 during initialization of the matrix stack,
a stack underflow was caused.
This bug was fixed.
A link was added to go from 3D geometry (G3*) in the left window of the manual to the geometry command cycle list.
Added the function OS_Sleep()
to stop a thread for a specified time.
When the thread was
switched in the IRQ handle, the location referenced in the thread list was
incorrect and a thread was not run unintentionally.
This bug was fixed.
The function
OS_ReadMessage()
was created to reference the
first message in the message queue and copy it only. OS_ReadMessage()
is different from OS_ReceiveMessage()
. It does not try to send a
message and recover blocked threads. Also, it does not change the content of
the message queue.
With the timer interrupt
during the setting of the IRQ interrupt check flag, an incorrect bit was
accessed and set.
This bug was fixed.
When multiple periodic
functions with similar startup times were input for the V-count alarm, a bug
occurred in which only the first function was executed. This bug was fixed.
Along with this fix, a
change was made so a delay allowed count could be specified for the run time of
the periodic function for the V-count alarm.
A bug was found in the
tick system. The system would only count up to a certain number of digits.
This bug was fixed so that 64-bit
values could be handled.
Conversion macros were
added for time specified in seconds, milliseconds and microseconds; and the
tick count value based on the system clock used in OS_Sleep()
and OS_SetAlarm()
. These macros are listed below.
OS_MicroSecondsToTicks( usec )
OS_MilliSecondsToTicks( msec )
OS_SecondsToTicks( sec )
OS_TicksToMicroSeconds( tick )
OS_TicksToMilliSeconds( tick )
OS_TicksToSeconds( tick )
A timer interrupt
callback was setup with OS_SetIrqFunction()
, the timer interrupt was started, and the callback
was called. Even if a timer interrupt was setup again at this point, the
interrupt was cleared when it returned from the callback.
This bug was fixed.
OS_DisableInterrupts()
Both IRQ and FIQ were
stopped with OS_DisableInterrupts()
, but a change was made so only
IRQ was stopped due to conditions related to the debugger.
The lock/unlock and context
switch of the AD Bus stops both IRQ and FIQ.
The specifications were changed so if a debugger exception handler is present it is called before calling the user exception handler.
The categories for the
registers reg_DISP_DISPSTAT
and reg_DISP_VCOUNT
were transferred to GX and the names were changed to reg_GX_VCOUNT
and reg_GX_DISPSTAT
.
The reg_OS_POWCNT
categories were transferred to SND. The name was changed to reg_SND_POWCNT
.
Minor fixes were done to
the ARM9 and ARM7 register tables, $NitroSDK/build/buildsetup/ioreg/io_reg_list*
,
$NitroSDK/build/buildsetup/ioreg_sp/io_reg_list*
. Almost all of the current
specifications were compiled together. The areas added that were not present
before are mainly in the EXI and PXI categories.
Corrections were done to
some errors in the reference manual. One of these was to change MI_SetWRAMBank()
to MI_SetWramBank()
. Also please note that in conjunction with
this change, the html file for the MI_SetWramBank()
manual was
changed from MI_SetWRAMBank.html
to MI_SetWramBank.html
.
This problem was in the
OS. There was a mistake in the IRQ handler table. The interrupt elements
allocated to the bits in the IE register were not all in order and there were
some not being used. This was not considered when the table was made so when
interrupts after unused items referenced the table, they accessed the wrong
areas. This problem was fixed.
Unused items were also
allocated to elements in the table. There were two extra alignment elements in
ARM9 and three extra in ARM7. There was a marginal increase in the memory used.
The ROM file system function and overlay problems will be carried over.
(2/27/2004)
The irisSDK now supports NITRO hardware. At
the same we changed the SDK name to NITRO-SDK.
Notice that following this
name change, in the NITRO-SDK the following changes have been made from irisSDK.
iris.h
to nitro.h
.include/iris
to include/nitro
.IrisMain
to NitroMain
.IRISSDK_ROOT
to NITROSDK_ROOT
.IRIS_DEBUG
to NITRO_DEBUG
.$NitroSDK/tools/elftobin/NitroPostLinker.bat
as a Postlinker for NITRO in IDE.We grouped some of the library source files and header files according to the processor, and stored them respectively in the ARM9/ARM7/common sub directories.
Anyone who until now has
been directly specifying #include <iris/os/alloc.h>
instead of
iris.h
, os.h
when including header files for the OS, etc., must
now specify #include <nitro/os/common/alloc.h>
.
We prepared an API (GXS
function group) to support the Sub LCD. We also added demo programs that use
the API. Refer to directories that begin with Sub
, under
$NitroSDK/build/demos/gx/UnitTours
.
We changed the ELF file
extension to .nef
. We also plan to support .nef
with NITRO development-related tools.
We changed the directory
that contains sample code from $NitroSDK/build/tests
to
$NitroSDK/build/demos
.
We embedded code for
auto test control in some files, for SDK library test processing. In
particular, this code is enclosed in #ifdef SDK_AUTOTEST - #endif
.
This code is for our internal use. If you are going to copy sample code and use
it, we do not mind if you remove the auto test code.
It is now possible to
generate a thumb code version library. To switch, you can use the make
command start time variables or the environment variable NITRO_CODEGEN
.
Sample command
Generate THUMB version code |
|
|
Generate ARM version code |
|
|
Currently, if you omit
NITRO_CODEGEN
, it will generate an ARM code version library.
We prepared include files that allow each function to switch ARM code / Thumb code generation, and to return to initial settings.
Instruct ARM code generation |
|
|
Instruct Thumb code generation |
|
|
Return to initial settings |
|
|
(Example)
If you want the function void A(void) to generate using Thumb code:
#include <nitro/code16.h>
void A(void)
{
....
}
#include <nitro/code32.h>
In CodeWarrior, pragma can directly change the output code. However, our policy is to use these files to absorb, as much as possible, the differences in compilers. We recommend that you use them.
We have made the following additions and revisions to support code creation with C++.
NitroStartUp()
function and a
static constructor before calling NitroMain()
.$Nitro/build/demos/os/cplusplus-1
).If the NitroStartUp()
function has been prepared on the application side, the SDK
will call the NitroStartUp()
function before the static constructor process. If you initialize the memory
management mechanism in NitroStartUp()
, it will be possible to
use the new()
function in the static constructor process.
We now support X, Y
button read in the PAD_Read()
function.
Notice that due to
hardware specifications, interrupts generated by X, Y button input
(see PAD_SetIrq()
) are not supported.
We revised make
-related
files (commondefs
, modulerules
, etc., in
$NitroSDK/build/buildtools
).
This implemented / revised the following.
make
-f
option. Fixed.We eliminated compound
statements (multiple statements within {}
) with macros definitions.
Because it caused problems with ARM/Thumb code output switching, we moved the inline assembler functions (from static inline asm) from the header files to C source.
Changed the name of the
macro variable CODEGEN_PROC
to NITRO_PROC
. This macro
variable is in Makefile
, and is used to switch output
code for ARM9/ARM7.
We remade the executable
files for ARM7 that are linked to the ARM9 executable files by default when you
make binary files. They contain X, Y button read processes. The files are
located under $NitroSDK/build/components/idle/ARM7
.
If you link executable
files for ARM7 from a previous SDK and ARM9 executable files created by this
version of the SDK, the PAD_Read()
function will not work properly.
Take notice of this if you are explicitly specifying the ARM7 executable files
with Makefile
.
We described IRQ stack size in the LCF file. This makes it possible to set it.
We added a mechanism to display the context at the time that an exception is generated (excluding IRQ exceptions, FIQ exceptions, and SWI exceptions). You can also call a user callback routine.
When a NULL callback was specified, it proceeded without setting the callback. In the case that there is no stall due to bus access contention, after transmitting DMA commands, it returns from the function without waiting.
The DEBUG library will issue a warning when a region that includes ITCM or DTCM is specified as either a DMA transfer destination or source.
We made it so that
crt0.c
will clear DTCM. This will clear the stack region. We also made it so
that the BG/OBJ palettes, and OAM will be cleared.
32-byte border rounding
for the lower order of start addresses had not been implemented in DC_StoreRange()
,
DC_FlushRange()
, DC_TouchRange()
,
IC_InvalidateRange()
. We implemented it.
Concerning the thread mechanism, we added the following:
OS_CreateThread()
.
You can now pass an argument to the execute startup function.OS_InitThread()
is called will now have a priority of 16. OS_SetThreadPriority()
,
OS_GetThreadPriority()
) to acquire and change thread priorities.We prepared the
OS_CheckStack()
function to check for thread
related stack leaks.
We used 2 16-bit timers to implement a 64-bit clock counter. We also implemented an alarm mechanism that calls callback functions at specified times. Because this multiplexes timer interrupts, it can register more callback functions than the number of hardware timers. These functions are options. You can choose whether or not to use them.
We multiplexed V count interrupts, so that you can register multiple callback functions. For details see the reference manual for OS V-count related functions.
We added
MI_DmaSend*
, MI_CpuSend*
API.
In the DEBUG version
library, an assert was generated if you set OS_TIMER32_23
as the ID in
OS_StartTimer32()
, or if you set OS_TIMER48_123
as the
ID in OS_StartTimer48()
.
We fixed this.
In the memory interface
we prepared memory manipulation functions such as MI_CpuClear()
that use the CPU instead of DMA. We abolished the UTL library.
The TEG board has a hardware bug. If a certain pattern of data is output to the main processor bus at the beginning of the V-Blank period, polygon display will be corrupted. Countermeasures for this are performed in the library.
The actual code is
embedded in GX_Init()
. For details see the region
enclosed by #ifdef SDK_TEG_WA_VBLANK - #endif
in
$NitroSDK/build/libraries/gx/src/gx.c
.
This code uses V-count alarms. Therefore, if you want to use this process, do not turn off V-count alarms.
In the demos that perform light processing, the total of the parameters such as light color was very large—not an appropriate value. Therefore when polygons even slightly faced light, the light value became MAX. We adjusted this.
We also revised
parameter table definitions related to specular light in DEMOLib
so that they approach cosinen. You can see the change caused
by the difference in parameter tables in the gx/UnitTours/3D_Shininess
demo.
We added a DL buffer
overflow check to the dynamic DL creation function group G3*
. This is only
enabled when the DEBUG version library is linked.
Fixed a G3_Ortho()
implementation bug.
G3_EndMakeDL()
did not
return the proper size. We fixed this bug.
We added an argument to
G2_SetBG*Control256x16Pltt()
that specifies the character base block.
There was a problem in
the display list that was generated by G3CS_LoadTexMtxEnv()
,
G3CS_LoadTexMtxTexCoord()
. We fixed this.
An API now supports A3I5 textures. Confirm emulator specification to see whether this texture can actually be displayed.
We support the 3D vector
type VecFx16, which uses Fx16 elements. We prepared the VEC_Fx16*
series to
handle it.
We added the C linkage
specification extern "C"
to the $NitroSDK/build/demos/gx/UnitTours/DEMOLib
header files.
The main purpose of this
DEMO library is to simplify the implementation of UnitTours
.
Therefore, there may be times when we will not be able to respond to change
requests concerning this specification. Please take this into consideration
when using this DEMOLib
in an application.
Decided to postpone ROM file system function and implementation of overlay.
(2/4/2004)
In the main loop
SVC_WaitVBlankIntr();
G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W);
The above, APIs appear in reversed order and an unnecessary V-blank wait is generated. Exchanging them fixes the problem.
The 3D graphics test code that caused the problem is fixed.
VEC_Mag
overflow measures.When a large vector is placed in VEC_Mag
, internal calculation
generates overflow, and the result is strange.
This bug has been fixed.
In fx_mtx43.c
, the X axis transform element in matrix b is
ignored.
This bug has been fixed.
There were mistakes in G2_SetBG3Priority
definitions.
This bug has been fixed.
Although built library files are bundled in the package, if you used libos.a
in the library as-is, OS_Printf
did not output to IS-IRIS-EMULATOR
.
When the library was rebuilt in an environment in which IS-IRIS-EMULATOR
had been completely installed, the problem disappeared.
We bundled the corrected library files in a patch.
libstubsisd.a
When linking the ARM7 side processors, if the environment variable "IS_IRIS_DIR
"
is not included, it attempts to link libstubsisd.a
. However,
because this file did not exist an error occurred.
Added ARM7 version libstubsisd.a
and its source file.
The system reserved region size changed (32bytes->64bytes) with the new BOOT ROM. This was not supported.
This bug is now fixed. In accord with this, the size of the system mode stack region has become smaller by 32 bytes.
(Plan to fix in the next release)
G2_SetBG*Control256x16Pltt()
.OS_TIMER32_23
, as the ID in OS_StartTimer32
, or if you set
OS_TIMER48_123
as the ID in OS_StartTimer48()
.NINTENDO Technical Support Center