ntr_bootrom/trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h

241 lines
8.6 KiB
C
Raw Permalink 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; // 下位24bit24bit送信
u32 vb; // 中間20bit+未定義4bit、VBI: 32bit送信
u32 vc_dummy; // 下位16bit16bit送信
u32 vd; // 下位24bit24bit送信
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カードIDLoadCardHeader() で取得)
u32 sCardID; // SECUREカードIDCardTimerIntr4Secure() で取得)
u16 cardHeaderCrc16; // カードヘッダCRC16LoadCardHeader() で算出)
u16 cardSecureCrc16; // カードSECURE領域CRC16LoadSecure4Card() で算出)
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