内藤九段将棋秘伝 (FC) ROM map ============================= $C000 - RESET/IRQ割り込みルーチン $C17A - NMI待ちルーチン $C19F - BG描画ルーチン ~~~~~~~~~~~~~~~~~~~~~~ Read $E2 ptr 描画データへのポインタ $C1E5 - BG描画ルーチン下請け $C1EB - BG全体をクリアするルーチン $C20E - 入力処理ルーチン $C239 - NMI割り込みルーチン $C284- - 持時間を減らす処理 $C306 - 持時間表示用バッファを更新する処理 下請け $C313 - 時間が切れた場合の処理 $C36B - $FF==1 の場合のNMI処理 $C39A - $FF==2 の場合のNMI処理 $C3A7 - $FF==3 の場合のNMI処理 $C3D4 - $FF==4 の場合のNMI処理 $C4B9- - タイトル画面描画処理 $C66F- - BG描画用データ(タイトル画面) $C825- - 対局画面描画処理 $C85D- - BG描画用データ(対局画面) $CAC0 - 駒表示更新ルーチン?? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Read A U8 X U8 駒x座標 Y U8 駒y座標 $CDCE - 入力待ちルーチン? ~~~~~~~~~~~~~~~~~~~~~~~~~ Write P(C) bit $CE4A - カーソルを左に動かす処理 $CE76 - カーソルを右に動かす処理 $CE94 - カーソルを下に動かす処理 $CEB1 - カーソルを上に動かす処理 $D19B - 未解析ルーチン(対局終了時に A==1 で呼ばれる模様) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Read A U8 $D5C4-$D5DF - デモプレイ用入力データ(0xFF が終端) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ▲7六歩 ▲2六歩 ▲4八銀 ▲5六歩 $D621-$D629 - 玉の利きデータ $D62A-$D630 - 金の利きデータ $D631-$D636 - 銀の利きデータ $D637-$D639 - 桂の利きデータ $D63A-$D63B - 歩の利きデータ $D63C-$D640 - 竜の利きデータ $D641-$D645 - 馬の利きデータ $D646-$D665 - 駒種に対応する利きデータへのポインタ $D6A6-$D6C5 - 駒種ごとの動き方データへのポインタ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 動き方データは16Byteで、前半8Byteがベクトルx, 後半8Byteがベクトルy 空白、無効値、飛び駒については無効データへのポインタ $D6C6-$D6D5 - 空白、無効値、飛び駒の動き(無効データ) $D6D6-$D6E5 - 玉の動き $D6E6-$D6F5 - 金の動き $D6F6-$D705 - 銀の動き $D706-$D715 - 桂の動き $D716-$D725 - 歩の動き $D726-$D746 - 平手初期配置(敵陣) $D747-$D767 - 平手初期配置(空白段*3) $D768-$D788 - 平手初期配置(自陣) $D789-$D79C - 未解析ポインタテーブル(ルーチン $E7D2 参照) $D79D-$D7AE - 定跡データへのポインタ $D874-$D89A - 平手/中飛車定跡 $D89B-$D8BD - 平手/四間飛車定跡 $D8BE - 空定跡 $D8BF-$D8E7 - 3手目角交換定跡? $D8E8-$D90C - 3手目角交換+筋違い角定跡? $D90D - 空定跡 $D90E-$D930 - PLAYER飛落定跡 $D931-$D957 - PLAYER二枚落定跡 $D958-$D978 - COM飛落定跡 $D979-$D995 - COM二枚落定跡 $E382 - 盤面初期化ルーチン ~~~~~~~~~~~~~~~~~~~~~~~~~~ Read $05BD U8 手合割 $E488 - マス目インデックスを2次元座標に変換するルーチン ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Read A U8 マス目インデックス Write X U8 x座標 Y U8 y座標 $E497 - 2次元座標をマス目インデックスに変換するルーチン ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Read X U8 x座標 Y U8 y座標 Write A U8 マス目インデックス $E4B2 - 平手での戦型決定処理($86 が奇数かどうかで判定するが、常に奇数になってしまうっぽい) $E4B7 - PLAYERの指し手の合法性チェックルーチン $E527 - 駒種に応じた動き方データを $05A4-$05B3 にコピーするルーチン $E540 - PLAYERの香の移動の合法性チェック $E55A - PLAYERの成飛の移動の合法性チェック $E55F - PLAYERの飛の移動の合法性チェック $E57D - PLAYERの成角の移動の合法性チェック $E582 - PLAYERの角の移動の合法性チェック $E5A8 - PLAYERの持駒を打つ手の合法性チェック $E5FF - PLAYERの飛び駒の移動の合法性チェック 下請け $E64D - COMの指し手の合法性チェックルーチン $E6CB - COMの香の移動の合法性チェック $E6E0 - COMの成飛の動きの合法性チェック $E6E5 - COMの飛の動きの合法性チェック $E703 - COMの成角の動きの合法性チェック $E708 - COMの角の動きの合法性チェック $E72E - COMの持駒を打つ手の合法性チェック $E784 - COMの飛び駒の移動の合法性チェック 下請け $E98A - 局面コピー ~~~~~~~~~~~~~~~~~~ $02A9-$0321 を $03A9-$0421 にコピー (PLAYER駒配置) $0322-$039A を $049B-$0513 にコピー (COM駒配置) $039B-$03A8 を $058D-$059A にコピー (PLAYER/COM持駒) $E9B2 - 局面コピー ~~~~~~~~~~~~~~~~~~ $03A9-$0421 を $02A9-$0321 にコピー (PLAYER駒配置) $049B-$0513 を $0322-$039A にコピー (COM駒配置) $058D-$059A を $039B-$03A8 にコピー (PLAYER/COM持駒) $E9DA - 利き情報初期化 $E9F2 - 利き情報更新ルーチン? $EA20 - 非飛び駒 利き情報更新ルーチン? $EA80 - 香 利き更新ルーチン? $EB45 - 飛 利き更新ルーチン? $EB4D - 角 利き更新ルーチン? $EB55 - 成飛 利き更新ルーチン? $EB5D - 成角 利き更新ルーチン? $EB65-$EB84 - 駒種に対応する利き更新ルーチンへのジャンプテーブル?(ルーチン $E9F2 参照) $ECF8-$ED16 - 駒種に対応する未解析ジャンプテーブル(ルーチン $EB85 参照) $F262-$F281 - 未解析ジャンプテーブル $FB1A-$FB39 - 未解析ジャンプテーブル(ルーチン $F937 参照) $FCCB-$FCE8 - 未解析ジャンプテーブル(ルーチン $FC22 参照) $FFE0 - 入力処理ルーチン下請け(拡張ポートへの対応)