Past NITRO-SDK Revision History


Recent Revision History

NITRO-SDK 2.0 PR7 (09/21/2004)
Note 16-01: (WM) Changes in the WM library
Note 16-02: (FS) Corrected problems with loading compressed overlays
Note 16-03: (CTRDG) Created an API for detecting the Game Pak being pulled out
Note 16-04: (CARD) Created an API for detecting the Card being pulled out
Note 16-05: (GX) Corrected the problem that occurs when creating the display list with G3C
Note 16-06: (OS) RTC interrupt process
Note 16-07: (MIC) Changed I/F of auto-sampling start function
Note 16-08: (SND) Updated the sound library
Note 16-09: (DevEnv) Included the tool for creating the test viewer of the banner file
Note 16-10: (DEMO) Added the final ROM creation demo
Known problems with SDK 2.0 PR7

NITRO-SDK 2.0 PR6 (09/13/2004)
Note 15-01: (OS) Added functions that obtain the system information
Note 15-02: (OS) Implementation of soft reset
Note 15-03: (OS) Added OS_ClearAlloc() that destroys the memory allocation system
Note 15-04: (OS) Changed the error display when the alarm is set
Note 15-05: (MI) Added definition regarding DMA registers
Note 15-06: (WM) Corrected the wireless control library and added features
Note 15-07: (WM) Included the wireless strength icon
Note 15-08: (WBT) Test release of the block transfer library
Note 15-09: (SND) Updated the sound library
Note 15-10: (DevEnv) Added support for the compressed resident module
Note 15-11: (DevEnv) Startup of nitload by make run
Note 15-12: (DevEnv) Provided ferret component that supports each hardware versions
Note 15-13: (OS) Corrected OS_CheckHeap()
Note 15-14: (MI) Corrected problems with runlength compression of ntrcomp.exe
Note 15-15: (MI) Corrected the DMA processing
Note 15-16: (WM/SND) Dealt with the problem with simultaneous use of the wireless and sound features
Note 15-17: (MB) Corrected the problem with the return value of the MB_GetSegmentLength function
Note 15-18: (MB) Corrected the malfunction of the Debug version of Multiboot sample
Note 15-19: (CARD) Corrected the problem of calling the backup access function for the first time
Note 15-20: (PRC) Corrected the stack overflow of the CharacterRecognition-1 demo
Note 15-21: (OS) Added OS_TPrintf (a simplified version of printf)
Known problems with SDK 2.0 PR6

NITRO-SDK 2.0 PR5 (08/30/2004)
Note 14-01: (WM) Important Corrected the wireless control library and added features
Note 14-02: (MI) Important Dealt with hardware restrictions related to the automatic DMA
Note 14-03: (DevEnv) Important Included the component and library that support the hardware version
Note 14-04: (DevEnv) Ended support for mongoose in the TEG environment
Note 14-05: (DevEnv) Added files that begin with a dot (.) to the initial values used when specifying Reject in makerom
Note 14-06: (DevEnv) Changed to CodeWarrior version 0.6.1 to build the SDK
Note 14-07: (DevEnv) Corrected the problem that code in the .itcm/.dtcm sections was not placed in ITCM/DTCM
Note 14-08: (GX) Corrected problems with the mosaic size setting
Note 14-09: (GX) Corrected problems with the definitions, such as GX_InitEx() in gx.h
Note 14-10: (CARD) Support for FLASH device
Note 14-11: (CARD) Corrected the problem with calling CARD_Init() with interrupts prohibited
Note 14-12: (CARD) Corrected the problem with calling CARD_IdentifyBackup()
Note 14-13: (MI) Changed how main memory access rights are switched to avoid a DMA startup delay
Note 14-14: (OS) Corrected the Tick value retrieval function
Note 14-15: (OS) Stopped the interrupt check flag automatic setting for V-Blank interrupt
Note 14-16: (OS) Changed the location of DTCM in the TS environment
Note 14-17: (OS) Calling PM_Init() inside OS_Init()
Note 14-18: (OS) Determining the proper operating environment using OS_GetConsoleType()
Note 14-19: (TP) Error when determining whether the touch panel is touched
Note 14-20: (PM) Added the RTC alarm as a trigger to awaken from sleep
Note 14-21: (RTC) Operating the RTC in a fixed 24 hour notation
Note 14-22: (DEMO) Corrected the problem with pressing the A button during application startup
Note 14-23: (Doc) Added reference manuals for auxiliary tools such as ntrcomp
Known Problems in SDK 2.0 PR5

NITRO-SDK 2.0 PR4 (08/11/2004)
Note 13-01: (WM) Corrected and added functions to the wireless control library
Note 13-02: (MB) Added the DS Download Play (multiboot) library
Note 13-03: (PM) Added the PM library
Note 13-04: (MIC/TP) Added parallel operation of microphone sampling and the touch panel
Note 13-05: (MIC) Added microphone support and preprocessing with IS-NITRO-DEBUGGER
Note 13-06: (MIC) Corrected the mic2wav tool
Note 13-07: (GX) Changed the LCD power management function
Note 13-08: (GX) Added G3*_MultTransMtx33()
Note 13-09: (GX) Added functions to set the DMA number used by GX
Note 13-10: (GX) Corrected problems with GX_PowerGeometry(), GX_Power3D()
Note 13-11: (GX) Changed the write restriction to the register of GX_SetGraphicsMode()
Note 13-12: (CARD) Released the official NITRO-CARD access API
Note 13-13: (FS) Corrected the problem in which the file ID obtained by FS_ReadDir did not match
Note 13-14: (DevEnd) Corrected the problem when expanding makelcf/makerom variables; added support for the variable definition files
Note 13-15: (DevEnd) Output the autoload module information to the overlay name file
Note 13-16: (DevEnv) Corrected the problem with failing to rename the C++ library in the migw environment
Note 13-17: (OS) Set up the V Blank counter
Note 13-18: (OS) Eliminated PAD_SetIrq() and PAD_ClearIrq()
Note 13-19: (MI) Added DMA busy wait after synchronous DMA
Note 13-20: (SND) Updated the sound libraries
Note 13-21: (Demo) Corrected GX demo 3D_BoxTest
Note 13-22: (Demo) Corrected GX demo LinesOver
Note 13-23: (Demo) Corrected the output screen of the SPI demo spiMonkey
Note 13-24: (DevEnv) Changed the sign setting of the char types
Known Problems in SDK 2.0 PR4

NITRO-SDK 2.0 PR3plus (07/29/2004)
Note 12-01: (DOC) Added and revised the WM Library Reference Manual
Known Problems in SDK 2.0 PR3 plus

NITRO-SDK 2.0 PR3 (07/27/2004)
Note 11-01: (OS) Corrected a definition error in the system shared region
Note 11-02: (DevEnv) Corrected the setting for the structure's padding warning
Known Problems in SDK 2.0 PR3

NITRO-SDK 2.0 PR2 (07/26/2004)
Note 10-01: (WM) Added the wireless control library
Note 10-02: (DevEnv) Changed the memory map (changed the DTCM address) (only with TS)
Note 10-03: (DevEnv) Added a parameter that absorbs the difference of DTCM
Note 10-04: (DevEnv) Corrected the link error in the C++ exception table
Note 10-05: (SVC) Updated the SVS library and reference manual
Note 10-06: (OS) Improved the lock functions (1): standardized the lock ID type
Note 10-07: (OS) Improved the lock functions (2): changed the name of the unlock function
Note 10-08: (MI) Changed the name of the MI_GetCartridgeRomCycle* function (posted again)
Known Problems in SDK 2.0 PR2

NITRO-SDK 2.0 PR1 (07/20/2004)
Note 9-01: (DevEnv) Changed the library support and default target for the TS version
Note 9-02: (DevEnv) Changed the file extension of the ROM binary files
Note 9-03: (DevEnv) Changed the overlay method
Note 9-04: (DevEnv) Changed the LCF file description
Note 9-05: (DevEnv) Changed the make rule
Note 9-06: (DevEnv) Corrected the generation rule of the nef and srl files
Note 9-07: (DevEnv) Added the compile switch NITRO_CODEGEN_ALL
Note 9-08: (SND) Updated the sound library
Note 9-09: (FS) Corrected an error in FS_RegisterArchiveName
Note 9-10: (FS) Corrected the improper display of a string while debugging in the async demo thread
Note 9-11: (FS) Corrected the problem of returning control prematurely while FS_WaitAsync is still running
Note 9-12: (GX) Corrected GX_SetBankForTex(), GX_LoadTexEx(), and GX_LoadTex()
Note 9-13: (GX) Changed the clear color alpha default from 0 to 31 in the GX demo
Note 9-14: (FX) Added FX_AtanIdx() and FX_Atan2Idx()
Note 9-15: (FX) Added a matrix calculation API that does not send the value to the geometry engine
Note 9-16: (OS) Corrected the arena setting when NITRO_MEMSIZE is set to 8M
Note 9-17: (OS) Improved thread-safety using functions related to memory allocation, such as alloc and free
Note 9-18: (OS) Added OS_JoinThread() and OS_IsThreadTerminated()
Note 9-19: (OS) Corrected the DMA address check ASSERT
Note 9-20: (OS) Changed the operation of OS_SetProtectionRegion()
Note 9-21: (OS) Changed the function cost measurement profiler
Note 9-22: (MI) Added functions to obtain the compression type and size of expanded data
Note 9-23: (MI) Changed the names of the MI_GetCartridgeRomCycle* functions
Note 9-24: (MI) Corrected ASSERT of MI_CpuCopyFast()
Note 9-25: (MI) Changed the DMA parameter setting and stop processes
Note 9-26: (CP) Changed how the Divider sets the divisor
Note 9-27: (MIC) Extended the sampling types
Note 9-28: (PRC) Added the pattern recognition API (test release)
Note 9-29: (TP) Changed the precision of the data obtained from the touch panel
Known Problems in SDK 2.0 PR1

NITRO-SDK 1.2 (06/16/2004)
Note 8-01: (CP) Added the CP context switching process to the IRQ handler
Note 8-02: (FX) Added and revised the constant definitions
Note 8-03: (OS) Corrected the idle thread process
Note 8-04: (SPI) Corrected the spiMonkey demonstration
Note 8-05: (DevEnv) Corrected the problem reading makerom/makelcf variable values
Known Problems in SDK 1.2

NITRO-SDK 1.2 RC1 (06/10/2004)
Note 7-01: (GX) Changed the Main LCD/Sub LCD output destination switch flag
Note 7-02: (MIC) Added the microphone API
Note 7-03: (TP) Changed the maximum sampling rate
Note 7-04: (TP) Corrected the problem of an interrupt being generated immediately after transmitting a touch panel command
Note 7-05: (TP) Changed the auto sampling interface
Note 7-06: (TP) Changed the TP_SetCallback() argument format
Note 7-07: (FS) Corrected a problem in the size display after loading all in the async demo
Note 7-08: (FS) Corrected a problem that prevented the overlay data cache from updating
Note 7-09: (FS) Corrected a problem in the FS_SetDefaultDMA() function
Note 7-10: (OS) Changed the IRQ handler specifications
Note 7-11: (OS) Changed the default for the maximum thread count
Note 7-12: (OS) Added OS_GetNumberOfThread()
Note 7-13: (OS) Changed the arena configuration
Note 7-14: (OS) Changed the protection region functions
Note 7-15: (OS) Removed the Profile features from the OS library
Note 7-16: (OS) Corrected the display of the call trace function
Note 7-17: (OS) Added OS_GetConsoleType()
Note 7-18: (OS) Changed how the debug functions, such as OS_Printf(), are handled in the FINALROM build
Note 7-19: (OS) Changed TCM function names
Note 7-20: (OS) Changed the OS demo structure
Note 7-21: (GX) Corrected the GX demo
Note 7-22: (GX) Eliminated restrictions on demos due to Ensata version upgrade
Note 7-23: (GX) Changed the extended palette VRAM configuration name
Note 7-24: (GX) Added support for multiple calls of GX_Init
Note 7-25: (GX) Added GX_GetObj_*
Note 7-26: (FX) Added the FX32_CONST() macro
Note 7-27: (MI) Corrected MI_UncompressRL8()
Note 7-28: (DevEnv) Added an explanation of makerom and makelcf
Note 7-29: (DevEnv) Added a tool to rewrite data maintained in the main unit NVRAM
Note 7-30: (DevEnv) Added the –g option during the build of the FINALROM version
Note 7-31: (DevEnv) Corrected a bug that output a faulty error message with makerom
Known Problems in SDK 1.2 RC1

NITRO-SDK 1.2 PR1 (05/24/2004)
Note 6-01: (DevEnv) Added support for CodeWarrior NITRO V0.5
Note 6-02: (DevEnv) Changed the ROM binary creation tool from elftobin to makerom
Note 6-03: (DevEnv) Added lcf ALIGN(32)
Note 6-04: (DevEnv) Added support for addition procedures for files dependent on execution binary generation rules
Note 6-05: (DevEnv) Added support for header include from compilers other than CodeWarrior
Note 6-06: (DevEnv) Terminated IDE demo sample distribution
Note 6-07: (ARM7) Added the ferret integrated component
Note 6-08: (FS) Added the file system and overlay
Note 6-09: (TP) Added touch panel functions
Note 6-10: (CP) Added Divider and Square Root Unit interrupts and multi-threads
Note 6-11: (GX) Added APIs for MtxFx22
Note 6-12: (GX) Improved poor operation of command FIFO in the TEG board
Note 6-13: (GX) Added GX_VRAM_ARM7_128_C to GX_SetBankForARM7()
Note 6-14: (GX) Corrected problem when specifying GX_VRAM_BGEXTPLTT_01_F to the BG extended palette
Note 6-15: (GX) Added a demo for procedure to synchronize to the Swapbuffer process on the geometry engine
Note 6-16: (GX) Added transparent conversion matrix APIs to adjust scaleW
Note 6-17: (GX) Changed the command FIFO reset process using the GX_Init function
Note 6-18: (GX) Corrected a bug in fog mode control
Note 6-19: (OS) Changed the thread system handling
Note 6-20: (OS) Added OS_SPrintf()
Note 6-21: (OS) Added TEG board memory byte access measures
Note 6-22: (OS) Added OS_WaitIrq(), OS_WaitAnyIrq(), and OS_WaitInterrupt()
Note 6-23: (OS) Added ATTRIBUTE_ALIGN(x)
Note 6-24: (OS) Extended the IDLE thread stack
Note 6-25: (OS) Added OS_GetLockID() and OS_ReleaseLockID()
Note 6-26: (OS) Added OS_SetSwitchThreadCallback()
Note 6-27: (OS) Released Mutex with OS_ExitThread()
Note 6-28: (OS) Changed the ARM7 component loop process
Note 6-29: (OS) Corrected OS_SetProtectionRegion7() and OS_SetProtectionRegion7
Note 6-30: (OS) Added the system clock definition
Note 6-31: (OS) Changed OS_Panic() termination operation
Note 6-32: (OS) Changed the OS demo structure
Note 6-33: (OS) Changed the IRQ handler
Note 6-34: (OS) Added the function call trace and function cost measurement mechanism
Note 6-35: (OS) Added interrupt check flags for operations
Note 6-36: (SND) Updated the sound library
Known Problems in SDK 1.2 PR1

NITRO-SDK 1.0 (04/05/2004)
Note 5-01: Support for CodeWarrior NITRO V0.4
Note 5-02: Revised GX_HBlankOBJProc() / GXS_HBlankOBJProc()
Note 5-03: Revised G2_SetOBJAttr() / G2S_SetOBJAttr()
Note 5-04: Revised GX_DisableBankFor*()
Note 5-05: Revised NitroPostLinker.bat
Note 5-06: fs/file-1. Fixed Demo Link Bug
Note 5-07: Revised makerom (ß version)
Note 5-08: Revised the lcf Template for makelcf (ß version)
Known Issues in NITRO-SDK Version 1.0

NITRO-SDK 1.0 (03/30/2004)
Note 4-01: Fix of G3_Frustum() bug
Note 4-02: Fix of transfer error with GX_LoadTex()
Note 4-03: Fix of GX_RegionCheck_Obj()
Note 4-04: Fix of GX3_GetCommandFifoStatus()
Note 4-05: Support for DTCM position change
Note 4-06: Fix of codereset.h
Note 4-07: Bug with exception vector set up
Note 4-08: Addition of self-cancel in periodic alarm handle
Note 4-09: Addition of OS_IsThreadAvailable()
Note 4-10: Standardization of constant and address sustitution assembler display
Note 4-11: Fix of G2_SetBG3ControlDCBump bug
Note 4-12: Addition of decimal point definition
Note 4-13: Standardization of macro FX_MUL32x64C and in-line function FX_Mul32x64c rounding up process
Known Issues in SDK 1.0

NITRO-SDK 1.0 PR2 (03/17/2004)
Note 3-01: Addition of PXI Library
Note 3-02: Addition of graphics samples
Note 3-03: Addition of compression tool for MI file opening API
Note 3-04: Addition of document about coexistence of NITRO-SDK and AGBSDK environments
Note 3-05: Setup of OBJ and BG bank EFG
Note 3-06: Fix of G3X_InitMtxStack problem
Note 3-07: Addition of link to man geometry command cycle list
Note 3-08: Creation of OS_Sleep()
Note 3-09: Fix of thread switch bug
Note 3-10: Creation of OS_ReadMessage()
Note 3-11: Fix of IRQ check fragment
Note 3-12: Fix of multiple V-count alarms
Note 3-13: Fix of tick bug
Note 3-14: Addition of time and tick conversion macro
Note 3-15: Fix of bug with recovery from timer interrupt callback
Note 3-16: Change to handling of FIQ in OS_DisableInterrupts(), etc.
Note 3-17: Change of specifications for debugger exception handler call
Note 3-18: Change to register name of ARM7
Note 3-19: Fix of register table
Note 3-20: Fix of manual
Note 3-21: Fix of IRQ Table
Known Issues with SDK 1.0 PR2

NITRO-SDK Ver 1.0 PR1 (02/27/2004)
Note 2-01: Name Change to NITRO-SDK
Note 2-02: Grouped Source According the Processors
Note 2-03: Added an API and Demos to Support Sub LCD
Note 2-04: Changed the ELF File Extension
Note 2-05: Moved the Sample Code Directory, and Added Code for Auto Test
Note 2-06: SDK Thumb Code Compile
Note 2-07: Provided a Means of Switching ARM code / Thumb Code Generation at Function Level
Note 2-08: Support for C++ in the SDK Library
Note 2-09: Support for X, Y Buttons
Note 2-10: Revisions Related to make Related Files
Note 2-11: Revised Compound Statement Expressions in Macros.
Note 2-12: Moved the Inline Assembler Functions That Were in Header Files to C source
Note 2-13: Name Change: Macro CODEGEN_PROC to NITRO_PROC
Note 2-14: Changed the ARM7 Binaries That Are Used for Linking in elftobin
Note 2-15: Added a Mechanism for Setting IRQ Stack Size
Note 2-16: Added a Mechanism to Display the Context at the Time That an Exception is Generated
Note 2-17: Fixed a Bug That Occurred When a NULL Callback Was Set in MI_Dma*Async()
Note 2-18: Added a Warning for DMA That Hits a TCM Region
Note 2-19: Added a Process to Clear Memory at Start Time
Note 2-20: Rounded Cache Related Function Argument Addresses
Note 2-21: Added OS_CreateThread() Argument, Made Thread Priority Control More Flexible
Note 2-22: Support for a Mechanism That Checks Thread Stack Leaks
Note 2-23: Implemented Alarms and a 64-bit Clock Counter
Note 2-24: Implemented a V-count Alarm
Note 2-25: Added MI_DmaSend*(), MI_CpuSend*()
Note 2-26: Revised OS_StartTimer*() Assert Determination
Note 2-27: Added CPU Memory Functions
Note 2-28: Measures for a TEG Board Hardware Bug Related to Main Bus Access During the V-blank Period
Note 2-29: Adjusted Light Parameters
Note 2-30: Implemented Overflow Check for the Dynamic DL Creation Function Group
Note 2-31: G3_Ortho() Bug Fix
Note 2-32: G3_EndMakeDL() Did Not Return the Proper Size. Fixed
Note 2-33: G2_Added an Argument to SetBG*Control256x16Pltt()
Note 2-34: Bug Fixes in G3CS_LoadTexMtxEnv(), G3CS_LoadTexMtxTexCoord()
Note 2-35: API Support for the New Translucent Texture
Note 2-36: Support for VecFx16 Type and Related API
Note 2-37: Added a C Linkage Specification to the DEMO Library Header Files
Known Issues in SDK 1.0

January 20, 2004 irisSDK snapshot patch1 (02/04/2004)
Note 1-01: 3D related test code execution was slow. Fixed
Note 1-02: VEC Mag overflow measures
Note 1-03: Fixed MTX_Concat43()
Note 1-04: Fixed definition of functions related to G2_SetBGxControl()
Note 1-05: Fixed horizontal translation calculations for MTX_Inverse43()
Note 1-06: Fixed definitions in GX_SetOBJVRamModeBmp()
Note 1-07: Support of library for byte access
Note 1-08: Fixed G2_SetBG3Priority() definitions
Note 1-09: Fixed definition of macro GX_FX16PAIR
Note 1-10: Support for IS_IRIS_EMULATOR in packaged library files
Note 1-11: Additional file for ARM7 version: libstubsisd.a
Note 1-12: Fixed definition of system reserved region sizw
Note 1-13: Fixed G3_LightVector() setting command position in the GX sample program
Note 1-14: Callback not called by MI_DmaCopy16Async(). Fixed
Known issues in snapshot 20040120+Path1

 




NITRO-SDK Version 2.0 PR7

(09/21/2004)


Note 16-01: (WM) Changes in the WM library

  1. For multiboot parents, there was a problem that a certain parent was more difficult to be found when there are multiple parents. This problem was corrected.

  2. Regarding the compatibility between the wireless library and sound library, a communication problem occurred when using the sound library for heavy load processing while the wireless library is communicating. This problem was solved by giving priority to the wireless library processes over sounds.

  3. With WM library, when the data that was going to be passed to the WM_Initialize function was left in cache in dirty state, it affected the operation of the WM library. This problem was solved.

  4. Up to the version PR6, if 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.

  5. Corrected the problem that the value that was smaller than the necessary size was returned because of the calculation error in WM_GetMPReceiveBufferSize and WM_MP_SIZE_PARENT_RECEIVE_BUFFER.

  6. Added the "wireless communication time calculation sheet" to the reference. The time required for MP commutation is calculated from the maximum send size of the parent and child.

  7. For the notification of port receiving callback to 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.

  8. Added a simplified document regarding the wireless to docs/TechnicalNotes/WirelessManager.doc. A draft was released.


Note 16-02: (FS) Corrected problems with loading compressed overlays

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.


Note 16-03: (CTRDG) Created an API for detecting the Game Pak being pulled out

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.


Note 16-04: (CARD) Created an API for detecting the Card being pulled out

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.


Note 16-05: (GX) Corrected the problem that occurs when creating the display list with G3C

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.


Note 16-06: (OS) RTC interrupt process

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.


Note 16-07: (MIC) Changed I/F of auto sampling start function

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.


Note 16-08: (SND) Updated the sound library

The sound library included with NITRO-SDK became the 09/16/2004 version.


Note 16-09: (DevEnv) Including the tool for creating the test viewer of the banner file

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.


Note 16-10: (DEMO) Added the final ROM creation demo

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 companys support web site.


Known problems with SDK 2.0 PR7

Reference for the attachsign tool is not complete.




NITRO-SDK Version 2.0 PR6

(09/13/2004)


Note 15-01: (OS) Added functions that obtain the system information

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.


Note 15-02: (OS) Implementation of soft reset

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.


Note 15-03: (OS) Added OS_ClearAlloc() that destroys the memory allocation system

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.


Note 15-04: (OS) Changed the error display when the alarm is set

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.


Note 15-05: (MI) Added definition regarding DMA registers

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.


Note 15-06: (WM) Corrected the wireless control library and added features

  1. Divided the processes for initializing and stopping the library, and added function group to provide detailed control.

    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.

  2. There was a problem with the wireless communication while the sound is being played because the wireless library DMA and the sound library DMA compete in ARM7. There are still some restrictions on the use of sounds, but the problem that the wireless communication was dissolved. This is also explained in "Note 15-16: (WM/SND) Dealt with the problem with simultaneous use of the wireless and sound features."

  3. Fixed the bug that caused the callback of 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.

  4. There was a problem with the process when 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.

  5. Added restriction for starting the communication as the parent so that the 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.

  6. With the childs application, when the state value, which is the argument for the callback to 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.

  7. With the childs application, 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.

  8. Previously, 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.)

  9. Changed the procedure for calling the callback every time the MP communication ends at the parent when the state value in the callback of WM_StartMP() was set to WM_STATECODE_MPEND_IND. Previously, the order of callbacks was:

    1. Transmission complete callback (callback of WM_SetMPDataToPort())
    2. WM_STATECODE_MPEND_IND (callback of WM_StartMP())
    3. Port receiving callback (each callback registered with WM_SetPortCallback())

    However, the order was changed to:

    1. Port receiving callback (each callback registered with WM_SetPortCallback())
    2. Transmission complete callback (callback of WM_SetMPDataToPort())
    3. 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.

  10. Added the WM_SetMPDataToPortEx() function. User defined data can be added to the argument of the transmission complete callback.

  11. The maximum send size of the child processed with 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.

  12. To use key sharing with NITRO-SDK 2.0 PR5, it was necessary to explicitly add the value that is used for key sharing to the maximum send bytes. It was changed so that the maximum send bytes were automatically expanded by the amount of data used for key sharing by setting TRUE with WMParentParam.KS_Flag.

  13. The argument 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.

  14. Corrected the problem that the child connection information was not reset properly when WM_Reset was called.

  15. Added WM_SetMPFrequency that changes the frequency of MP communication dynamically.


Note 15-07: (WM) Included the wireless strength icon

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

Note 15-08: (WBT) Test release of the block transfer library

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.


Note 15-09: (SND) Updated the sound library

The sound library that is distributed with NITRO-SDK became the 09/02/2004 version.


Note 15-10: (DevEnv) Added support for the compressed resident module

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.

  1. With compstatic command, executes the compression process of the region excluding the header part of the resident module execution binary.
  2. Stores the obtained compressed module file to ROM by the makerom command, in the same way as the normal module files.
  3. The compressed module is extracted in 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.

This compression and extraction processes can be applied to the execution module in the ROM file that is passed to the multiboot child.


Note 15-11: (DevEnv) Startup of nitload by make run

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.


Note 15-12: (DevEnv) Provided ferret component that supports each hardware versions

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.


Note 15-13: (OS) Corrected OS_CheckHeap()

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.


Note 15-14: (MI) Corrected problems with runlength compression of ntrcomp.exe

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.


Note 15-15: (MI) Corrected the DMA processing

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.


Note 15-16: (WM/SND) Dealt with the problem with simultaneous use of the wireless and sound features

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.


Note 15-17: (MB) Corrected the problem with the return value of the MB_GetSegmentLength function

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.


Note 15-18: (MB) Corrected the malfunction of the Debug version of Multiboot sample

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.


Note 15-19: (CARD) Corrected the problem of calling the backup access function for the first time

When the backup access function of CARD was called, the function failed only at the first time it was called. This problem was solved.


Note 15-20: (PRC) Corrected the stack overflow of CharacterRecognition-1 demo

CharacterRecognition-1 demo in NITRO-SDK 2.0 PR5 was not working properly due to the stack overflow. This problem was solved.


Note 15-21: (OS) Added OS_TPrintf (simplified version of printf)

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.


Known problems with SDK 2.0 PR6

Reference for compstatic and attachsign tools is not complete.




NITRO-SDK Version 2.0 PR5

(8/30/2004)


Note 14-01: (WM) [Important] Corrected the wireless control library and added features

  1. Changed the data structure that the parent broadcasts
    The user name and game name were deleted from the system reserved region. The developer region was also expanded from 64 bytes to the maximum of 112 bytes. The user name and game name are stored in the developer region, when needed.


  2. Added a feature to notify the 24-byte child information when a child connects to the parent
    The contents of the 24-byte child information was opened to developers so that a child can notify the parent of the application-specific information. In addition, the WM_StartConnect() function and the interface of the WMStartParentCallback structure were changed.



  3. Added features to control the details of multi-port (MP) communication
    Until SDK-PR4, it was possible to execute one MP communication per frame (one picture frame) or continuous transfer regardless of the frames. The feature that executes multiple times of MP communication per frame is now available.
    Along with this change, the interface of the WM_StartMP function has changed. Also, added the WM_StartMPEx() function to allow detailed settings.


  4. Extended the feature that changes the data broadcast by the parent during the communication
    Added feature that changes the parent attribute, such as receiving entry and accepting multiboot, during the communication.
    Along with this change, the interface of the WM_SetGameInfo() function has changed.


  5. Added single-function APIs as shown below

  6. Corrected the sample demos
    Sample demos were changed due to the specification change to WM libraries. The sample "ball" was not guaranteed to work in SDK-PR4, but the sample works correctly in SDK-PR5.


  7. Corrected a problem with the WM_Disconnect() function
    A child was not disconnected properly when CODE>WM_Disconnect() was called by a child.
    This problem is fixed.

Note 14-02: (MI) [Important] Dealt with hardware restrictions related to the automatic DMA

Added 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.


Note 14-03: (DevEnv) [Important] Included the component and library that support the hardware version

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

Note 14-04: (DevEnv) Ended support for mongoose in the TEG environment

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.


Note 14-05: Added files that begin with a dot "." to the initial values used when specifying Reject in 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 g.h 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.


Note 14-06: Changed to CodeWarrior version 0.6.1 to build the SDK

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.


Note 14-07: (DevEnv) Corrected the problem that code in the .itcm/.dtcm sections was not placed in ITCM/DTCM

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.


Note 14-08: (GX) Corrected problems with the mosaic size setting

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.


Note 14-09: (GX) Corrected problems with the definitions, such as 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.


Note 14-10: (CARD) Support for FLASH device

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.


Note 14-11: (CARD) Corrected the problem with calling CARD_Init() with interrupts prohibited

There was a problem when calling CARD_Init() with interrupts prohibited, the control was not returned from the function.

This problem is fixed.


Note 14-12: (CARD) Corrected the problem with calling 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.


Note 14-13: (MI) Changed how main memory access rights are switched to avoid a DMA startup delay

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.


Note 14-14: (OS) Corrected the Tick value retrieval function

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.


Note 14-15: (OS) Stopped the interrupt check flag automatic setting for V-Blank interrupt

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.


Note 14-16: (OS) Changed the location of DTCM in the TS environment

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.


Note 14-17: (OS) Calling PM_Init() inside OS_Init()

PM_Init() is now called from inside OS_Init() of ARM9.


Note 14-18: (OS) Determining the proper operating environment using 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


Note 14-19: (TP) Error when determining whether the touch panel is touched

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.


Note 14-20: (PM) Added the RTC alarm as a trigger to awaken from sleep

Now the RTC alarm can serve as a trigger to awaken from sleep.


Note 14-21: (RTC) Operating the RTC in a fixed 24 hour notation

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.


Note 14-22: Corrected the problem with pressing the A button during application startup

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.


Note 14-23: (Doc) Added reference manuals for auxiliary tools such as ntrcomp

Added reference manuals for the ntrcomp tool and ppmconv* tools (ppmconv/ppmconv8/ppmconvbg ).




Known Problems in SDK 2.0 PR5

None.


NITRO-SDK Version 2.0 PR4

(8/11/2004)


Note 13-01: (WM) Corrected and added functions to the wireless control library

  1. The port control feature was added. This feature enables the data communication of multiple upper-level protocols by using the MP protocol.
  2. Data sharing feature was added. A sample that executes data sharing among multiple units of NITRO is available on:
       $NitroSDK/build/demos/wm/dataShare-1
    The implementation of the key sharing feature has been changed so that it was realized by using this data sharing feature internally. The operation of the gballh sample, which was provided as demo, has not been checked, and it may not work properly.
  3. Made significant changes to the structure of the structure used for the internal control. Along this change, the buffer size that is required by the WM library was expanded.
  4. Changes were made so that during the MP communication the callback is generated every time the MP packet transfer is completed.
  5. The single-functionality APIs shown below were added:
       WM_SetLifeTime()
       WM_MeasureChannel()
       WM_InitWirelessCounter()
       WM_GetWirelessCounter()


    The block transfer feature and enhanced upper-level library are being developed.


Note 13-02: (MB) Added the DS Download Play (multiboot) library

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


Note 13-03: (PM) Added the PM library

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.



Note 13-04: (MIC/TP) Added parallel operation of microphone sampling and the touch panel

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 microphonefs 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


Note 13-05: (MIC) Added microphone support and preprocessing with 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.



Note 13-06: (MIC) Corrected the mic2wav tool

The mic2wav opened the output file as a text file, and data was not converted properly. This problem is fixed.



Note 13-07: (GX) Changed the LCD power management function

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.



Note 13-08: (GX) Added 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.



Note 13-09: (GX) Added functions to set the DMA number used by GX

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.



Note 13-10: (GX) Corrected problems with GX_PowerGeometry() and GX_Power3D()

With GX_PowerGeometry(), GX_Power3D(), the power for the geometry engine was not turned off. This problem was solved.



Note 13-11: (GX) Changed the write restriction to the register of GX_SetGraphicsMode()

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.



Note 13-12: (CARD) Released the official NITRO-CARD access API

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.



Note 13-13: (FS) Corrected the problem in which the file ID obtained by FS_ReadDir did not match

When 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.



Note 13-15: (DevEnd) Output the autoload module information to the overlay name file

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.



Note 13-16: (DevEnv) Corrected the problem with failing to rename the C++ library in the migw environment

Renaming process of the C++ library to CXX failed in the mingw environment. This problem is fixed.



Note 13-17: (OS) Set up the V Blank counter

Set up the V blank counter and added the function OS_GetVBlankCount() to obtain the value.



Note 13-18: (OS) Eliminated 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 OS_GoSleepMode().



Note 13-19: (MI) Added DMA busy wait after synchronous DMA

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


Note 13-20: (SND) Updated the sound libraries

Changed the sound libraries distributed with NITRO-SDK to the 08/10/2004 version.



Note 13-21: (Demo) Corrected GX demo 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.



Note 13-22: (Demo) Corrected GX demo 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.



Note 13-23: (Demo) Corrected the output screen of the SPI demo spiMonkey

Corrected the output screen of the SPI demo spiMonkey to be on the touch panel screen.



Note 13-24: (DevEnv) Changed the sign setting of the char types

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.




Known Problems in SDK 2.0 PR4

(To be corrected in the next or a later release)




NITRO-SDK Version 2.0 PR3 plus

(7/29/2004)


Note 12-01: (DOC) Added and revised the WM Library Reference Manual

Added and revised the section regarding the WM Library in the Reference Manual.




Known Problems in SDK 2.0 PR3 plus

There is no change in the library itself and the library header file between SDK 2.0 PR3plus and SDK 2.0 PR3.




NITRO-SDK Version 2.0 PR3

(7/27/2004)


Note 11-01: (OS) Corrected a definition error in the system shared region

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.



Note 11-02: (DevEnv) Corrected the setting for the structure's padding warning

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.

  1. Suppress warnings via the compile options:

    This is a method that adds the compiler options to suppress padding warnings at the time of compilation

    For IDE users, it can be set in the panel. For make system users, set the warning option with the make variable, CCFLAGS_WARNING. The following is an example for specifying in the command line so that the padding warnings are suppressed in order to display other types of warnings. Of course, it has the same effect as adding a description regarding the CCFLAGS_WARNING setting in the Makefile.
    make CCFLAGS_WARNING='–w all,nopadding'
    
  2. Specifying pragma in the source file:

    This method suppresses the padding warning by specifying pragma before or after the warning. The details are shown below.
    // 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 reset 
    
    To suppress padding warnings in the entire source file, add #pragma warn_padding off at the beginning of the source.



Known Problems in SDK 2.0 PR3

This is an urgent release, so the remaining problems that existed in SDK 2.0 PR2 still exist in this version.




NITRO-SDK Version 2.0 PR2

(7/26/2004)


Note 10-01: (WM) Added the wireless control library

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.



Note 10-02: (DevEnv) Changed the memory map (changed the DTCM address) (only with TS)

(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.



Note 10-03: (DevEnv) Added a parameter that absorbs the difference of DTCM

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)
  }


Note 10-04: (DevEnv) Corrected the link error in the C++ exception table

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.



Note 10-05: (SVC) Updated the SVS library and reference manual

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()


Note 10-06: (OS) Improved the lock functions (1): standardized the lock ID type

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()


Note 10-07: (OS) Improved the lock functions (2): changed the name of the unlock function

Changed the notation of the following function names from UnLock to Unlock.

    OS_UnlockByWord()
    OS_UnlockCartridge()
    OS_UnlockCard()


Note 10-08: (MI) Changed the name of the MI_GetCartridgeRomCycle* function (posted again)

(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.




Known Problems in SDK 2.0 PR2

(To be corrected in the next or a later release)




NITRO-SDK Version 2.0 PR1

(7/20/2004)


Note 9-01: (DevEnv) Changed the library support and default target for the TS version

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).



Note 9-02: (DevEnv) Changed the file extension of the ROM binary files

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.



Note 9-03: (DevEnv) Changed the overlay method

The link methods for overlays were changed.



Note 9-04: (DevEnv) Changed the LCF file description

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.



Note 9-05: (DevEnv) Changed the make rule

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


Note 9-06: (DevEnv) Corrected the generation rule of the nef and srl files

Made it possible to add dependent files to the nef and bin files by specifying LDEPENDS_NEF and LDEPENDS_BIN.



Note 9-07: (DevEnv) Added the compile switch 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.)



Note 9-08: (SND) Updated the sound library

The sound library distributed with the NITRO-SDK became the 06/22/2004 version.



Note 9-09: (FS) Corrected an error in 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.



Note 9-10: (FS) Corrected the improper display of a string while debugging in the async demo thread

Sometimes the wrong character string was displayed when an interrupt occurred during debugging of the thread with the async demo. This problem is fixed.



Note 9-11: (FS) Corrected the problem of returning control prematurely while FS_WaitAsync is still running

If 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.



Note 9-12: (GX) Corrected 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.



Note 9-13: (GX) Changed the clear color alpha default from 0 to 31 in the GX demo

In the DEMOLib of the GX demo, the default value of the clear color alpha value was changed from 0 to 31.



Note 9-14: (FX) Added 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.



Note 9-15: (FX) Added a matrix calculation API that does not send the value to the geometry engine

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().



Note 9-16: (OS) Corrected the arena setting when NITRO_MEMSIZE is set to 8M

When 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.



Note 9-17: (OS) Improved thread safety using functions related to memory allocation, such as alloc and free

Improved thread safety by prohibiting interrupts in a critical section using memory allocation functions, such as OS_Alloc*() and OS_Free*().



Note 9-18: (OS) Added 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.



Note 9-19: (OS) Corrected the DMA address check ASSERT

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.



Note 9-20: (OS) Changed the operation of OS_SetProtectionRegion()

OS_SetProtectionRegion() was changed to set and enable the protection region. Before, it was not enabled.



Note 9-21: (OS) Changed the function cost measurement profiler

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.



Note 9-22: (MI) Added functions to obtain the compression type and size of expanded data

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.



Note 9-23: (MI) Changed the names of the MI_GetCartridgeRomCycle* functions

Standardized 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.



Note 9-24: (MI) Corrected ASSERT of 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.



Note 9-25: (MI) Changed the DMA parameter setting and stop processes

Prohibited interrupts with the DMA parameter setting process (internal function MIi_DmaParams*()) and stop process (MI_StopDma()).



Note 9-26: (CP) Changed how the Divider sets the divisor

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.



Note 9-27: (MIC) Extended the sampling types

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.



Note 9-28: (PRC) Added the pattern recognition API (test release)

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


Note 9-29: (TP) Changed the precision of the data obtained from the touch panel

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.




Known Problems in SDK 2.0 PR1

(To be corrected in the next or a later release)


NITRO-SDK Version 1.2

(6/16/2004)


Note 8-01: (CP) Added the CP context switching process to the IRQ handler

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.


Note 8-02: (FX) Added and revised the constant definitions

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.


Note 8-03: (OS) Corrected the idle thread process

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

Note 8-04: (SPI) Corrected the spiMonkey demonstration

When the spiMonkey demo was built with the Debug version, the demo ran but the screen update rate was extremely slow. This problem is fixed.


Note 8-05: (DevEnv) Corrected the problem reading makerom/makelcf< variable values

A bug in handling variable values in makerom/makelcf could prevent normal operations. This bug is fixed.


Known Problems in SDK 1.2

(To be corrected in the next release)

  1. The archive system in the file system is a test version.

NITRO-SDK Version 1.2 RC1

(2004/6/10)


Note 7-01: (GX) Changed the Main LCD/Sub LCD output destination switch flag

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.


Note 7-02: (MIC) Added the microphone API

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.


Note 7-03: (TP) Changed the maximum sampling rate

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.


Note 7-04: (TP) Corrected the problem of an interrupt being generated immediately after transmitting a touch panel command

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.


Note 7-05: (TP) Changed the auto sampling interface

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.


Note 7-06: (TP) Changed the TP_SetCallback() argument format

Because TP_SetCallback() arguments were pointers to function pointers, it was changed so that function pointers could be passed directly as arguments.


Note 7-07: (FS) Corrected a problem in the size display after loading all in the async demo

The 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.


Note 7-08: (FS) Corrected a problem that prevented the overlay data cache from updating

Corrected the problem that prevented the data cache update process from being carried out for each of the functions that operate the overlay module.


Note 7-09: (FS) Corrected a problem in the FS_SetDefaultDMA() function

A 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.


Note 7-10: (OS) Changed the IRQ handler specifications

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.


Note 7-11: (OS) Changed the default for the maximum thread count

Changed the maximum thread count that can be created with the thread system from 8 to 16.


Note 7-12: (OS) Added OS_GetNumberOfThread()

Added the OS_GetNumberOfThread() function to get the number of threads currently created.


Note 7-13: (OS) Changed the arena configuration

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().


Note 7-14: (OS) Changed the protection region functions

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().


Note 7-15: (OS) Removed the Profile features from the OS library

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.


Note 7-16: (OS) Corrected the display of the call trace function

Corrected the problem in the display of indents beyond four levels in the call trace function.


Note 7-17: (OS) Added 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.


Note 7-18: (OS) Changed how debug functions, such as OS_Printf(), are handled in the FINALROM build

Changed 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.


Note 7-19: (OS) Changed TCM function names

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()

Note 7-20: (OS) Changed the OS demo structure

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.


Note 7-21: (GX) Corrected the GX demo

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.


Note 7-22: (GX) Eliminated restrictions on demos due to an Ensata upgrade

Due to an Ensata upgrade, the operating limitations on AntiAlias, PosVecTest, and CurrentMtx, which could only be used while Ensata was operating, were lifted.


Note 7-23: (GX) Changed the extended palette VRAM configuration name

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.


Note 7-24: (GX) Added support for multiple calls of 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.


Note 7-25: (GX) Added 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()

Note 7-26: (FX) Added the FX32_CONST() macro

Added the FX_CONST() macro to define fx32 format constants.


Note 7-27: (MI) Corrected 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.


Note 7-28: (DevEnv) Added an explanation of makerom and makelcf

Added a Tool item to the reference manual that includes an explanation of makerom and makelcf.


Note 7-29: (DevEnv) Added a tool to rewrite data maintained in the main unit NVRAM

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.


Note 7-30: (DevEnv) Added the "–g" option during the build of the FINALROM version

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

Note 7-31: (DevEnv) Corrected a bug that output faulty error message with 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.


Known Problems in SDK 1.2 RC1

(To be corrected in the next or a future release)

  1. The archive portion of the file system is a trial version.
  2. The Debug-compiled version of SPI demo, spiMonkey, does not operate correctly.

NITRO-SDK Version 1.2 PR1

(05/24/2004)


Note 6-01: (DevEnv) Added support for CodeWarrior NITRO V0.5

Added support for CodeWarrior NITRO V0.5. Added support for the change in library file names and the change in LCF files.


Note 6-02: (DevEnv) Changed the ROM binary creation tool from elftobin to makerom

Changed the ROM binary creation tool from elftobin to makerom. This allows the file system and overlay to be supported.


Note 6-03: (DevEnv) Added lcf 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.


Note 6-04: (DevEnv) Added support for addition procedures for files dependent on execution binary generation rules

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)

Note 6-05: (DevEnv) Added support for header include from compilers other than CodeWarrior

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.


Note 6-06: (DevEnv) Terminated the IDE demo sample distribution

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.


Note 6-07: (ARM7) Added the ferret integrated component

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.)


Note 6-08: (FS) Added the file system and overlay

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.


Note 6-09: (TP) Added touch panel functions

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.


Note 6-10: (CP) Added Divider and Square Root Unit interrupts and multi-threads

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.


Note 6-11: (GX) Added APIs for MtxFx22

APIs for operating the 2x2 matrix MtxFx22-type variable 2x2 are available.

    MTX_Identity22()
    MTX_Concat22()
    MTX_Inverse22()
    MTX_Transpose22()
    MTX_Rot22()
    MTX_Scale22()

Note 6-12: (GX) Improved poor operation of command FIFO in the TEG board

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.


Note 6-13: (GX) Added GX_VRAM_ARM7_128_C to GX_SetBankForARM7()

GX_VRAM_ARM7_128_C was added as an argument supported by GX_SetBankForARM7().


Note 6-14: (GX) Corrected problem when specifying GX_VRAM_BGEXTPLTT_01_F to the BG extended palette

Corrected the problem that caused configuration to be incorrect when GX_VRAM_BGEXTPLTT_01_F was set in the API GX_SetBankForBGExtPltt.


Note 6-15: (GX) Added a demo for procedure to synchronize to the Swapbuffer process on the geometry engine

Added 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.


Note 6-16: (GX) Added transparent conversion matrix APIs to adjust 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.


Note 6-17: (GX) Changed the command FIFO reset process using the GX_Init function

The implementation of the command FIFO reset process was changed. G3_End() is issued after 128 NOP units are sent as an internal process.


Note 6-18: (GX) Corrected a bug in fog mode control

A bug in G3X_SetFog prevented fogMode from returning to 0 from 1. This is fixed.


Note 6-19: (OS) Changed the thread system handling

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.


Note 6-20: (OS) Added 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.


Note 6-21: (OS) Added TEG board memory byte access measures

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.


Note 6-22: (OS) Added 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().


Note 6-23: (OS) Added ATTRIBUTE_ALIGN()

Added the ATTRIBUTE_ALIGN() macro to specify arrangement alignment when defining variables. The macro name follows the NINTENDO GAMECUBE SDK definitions.


Note 6-24: (OS) Extended the IDLE thread stack

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.


Note 6-25: (OS) Added OS_GetLockID() and OS_ReleaseLockID()

Added OS_GetLockID() and OS_ReleaseLockID() as a structure to manage lock IDs used by OS.


Note 6-26: (OS) Added OS_SetSwitchThreadCallback()

Added a callback feature when switching threads. The callback is registered with OS_SetSwitchThreadCallback().


Note 6-27: (OS) Released Mutex with OS_ExitThread()

When a thread is ended with OS_ExitThread(), the Mutex locked by that thread is released.


Note 6-28: (OS) Changed the ARM7 component loop process

The main loop process for the ARM7 component is OS_Halt().


Note 6-29: (OS) Corrected OS_SetProtectionRegion7() and OS_SetProtectionRegion7

Corrected so that OS_SetProtectionRegion7() and OS_SetProtectionRegion7 operate on Region 7 rather than Region 6.


Note 6-30: (OS) Added the system clock definition

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.


Note 6-31: (OS) Changed OS_Panic() termination operation

Changed the OS_Panic() terminate operation from OS_Halt to OS_Terminate().


Note 6-32: (OS) Changed the OS demo structure

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.


Note 6-33: (OS) Changed the IRQ handler

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.


Note 6-34: (OS) Added the function call trace and function cost measurement mechanism

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

Note 6-35: (OS) Added interrupt check flags for operations

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.


Note 6-36: (SND) Updated the sound library

The sound library distributed with the NITRO-SDK is version 2004.4.12.


Known Problems in SDK 1.2 PR1

(To be corrected in the next or a future release)

  1. The archive portion of the file system is a trial version.
  2. SDK 1.2 PR1 presupposes use of CodeWarrior-0.5. For this reason, it may not operate properly with prior versions.
  3. There is no documentation for makerom/makelcf.
  4. The FINALROM version binary does not operate on the 03/30/2004 version of ensata.

NITRO-SDK Ver 1.0

(04/05/2004)


Note 5-01: Support for CodeWarrior NITRO V0.4

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.


Note 5-02: Revised 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.


Note 5-03: Revised 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.


Note 5-04: Revised GX_DisableBankFor*()

In GX_DisableBankFor*(), internal behavior was incorrect, which caused it to behave improperly.

This has been fixed.


Note 5-05: Revised NitroPostLinker.bat

The NitroPostLinker.bat file referenced the environment variable CWFOLDER_IRIS.

We changed it to reference the environment variable CWFOLDER_NITRO.


Note 5-06: fs/file-1. Fixed Demo Link Bug

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.


Note 5-07: Revised 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.


Note 5-08: Revised the lcf Template for 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.


NITRO-Known Issues in SDK Ver 1.0

  1. Some of the explanations of the newly added demos have not yet been added to the online manual.
  2. ROM file system function, overlays are still pending.

NITRO-SDK Ver 1.0 RC1

(3/30/2004)


Note 4-01: Fix of G3_Frustum() bug

There 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.


Note 4-02: Fix of transfer error with GX_LoadTex()

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.


Note 4-03: Fix of GX_RegionCheck_Obj()

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.


Note 4-04: Fix of GX3_GetCommandFifoStatus()

The return value from G3X_GetCommandFifoStatus() was not accurate.
This bug was fixed.


Note 4-05: Support for DTCM position change

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.


Note 4-06: Fix of codereset.h

There was a flaw in $NitroSDK/include/nitro/codereset.h. It always switched to thumb.
This bug was fixed.


Note 4-07: Bug with exception vector set up

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.


Note 4-08: Addition of self-cancel in periodic alarm handle

Until now, a self-cancel of an alarm in the periodic alarm handle was not possible. This is now possible.


Note 4-09: Addition of OS_IsThreadAvailable()

A function OS_IsThreadAvailable() was added to initialize the thread system and check if it can be used.


Note 4-10: Standardization of constant and address substitution assembler display

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

Note 4-11: Fix of G2_SetBG3ControlDCBump() bug

There was a mistake in the assert determination for $Nitro_SDK/include/nitro/gx/gx_bgcnt.h.
This bug was fixed.


Note 4-12: Addition of fixed point definition

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.


Note 4-13: Standardization of macro FX_MUL32x64C and in-line function FX_Mul32x64c rounding up process

Standardized the rounding up process for FX_MUL32x64C and FX_Mul32x64c.


Known Issues with NITRO-SDK Ver 1.0 RC1

The ROM file system function and overlay problems were carried over.


NITRO-SDK Ver 1.0 PR2

(03/17/2004)


Note 3-01: Addition of PXI Library

Added a PXI Library for carrying out communication between ARM9 and ARM7.


Note 3-02: Addition of graphics samples

The following graphics samples were added.

2D_CharBg_256_16

Affine extension/256 colors x 16 extension palette character BG display

2D_CharBg_256BMP

Affine extension/256 color bitmap BG display

2D_CharBg_Direct

Affine extension/direct color bitmap BG display

2D_Oam_256_16

Affine extension/256 colors x 16 extension palette OBJ display

2D_Oam_Bmp1D

One-dimensional mapping/bitmap OBJ display

2D_Oam_Char1D

One-dimensional mapping/character OBJ display

2D_Oam_Direct

Two-dimensional mapping/bitmap OBJ display

2D_Oam_OBJWindow

OBJ window display

2D_Oam_Translucent

Translucent OBJ display

3D_BoxTest

Carries out box test

3D_PolAttr_1Dot

GX_POLYGON_ATTR_MISC_DISP_1DOT setup for G3_PolygonAttr()

3D_PolAttr_DpthTest

GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL setup for G3_PolygonAttr()

3D_PolAttr_DpthUpdate

GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE setup for G3_PolygonAttr()

3D_PolAttr_FARClip

GX_POLYGON_ATTR_MISC_FAR_CLIPPING setup for G3_PolygonAttr()

3D_Pol_Vertex_Source

GX_TEXGEN_VERTEX setup for G3_TexImageParam()

3D_Shadow_Pol

Displays shadow using shadow polygon

AntiAlias

Views anti-aliasing

Capture

Motion Blur effect using capture

ClearColor

Sets up clear color

ClearImage

Sets up clear image

CurrentMtx

Outputs current clip coordinate matrix and direction vector coordinate matrix

FlipRepeat

Changes texture flip/repeat

LinesOver

Polygon line over display

Master_Bright

Master brightness adjustment

PosVecTest

Outputs G3_VectorTest() and G3_PositionTest() result

RamOverFlow

Overflows polygon list RAM/vertex RAM.

VCount

Obtaining and changing V-counter

ViewPort

View port setup change

Window

Window transformation with operation during H-Blank period.

Window_HDMA

Window transformation with H-Blank DMA.

DEMOLib

Common processing


Note 3-03: Addition of compression tool for MI file opening API

Added data compression tool ntrcomp. It is located in $NitroSDK/build/tools/ntrcomp/.


Note 3-04: Addition of document about coexistence of NITRO-SDK and AGBSDK environments

Added document about installing and using both NITRO-SDK and AGBSDK at same time to $NitroSDK/docs/HowToJoinAGBDevEnv.txt.


Note 3-05: Setup of OBJ and BG bank EFG

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.


Note 3-06: Fix of G3X_InitMtxStack() problem

If the original PROTECTION matrix stack level was 0 during initialization of the matrix stack, a stack underflow was caused.
This bug was fixed.


Note 3-07: Addition of link to man geometry command cycle list

A link was added to go from 3D geometry (G3*) in the left window of the manual to the geometry command cycle list.


Note 3-08: Creation of OS_Sleep()

Added the function OS_Sleep() to stop a thread for a specified time.


Note 3-09: Fix of thread switch bug

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.


Note 3-10: Creation of OS_ReadMessage()

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.


Note 3-11: Fix of IRQ check fragment

With the timer interrupt during the setting of the IRQ interrupt check flag, an incorrect bit was accessed and set.
This bug was fixed.


Note 3-12: Fix of multiple V-count alarms

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.


Note 3-13: Fix of tick bug

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.


Note 3-14: Addition of time and tick conversion macro

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 )


Note 3-15: Fix of bug with recovery from timer interrupt callback

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.


Note 3-16: Change to handling of FIQ in 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.


Note 3-17: Change of specifications for debugger exception handler call

The specifications were changed so if a debugger exception handler is present it is called before calling the user exception handler.


Note 3-18: Change to register name of ARM7

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.


Note 3-19: Fix of register table

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.


Note 3-20: Fix of manual

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.


Note 3-21: Fix of IRQ Table

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.


Known Issues in NITRO-SDK Ver 1.0 PR2

The ROM file system function and overlay problems will be carried over.



NITRO-SDK Ver 1.0 PR1

(2/27/2004)


Note 2-01: Name Change to NITRO-SDK

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.

  1. Changed iris.h to nitro.h.
  2. Changed the directory include/iris to include/nitro.
  3. Changed the main function IrisMain to NitroMain.
  4. Changed the environment variable IRISSDK_ROOT to NITROSDK_ROOT.
  5. Changed the switches that begin with IRIS, such as the compile switch IRIS_DEBUG to NITRO_DEBUG.
  6. Changed the word IRIS to NITRO in documentation.
  7. Prepared $NitroSDK/tools/elftobin/NitroPostLinker.bat as a Postlinker for NITRO in IDE.

Note 2-02: Grouped Source According the Processors.

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>.


Note 2-03: Added an API and Demos to Support Sub LCD.

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.


Note 2-04: Changed the ELF File Extension

We changed the ELF file extension to .nef. We also plan to support .nef with NITRO development-related tools.


Note 2-05: Moved the Sample Code Directory, and Added Code for Auto Test.

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.


Note 2-06: SDK Thumb Code Compile

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

 

make NITRO_CODEGEN=THUMB

Generate ARM version code

 

make NITRO_CODEGEN=ARM

Currently, if you omit NITRO_CODEGEN, it will generate an ARM code version library.


Note 2-07: Provided a Means of Switching ARM code / Thumb Code Generation at Function Level.

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

 

$NitroSDK/include/nitro/code32.h

Instruct Thumb code generation

 

$NitroSDK/include/nitro/code16.h

Return to initial settings

 

$NitroSDK/include/nitro/codereset.h

(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.


Note 2-08: Support for C++ in the SDK Library

We have made the following additions and revisions to support code creation with C++.

  1. Added a process to call the NitroStartUp() function and a static constructor before calling NitroMain().
  2. Revised header files that had problems when used with C++.
  3. C++ sample code collection ($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.

 


Note 2-09: Support for X, Y Buttons

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.


Note 2-10: Revisions Related to make-Related Files

We revised make-related files (commondefs, modulerules, etc., in $NitroSDK/build/buildtools).

This implemented / revised the following.

  1. Implemented output of a source file dependence information file, and its reference process.
  2. Make did not function properly when using the make -f option. Fixed.
  3. Make did not function properly when you specified a large source file in SRCS. Fixed.

Note 2-11: Revised Compound Statement Expressions in Macros.

We eliminated compound statements (multiple statements within {}) with macros definitions.


Note 2-12: Moved the Inline Assembler Functions That Were in Header Files to C source.

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.


Note 2-13: Name Change: Macro CODEGEN_PROC to NITRO_PROC

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.


Note 2-14: Changed the ARM7 Binaries That Are Used for Linking in elftobin

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.


Note 2-15: Added a Mechanism for Setting IRQ Stack Size

We described IRQ stack size in the LCF file. This makes it possible to set it.


Note 2-16: Added a Mechanism to Display the Context at the Time That an Exception is Generated

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.


Note 2-17: Fixed a Bug That Occurred When a NULL Callback Was Set in MI_Dma*Async().

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.


Note 2-18: Added a Warning for DMA That Hits a TCM Region

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.


Note 2-19: Added a Process to Clear Memory at Start Time

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.


Note 2-20: Rounded Cache Related Function Argument Addresses.

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.


Note 2-21: Added OS_CreateThread() Argument, Made Thread Priority Control More Flexible.

Concerning the thread mechanism, we added the following:

  1. Added argument to OS_CreateThread(). You can now pass an argument to the execute startup function.
  2. You can now set thread priorities 0-31. In line with this, threads immediately after OS_InitThread() is called will now have a priority of 16.
  3. We implemented an API (OS_SetThreadPriority(), OS_GetThreadPriority()) to acquire and change thread priorities.

Note 2-22: Support for a Mechanism That Checks Thread Stack Leaks.

We prepared the OS_CheckStack() function to check for thread related stack leaks.


Note 2-23: Implemented Alarms and a 64-bit Clock Counter.

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.


Note 2-24: Implemented a V-count Alarm

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.


Note 2-25: Added MI_DmaSend*() , MI_CpuSend*()

We added MI_DmaSend*, MI_CpuSend* API.


Note 2-26: Revised OS_StartTimer*() Assert Determination

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.


Note 2-27: Added CPU Memory Functions

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.


Note 2-28: Measures for a TEG Board Hardware Bug Related to Main Bus Access During the V-blank Period.

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.


Note 2-29: Adjusted Light Parameters

In the demos that perform light processing, the total of the parameters such as light color was very largenot 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.


Note 2-30: Implemented Overflow Check for the Dynamic DL Creation Function Group.

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.


Note 2-31: G3_Ortho() Bug Fix

Fixed a G3_Ortho() implementation bug.


Note 2-32: G3_EndMakeDL() Did Not Return the Proper Size. Fixed.

G3_EndMakeDL() did not return the proper size. We fixed this bug.


Note 2-33: G2_Added an Argument to SetBG*Control256x16Pltt()

We added an argument to G2_SetBG*Control256x16Pltt() that specifies the character base block.


Note 2-34: Bug Fixes in G3CS_LoadTexMtxEnv(), G3CS_LoadTexMtxTexCoord()

There was a problem in the display list that was generated by G3CS_LoadTexMtxEnv(), G3CS_LoadTexMtxTexCoord(). We fixed this.


Note 2-35: API Support for the New Translucent Texture

An API now supports A3I5 textures. Confirm emulator specification to see whether this texture can actually be displayed.


Note 2-36: Support for VecFx16 Type and Related API

We support the 3D vector type VecFx16, which uses Fx16 elements. We prepared the VEC_Fx16* series to handle it.


Note 2-37: Added a C Linkage Specification to the DEMO Library Header Files.

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.


Known Issues with SDK 1.0

Decided to postpone ROM file system function and implementation of overlay.


January 20, 2004 irisSDK snapshot patch 1

(2/4/2004)


Note 1-01: 3D related test code execution was slow. Fixed.

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.


Note 1-02: 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.


Note 1-03: Fixed MTX_Concat43()

In fx_mtx43.c, the X axis transform element in matrix b is ignored.

This bug has been fixed.


Note 1-04: Fixed definition of functions related to G2_SetBGxControl().

In the G2 library, internal settings for functions related to G2_SetBGxControl() are not correct.

This bug has been fixed.


Note 1-05: Fixed horizontal translation calculations for MTX_Inverse43()

The horizontal translation element of the inverse matrix obtained in MTX_Inverse43() was incorrect.

This bug has been fixed.


Note 1-06: Fixed definitions in GX_SetOBJVRamModeBmp().

There were incorrect definitions in GX_SetOBJVRamModeBmp().

Fixed.


Note 1-07: Support of library for byte access version.

There was no support for a library for byte access in the IDE sample project file. We completely transferred this, and the library that was used in a command line environment, to the byte access version.

IDE sample project reviewed and changed over.


Note 1-08: Fixed G2_SetBG3Priority() definitions

There were mistakes in G2_SetBG3Priority definitions.

This bug has been fixed.


Note 1-09: Fixed macro GX_FX16PAIR definition

There was a problem handling code extension in the macro GX_FX16PAIR in g3.h. This macro was not used elsewhere in the SDK and did not affect the SDK itself.

This bug has been fixed.


Note 1-10: Support for IS_IRIS_EMULATOR in packaged library files

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.


Note 1-11: Additional file for ARM7 version: 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.


Note 1-12: Fixed definition of system reserved region size

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.


Note 1-13: Fixed G3_LightVector() setting command position in the GX sample program

Immediately after it is issued, the G3_LightVector command performs coordinate conversion using the directional vector matrix. Therefore G3_LightVector() must be processed after setting the camera matrix.

All samples that use G3_LightVector have been fixed.


Note 1-14: Callback not called by MI_DmaCopy16Async. Fixed

Internally MI_DmaCopy16ASync() did not generate a DMA end interrupt, and callback was not called.

The above bug has been fixed.


Known Issues in Snapshot 20040120+Path1

(Plan to fix in the next release)

  1. In the test code that performs light processing, the values for parameters such as light color are not appropriate. Therefore, when polygon surfaces even slightly face the light, light strength becomes MAX.
  2. There is no method for specifying the character base block in G2_SetBG*Control256x16Pltt().
  3. In the DEBUG version library, assert is 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().

NINTENDO Technical Support Center