■全ての謎を解き明かすパソコンリンク

パソコンリンクはザウルス内の全てのドライブとファイルにアクセスできる方法なのですが、ここでは具体例としてアドインのダウンロードについて説明します。

◎パソコンリンク・プロトコルに関する注意

パソコンリンク・プロトコルはザウルス内の全てのファイルを操作できる強力なもので、使い方を誤ると内部ファイルを破壊する可能性と、ゴミファイルを内部に残す可能性がありますので、通信プログラムを実際に組まれてテストする際は事前にザウルスのデータを全てバックアップする等の自衛策を取って下さい。

なお、これまでZauBASE の転送試験で無茶してますが、ザウルス本体機能そのものに損傷を与えたことはないので(全初期化すれば元に戻るということです)神経質になる必要はないと思いますが(^_^;


■パソコンリンク・プロトコルの基礎要素

パソコンリンクはコマンド(CFV,CFF,CFD,CFU,CFC,CLE)リクエスト(RFV,RFF,RFD,RFU,RFC)アンサー(AFV,AFF,AFU,AEX,DOK,ANG)という3つの要素から成り立ちます。

コマンドを送りザウルスの応答準備を指示し、リクエストでザウルス内のドライブとファイル名を指定します。

そして、実行結果はアンサーとして返されます。

■パソコンリンクでできる操作

  コマンド レスポンス リクエスト アンサー
ファイルの確認 CFV DOK (ANG) RFV AFV (ANG)
ファイル情報取得 CFF DOK (ANG) RFF AFV (ANG)
ダウンロード CFD DOK (ANG) RFD AEX (ANG)
アップロード CFU DOK (ANG) RFU AEX (ANG)
削除 CLC DOK (ANG) RFC AEX (ANG)
パソコンリンク解除 CLE DOK (ANG)    

■アドイン・ダウンロードのための手順

  1. ザウルスにアドイン機能があるかの確認
  2. 機種確認(PI4500識別)
  3. ザウルス内に同じ名前のアドインが登録されていないか?
  4. アドインファイル名の転送
  5. アドイン本体の転送
    (複数のファイルがあるときは4−5を繰り返します)
  6. パソコンリンクの解除

実際のアドイン転送処理

■CFV コマンド送信(RFV リクエストが使えるか確認)

パソコンからザウルスに"RFV"というリクエストが可能かという、"CFV"というコマンドを送信します。

"RFV"が可能なら、ザウルスからパソコンに対し"DOK"というレスポンスが返されます。

データは単方向通信で行われ、通信制御として、SOH,ACK,ENT,ENQが使われます。

方向 実データ 意味
PC→ZAU 01 <SOH>
  01 FE データブロック番号
  03 00 データ長(0003hバイト)
  43 46 56 "CFV"(コマンド)
  DF 00 チェックサム
     
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
01 <SOH>
  01 FE データブロック番号
  03 00 データ長
  44 4F 4B 文字列"DOK"
  DE 00 チェックサム
     
06 ACK
04 ENT
06 ACK
05 ENQ

■RFV リクエスト(ファイルの存在確認)<アドイン機能搭載機種か?を確認>

このRFV で、NIFADR.BOX(NIFTY 接続先)ファイルが存在するかをチェック

存在するなら、この機種はPI4500以降(アドイン搭載機種)となります。

PC-ZAU    
01 <SOH>
  01 FE データブロック番号
  14 00 データ長(0014hバイト)
  52 46 56 0A 00 00 53 31 3A 4E 49 RFV・・・S1:N
  46 41 44 52 2E 42 4F 58 00 FADR.BOX・・・
  81 04 チェックサム

◆参考:RFV におけるファイル名のフォーマット

"RFV" 0A 00 00 "S1:" "NIFADR.BOX" 00
リクエスト 取得するデータバイト数 ドライブ名 ファイル名 00固定

■RFVリクエストに対するアンサー

PC-ZAU    
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
01 <SOH>
  01 FE データブロック番号
  0D 00 データ長
  41 46 56 "AFV"
  FF 00 10 02 3F 00 00 11 00 00 ファイルの先頭から0Aバイト
  3E 02 チェックサム
     
06 ACK
04 ENT
06 ACK
05 ENQ

◆正常応答 "AFV" (そのファイルは存在する)<アドイン機能あり


■CFF コマンド送信 (RFFリクエストが使えるか)

PC→ZAU 01 <SOH>
  01 FE データブロック番号
  03 00 データ長(0003hバイト)
  43 46 46 "CFF"(コマンド)
  CF 00 チェックサム
     
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
01 <SOH>
  01 FE データブロック番号
  03 00 データ長
  44 4F 4B 文字列"DOK"
  DE 00 チェックサム
     
06 ACK
04 ENT
06 ACK
05 ENQ

◆CFF に対する応答 "DOK" は正常応答

■RFF (ファイル情報取得)<PI4500識別>

このRFF で、"S7:"という内部ドライブ(本体Bに該当)にNIFADR.BOX(NIFTY接続先)ファイルが存在するかをチェックしましす。

存在するなら、この機種はPI5000以降となります。

もし存在しないなら、この機種はPI4500で、その場合は転送できるアドインサイズのチェックが必要になります。

PC-ZAU    
01 <SOH>
  01 FE データブロック番号
  11 00 データ長(0011hバイト)
  52 46 46 53 37 3A 4E 49 46 41 44 52 RFFS7:NIFADR
  2E 42 4F 58 00 .BOX
  6D 04 チェックサム

◆RFF におけるファイル名のフォーマット

"RFF" "S1:" "NIFADR.BOX" 00
リクエスト ドライブ名 ファイル名 00固定

■AFF (ファイル情報応答)<S7:にNIFADR.BOXに関する情報があればPI5000以上>

PC-ZAU    
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
01 <SOH>
  01 FE データブロック番号
  0D 00 データ長
  41 46 46 "AFF"
  4E 49 46 41 44 52 20 20 20 42 4F 58 "NIFADR BOX"
  20 20 20 20 36 38 32 38 20 20 20 20 20 6828(サイズ)
  39 35 2D 31 30 2D 33 31 20 31 33 3A 33 32 95-10-31 13:32
  0D 0A CR + LF
  89 08 チェックサム
     
06 ACK
04 ENT
06 ACK
05 ENQ

◆AFF におけるファイル情報のフォーマット ("s" は1バイトスペース)

"AFF" ファイル名本体 空白 拡張子 空白 ファイルサイズ 空白 年月日 空白 時分 CR LF
  8文字 .1BYTE 3文字 1BYTE 7桁 5BYTE   5BYTE      
AFF NIFADR   BOX      6828   95-10-31   13:32 CR LF

■同一名アドインのチェック

RFF + "転送したいファイル名"のリクエストを実行して、もし、ファイル情報が取得できれば同名のアドインが既にザウルス内部に存在することになります。

情報が取得できない場合は、そのファイルはザウルス内部に無いことになります。

厳密に考えると、アドインを上書きで転送した場合、データファイルとの整合性が取れなくなるので、しない方が安全ですが、上書きしても問題ないよう、まずザウルス内部にある同名ファイルを削除してから転送する方法を採ることができます。

◆まずCFFでご機嫌取り

PC→ZAU 01 <SOH>
01 FE データブロック番号
  03 00 データ長(0003hバイト)
  43 46 46 "CFF"(コマンド)
  CF 00 チェックサム
     
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
01 <SOH>
  01 FE データブロック番号
  03 00 データ長
  44 4F 4B 文字列"DOK"
  DE 00 チェックサム
     
06 ACK
04 ENT
06 ACK
05 ENQ

◆ZTEST2.BAS というアドインがザウルス内に存在するか?

PC-ZAU    
01 <SOH>
  01 FE データブロック番号
  11 00 データ長(0011hバイト)
  52 46 46 53 31 3A 5A 54 45 53 54 32 2E 42 41 53 00 "RFFS1:ZTEST2.BAS"
  6C 04 チェックサム

■存在しない場合の応答 "ANG" (存在する場合は"DOK" が返る)

PC-ZAU    
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
18 <CAN>
  01 <SOH>
  01 FE データブロック番号
  06 00 データ長
  41 4E 47 53 30 32 "ANGS02"
  8B 01 チェックサム
     
04 <ENT>
05 <ENQ>
05 <ENQ>
06 <ACK>
06 <ACK>

◆ANG応答時の制御交換について(通常の制御交換に比べ特殊です)

"ANG" 等の異常応答が返る時は、制御コード<CAN(18h)>がまず、返ります。

その後、異常応答を示す"ANG" とその要因(エラーコート)が3バイトのデータとして、返されます。

PC-ZAU     対応する制御コード
04 <ENT>  
05 <ENQ> 通常のENQ
05 <ENQ> <CAN>に対する<ENQ>
06 <ACK> "ANGS02"への<ACK>
06 <ACK> <ENT>への<ACK>

プログラム組むときは応答を適切に行うか、<CAN>応答時は ACK-ENT-ACK-ENQ ではなくて、ENT:ENQ-ENQ:ACK:ACKで応答するようにすれば良いはずです。


■ファイルのダウンロード(パソコンからザウルスへ)

◆CFD コマンド(RFD が使えるか)

PC→ZAU 01 <SOH>
01 FE データブロック番号
  03 00 データ長(0003hバイト)
  43 46 44 "CFD"(コマンド)
  CD 00 チェックサム
     
06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)
     
01 <SOH>
  01 FE データブロック番号
  03 00 データ長
  44 4F 4B 文字列"DOK"
  DE 00 チェックサム
     
06 ACK
04 ENT
06 ACK
05 ENQ

■RFD (ダウンロードリクエスト)

◆RFD の場合は、まず、ファイル名を送信し、次に実際のデータ部分を転送

PC-ZAU    
01 <SOH>
  01 FE データブロック番号
  11 00 データ長(0011hバイト)
  52 46 44 53 31 3A 5A 54 45 53 54 32 2E 42 41 53 00 "RFDS1:ZTEST2.BAS"
  6A 04 チェックサム

◆RFD におけるファイル名のフォーマットは RFVと同じ

◆RFD における応答

正常にデータ転送できた場合はザウルスから<ACK>を返す。
この<ACK>を受けて次のデータブロックの送出に入る。
その際、<ACK> に対しては<ENT> ではなく、<SOH> を返すことでデータが継続していることを通知します。

06                               <ACK>          

◆次のデータブロック(ファイル本体)

01 <SOH> 継続
  02 FD ブロック番号に注目
  2D 00 データ長(2Dhバイト)
  52 46 44 FF 00 00 00 34 00 00 4B "RFD" + データ部
  00 00 00 00 00 00 00 00 00 00 0D 00 01 13 3A 27 ・・・・・・・・・・・・・・:'
  1E 10 41 42 43 44 45 46 47 61 62 63 64 65 66 67 ・・ABCDEFGabcdefg
  0D FF ・・
  AE 08 チェックサム

◆最後のブロックまで転送完了したので、ACK-ENT-ACK-ENQ交換

06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)

■AEX (ダウンロード正常終了応答)

ファイルが正しくザウルスに格納された場合"AEX"を返します。

01 <SOH>
  01 FE ブロック番号
  03 00 データ長
  41 45 58 "AEX"
  DE 00 チェックサム

◆正常終了のための、ACK-ENT-ACK-ENQ交換

06 <ACK>(正常受信)
04 <ENT>(送信完了)
06 <ACK>(正常受信)
05 <ENQ>(送信要求)

■次のファイル送信(同じパターンで送信)

アドインの場合重複ファイル名チェックはプログラム"*.BAS"だけで大丈夫です。

→SOH ブロック番号 →"CFD"    
←ACK   →ENT ←ACK →ENQ
←SOH   ←"DOK"    
→ACK   ←ENT →ACK ←ENQ
→SOH →01 FE →"RFDS1:ZTEST2.BAI"    
←ACK        
→SOH →02 FD →"データブロック1"    
←ACK        
→SOH →03 FC →"データブロック2"    
←ACK   →ENT ←ACK →ENQ
←SOH   ←"AEX"    
→ACK   ←ENT →ACK ←ENQ

■全てのファイル転送終了後、パソコンリンクを解除します。

→SOH →"CLE"    
←ACK →ENT ←ACK →ENQ
←SOH ←"DOK"    
→ACK ←ENT →ACK ←ENQ

これで、アドインのダウンロード完了、ザウルス側はザウルスリンクが解除されます。