mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
241 lines
8.6 KiB
C
241 lines
8.6 KiB
C
//======================================================================
|
||
// 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
|