多くのアイテムに対応するプログラムをシステム本体へすべて組み込むのではなく、プログラムが共通化できる部分はシステム本体へ配置し、個々の対応が必要な部分を「ドライバ」としてプログラムを分離することで、最小限の変更で多くのアイテムに対応することができます。
個々のドライバのプログラムは違いますが、DMシステム2の機能的にはどれも同じような処理結果をするようドライバを製作しています。
ユーザーは個々のハード環境に合わせてドライバを組み込むことにより、DMシステム2対応のソフトを最適なマシン状態で楽しむことができます。ギガミックスは今後も責任を持って多くの周辺機器に対応し、ドライバを提供いたします。
またクリエイターは独自のノウハウの基にDMシステム2対応の各種ドライバを自作することにより、それぞれのノウハウでDMシステム2を活用することができます。ドライバの仕様書を用意しておりますので、プログラム知識があってその気があるならぜひドライバ作りにもチャレンジしてみてください。
セットアップツールは変更したいドライバをメニュー形式で簡単に登録でき、その設定でシステムを起動できます。システムを起動してからは他のソフトを実行したり、プログラミングを開始することができます。
詳しくはユーティリティーディスクについての説明をご覧ください。
ドライバのファイル名と同名の“.BIN”ファイルが存在する場合、そのドライバは“インストーラ”を実行してインストールを行います。インストーラはドライバがそのマシン環境で正常に動作できるかをチェックし、ドライバをシステムへ転送、初期化を行うマシン語プログラムです。
インストーラを実行するには、BASIC上で以下の命令を実行するだけです。
※ ドライバは通常、頻繁に差し替えたりしないため、各ソフトの初期設定プログラム(autoexec.ds2)でインストールされるべきと考えています。
インストーラを実行するには、BASIC上で以下のように入力します。
インストーラの存在するドライバを強引に手動でインストールすると、ほとんどの場合、マシンの暴走につながります。インストーラが用意されている場合は、必ずインストーラを介してインストール作業を行ってください。
この章では、DMシステム2で動作可能なドライバをユーザー自身が開発・利用するための手順を紹介します。
ドライバの先頭アドレス、実サイズ、及びコールエントリー数はドライバの形式により変わりますので、先頭からのオフセットに注意してください。また、実行結果は各種ドライバの仕様に従ってください。
※SEドライバについては基本的にドライバの差し替えを考えていないので、上記の仕様と異なります。
以下3点、よろしくお願いします。m(__)m
現状では1つのドライバに対して
仕方なくソースリストを\SOURCEへ待避させても、ファイル数がもう80を越えていますので、新規ドライバを追加したりするとファイル数が底を突くのも時間の問題です。
そこで、ファイル数を減らすべく、このような方法で問題を解決しようと思います。
というわけで、今後ドライバの配布でアーカイブを作成するときには、上記4ファイルでアーカイブをまとめていただきたく思います。
本当はイレギュラーな仕様ですけど、とりあえずスロット1で動く状態を作っておきたいです。
仕様が違うので、それぞれのアイテムに合わせてプログラムを少しずつ(あるいは大幅に)変更しなければならない部分が必ず存在します。対応するアイテムが多ければ多いほど、より多くの変更箇所を用意しなければなりません。それらをまとめてゆけば、当然、プログラムのサイズも肥大化してゆきます。
御存じの通り、MSXにはRAMが64KBしかありませんし、BASICではその半分の32KB以下でやりくりしなければなりません。いくら裏RAMが32KBあるからと言って、個々のアイテムに対応するルーチンをひたすらまとめてゆけば、そのぶんシステムに割り当てられるメモリが減ってしまい、これでは本末転倒です。
そこで、システム内部の処理をできるだけ共通化し、個々のアイテムに対応する部分だけを差し替え・変更するようにすれば、プログラムもスッキリしますし、メモリの消費量を最小限に抑えることもできるわけです。
第1章 概要
1.1 ドライバとは
MSX規格に対応した各種ハードウェアやソフトウェアをDMシステム2上で共通の動作を実現する為の、マシン語ルーチンです。
1.2 ドライバに依存する機能
DMシステム2はMSXアーキテクチャーの趣旨に同意し、多くの周辺機器に対応できるよう、可能な限りプログラムの共通化を進めました。そこで、以下のDMシステム2の機能については、ユーザーが対応機器を自由に変更できるようシステムを仕上げました。
1.3 標準装備されているドライバ
DMシステム2の出荷時は、以下のドライバが内蔵されています。
フォントドライバ
16×16: MSX標準 漢字ROM
12×12: MSX-View漢字ROMカートリッジ
デバイスドライバ
パッド+マウス
PCMドライバ
PSGPLAY
BGMドライバ
MGSDRV (DMシステム2 カスタマイズ版)
SEドライバ
GIGAMIX製 SEドライバ
第2章 ドライバのインストール方法
この章では、用意された各種ドライバを実際にDMシステム2のプログラム上で利用できるまでの手順を紹介します。
2.1 ユーティリティーディスクを利用する
DMシステム2のドライバを変更したい場合、「ユーティリティーディスク」のディスク1に梱包されているセットアップツールが便利です。
2.2 インストーラ
DMシステム2を利用したソフトを構築すると、プログラム上でドライバのインストール作業が必要な場面があるかもしれません。
BLOAD"(ドライバ名).BIN",R [return]
ただしあらかじめ、&HC000以降の領域を空けておく必要があります。
例) CLEAR 300,&HC000
インストール作業が成功すると、Okが表示されます。その後は自由にプログラミングできます。しかし、なんらかの不都合によりインストール作業が失敗すると、Device I/O Errorが出力されます。
2.3 手動でインストール
ドライバのファイル名と同名の“.BIN”ファイルが存在しない場合、そのドライバは手動でインストールする必要があります。
_LOAD ("<ドライバ名>").<転送先アドレス>) [return]
<転送先アドレス>は、ドライバの形式によって変わります。
BGMドライバ 0400h〜
SEドライバ 2800h〜
PCMドライバ 2C00h〜
フォントドライバ 16×16: 7400h〜
12×12: 7600h〜
デバイスドライバ 7800h〜
第3章 各種ドライバの作り方
DMシステム2の機能の多くは「コールエントリー」と呼ばれるドライバ内のルーチン群に依存しています。コールエントリーの仕様に基づて、ユーザーが新たな周辺機器やシステムに対応するルーチンを作ることで、よりユーザーの目的に合わせたDMシステム2を構築することが可能です。
3.1 ドライバの製作
ドライバは、主に3部で構成されています。
ヘッダは48バイトで構成されており、以下の用途で用いられます。ヘッダの次には「コールエントリーへのコール先」となる3バイトの羅列が続きます。
オフセット バイト数 用途
+ 0 40 ドライバ名称 (漢字可:空白は20hで埋める)
+40 1 EOFコード (1Ah)
+41 1 ドライバ種別番号
+42 1 ドライバ依存フラグ
+43 5 未使用
+48 3 エントリールーチン1 (JP xxxxh)
+51 3 エントリールーチン2 (JP xxxxh)
:
3.2 インストーラの製作
開発したドライバを一般公開したいのでしたら、ぜひインストーラもご用意ください。インストーラは以下の仕様を準拠したものでお願いします。
次項「ドライバの一般公開」も、ぜひお読みください。
3.3 ドライバの一般公開 (GIGAMIXスタッフ向け)
「DMシステム2 ユーティリティーディスク」の公開へ向けて、収録ファイルを編集しています。その際に浮かび上がった問題について報告し、ドライバの公開についての仕様を固めることにしました。
3.3.1 ユーティリティーディスクに登録するファイルについて
DMシステム2のユーティリティーディスクを作っていて気がついたんですが、ドライバをまとめて収録したディスクがヤバいです。
の5ファイルが存在しています。開発用バッチファイルなども合わせれば、すぐに上限112ファイルに届いてしまいます。
それにより、
…と、4ファイル(実質3ファイル)に減らせば、ファイル数上限の問題は当分先送りにできると思います。
3.3.2 ファイル名について
ドライバのファイル名は、ドライバの形式(2〜3文字)と対応機器の略称とをハイフン("-")で結び、拡張子".DRV"を付けたものにします。
形式 先頭
BGMドライバ BGM-
SEドライバ SE-
PCMドライバ PCM-
フォントドライバ FNT-
デバイスドライバ DEV-
ex.) MSX-View漢字ROMカートリッジに対応したフォントドライバ → FNT-VIEW.DRV
インストーラのファイル名は、便宜上、ドライバのファイル名8文字をそのまま継承し、拡張子を".BIN"にすることにします。
ex.) FNT-VIEW.DRVのインストーラ → FNT-VIEW.BIN
3.3.3 ドライバの動作条件について
周辺機器に対するスロット情報が必要なドライバに対して(つまりインストーラによる初期化が必要なドライバですが)、ドライバ単体(.DRV)をそのままメモリへ転送して使う際、できる限り「周辺機器がスロット1で接続されている」ことを前提にプログラミングしてください。
第4章 補足
4.1 なぜドライバ制を採用するのか
一般的に、一つのプログラムで数多くのハードやソフトへ対応するのは難しいです。対応したいそれぞれのアイテムにはそれぞれの仕様が存在し、その仕様は他のアイテムには適用できない(ことが多い)からです。