アフィリエイト広告を利用しています
 

2024年03月13日

Laboratoryテーマ28「マシン語でフロッピーディスクを制御したい」その@



今回は、Laboratoryテーマ28「マシン語でフロッピーディスクを制御したい」その@です。

以前にも書きましたが、私は過去作品でマシン語からフロッピーディスクを制御したことがありません。
完成品、未完成品含めすべてです。
フロッピーディスクからデータを読む必要がある時は、「3Dダンジョンロールプレイングゲーム」でやっていた通り、一旦BASICに戻っていました。
特にそれで不便を感じませんでしたし、不都合もありませんでした。

でも、やはりマシン語からBASICへ戻るには、コール内からは直接戻れないし、スタックポインタも全てクリアしないといけないなど制約が多いのも確か。
そこで、Laboratoryのテーマにあげました。

しかし、私自身知識が全くないので、あちこちのサイトやブログを探し回りましたが、フロッピーディスク制御に関して詳しく書かれたところは見つかりませんでした。
やむなく、「MSX2 TEchnical Hand Book」とにらめっこ。
今まで聞いたことのない専門用語が多く、本の解説も上級者向けの為、なかなか理解できませんでした。
それこそ「トライ&エラー」の連続でした。

そして何十回目かのトライで、これまでの努力が実り、やっと成功しました。
泣きそう…。
このロジックが「3Dダンジョンロールプレイングゲーム」や「無人島脱出アドベンチャーゲーム」で使えていれば、「BE」や「SC」、「SV」スクリプト命令がもっと簡単に組めていたかと思います。

今回はDISK-BASICから「FCB」(ファイルコントロールブロック)を利用して、ファイル名で読み書きできる方法を採用しました。
3_10_2.png
「FCB」は37バイトで、構成は下表の通り。































































0ドライブ番号
1〜8ファイル名
9〜11拡張子
12〜13カレントブロック
14〜15レコードサイズ(1〜65535)
16〜19ファイルサイズ(1〜4294967296)
20〜21日付
22〜23時刻
24デバイスID
25ディレクトリロケーション
26〜27ファイルの開始クラスタ番号
28〜29最後にアクセスしたクラスタ番号
30〜31ファイルの先頭クラスタからの相対位置
32カレントレコード
33〜36ランダムレコード

システムコールはファンクション番号をCレジスタに設定し、下表アドレスをコール











DISK-BASIC&HF37D
MSX-DOS&H0005

ファンクション番号は下表の通り。
















































































































































&H00システムリセット
&H01コンソールから 1 文字入力 (入力待ちあり、エコーバックあり、コントロールコードチェックあり)
&H02コンソールへ 1 文字出力
&H03 補助入力装置から 1 文字入力
&H04補助出力装置へ 1 文字出力
&H05プリンタへ 1 文字出力
&H06コンソールから 1 文字入力 (入力待ちなし、エコーバックなし、コントロールコードチェックなし) / 1 文字出力
&H07コンソールから 1 文字入力 (入力待ちあり、エコーバックなし、コントロールコードチェックあり)
&H08コンソールから 1 文字入力 (入力待ちあり、エコーバックなし、コントロールコードチェックあり)
&H09文字列出力
&H0A文字列入力
&H0Bコンソールからの入力チェック
&H0Cバージョン番号の獲得
&H0Dディスクリセット
&H0Eデフォルト・ドライブの選択
&H0F ファイルのオープン
&H10ファイルのクローズ
&H11ワイルドカードに一致する最初のファイルの検索
&H12ワイルドカードに一致する 2 番目以降のファイルの検索
&H13ファイルの抹消
&H14シーケンシャルなファイルの読み出し
&H15シーケンシャルなファイルの書き込み
&H16ファイルの作成
&H17ファイル名の変更
&H18ログイン・ベクトルの獲得
&H19デフォルト・ドライブ名の獲得
&H1ADMA アドレスの設定
&H1Bディスク情報の獲得
&H1C〜&H20無効
&H21ランダムなファイルの読み出し
&H22ランダムなファイルの書き込み
&H23ファイルサイズの獲得
&H24ランダムレコード・フィールドの設定
&H25無効
&H26ランダムブロック書き込み
&H27ランダムブロック読みだし
&H28ランダムなファイルの書き込み (不要部を 00H で埋める)
&H29無効
&H2Aコンソールから 1 文字入力 (入力待ちあり、エコーバックあり、コントロールコードチェックあり)
&H01日付の獲得
&H2B日付の設定
&H2C時刻の獲得
&H2D時刻の設定
&H2Eベリファイ・フラグの設定
&H2F論理セクタの読み出し
&H30論理セクタの書き込み

例えば、ファイル読込は一旦ファイル名を設定しシステムコール(&H0F)し、読込先アドレスを設定し再度システムコール(&H1A)、必要な設定を追加して三度システムコール(&H27)することで読込み出来ます。
出来てしまえば非常に単純で簡単でした。

次回、サンプル公開しますね。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/12420362
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
検索
<< 2024年06月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
広告
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
プロフィール
カテゴリーアーカイブ
ファン
QRコード