ROMアドレスのメモ
はじめに
基本的に自分用メモ。間違ってるかも。ROMのマップ
??? |
0x208117 : 距離の文字表現リスト : 384bytes6バイト(4バイト + 2バイト空白)ごとに文字列で 距離のリストを格納。1000~3600まで芝用全角,ダート用全角,芝用半角,ダート用半角で4回列挙している。
例
end: 0x208296
D1 D0 D0 D0 FF FF : 1000 13 16 10 10 FF FF : 3600 |
??? |
0x20F36E : 重量条件文字列ポインタ : 148bytes4バイトごとに重量条件コードに対応する文字列のポインタをバンク番号からのlong アドレスで格納している。
例
end: 0x20F401
62 E1 98 00 -> 実行時アドレス 98/E162 = 0x2C6162 そこには「馬齢重量」の文字が格納されている。 |
??? |
0x27F800 : ブランク : 2048bytes |
0x280000 : ライバル馬データ : 36,256bytes0x280000 - 0x28000B : 2byte表現で馬のカテゴリ分け,賞金条件の境界線 0x280000 : 0x180A = 362*17 : 362頭目 リスクフローラ 0x280002 : 0x3322 = 770*17 : 770頭目 ネオタイクーン 0x280004 : 0x5BA4 = 1380*17 : 1380頭目 ワイドトッキュウ 0x280006 : 0x869B = 2027*17 : 2027頭目 テイエムブランド 0x280008 : 0x87EF = 2047*17 : 国内馬末尾 ユキノコンコン 0x28000A : 0x8D94 = 2132*17 : 全データ末尾0x28000C - 0x288D9F : ライバル馬データ 17byte x 2132頭
byte[0]-[8] (bit6-0) :馬名(文字コード)
end: 0x288D9F
byte[1]-[8] (bit7) :馬体重, byte[8]= +256kg, byte[1]= +2kg byte[9] (bit7-5) :年齢幅? (001で+0) byte[9] (bit4-2) :基準年齢(000:3歳, 101:8歳) byte[9] (bit1-0) :性別(00:牡 01:牝 10:セン) byte[10] : 騎手コード byte[11](bit7-5) : 脚質(000:自在 001:逃げ 010:先行 011:差し 100:追込) byte[11](bit4-3) : 重馬場適正(00:△ 01:〇 10:◎) byte[11](bit2-0) : 毛色(毛色コード) byte[12] : 人気 byte[13] : スピード byte[14] : スタミナ byte[15] (bit6-0): 勝負根性 byte[15] (bit7): 父内国産フラグ byte[16] (bit7-2): 気性 (6bit数値の2倍が実値なので, 常に偶数) byte[16] (bit1-0): 条件馬の出走傾向(0:ダート, 1:短距離, 2:中距離 3:長距離) |
0x288DA0 : ブランク : 608bytes |
??? |
0x289048 : ブランク : 952bytes |
??? |
0x2894F0 : 騎手パラメータ(地方,ランク) : 240bytes騎手コード順に各1バイトで以下の情報を格納。
LLLLRRRR
end: 0x2895DF
L (bit 7-4) : 地方グループ (0x0 - 0x9) [詳細は0x293824] R (bit 3-0) : 騎手ランク (0:S 1:A 2:B 3:C 4:D 5:E 6:F(-1kg) 7:H(-2kg) 8:G(-3kg) |
0x2895E0 : 騎手パラメータ(得意戦法) : 240bytes騎手コード順に各1バイトで以下の情報を格納。
脚質(0:自在 1:逃げ 2:先行 3:差し 4:追込)
end: 0x2896CF
|
??? |
0x289850 : ブランク : 944bytes |
0x289C00 : 出走馬データ : 16910bytes各レースごとの出走馬がリストされている。0x289C00 - 0x289D83 : ポインタ部 2byte表現で後のテーブルでの各レースの区切り位置を指定。 0x289D84 : 出走馬テーブル
2byte ごとにライバル馬を指定する数値 (ライバル馬のID x 17)が格納されている。
17を掛けてあるのは0x28000Cにあるライバル馬テーブルの番地を直接参照するため? 例) 0x289D84 : 0x00AA = 170 -> ライトカラー レースごとに可変長のデータだが、区切りは0x289C00からの数値で決まっている。 例) 0x289C02 : 0x0042 = 66, 0x289C04 : 0x0068 = 104 → 2バイトずつなので、最初のレースは66/2 = 33頭, 次のレースは(104-66)/2 = 19頭 レース名コードの順に コスモス賞~凱旋門賞のオープン戦193レース分が指定されている。 区切り(ポインタ)データ : 2byte x 194 = 388 byte 出走馬データ : のべ8261頭分 16522 byte end: 0x28DE0D |
0x28DE0E : ブランク : 4594bytes |
0x28F000 : 初期レコードタイム : 1067bytesタイム2バイト, 馬名9バイトで1セット格納順 : 東京→中山→京都→阪神→福島→新潟→中京→小倉→札幌→函館 で 各競馬場について表示順の上から(芝短距離→芝長距離→ダート) end: 0x28F42A |
0x28F42B : ブランク : 981bytes |
0x28F800 : 賞金額リスト : 400bytes1着から5着までの賞金額のリストを格納している。1つあたり2バイトで(万円)単位、全部で40セット。
例) 0x24B8 = 9400 → 9400万円
end: 0x28F98F
|
0x28F990 : ブランク : 624bytes |
??? |
0x28FCF0 : ブランク : 784bytes |
0x290000 : 番組表データ : 2596bytes0x290000-0x290003 : 04 0A 18 0E 調査中0x290004-0x290A23 : 2バイトで1レース分の情報 格納順 : 1月1週1R 関東→関西→地方, 1月1週2R 関東→関西→地方 ... 1月1週9R 関東→関西→地方, 1月2週1R 関東→関西→地方 ... 該当レースなしは 0xFFFFで埋められ、1週分=54バイトになる。 凱旋門賞は10月1週地方9R相当の位置にある。 0xFFFFではないとき、以下の通り。 end: 0x290A23 |
0x290A24 : 週内レース優先順 : 1344bytesレース出走馬の確定のための計算を行う優先順を週ごとに定義している。1月1週から12月4週までの順で各28バイト。
00:関東1R 01:関西1R 02:地方1R 03:関東2R ...
例えば、7月1週分のデータは0x29CCD以下の28バイトであり17:地方8R 18:関東9R 19:関西9R FF:開催レースなし 凱旋門賞のみ 1A:地方9R相当 16 17 13 15 14 12 10 11 18 0E ... 08 最初が 16 = 関西8R = 阪急杯 (G3) 2番目 17 = 地方8R = 札幌日経オープン (OP) 最後は 08 = 地方3R = 3歳新馬 end: 0x290F63 |
??? |
0x291036 : G1優先出走/必要本賞金テーブル : 66bytes各6バイトで10レース分の定義をしている。最後の1つは空データ。それぞれ以下のように2バイト数値が3データのセットになっている。
byte[0-1] : レース名コード
例えば、4番目のデータは 48 02 78 00 08 00 の6バイトだがbyte[2-3] : 必要本賞金(10万円単位) byte[4-5] : 優先出走フラグbit 保有馬のデータ先頭+30h (7E2AA6からにデータがある馬の場合は7E2AD6)の ここで指定されたbit が1 であるときに優先出走(本賞金制限無視)になる。 0x0248 = レースコード584 -> 皐月賞 0x0078 = 120 -> 本賞金1200万円 0x0008 -> 優先出走管理bit は0x08 (下から4bit目) end: 0x291077 |
??? |
0x2910A4 : 開催競馬場テーブル : 48bytes各4バイトで1月から12月の開催競馬場を定義している。end: 0x2910D3 |
??? |
0x291187 : レース属性データ : 604bytesレース名コードの順に 各1バイトで全604レースの属性を定義している。
MMMJSSYY
end: 0x2913E2
M (bit 7-5) : 賞金クラスコード (新馬~オープン) J (bit 4) : 内国産限定フラグ( 1 = 父内国産限定) S (bit 3-2) : 性別 0:制限なし 1:牝馬限定 2:牝馬禁止(未使用?) 3:セン禁止(牡牝限定) Y (bit 1-0) : 年齢 0:3歳 1:4歳 2:5歳上 3:4歳上 |
0x2913F3 : レース重量条件 : 604bytesレース名コードの順に 各1バイトで全604レースの重量条件を定義している。数値は0~36の重量条件コードによる表現。 計算内容は0x29302Fからのテーブル, 表示内容は0x20F36Eからのテーブルに依存する。 end: 0x29163E |
??? |
0x29302F : 負担重量処理関数ポインタ : 74bytes重量条件コードごとに2バイトのデータ。その条件にて負担重量の計算を行うプログラムのポインタを示している。
例) 冒頭2バイト = EA B2 = 0xB2EA, 1つ進めて0xB2EB
なお、重量条件コード2の「牡馬57kg牝馬55kg」と牝馬戦で使われるコード3の「55kg」など→ 92/B2EB からの関数にジャンプ 表記は違うが実質同じ条件のものは同じ数値→同じ処理が行われるようになっている。 end: 0x293078 |
??? |
0x29325D : 負担重量計算用定数 : 56bytes本賞金による負担重量の計算に使う定数を3歳から9歳までに対して各4バイト数値で定義。単位は10万円。
2C 01 2C 01 90 01 F4 01 F4 01 F4 01 F4 01
なお、レース条件によっては年齢を1つシフトして(最初のデータを4歳に適用)使うこともある。→ 3000 3000 4000 5000 5000 5000 5000 end: 0x293294 |
??? |
0x293726 : 出走傾向用の距離分類 : 32bytes芝、ダートについて16byteずつ0-15の距離コードに対応する距離のレースがライバル馬の出走傾向を決める際にどのカテゴリに分類されるかを定義
00 : 芝単距離
例) 冒頭3byteが0x00なので芝の距離コード0~2 (1000m, 1200m, 1400m)が芝短距離扱いになる。04 : 芝マイル 08 : 芝中距離 0C : 芝長距離 10 : ダ短距離 14 : ダ長距離 end: 0x293745 |
0x293746 : 出走傾向テーブル : 24bytes上記の6つの各距離分類について、それぞれ4byteで00 : ダート好み 01 : 短距離好み 02 : 中距離好み 03 : 長距離好み の出走傾向が設定された馬が出走しやすくなる度合いを格納しているテーブル 例) 冒頭4byteは18 38 28 00 なので、芝単距離レースには 短距離好みの馬が出やすく(38h)、長距離好みの馬は出にくい(00h) end: 0x29375D |
0x29375E : 性別と出走条件の対応 : 16bytesレースの性別制限(0,1,2,3)に対して、性別(牡,牝,セン,未定義)が出走可能か4x4byte で表現している。 その結果 0:制限なし 1:牝馬限定 2:牝馬禁止(未使用?) 3:セン禁止(牡牝限定)となる。 end: 0x29376D |
0x29376E : 馬齢と出走条件の対応 : 28bytes3歳から9歳まで各4バイトで3歳,4歳,5歳上,4歳上のレースに出走不能な場合は0x00 出走可能な場合はオープン馬の出走優先度の数値が入る。 end: 0x293789 |
0x29378A : G1レース登録頭数テーブル : 40bytesレース名コードの順に 阪神3歳牝馬Sから凱旋門賞まで、それぞれ20レース分、各1バイト。0x29378A ~ : 最小登録頭数 0x29379E ~ : 最大登録頭数 + 1 end: 0x2937B1 |
0x2937B2 : 登録馬数 100分率テーブル : 66bytes0-5のIndexに対して、登録馬数が6~16頭になる確率のテーブル。(6 x 11 byte)0-99の乱数と比較を行うことで100分率での分岐に使用 end: 0x2937F3 |
0x2937F4 : 登録馬数インデックス : 48bytes新馬→未勝利→500万→900万→1500万→OPEN のクラス順にそれぞれ3歳→4歳→5歳上→4歳 の計24カテゴリについて各2バイトのデータ。 「5歳上新馬」、「3歳1500万」のように存在しないカテゴリ相当の場所は0x00, 0x00 で埋められている。 end: 0x293823 |
0x293824 : 騎手の地方転戦テーブル : 160bytes各騎手ごとに与えられている0~9の地方グループについて、各月に基本的にどの地方で騎乗するかを定義。各グループごとに16バイト、最初の12バイトが1~12月の地域、最後の4バイトは不使用。
0x00 : 関東
各グループのおおまかな説明0x01 : 関西 0x02 : 地方 0x3C : 短期免許 関東 0x3D : 短期免許 関西 0xFF : なし 0:常に関東 1:常に関西 2:関東or地方 3:関西or地方 4:関東,夏は地方 5:関西,夏は地方 6:ムンロ専用 7:クロップ専用 8:ロバーツ専用 9:ペリエ専用 end: 0x2938C3 |
??? |
0x293FE3 : 輸送判定テーブル: 20bytes競馬場番号の順に各2バイト。出走登録時に美浦, 栗東に居る馬の輸送条件を定義
0 : 輸送なし
1 : 当日輸送 2 : 調教済みなら当日輸送 3 : 現地入厩 end: 0x293FF6 |
0x293FF7 : 馬齢と出走条件の対応(自馬用) : 12bytes3歳から5歳上まで各4バイトで3歳,4歳,5歳上,4歳上のレースに出走不能な場合は0x04(エラーメッセージコード) 出走可能な場合は0x00の数値が入る。 end: 0x294002 |
0x294003 : 出走可能クラステーブル(自馬用) : 48bytesレースの賞金クラスコード 0(新馬)~5(オープン)に対して8バイト。所有馬の賞金クラスコードごとに出走許可になるかあるいはどのメッセージで断られるかを定義。 最後の各2バイトは不使用。
00 : クラス合致, 出走許可
FF : 格上挑戦 02 : 新馬→未勝利 (渋られるが出走は可能) 03, 04 : 出走不可 (エラーメッセージコード) end: 0x294032 |
0x294033 : 性別と出走条件の対応(自馬用) : 12bytesレースの性別制限(0,1,2,3)に対して、性別(牡,牝,セン,未定義)が出走可能か4x4byte で表現している。 その結果 0:制限なし 1:牝馬限定 2:牝馬禁止(未使用?) 3:セン禁止(牡牝限定)となる。 出走可能な場合は0x00の数値、出走不能な場合は0x05-0x07(エラーメッセージコード) end: 0x294042 |
??? |
0x2A0000 : 馬名データ : 13130bytes繁殖牝馬名, 種牡馬名, 系統名, 血統表示用の馬名が計1530個格納されている。(空白も存在する) [格納順] 繁殖牝馬 ポテトグラタン→...→サヨナラ→たぼくじょうせいさんば 種牡馬 ノーザンテースト→...→マチカネイワシミズ→持込/パス種牡馬 系統名 血統表示馬名(先祖) 基本的にアイウエオ順 0x2A0000 - 0x2A0BF7 : ポインタ部 3064byte 2byte表現で後のデータ本体部での名前の区切り位置を指定。 例: 0x2A0002 -> 0x0007, 0x2A0004 -> 0x000F なので2つ目のデータは 先頭から7バイト進んだ位置から15-7 = 8バイト分。 0x2A0BF8 - 0x2A0BFF : ブランク(0xFF) 8byte 0x2A0C00 - 0x2A3349 : データ本体部 10058byte end: 0x2A3349 |
0x2A334A : ブランク : 182bytes |
??? |
0x2AFD40 : ブランク : 704bytes |
0x2B0000 : フォントデータ(16 x 16 1BPP) : 32256bytes16x16サイズのフォントデータ。文字コード順に並んでいる。32バイト x (240 + 256*3)文字
最初の240要素が基本セット、0x10 - 0xFF相当
end: 0x2B7DFF
0x10 - 0xFB : 基本セット(英数,カナ,かな)+少数の記号と漢字 0xFC - 0xFF : 拡張セットへのエスケープ(フォントは空欄) 次の256要素が0xFCXXで表される拡張文字セット 0xFC00 - 0xFCFF : 主にレース名用の漢字 次の256要素が0xFDXXで表される拡張文字セット 0xFD00 - 0xFDFF : 主にレース名や実況用の漢字 次の256要素が0xFEXXで表される拡張文字セット 0xFE00 - 0xFEFF : 主にメッセージ用の漢字 |
0x2B7E00 : ブランク : 512bytes |
??? |
0x2BD63C : フォントデータ追加(16 x 16 1BPP) : 8192bytes16x16サイズのフォントデータ。文字コード順に並んでいる。おそらく0x2B0000 に入りきらなかった分。 32バイト x 256文字
0xFFXXで表される拡張文字セット
文字は0xFF8Eまでだが、0xFF8F以降用の領域も0x00で埋められている。0xFF00 - 0xFF8E : 主にメッセージ用の漢字 end: 0x2BF63B |
0x2BF63C : ブランク : 2500bytes |
??? |
0x2C0C22 : 番組表表示データ : 2304bytes2バイトで1レース分の情報関東/関西は各9R, 地方は各8R, 地方開催のない月の分は切り詰めで無効データのスペースはない 関東 2 x 9 x 4 x 12 = 864bytes 関西 2 x 9 x 4 x 12 = 864bytes 地方 2 x 8 x 4 x 9 = 576bytes 格納順 : 関東1月1週1R → 9R → 関東1月2週1R → ... → 関東12月4週9R → 関西1月1週1R → ... → 関西12月4週9R → 地方2月1週1R → 8R ... → 地方12月4週8R
2バイトで下位8bit→上位8bit の順に格納
end: 0x2C1521
XGGGRPPPPPDLLLLL L (bit 4-0) : 距離コード (5bitで17種類ある芝ダート兼用のもの) D (bit 5) : 左側マーク 0:なし 1:D(ダート) P (bit 10-6) : 表示Y位置(仕切り線の分も考慮された画面上の位置) R (bit 11) : レース番号が赤になる(牝馬限定) G (bit 14-12) : 右側マーク 0:なし 1:I 2:II 3:III 4:S 5:H 6:父 X (bit 15) : 未使用 |
0x2C1522 : レース名 : 5321bytes604レース分のレース名が格納されている。 604レース目は "???" なので実質603レース分。0x2C1522 - 0x2C252D : データ本体部 0x2C252E - 0x2C29E7: ポインタ部 2byte表現で前のテーブルでの各レースの区切り位置を指定。 例: 0x2C2530 -> 0x0007, 0x2C2532 -> 0x0010 なので2つ目のデータは 先頭から7バイト進んだ位置から16-7 = 9バイト分。 0x2C29E8-0x2C29EA : 最後のポインタの値(0x100C)を繰り返すように 0C 10 0C の3バイトが入っている。 おそらくは意味のないデータと思われる。 end: 0x2C29EA |
0x2C29EB : セリフデータ : 12754bytesレース中の実況や、厩舎・牧場でのコメントなどセリフのデータが格納されている。ポインタ部の長さから全部で505文が格納されているはず。 0x2C29EB - 0x2C57C8 : データ本体部
可変長の文字列で連続して格納されている。
0x2C57C9 - 0x2C5BBC: ポインタ部通常の文字コード表現だが、以下の特殊な制御がある。 0x20 : スペース 0x0F : 改行。 0x01-0x08は文字列/変数の挿入 0x01, 0x02 : 馬名の文字列 0x03, 0x04 : 数字(馬番など1~2桁のもの) 0x05 : 数字(金額など桁数多めのもの) 0x06 : その他文字列(帽子の色など) 0x07 : 騎手名の文字列 0x08 : レース名の文字列 0x09 - 0x0E : 表示タイミングにポーズを入れる? 例 : 内から<02>が<0f>先頭をうかがいますが<02>が<0f>外からかわして行きました 2byte表現で前のテーブルでの文章の区切り位置を指定。 例: 0x2C57CB -> 0x000A, 0x2C57CD -> 0x0014 なので2つ目のデータは 先頭から10バイト進んだ位置から20-10 = 10バイト分 →「さあスタートしました」 end: 0x2C5BBC |
0x2C5BBD : その他文字列 : 444bytes競馬場名、毛色などセリフ以外の主に短い文字列が格納されている。通常の文字コード表現。 可変長で要素区切りは0xFF,0xFF の2バイト
例) 東京(0xFF)(0xFF)中山(0xFF)(0xFF)...
end: 0x2C5D78
|
0x2C5D79 : 受胎状況の文字列 : 36bytes通常の文字コード表現。各9バイトで余った部分は0x00で埋められている。
空胎, 不受胎, 受胎, 不明 の4つ
end: 0x2C5D9C
|
0x2C5D9D : 帽子の色の文字列 : 64bytes通常の文字コード表現。各8バイトで余った部分は0x00で埋められている。
白い黒い赤い青い黄色のグリーンのオレンジのピンクの: 計8つ
end: 0x2C5DDC
|
0x2C5DDD : その他文字列 : 2962bytes騎手コメント,重量条件などの文字列が格納されている。通常の文字コード表現。 可変長で要素区切りは0xFF,0xFF の2バイト
「大舞台になるほど強い天才ジョッキー」
end: 0x2C696E
「馬齢重量本賞金800万毎1kg増」 といった文字列を格納 |
??? |
0x2C6A03 : 騎手名 : 1440bytes騎手名 (文字コード)
6バイト(漢字最大3文字)、騎手のID順に並んでいる。 岡部→武豊→...
計240人分 (末尾3人分は「?」という名前)end: 0x2C6FA2 |
0x2C6FA3 : その他文字列 : 466bytes厩舎名,厩舎コメント,出走条件などの文字列が格納されている。通常の文字コード表現。 可変長で要素区切りは0xFF,0xFF の2バイト
「馬に無理をさせず高勝率を誇る」
end: 0x2C7174
「5歳以上牝」 といった文字列を格納 |
0x2C7175 : 小サイズフォントデータ(8 x 8 1BPP) : 1904bytes8x8サイズのフォントデータ。
0x10 = "0"から文字コード順に並んでいる。
8バイト x 238文字16x16サイズの文字コードの基本セットとほとんど同じ。 end: 0x2C78E4 |
0x2C78E5 : ブランク : 1820bytes |
??? |