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

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

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

山内 薄

簡単だと思われていた 512KB ROM 環境のビルドがうまくいかない。
行き止まりに行き着いた感じなので、もういちど引き返して、
先人たちが構築した 256KB ROM 開発環境の解析&動作検証を試みる。

メモ


BIOS ROM は 512byte。$fe00 に配置さており、本体起動時に、
 PC = $ff80 としてスタートする。
 自分自身を $5000(RAM)に転送して、そこに jmp して、
 初期化をするらしい。
 BIOS ROM は、ROMカートリッジの決められた先頭部分に、
 カートリッジ情報があるものと期待して、
 RAM上に、ROMカートリッジの内容を読み込むようだ。


■.o ファイルのフォーマットは以下の通り

 dc.b $80,$08 ;決まり文句(10バイト先にジャンプする6502コード)
 dc.w ADDRESS ;読み込むアドレス (注:ビッグエンディアン
 dc.w SIZE ; .0 ファイルサイズ(注:ビッグエンディアン
 dc.b 'BS93' ;決まり文句(識別子)
以下、6502コード

 .o ファイルとは、Bastian Schickさんが提唱した LYNX 上での
 実行ファイル形式。本来は、以前、Bastian Schickさんが
 同人カートリッジとして用意した .o ファイルサーバカートリッジを
 LYNX 本体に挿入して起動させて、COMLYNX 端子
 (実は UART シリアル端子)と PC を RS-232C接続して、
 PC から、LYNX へ .o ファイルをアップロードするということを
 していたらしいが、Handy(LYNXエミュレータ)が、.o ファイルに
 正式対応してくれたお陰で、PC 上から手軽に .o ファイルを
 動かすことができるようになった。


■ページアクセス
 256KB ROM の場合、1ページサイズ1024バイトとなり、
 同様にアドレスアラインも 1024 バイト単位になる。
 BLL の file.inc をインクルードし、

 lda #ページ番号
 sta CurrBlock
 jsr SelectBlock

 とすれば、ページが切り替わる。
 以降、$fcb2 を読み込むと、ROM 内のデータを1バイト取り出せる。
 そして、もう一度、$fcb2 を読み込むと、次の1バイトが取り出せる。
 ただし、連続して取り出せるサイズは 65536バイトなので、
 それを跨ぐ場合は、再度ページ切り替えをしなくてはならない。
 その辺の機構は、 file.inc 内にある。

 jsr ReadByte

 を呼べば、アキュムレータに ROM 内の1バイトのデータが返ってきて、
 65536バイト以上読み込もうとすると、自動的に次の該当ページに
 切り替えてくれるようだ。
 
 ■その他の便利ルーチン

  ■リードスキップ

  読み飛ばしたいバイト数を、X と Yレジスタのペアで
   設定するが、設定方法がちょっと特殊。
  読み飛ばしたいバイト数を 16bit で NOT して、
   その値の上位8ビットを Y に
   下位8ビットを X に入れて、 ReadOver を呼び出す
  たとえば、530バイト($212バイト)スキップしたい場合は
   $0212.w の NOT は $fded.w なので、

ldx #$ed
ldy #$fd
   jsr ReadOver

   のようにする


■指定バイト数一括読み込み

   (DestPtr).w に、読込先のアドレスを保存しておいて、
   読み込みたいバイト数を、上記リードスキップと同じ方法で、
   X と Y に入れて、

  jsr ReadBytes

   する。

   (例)530バイト分を、$5000以降に格納する場合

  lda #$00
  sta DestPtr
  lda #$50
  sta DestPrt+1
  ldx #$ed
  ldy #$fd
 jsr ReadBytes