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

広告

posted by fanblog

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

デフォルト・ドライブ名の獲得


&H1A

DMA アドレスの設定


&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
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: