EXCEEDの同人ソフト開発日記という名の備忘録

趣味のゲームソフト開発人。プロなのかアマなのかは不明(不定)らしい。

任天堂のソフトはいつも予定通りに出てこないって言われるけど、
ソフト作りっていうのは、そういうもの。
ゲームソフトは、期限までにやれと言われて、徹夜したり死に物狂いでやったからといって、
期待通りのものにはならない。そういうふうにすると、
結局、チームは妥協しなければならなくなる。
妥協させられて、できたものは、粗くなってしまう。
ユーザーは目が肥えていますから、受け付けてもらえない

山内 薄

電車やバスに乗って、つい「ぼーっ」としていると、LYNX の妄想が
襲ってきて、気になりだすとキリがないので、肝となる
アドレスバス辺りの情報をいろいろ調べて途中経過を、まとめてみる。
やはり、Bastian Schickさんと、Matthias Dominさんの情報が
すべてとなる。

http://www.monlynx.de/
http://home.t-online.de/home/Matthias.Domin/lynx_eng.htm

メモ


■ページ
まず、大前提として、1ページは256バイト固定という決まりがあるらしい。
そして、ROMカートリッジの容量に応じて、ページ数(容量)が
異なるらしい。つまり、8086 にたとえると、
セグメントレジスタが8bit固定長で、
オフセットレジスタが、搭載ROM容量に依存して、
8bit(64KB ROM)〜11bit(512KB ROM)の可変長となるらしい。
たとえば、総容量 64KB の ROMカートリッジなら、
セグメントは 8bit長(固定)で、オフセットが 8bit長。
128KB の ROMカートリッジなら、セグメント 8bit長で、
オフセット 9bit長。と、なり、最大で ROM容量は
512KB(オフセット11bit長) となる。
(実は、LYNX には、ROMバンクという概念があり、
 最大で 512KB×2バンク=1024KB まで行けるが、
 今は考えないことにする。)
つまり、ROM カートリッジ容量次第で、ソフトウェアによる
ページアクセスの方法が変わってきてしまうらしい。


以下、自分しか分からない備忘録失礼。


■LYNXER.EXE
.o ファイル(いわば、MS-DOS の .comファイル)を
.LYX ファイル(ROMイメージバイナリ)に
コンバートするツール。実際には、6502 の IPL を
.o ファイルに付加するのと、任意のバイナリを
バインドする程度のことしかしない。
ただし、256KB ROM に特化したツールなので、
当然、バインドアラインメントも1024 バイト長(10bit長)固定。
512KB ROM バイナリを生成するには、LYNXER.C を
いじらないといけない。LYNXER.C にインクルードされている
ファイル「loader26.h」は、6502 のマシンコードでの
.o ファイルローダー。もちろん 256KB 特化なので、
ディスアセンブルしてパッチを当てないと、512KB まで行けない。
大体アタリ(#define BlockSize 1024 と、loader23.asm)は
つけているので、あとで試す。
あと、バッチファイルリストは、insert.o を含めて、
最大で16ファイルしか書けない仕様らしい(謎)
これが元でずいぶんとハマってしまった。

 ■バッチリストの一般的な書式
 insert.o ←おそらく、ROM IPLをクラックしたもの
 main.o  ←メインとなる実行バイナリ
 data1.bin←バインドするデータ(サイズ制限なし)
 data2.bin←バインドするデータ(サイズ制限なし)


■MAKE_LNX.EXE
.LYX ファイルを、Handy(LYNX エミュレータ)用フォーマットファイル
.LNX にコンバートする。.LNX ファイルは、.LYX ファイルに、
64バイトの Handy用ヘッダを付加したもの。
本来なら、カートリッジのピンのプルアップかなにかで、
LYNX 本体側が、カートリッジの ROM 容量を知ることが
できるのであろうが、エミュレータとなると、
そのイメージがどのような形態の ROM なのかを
ソフトウェア的に通達する必要があるため、
この付加ヘッダが存在するのだろう。
64 バイトのヘッダには、ROM 容量に対する
メモリページサイズなどが格納されている。
こちらは、LYNXERと違い、64KB〜512KB まで考慮されているので、
いじる必要はない。


とりあえず、256KB ROM のビルドは成功。
今日は、いい夢見られそうだ・・・・・