//====================================================================== // IRISモニタプログラム共有領域定義 //====================================================================== #ifndef _IRIS_MON_SHARED_AREA_H #define _IRIS_MON_SHARED_AREA_H #include "IrisSubpMonTarget.h" #include 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