システムコンフィグ

# システムコンフィグ(SCFG) 概要

TWLでは、本体ハードウェアをブロックごとに設定する機能があります。クロックの供給の有無や旧DSとの互換動作設定などを制御することが出来ます。

システムコンフィグ(SCFG) ブロックは NITRO ハードウェアには存在しませんので、基本的にこれらの関数は TWL ハードウェア上で呼び出されることが前提となります。但し `SCFG_GetCpuSpeed()` はどの環境で呼び出しても正しい値が返るように設計されています。

## システムROM 設定

> TWLでは、ARM9用システムROMとして、TWL CPU 用の64KB ROM と、NITRO CPU 用の 8KB ROM が用意されています。この切り替えはARM7で行います。ARM9 からはどちらに設定されているかを取得することが可能です。

> 取得関数は `SCFG_GetSystemRomType()` です。

## セキュアROM設定

> ARM9 用セキュアROMに対し、AHBからアクセス可能かどうかを取得することが可能です。この設定は、ARM7で行います。

> 取得関数は `SCFG_IsSecureRomAccessible()` です。

## 新規ブロックのクロック制御

TWL では、以下のブロックへのクロック供給を制御することが可能です。

・カメラ用 CAM_CKI

> `SCFG_SetCameraCKIClock()` で設定し、 `SCFG_IsCameraCKIClockEnable()` で状態取得します。

・新規WRAM (WRAM-A/B/C) ブロック

> `SCFG_IsClockSuppliedToWram()` で状態取得します。
> 設定は起動時に ARM7側から行って固定されるので変更は出来ません。

・カメラI/F ブロック

> `SCFG_SupplyClockToCamera()` で設定、`SCFG_IsClockSuppliedToCamera()` で状態取得します。

・DSP ブロック

> `SCFG_SupplyClockToDSP()` で設定、`SCFG_IsClockSuppliedToDSP()` で状態取得します。

## ARM9動作周波数

> TWL では ARM9 プロセッサの動作周波数を以下の中から切り替えることが可能です。
> ・NITROと同じ 67.03MHz で動作させる
> ・倍速の 134.06MHz で動作させる
> `SCFG_SetCpuSpeed()` で設定し、`SCFG_GetCpuSpeed()` で状態を取得します。

> 切り替えは ITCM上のコードで走り、かつ必要な空ループを挟んで安全に行われます。

> TWLモードの場合 `NitroMain()` に入った時点で倍速となっており、`OS_Init()` でもその設定は変更しません。

## アクセス設定

・システムコンフィグブロック

> このSCFG ライブラリで行う、システムコンフィグブロックへのアクセスを制御することが可能です。`SCFG_SetConfigBlockInaccessible()` でアクセスを不可能にします。
> 一度不可能状態にすると、それ以降(このアクセス制御を含め)すべてのコンフィグブロックへのアクセスが出来なくなります。通常はアプリケーションから不可能状態にはしないようにしてください。現在の状態を取得するには `SCFG_IsConfigBlockAccessible()` を呼んでください。

・新規WRAM (WRAM-A/B/C)

> 新規WRAM (WRAM-A/B/C) のアクセスを制御します。この設定は ARM7 から行いますので、ARM9 からは `SCFG_IsWramAccessible()` で状態を読むことは可能ですが、変更はできません。

・新規DMA

> 新規DMAブロックへのアクセスを制御します。
> `SCFG_SetNDmaAccessible()` で設定を行い、`SCFG_IsNDmaAccessible()` で状態を取得します。
> TWLモードでは、初期値は 「アクセス可能」 となります。

・カメラ

> カメラI/F ブロックへのアクセスを制御します。
> `SCFG_SetCameraAccessible()` で設定を行い、`SCFG_IsCameraAccessible()` で状態を取得します。
> TWLモードでは、初期値は 「アクセス可能」 となります。

・DSP

> DSPブロックへのアクセスを制御します。
> `SCFG_SetDSPAccessible()` で設定を行い、`SCFG_IsDSPAccessible()` で状態を取得します。
> TWLモードでは、初期値は 「アクセス可能」 となります。

## 拡張機能設定

・INTC 回路

> ARM9 の割り込みコントローラを拡張するかどうか設定することが可能です。
> `SCFG_SetIntcExpanded()` で設定を行い、`SCFG_IsIntcExpanded()` で状態を取得します。
> TWLモードでは、初期値は 「拡張する」 となります。

・LCDC回路

> LCDC回路を拡張する(INI 読み出し)するかどうか設定することが可能です。
> `SCFG_SetLCDCExpanded()` で設定を行い、`SCFG_IsLCDCExpanded()` で状態を取得します。
> TWLモードでは、初期値は 「拡張する」 となります。

・VRAMアクセス

> VRAMアクセスを拡張する(Byte Write 可、NonWait Word Access) することが可能です。
> `SCFG_SetVramExpanded()` で設定を行い、`SCFG_IsVramExpanded()` で状態を取得します。
> TWLモードでは、初期値は 「拡張する」 となります。

## PSRAMアクセス境界

> PSRAM アクセスの境界を設定することが可能です。4MB、16MB、32MB から選択します。`
> SCFG_SetPsramBoundary()` で設定を行い、`SCFG_GetPsramBoundary()` で状態を取得します。
> ただしこの設定はユーザが変更すべきではありません。

## NITROブロック回路修正

・旧DMA 回路

> NITROの 旧DMA 回路を修正した回路を使用することが可能です。
> `SCFG_SetDmacFixed()` で設定を行い、`SCFG_IsDmacFixed()` で状態を取得します。
> 初期値は 「修正しない」 となります。

・ジオメトリ回路

> NITRO のジオメトリ回路を修正した回路を使用することが可能です。
> `SCFG_SetGeometryFixed()` で設定を行い、`SCFG_IsGeometryFixed()` で状態を取得します。
> 初期値は 「修正しない」 となります。

・レンダラー回路

> NITRO のレンダラー回路を修正した回路を使用することが可能です。
> `SCFG_SetRendererFixed()` で設定を行い、`SCFG_IsRendererFixed()` で状態を取得します。
> 初期値は 「修正しない」 となります。

・2Dエンジン回路

> NITRO の 2Dエンジン回路を修正した回路を使用することが可能です。
> `SCFG_Set2DEngineFixed()` で設定を行い、`SCFG_Is2DEngineFixed()` で状態を取得します。
> 初期値は 「修正しない」 となります。

・除算器回路

> NITRO の除算器回路を修正した回路を使用することが可能です。
> `SCFG_SetDividerFixed()` で設定を行い、`SCFG_IsDividerFixed()` で状態を取得します。
> 初期値は 「修正しない」 となります。

・メモリカードI/F 回路

> NITRO のメモリカードI/F 回路を修正した回路を使用することが可能です。
> `SCFG_SetCardFixed()` で設定を行い、`SCFG_IsCardFixed()` で状態を取得します。
> 初期値は 「修正しない」 となります。

## 参照

`SCFG関数一覧
`

## 履歴

2009/01/19 ARM9動作周波数に関する説明を追加
2008/07/15 参照及び履歴を追加
2007/09/06 初版