殆ど理解していないので駄メモに近い。
恐らくは『モニタハンドリングマニュアル』という本を読めば一発で理解できることだと思うが…。
(以下メモ)
$02000番地~
(仮にROM1領域とする)$02000:特に意味を持たない(?)
値が$0FFの場合は、$04000~のROMチェックにジャンプ。
メーカーコード等とも考えたが特定できず。
$02001:
$02003:
$02005:割り込みベクトルのRST4で実行されるアドレス?
※吸出した中ではボスコニアンが$02003,$02005で指定されるアドレスの内容が「RET」となっていたようだ。
→このアドレスはどのような状況で参照されるのか要調査。
不要の場合でもボスコニアンのように、あるアドレスを設定して内容を$0C9(RET)としないと暴走してしまうようだ。
※考え方としては
$02000:ノーマルのm5本体ではありえないが(カートリッジ未実装では電源が入らない)
この値が$0FFの場合は未実装と判断し、ROM2領域のチェックへ。
他の値ならばROM1領域にデータが置かれている。
$02001:設計上では何らかの初期化ルーチンを置き、一度システムROMに戻ることを想定しているようだ。
市販のゲームでは、そのような処理は不要なので実行アドレスを置いているようだ。
$02003:$02001で指示された初期化ルーチン終了後、ここで指示されたアドレスにジャンプする事を想定しているようだ。
市販のゲームでは、$02001で指示されたアドレスから戻ってこないので意味をなさないようだが、前記のようにボスコニアンでは『RET』を置いたアドレスを格納している。
$04000番地~
(仮にROM2領域とする)$04000:$2000と同様。
※$02000,$04000とも値が$0FFの場合は、カートリッジ未実装としてテープを読みに行くようだが、実際はカートリッジを挿さないと電源が入らない。
憶測では増設スロット装着時はそれが可能の様子。(本体のACアダプタを使用せず、増設スロットから電源を供給するようだ。)
$04001:ROM2の実行アドレス。ROM1領域とは違い$04001のチェック後のジャンプアドレスはこれしか無い。
※市販のゲームカートリッジなどでは、$04000から実行するものは無いと推定する。
システムROMルーチン
既知の情報で「m5のBASIC-Gは、ゲーム作りに特化された物」とあるが、それ自体を否定するつもりは無いけれど、例えばスプライトの自動移動などのルーチンはBASIC-Gではなく、システムROMで持っているようだ。現時点では、Z88DKに『m5bios.def』という名称定義ファイル(と言うの?)があるが、何を行うルーチンなのか完全には記述されていない。
これを元に、システムROMを逆アセンブルしたものを読みながら動作を調べているが、自分のようなプログラムを殆ど組んだ事の無い人間でも、コントローラーテストプログラムのような簡単なものは作成できた。
これをMSXやSC-30000のようなZ80+TMS-9918Aの機械用にアセンブラで書けと言われても100%無理だ。
ROMルーチンの詳細が分かれば追々…。
(メモのメモ)
Z88DKの『m5bios.def』 において、ミス(?)を一つ見つける。
『MAGFY』というBASIC-Gで言うところのスプライトサイズを定義するルーチンのアドレスが、$04C5となっているが$045Cが正しいみたい。
但し、海外版と日本版のシステムROM差異によるものかも知れず。
0 件のコメント:
コメントを投稿