■
簡単だと思われていた 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