本将棋 内藤九段将棋秘伝 (FC) 攻略/解析

Published on: 2022-01-21

RAM マップ

概要

アドレス内容
$00-$06雑用
$07u8[11]盤面の各筋に COM の歩があるかどうか (0:false, 0xFF:true)
$12u8雑用 (候補手生成時の座標x管理用)
$13-$14(未使用)
$15u8表示用手数 一、十の位 (0..=99)
$16u8表示用手数 百の位 (10 以上になると表示が化ける)
$17-$1E雑用
$1F-$21u8[3]プレイヤー玉周辺の 3 つの筋にプレイヤーの歩があるかどうか (0:false, 0xFF:true)
$22-$29(未使用)
$2A-$2B雑用
$2C-$3Bu8[16]定跡分岐 i 個目を処理したときの手数を記録するバッファ
$3C-$53u8[24]定跡手順 i 個目を処理したときの手数を記録するバッファ
$54ptr現在の戦型に対応する定跡分岐データへのポインタ
$56ptr現在の戦型に対応する定跡手順データへのポインタ
$58-$5B雑用
$5C(未使用)
$5D-$5E雑用
$5Fu8候補手の移動元の駒 (駒打ちの場合は打つ駒)
$60-$67雑用
$68u8駒損マスの評価における取り返しフラグ (0:false, 1:true)
$69-$6F(未使用)
$70-$71雑用
$72(未使用)
$73u8時間制限 (0:なし, 1:あり(秒読み突入前), 2:あり(秒読み突入後))
$74u8持ち時間管理用フレームカウンタ (60 に達すると 1 秒減る)
$75u8持ち時間 分
$76u8持ち時間 秒
$77u8プレイヤーの手番かどうか (0:false, 1:true)
$78u8NMI ハンドラに対する持ち時間描画要求フラグ (0:false, 1:true)
$79-$7C雑用
$7D-$7E(未使用)
$7F未使用だが、スタックポインタ設定バグで参照される
$80u8デモ中かどうか (0:false, 1:true)
$81u8タイマーB(フレーム単位)の上位 Byte
$82ptrデモ入力へのポインタ
$84u8待ったのために B を押した回数
$85u8待った不可フラグ (0:false, 1:true)
$86u8タイマーA(フレーム単位)
$87雑用
$88-$8F(未使用)
$90u8APU $4015 設定用
$91-$94雑用 (サウンド関連)
$95ptr矩形波1サウンドデータへのポインタ
$97ptr三角波サウンドデータへのポインタ
$99u16leサウンド周波数タイマー値
$9Bu8APU $4000 設定用
$9Cu8APU $4001 設定用
$9Du8APU $4002 設定用
$9Eu8APU $4003 設定用
$9F-$A0(未使用)
$A1u8APU $400A 設定用
$A2u8APU $400B 設定用
$A3u8矩形波1 オクターブ数
$A4u8三角波 オクターブ数
$A5u8サウンド length counter index の最上位 bit (0..=1)
$A6u8サウンドデータから読み取った Byte
$A7-$A9雑用 (サウンド関連)
$AA-$BC(未使用)
$BD-$BF雑用
$C0-$CF(未使用)
$D0-$D3雑用
$D4-$D5(未使用)
$D6u8カーソル座標x
$D7u8カーソル座標y
$D8-$D9雑用
$DAu8ゲームへの入力 (ABSTUDLR)
$DBu8生のコントローラー入力 (ABSTUDLR)
$DC-$DE雑用
$DFu8プレイヤーが駒を掴んでいるかどうか (0:false, 1:true)
$E0-$E3雑用
$E4-$E6(未使用)
$E7-$EC雑用
$EDu8タイマーB(フレーム単位)の下位 Byte
$EE-$EF雑用
$F0u8PPU $2000 設定用
$F1u8PPU $2001 設定用
$F2u8PPU スクロールx ($2005) 設定用
$F3u8PPU スクロールy ($2005) 設定用
$F4-$F9(未使用)
$FA-$FD雑用
$FEu8手合割
$FFu8NMI タスクID (0..=4)
$0100-$017Fスタック領域
$0180-$01F8u8[121]プレイヤー側の各マスに対する attacker (存在しない場合 99)
$01F9-$0271u8[121]COM側の各マスに対する attacker (存在しない場合 99)
$0272u8候補手の最大駒得価値 (駒得マスがない場合 0)
$0273u8候補手の最大駒得マス (駒得マスがない場合 99)
$0274u8候補手の最大駒損価値 (駒損マスがない場合 0)
$0275u8候補手の最大駒損マス (駒損マスがない場合 99)
$0276u8候補手の移動先
$0277u8候補手の移動元
$0278u8候補手で捕獲する駒の価値
$0279u8候補手が成りかどうか (0:false, 1:true)
$027Au8ルート局面での プレイヤー玉位置
$027Bu8ルート局面での COM玉位置
$027Cu8候補手が駒捨てかどうか (0:false, 1:true)
$027Du8ルート局面での プレイヤー玉座標y
$027Eu8ルート局面での プレイヤー玉座標x
$027F雑用
$0280u8ルート局面の最大駒得価値 (駒得マスがない場合 0)
$0281(未使用)
$0282u8ルート局面の最大駒損価値
$0283(未使用)
$0284u8現在の最善手の移動先 (思考開始時に初期化されない)
$0285u8現在の最善手の移動元 (思考開始時に初期化されない)
$0286u8現在の最善手の最大駒得価値 (思考開始時の初期値 0)
$0287u8現在の最善手の最大駒得マス (思考開始時の初期値 99)
$0288u8現在の最善手の最大駒損価値 (思考開始時の初期値 99)
$0289u8現在の最善手の最大駒損マス (思考開始時の初期値 99)
$028Au8現在の最善手の捕獲する駒の価値 (思考開始時の初期値 0)
$028B(未使用)
$028Cu8現在の最善手が成りかどうか (0:false, 1:true) (思考開始時の初期値 0)
$028D(未使用。常に 0)
$028Eu8進行度 (0..=3)
$028F-$0292(未使用)
$0293u8候補手を指した局面におけるCOM側の成駒の個数
$0294u8候補手の移動先から ルート局面での プレイヤー玉位置への距離
$0295u8候補手を指した局面における、ルート局面での COM玉位置から距離 2 以内へのCOM利きの総和
$0296u8候補手を指した局面における、ルート局面での COM玉位置から距離 2 以内へのプレイヤー利きの総和
$0297u8候補手を指した局面におけるCOM側の離れ駒の個数
$0298u8候補手の移動元(駒打ちの場合は移動先)から ルート局面での COM玉位置への距離
$0299u8候補手を指した局面における、ルート局面での プレイヤー玉位置から距離 2 以内へのCOM利きの総和
$029Au8現在の最善手を指した局面におけるCOM側の成駒の個数 (思考開始時の初期値 0)
$029Bu8現在の最善手の移動先から ルート局面での プレイヤー玉位置への距離 (思考開始時の初期値 99)
$029Cu8現在の最善手を指した局面における、ルート局面での COM玉位置から距離 2 以内へのCOM利きの総和 (思考開始時の初期値 0)
$029Du8現在の最善手を指した局面における、ルート局面での COM玉位置から距離 2 以内へのプレイヤー利きの総和 (思考開始時の初期値 99)
$029Eu8現在の最善手を指した局面におけるCOM側の離れ駒の個数 (思考開始時の初期値 99)
$029Fu8現在の最善手の移動元(駒打ちの場合は移動先)から ルート局面での COM玉位置への距離 (思考開始時の初期値 0)
$02A0u8現在の最善手を指した局面における、ルート局面での プレイヤー玉位置から距離 2 以内へのCOM利きの総和 (思考開始時の初期値 0)
$02A1雑用
$02A2u8ルート局面での COM玉座標y
$02A3u8ルート局面での COM玉座標x
$02A4u8候補手を指した局面における総駒得価値
$02A5(未使用。ルート局面の総駒得価値)
$02A6u8最善手を指した局面における総駒得価値 (思考開始時の初期値 0)
$02A7-$02A8雑用
$02A9-$0321u8[121]盤面A プレイヤー側
$0322-$039Au8[121]盤面A COM側
$039B-$03A1u8[7]手駒A プレイヤー側
$03A2-$03A8u8[7]手駒A COM側
$03A9-$0421u8[121]盤面B プレイヤー側
$0422-$049Au8[121]各マスの利き数 プレイヤー側
$049B-$0513u8[121]盤面B COM側
$0514-$058Cu8[121]各マスの利き数 COM側
$058D-$0593u8[7]手駒B プレイヤー側
$0594-$059Au8[7]手駒B COM側
$059Bu8プレイヤーの指し手の移動先座標x
$059Cu8プレイヤーの指し手の移動元座標x
$059Du8プレイヤーの指し手の座標x差分
$059Eu8プレイヤーの指し手の移動先座標y
$059Fu8プレイヤーの指し手の移動元座標y
$05A0u8プレイヤーの指し手の座標y差分
$05A1u8プレイヤーの指し手の移動先
$05A2u8プレイヤーの指し手の移動元
$05A3(未使用。write-only)
$05A4-$05B3雑用 (近接駒の利きデータがロードされる)
$05B4u8指し手が違法であるか、または却下されたことを表すフラグ (0:false, 1:true)
$05B5u8COMの指し手の移動先座標x
$05B6u8COMの指し手の移動元座標x
$05B7u8COMの指し手の座標x差分
$05B8u8COMの指し手の移動先座標y
$05B9u8COMの指し手の移動元座標y
$05BAu8COMの指し手の座標y差分
$05BBu8COMの指し手の移動先
$05BCu8COMの指し手の移動元
$05BDu8手合割 コピー
$05BEu8戦型
$05BFu8プレイヤーの指し手が成りかどうか (0:false, 1:true)
$05C0u8COMの指し手が成りかどうか (0:false, 1:true)
$05C1u8進行度管理用手数 (0 始まり。上限 100)
$05C2-$05C7雑用
$05C8u8サブ進行度 (0..=5)
$05C9-$05D9雑用
$05DA(未使用。write-only)
$05DB(未使用)
$05DCu8プレイヤー玉の詰み判定における不詰フラグ (0:false, 1:true)
$05DDu8プレイヤー玉の詰みフラグ (0:false, 1:true)
$05DE(未使用。プレイヤー側の駒捨てに関係するが、実際は思考結果に影響しない)
$05DFu8候補手を指した局面におけるプレイヤー側の垂れ歩/垂れ香存在フラグ (0:false, 1:true)
$05E0u8候補手を指した局面における総駒損価値
$05E1(未使用。ルート局面の総駒損価値)
$05E2u8現在の最善手を指した局面における総駒損価値 (思考開始時の初期値 99)
$05E3(未使用。候補手が大駒の成りかどうかのフラグ)
$05E4u8ルート局面のCOM側 power (8*(持飛+持角+成駒) + 4*(持金+持銀) + 2*(持桂+持香) + 1*(持歩) + (手数補正))
$05E5u8候補手を指した局面における、ルート局面での COM玉位置からちょうど距離 1 で、(プレイヤー利き) >= (COM利き) なるマスの個数
$05E6(未使用。最善手を指した局面における、ルート局面での COM玉位置からちょうど距離 1 で、(プレイヤー利き) >= (COM利き) なるマスの個数)
$05E7u8ルート局面のプレイヤー側 power (8*(持飛+持角+成駒) + 4*(持金+持銀) + 2*(持桂+持香) + 1*(持歩) + (手数補正))
$05E8u8候補手を指した局面におけるプレイヤー側の成駒の個数
$05E9(未使用。最善手を指した局面におけるプレイヤー側の成駒の個数)
$05EAu8ルート局面のCOM側の 持飛+持角+成駒
$05EBu8候補手を指した局面における、ルート局面での COM玉位置からちょうど距離 1 へのプレイヤー利きの総和
$05EC-$05FF(未使用)
$0600-$061Fu8[32]パレット
$0620-$06FF動的なBGデータ用バッファ
$0700-$07FFSprite[64]スプライトバッファ

手合割

内容
1プレイヤー先手
2プレイヤー飛車落ち
3プレイヤー二枚落ち
4COM先手
5COM飛車落ち
6COM二枚落ち

戦型

内容
0中飛車
1四間飛車
2(無効値)
3角換わり
4筋違い角
5(無効値)
6プレイヤー飛車落ち
7プレイヤー二枚落ち
8COM飛車落ち
9COM二枚落ち
99なし (定跡を抜けた後)