2023/02/06
ファミコンディスクバックアップのソフト編2
【2】BASICコード「FAMOS_RT(フェイマスリターン)」の説明(1)オリジナルのBASICコードの「FAMOS」に対しリナンバーをしないで、なるべく
当時の行番号を、そのままにしています。ただし余分になったコードは削除しました。
「拡張GETPUT」のコードは「REM」を使い残して、「FQD_RW77($3400-$35FF)」の
代替コードで差し替えています。また付け加えた行番号もあります。
(2)「行3」から「行7」までは、特にマシン語を「LOADM」して使う時の定型句的かと。
実際に概要で触れた、「FAMOS.M」、「FQD_RW90(77)」を「LOADM」してます。
(3)「行10」は重要です。「ザ・ベ」(1987年7月号)に掲載された原作者の補足として、
「フロッピーディスクのインデックスパルス(ここから始まると言う信号でしょうか)に
相当するタイミングから動作を開始する待ち時間」と説明されてます。今は何なく判ります。
この値は(QDの)読み出し時は「50〜70」に設定し、(QDに)書き込む時は「70〜80」に
設定してください。書き込む時より読み出し時の値を小さくしてください。「CRC Error」が
発生する可能性があり、当方がインターネットは始めた頃に残されていたログで対処が判らず
困っていた方がいました。リアルタイムで遭遇すれば指摘しましたが、2年前のログでした。
(4)「行20」の「EXEC&H3596」について、ファミコンディスクシステムからの割り
込みをFAMOS77(基板)ではTTLを使用して禁止してますが、この機能で割り込み禁止の
解除を行っています。オリジナルのソフトでは[START UP」で行っていましたがマシン語
で行っています。当方が、そのハード的な仕組みを理解してるか否かとなると・・・(略
(5)「行100」は「行1000」に飛んで、BASICコードで命令の受付を行います。
(6)「行900」から「行990」までは、マシン語コードを実行した後に、エラーが
あるか、ないかの確認を行っています。エラーがあった時はBASICで命令の受付をする状態に
戻ります。
(7)「行1200」から「行1500」までは、BASICコードで命令の受付け本体
(8)「行2000」から「行4310」までは、「QD => PC」の実行です。
当然、この操作前にWindows側はデータの受信状態にする必要があります。
(9)「行2200」 の「EXEC&H33E8」は QDからデレクトリ情報を取り出しています。
ID部は$3700から、各ブロックの情報は$3780からFM-7のメモリに展開します。この操作後に
「$3739」にはブロック数が記録されています。尚、このメモリイメージを「行2270」の
「EXEC&H3490」と「行2280」の 「EXEC&H3445」で「FT245」に送り出しています。
(10)「行2500」から「行4300」までは、各ブロック情報の取り出しです。
ブロック数分繰り返します。
(11)「行2700」の「EXEC&H33EC」は1個のブロック情報の取り出しです。
取り出したメモリイメージを「行3070」から「行3280」で「FT245」に送り出しています。
(12)「行2900」の意味が判り辛いですが、ブロック情報の取り出し時に
FM-7のメモリを「$6FFF」まで使い果たした時に、残りのデータを改めて裏ラムの
「$8000」から展開しますが、それを取得するための仕組みです。「FAMOS.M」でも、
その仕組みを使っています。尚、「行2950」で「 POKE&H377B,C」、
「行2960」で「POKE&H377C,B」と上位バイトと下位バイトを入れ替えてる理由は
「6502」の特徴として2バイト数値の取扱いがリットルエンディアンだからです。
(13)「行4400」から「行6720」までは、「PC => QD」の実行です。
基本的に「QD => PC」と逆の操作になります。当然、この操作の前にWindowsより
指定データをFM-7に対し送信する必要があります。
(14)「行4600」の「EXEC&H33F0」はQDメディアの「Format」です。
(15)「行4670」の「EXEC&H3490」と「行4680」の「 EXEC&H340C」で
Windowsより(FT245が仲介し)ID情報を取得し、その情報を「行4750」の
「EXEC&H33F4」でQDメディアへ書き込みを行っています。
(16)「行5300」から「行5580」までは、各ブロック情報をWindowsより
取得します。「$3739」に記録されているブロック数分を繰り返します。
(17)「行6710」の「EXEC&H33F8」は各ブロック情報をQDメディアへ書き込みを
行っています。「$3739」に記録されているブロック数分を繰り返します。
(18)「行6740」は「EXEC&H33E8」を呼び出し、QDメディアにデレクトリ情報が
記録されたかを確認してます。
(19)「行8000」からはデータ転送時にFM-側にエラーが発生すればFM-7側は送信を
停止しますが、Windows側は設定されたデータ数になるまで受信状態を継続してますので
FM-7側からダミーデータを送る機能です。Windows側で受信状態が解除されるまで
ダミーデータを送ってください。
(20)「行9000」からはデータ転送時にFM-側にエラーが発生すればFM-7側は受信を
停止しますが、Windows側は設定されたデータ数になるまで送信状態を継続してますので
FM-7側でWindowsから送られてく予定の残骸データを受信する機能です。Windows側で
送信状態が解除されるまで残骸データを受信してください。
(21)BASICコード「FAMOS_RT(フェイマスリターン)」について、質問があれば
当掲示板を利用してください。判らないことが当方も少なからずありますが判る時は
回答しますし、判らないことは「判りません」と回答しますので悪しからず。
【3】マシン語コード「FQD_RW77($3400-$35FF)」の説明
(0)ワークエリア:$3400-$340B、下の(1)から(3)の設定値が書かれます
(1)初期化1($3490):デレクトリ情報をFM-7のメモリに格納する設定値
(2)初期化2($34A0):ブロック情報をFM-7のメモリに格納する設定値
(3)初期化3($34B0):使用する裏RAM領域の設定値
(4)($346B):使用した$3800からのRAMをゼロクリアする
(5)($340C):Windowsから取得したデータをFM-7のメモリに展開
(6)($3445):FM-7にあるメモリイメージをWindowsへ送信
(7)($34C2):256バイトの転送毎にタイマーを使った待ち時間
(8)($34D6):Windowsから取得した2バイトより1バイトを合成
(9)($3596):FDSの初期化
(10)($355E):FDSの1回(ワンパス)の読み込みで1面60Kバイト前後の
データを取得しようした失敗の残骸(現在の所は成功していない)
それではまた