The TWL system has features that can be configured for each hardware block. You can control the existence of a clock supply, compatibility with the Nintendo DS system, and other settings.
Because NITRO hardware does not include a system configuration (SCFG) block, these functions are generally assumed to be called to run on TWL hardware. However, the SCFG_GetCpuSpeed function has been designed to return the correct value regardless of the environment in which it is called.
The TWL system provides 64 KB of ARM9 system ROM for the TWL CPU and 8 KB of ARM9 system ROM for the NITRO CPU. This is switched by the ARM7. The ARM9 can determine which of these settings is in effect.
This is obtained with the SCFG_GetSystemRomType function.
You can determine if ARM9 secure ROM is accessible from AHB. This is configured by the ARM7.
This is obtained with the SCFG_IsSecureRomAccessible function.
The TWL system can control the clock supply to the blocks below.
Camera CAM_CKI
This is set by theSCFG_SetCameraCKIClockfunction, and its state is obtained with theSCFG_IsCameraCKIClockEnablefunction.
New WRAM (WRAM-A/B/C) Blocks
TheSCFG_IsClockSuppliedToWramfunction gets the state.
This setting is configured by the ARM7 and fixed at startup and cannot be changed.
Camera I/F Block
This is set by theSCFG_SupplyClockToCamerafunction, and its state is obtained with theSCFG_IsClockSuppliedToCamerafunction.
DSP Block
This is set with theSCFG_SupplyClockToDSPfunction, and the state is obtained with theSCFG_IsClockSuppliedToDSPfunction.
The TWL console can switch the operating frequency for the ARM9 processor to one of the following.
- 67.03 MHz (equal to NITRO)
- 134.06 MHz (double speed)
This is set by theSCFG_SetCpuSpeedfunction, and its state is obtained with theSCFG_GetCpuSpeedfunction.
This is switched safely by running code with necessary empty loops on the ITCM.
In TWL mode, the frequency becomes double-speed when the process enters theNitroMainfunction, and this setting is not changed even by theOS_Initfunction.
System Configuration Block
You can control the SCFG library's access to the system configuration blocks. Access is disabled by theSCFG_SetConfigBlockInaccessiblefunction.
Once it has been disabled, all configuration blocks (including this access control) become inaccessible. Applications should not normally set this to be disabled.Call theSCFG_IsConfigBlockAccessiblefunction to get the current state.
New WRAM (WRAM-A/B/C)
Controls access to the new WRAM (WRAM-A/B/C). This is configured by the ARM7. The ARM9 can get the state with the SCFG_IsWRamAccessible function, but cannot change it.
New DMA
Controls access to the new DMA block.
This is set by theSCFG_SetNDmaAccessiblefunction, and its state is obtained with theSCFG_IsNDmaAccessiblefunction.
This is set to be accessible in TWL mode by default.
Camera
Controls access to the camera I/F block.
This is set by theSCFG_SetCameraAccessiblefunction, and its state is obtained with theSCFG_IsCameraAccessiblefunction.
This is set to be accessible in TWL mode by default.
DSP
Controls access to the DSP block.
This is set by theSCFG_SetDSPAccessiblefunction, and its state is obtained with theSCFG_IsDSPAccessiblefunction.
This is set to be accessible in TWL mode by default.
INTC Circuit
The ARM9 interrupt controller can be configured to use extensions.
This is set by theSCFG_SetIntcExpandedfunction, and its state is obtained with theSCFG_IsIntcExpandedfunction.
Extensions are used in TWL mode by default.
LCDC Circuit
The LCDC circuit can be configured to use extensions (INI loads).
This is set by theSCFG_SetLCDCExpandedfunction, and its state is obtained with theSCFG_IsLCDCExpandedfunction.
Extensions are used in TWL mode by default.
VRAM Access
VRAM access can be configured to use extensions (per-byte writes and word access without wait states).
This is set by theSCFG_SetVramExpandedfunction, and its state is obtained with theSCFG_IsVramExpandedfunction.
Extensions are used in TWL mode by default.
PSRAM access boundaries can be configured. The available choices are 4 MB, 16 MB, and 32 MB.
This is set by theSCFG_SetPsramBoundaryfunction, and its state is obtained with theSCFG_GetPsramBoundaryfunction. You should not change this setting.
Old DMA Circuit
You can use a revised version of the old NITRO DMA circuit.
This is set by theSCFG_SetDmacFixedfunction, and its state is obtained with theSCFG_IsDmacFixedfunction.
Revisions are not used by default.
Geometry Circuit
You can use a revised version of the NITRO geometry circuit.
This is set by theSCFG_SetGeometryFixedfunction, and its state is obtained with theSCFG_IsGeometryFixedfunction.
Revisions are not used by default.
Renderer Circuit
You can use a revised version of the NITRO renderer circuit.
This is set by theSCFG_SetRendererFixedfunction, and its state is obtained with theSCFG_IsRendererFixedfunction.
Revisions are not used by default.
2D Engine Circuit
You can use a revised version of the NITRO 2D engine circuit.
This is set by theSCFG_Set2DEngineFixedfunction, and its state is obtained with theSCFG_Is2DEngineFixedfunction.
Revisions are not used by default.
Division Circuit
You can use a revised version of the NITRO divider circuit.
This is set by theSCFG_SetDividerFixedfunction, and its state is obtained with theSCFG_IsDividerFixedfunction.
Revisions are not used by default.
Memory Card I/F Circuit
You can use a revised version of the NITRO memory card I/F circuit.
This is set by theSCFG_SetCardFixedfunction, and its state is obtained with theSCFG_IsCardFixedfunction.
Revisions are not used by default.
2009/01/19 Added an explanation about ARM9 operating frequency.
2008/07/15 Added See Also and Revision History.
2007/09/06 Initial version.
CONFIDENTIAL