ゲームプログラムを作るとき、スプライトキャラクタやマップなどの配列データを使って、 スプライトコントローラデバイスの初期設定や、メモリやVRAM上に地図を展開することがあります。
この配列データは、少量であれば、.dc.b という疑似命令を使って、 ソースコード中にダンプリストとして貼り付ける方法で参照することもできますが、 一般的には、データファイルからロードする方法をとります。
今回の説明では、データファイルの内容や形式については問いません。
実用上は、グラフィックエディタや、マップ等専用エディタで作成したデータということになります。
データ作成の際は、編集領域以外に参考資料の表示や全体図と拡大図など、多くの情報を確認するほうが作業しやすいので、 X68000用の編集ソフトではなく、他のOSで動くエディタアプリケーションを工夫して使う方が便利だと思います。
ともかく、そのようにして作成したデータファイルを、開発中のプログラムがあるディレクトリもしくは、 そのサブディレクトリに、なんとかしてコピーします。
xm6g.exe+windrv.sysで環境を作っていると簡単なのですが、X68000 Zの場合、 XDFイメージにファイルを入れて、SDカード経由でコピーするなど、 少し工夫が必要になります。
自作プログラムからファイルを読み込むために、知っておくべきDOSの用語があります。
X68000には、標準で2台のフロッピーディスクドライブがあります。
開発環境を構築するようなユーザであれば、他にSCSIまたはSASIハードディスクドライブを使うと思います。
実機ユーザになると、MOディスクドライブやCD-ROMドライブなどを接続しているかもしれません。
あと、RAMディスク、SRAMディスクも使う人もいます。
Human68kでは、これらの装置ごとに(パーティッション分割していればボリュームごとに)、AからZの文字を 割り当てて区別します。
文字の割当ては任意ですが、フロッピーディスクから起動した場合は原則として、 フロッピーディスクドライブ0(左側)がAドライブ、ドライブ1(右側)がBドライブです。
ディスク上のファイルを指定するときは、ドライブ名からのファイル名(例えばA:\command.x)で 書くこともできますが、ドライブ名を省略した場合には、カレントドライブに注目します。
カレントドライブは、コマンドプロンプトで A> となっていればAドライブ、という方法でわかります。
カレントドライブを変えたい場合は、コマンドプロンプトからは B: のように入力します。
ディスク上のファイルは、使用上関連性が高いもの同士をグループ化して保存します。
このグループのことをフォルダとかディレクトリとか呼びます。
ディレクトリの中には、ファイルだけでなくディレクトリも入れることができるため、 奥まった階層にあるファイルを指定するためには、「〇〇県●●市◎◎町」の要領で ファイルが存在するディレクトリの場所を指定します。この住所形式をパス名と言います。>
パス名は、一番上の階層から完全な形で記述する「フルパス表記」の他に、
ご近所さんを示すときに、1階層上を表す記号「..」を使って「相対パス」を与えることもできます。
A> cd ..
各ドライブの、最上位階層のディレクトリをルートディレクトリと言います。 それ以外はサブディレクトリと言います。
ルートディレクトリは「¥」で表され、記録できるファイルなどの数が固定です。
カレントディレクトリは、各ドライブが現在作業しているディレクトリのことで、
cdコマンドにフルパス名または相対パス名を伴って変更することができます。
A> cd bin
読み込み時にはOPEN,READ,CLOSEの3点セットを使います。以下に例を示します。
【sampleread.s】
.include doscall.mac * _PRINT equ $ff09 * _OPEN equ $ff3d * _READ equ $ff3f * _CLOSE equ $ff3e .text start: lea filename(pc),a1 lea buffer(pc),a2 move.l #65536,d1 bsr load_file tst d0 bmi error pea success_message(pc) DOS _PRINT addq.l #4,sp DOS _EXIT error: pea error_message(pc) DOS _PRINT addq.l #4,sp rts filename: .dc.b 'FILE.DAT',0 normal_message: .dc.b '読み込み成功です。',$d,$a,0 error_message: .dc.b 'ファイルが読めませんでした。',$d,$a,0 .even *** ファイル読み込み処理 *** * in a1:ファイル名 * a2:読み込み先バッファ * d1:想定ファイルサイズ * out d0: 0=正常終了 それ以外(負数)=DOSのエラーコード laod_file: clr -(sp) * 読み込みモード pea (a1) DOS _OPEN addq.l #6,sp * 8バイト以下のスタック補正の書き方 tst d0 bmi @f * d0に負数が帰ってきたらエラー処理へ分岐 move.l d1,-(sp) * 想定サイズ pea (a2) * 読み込み先 move d0,-(sp) * d0に正数が帰ってきたらファイルハンドルとして扱う DOS _READ DOS _CLOSE lea 10(sp),sp * 8バイトを超えるスタック補正の書き方 moveq.l #0,d0 * 正常終了 @@: rts .bss buffer: .ds.b 65536
そろそろ、アセンブラで書かれたプログラムも見慣れてきたころではないでしょうか。
同様の処理を、C言語で書けばもっと短い行数で収まりますが、 アセンブラの良いところは、慣れるだけ使えるようになり、物事を覚えなくても手数で勝負 できるところじゃないかと思います。
Copyright©2026 カピバラ父さん