セガマークⅢで「武者アレスタ」ぽい物を作ってみた時 ~開発環境編~

別のサイトでマークⅢ用にアーケードゲームのタイトルのみ再現するというプログラムを
揚げています。短いプログラムなので手持ちのZ80クロス環境で作成できるのですが
64Kバイトまでしか作成ができません。またZ80自体にバンクの概念がないため
アセンブラもそういう対応にはなっていません。でこれを解消しようと思い立ちました。
そしてそれを試すために作られたものが「武者アレスタ」ぽい物なわけです。

広告
広告1




問題はリンカ

アセンブラでオブジェクトファイルを吐き出しリンカが結合してバイナリを吐き出します。
この最終的なバイナリが64KバイトなわけですがマークⅢのバイナリは4Mbit可能なので
せめて512Kバイトのモジュールは作れないとダメなわけです。
単純にバイナリをつなげて512Kバイトにするなら特に問題はないのですが
バンク切り替えによるプログラム実行も視野に入れなければならず
そうするとアドレスの扱いはバンクの概念も取り入れなくてはなりません。

バンクの扱いをどうするか?

アセンブラは従来のものを使用しますからオブジェクトファイルが保持するアドレスは
16bitです。これにBANK情報が必要になるのですが、まずリンカに結合するファイルを
どのように並べるかを指定するリンク情報ファイルを使用することにしました。
これは基本的にはつなげるオブジェクトファイル名を並べて書いてあるテキストファイル
ですが、バンクのアラインをサポートするようになっています。

1バンクのサイズを指定しその後にオブジェクトファイル名を記述する。
バンク番号はオブジェクトファイル名の追加ごとにインクリメントしますが
「+オブジェクトファイル名」の場合はバンクサイズを超えるまで
インクリメントしません。
「+オブジェクトファイル名」と記述すると直前に書かれたオブジェクトファイルのORGを
継承するわけです。

リンカが保持するオブジェクトファイルにはこのバンク番号が付与されて保持されます。

バンクの指定をアセンブラで書かせるために

リンクの段階でバンクを扱うことはできるようになりましたがアセンブラでバンクを、
しかもラベル名から指定できないとプログラムを作成するうえで厄介です。

このアセンブラではラベルを使用した演算は即数値化せずオブジェクトファイルの中で
逆ポーランド記法によって保持されます。これを利用して特殊な演算指定をした時だけ
指定したラベルが存在するオブジェクトファイルのバンク番号を適用するようリンカで
処理することでアセンブラでバンクを扱うことが可能になりました。

そして実際の開発へ

実際の開発題材に「武者アレスタ」を決めたわけですがこれはまた別の機会に。

広告
広告1




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

広告
広告1