ntr_bootrom/trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h

241 lines
8.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//======================================================================
// IRISモニタプログラム共有領域定義
//======================================================================
#ifndef _IRIS_MON_SHARED_AREA_H
#define _IRIS_MON_SHARED_AREA_H
#include "IrisSubpMonTarget.h"
#include <IrisCardDefine.h>
typedef void (*IntrFuncp)(void);
// ROMヘッダ・ブートパラメータ構造体
typedef struct {
u8 *romAddr; // ROMアドレス
u8 *entryAddr; // エントリアドレス
u8 *ramAddr; // RAMアドレス
s32 romSize; // ROMサイズ
} BootUsrParam;
// ROMヘッダ構造体
typedef struct {
s8 titleName[12]; // ソフトタイトル名
u32 initialCode; // イニシャルコード
u16 makerCode; // メーカーコード
u8 machineCode; // 本体コード
u8 deviceType; // デバイスタイプ
u8 nonVerReserved[4]; // 予約(4バイト)
u8 verDepReserved[4]; // 予約(バージョン依存、4バイト)
u16 wirelessSerialNo; // 無線シリアルNo
u16 softVersion:8; // ソフトバージョン
u16 compArm9BootArea:1; // ARM9ブートエリア圧縮フラグ
u16 compArm7BootArea:1; // ARM7ブートエリア圧縮フラグ
u16 :0;
BootUsrParam arm9; // ARM9ブートパラメータ
BootUsrParam arm7; // ARM7ブートパラメータ
u32 fileSysReserved[8]; // ファイルシステム予約(32バイト)
CardCnt romCtrl4Game; // ROMコントロール情報(NORMAL & GAMEモード)
CardCnt romCtrl4Secure; // (SECUREモード)
u8 romCtrlReserved_l[4]; // 予約
u16 secureCRC16; // セキュア領域CRC16bit
u16 romTimerLatency; // タイマーレイテンシ((サイクル数/256) - 2、3Dメモリ用)
u8 romReserved_h[8]; // 予約
u32 romNormalModeKey[2]; // NORMALモード判定キー
u8 reserved[64]; // 予約領域(64バイト)
u16 nintendoLogo[0x9c/2]; // NINTENDOロゴ(156バイト)
u16 ninLogoCRC16; // NINTENDOロゴCRC16
u16 headerCRC16; // ヘッダCRC16
u8 *dbgRomAddr; // デバッガモニタROMアドレス
s32 dbgRomSize; // デバッガモニタROMサイズ
u8 *dbgArm9RamAddr; // デバッガモニタARM9-RAMアドレス
u8 *dbgArm7RamAddr; // デバッガモニタARM7-RAMアドレス
} RomHeader;
// フラッシュメモリヘッダ構造体
typedef struct {
u32 macAddr_l; // MACアドレス Low
u16 macAddr_h; // High
u16 crc16; // CRC16bit
u32 blowfishKey; // BLOWFISHキー
u16 arm9RomOffset; // ARM9-フラッシュメモリオフセット
u16 arm9RamInvOffset; // ARM9-RAM負オフセット
u16 arm7RomOffset; // ARM7-フラッシュメモリオフセット
u16 arm7RamInvOffset; // ARM7-RAM負オフセット
u16 arm9RomAlign:3; // ARM9-フラッシュメモリオフセット境界
u16 arm9RamAlign:3; // ARM9-RAMオフセット境界
u16 arm7RomAlign:3; // ARM7-フラッシュメモリオフセット境界
u16 arm7RamAlign:3; // ARM7-RAMオフセット境界
u16 arm7PlaceMmem:1; // ARM7-RAMメインメモリ配置フラグ
u16 :0; // 予約3bit
u16 rsv2Byte; // 予約
u32 unScrambleKey[2]; // スクランブル解除キー(8バイト)
} FlashHeader;
// セキュアワーク構造体
typedef struct {
u8 recvRtcBuf[8]; // RTCデータ受信バッファ(要4バイト境界)
u16 flashCrc16; // フラッシュメモリCRC16
u16 flashCount; // フラッシュメモリ 8バイトカウント
u32 flashBuf[2]; // フラッシュメモリ受信バッファ(要4バイト境界)
u32 flashKeyBuf[3]; // フラッシュメモリキー・テンポラリバッファ
u32 unScrambleKey[2]; // スクランブル解除キー(8バイト、MakeBlowfishTable() で算出)
s16 isGenUnScrambleKey; // スクランブル解除キー生成完了(MakeBlowfishTable() で設定)
u32 va; // 下位24bit(24bit送信)
u32 vb; // 中間20bit(+未定義4bit、VBI: 32bit送信)
u32 vc_dummy; // 下位16bit(16bit送信)
u32 vd; // 下位24bit(24bit送信)
CardCnt cardCntBak4Secure; // SECUREコマンドパラメータ・バックアップ
s16 enableReadSecure; // SECURE領域リード・イネーブル(LoadSecure4Card() で設定)
u32 cardNormalModeKey[2]; // NORMALモード判定キー(MakeBlowfishTable() で算出)
u32 cardKeyBuf[3]; // カードキー・テンポラリバッファ
s32 secureSize; // SECURE領域サイズ
s16 sequenceNo4Secure; // シーケンス番号(SECURE用)
s16 segmentTblShift; // セグメント番号テーブルシフト値(SECURE用)
u8 *segmentTblp; // セグメントテーブルポインタ(SECURE用)
s16 numSecureSegment; // SECUREセグメント数(SECURE用)
s16 segmentOffset; // セグメントオフセット(SECURE用)
s16 blockOffset; // ブロックオフセット(SECURE用)
CardCtrlParam paramBak; // カードパラメータ 暗号化前バックアップ(SECURE用)
#ifdef TEST_HUFFMAN
u8 huffTableBuf[512]; // ハフマンテーブルバッファ
#endif
#ifdef TRACE_SECURE_OP
s16 traceSecureOp; // SECUREコマンドのトレース
s16 traceOpCount;
// カードパラメータ トレースメモリ(SECURE用)
CardCtrlParam paramTrace[64];
#endif
BLOWFISH_CTX blowfishCardTable; // カード用Blowfishテーブル
BLOWFISH_CTX blowfishFlashTable; // フラッシュメモリ用Blowfishテーブル
u8 bufEnd[4]; // セキュアワーク最終データ
} SecureWork;
// 共有ワーク構造体
typedef struct {
u32 nCardID; // NORMALカードID(LoadCardHeader() で取得)
u32 sCardID; // SECUREカードID(CardTimerIntr4Secure() で取得)
u16 cardHeaderCrc16; // カードヘッダCRC16(LoadCardHeader() で算出)
u16 cardSecureCrc16; // カードSECURE領域CRC16(LoadSecure4Card() で算出)
s16 cardHeaderError; // カードヘッダエラー(CheckCardHeader() で設定)
s16 disableEncryptedCardData;// カードSECURE領域暗号化データ無効(DecryptObjectFile() で設定)
s16 cardSequenceNo; // カード読み込みシーケンス番号
s16 enableCardNormalOnly; // カードNORMALモードのみ有効(LoadFlashDemo() で設定)
s16 isOnDebugger; // デバッガ上で動作中か
s16 rtcError; // RTCエラー
u32 recvRtc[2]; // RTCステータス1&タイマーデータ(要4バイト境界)
u8 *flashArm9RamAddr; // フラッシュメモリARM9-RAMアドレス
u8 *flashArm7RamAddr; // フラッシュメモリARM7-RAMアドレス
s16 flashArm9HeaderError; // フラッシュメモリ・ARM9ヘッダエラー
s16 flashArm7HeaderError; // ARM7ヘッダエラー
s16 flashCrcError; // フラッシュメモリCRCエラー
s16 flashReserved; // フラッシュメモリ予約領域
FlashHeader flashHeader; // フラッシュメモリヘッダ
u16 sysromCrc16; // システムROMのCRC16
} SharedWork;
//----------------------------------------------------------------------
// 共有ワーク領域のアドレス獲得
//----------------------------------------------------------------------
#define GetSharedWorkAddr() \
\
((SharedWork *)0x027ff800)
//・共有ワーク領域のアドレスを獲得します。
//・現在 2KB
//----------------------------------------------------------------------
// セキュアワーク領域のアドレス獲得
//----------------------------------------------------------------------
#if !defined(MOVE_TRACE_SECURE_BUF) && !defined(TEST_AGB_MODE)
#define GetSecureWorkAddr() \
\
((SecureWork *)0x037f8000)
#else
#define GetSecureWorkAddr() \
\
((SecureWork *)0x0380d000)
// ((SecureWork *)0x027fc000)
#endif
//・セキュアワーク領域のアドレスを獲得します。
//・現在 9KB
//----------------------------------------------------------------------
// カード割り込みワーク領域のアドレス獲得
//----------------------------------------------------------------------
#define GetCardIntrWorkAddr() \
\
((CardIntrWork *)0x0380fc00)
// ((CardIntrWork *)0x027ff880)
// ((CardIntrWork *)((u32 )GetSecureWorkAddr() + sizeof(SecureWork)))
// (&GetSharedWorkAddr()->cardIntrWork)
//・カード割り込みワーク領域のアドレスを獲得します。
//----------------------------------------------------------------------
// フラッシュメモリヘッダアドレス獲得
//----------------------------------------------------------------------
#define GetFlashHeaderAddr() \
\
(&GetSharedWorkAddr()->flashHeader)
//・フラッシュメモリヘッダのアドレスを獲得します。
//----------------------------------------------------------------------
// マスクROMヘッダアドレス獲得
//----------------------------------------------------------------------
#define GetRomHeaderAddr() \
\
((RomHeader *)ROM_HEADER_BUF)
//・マスクROMのヘッダアドレスを獲得します。
#endif // _IRIS_MON_SHARED_AREA_H