2019年07月21日

SD6031ファームウエアコマンド一覧(2)

  SD6031/SD6031WIFで扱う事が出来るコマンド一覧です(その2)。


  本来のドライブ(PC-6031/PC-80S31等)のコマンドは 0x00〜0x7f で、SD6031/SD6031WIF で新たに追加したコマンドは0x80〜0xfe になります。

従来からのコマンドは以下の通りです。

1)書き込みコマンド群

○コマンド0x01:write data
 P6→SD6031 0x01 セクタ数 ドライブ番号 トラック番号 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x11:high speed write data
 P6→SD6031 0x11 セクタ数 ドライブ番号 トラック番号 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x83:expand write data
 P6→SD6031 0x83 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x84:expand high speed write data
 P6→SD6031 0x84 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x86:double high speed write data
 P6→SD6031 0x86 セクタ数 ドライブ番号 トラック番号 セクタ番号 書き込みデータ…書き込みデータ

○コマンド0x87:expand double high speed write data
 P6→SD6031 0x87 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号 書き込みデータ…書き込みデータ

  書き込みコマンドが複数存在するのは、

 ・一度に書き込むバイト数が、1バイト/2バイト/4バイト
 ・トラック番号の指定の仕方が、8ビット/16ビット

  の3通り×2通り=6通りの指定の方法があるためです。


  やる事は全て同じで、指定したセクタに対して、データを書き込みます。
  1セクタは256バイトですので、一度に256×セクタ数分のデータを書き込みます。

  複数のセクタにまたがって書き込む事は可能ですが、トラックはまたげません。


  またドライブ番号を 0x81 にした場合、EEPROMに書き込みが出来ます。
  この際、256バイト単位(=セクタ単位)でしか書き込みが出来ません。

  トラック番号がアドレス×256相当になります。セクタ番号は無視します。

 例:
 P6→SD6031 0x01 0x01 0x81 0x00 0x01 data...

  0x01(書き込みコマンド) 0x01(セクタ数) 0x81(ドライブ番号)
  0x00(トラック番号) 0x01(セクタ番号)

  の順なので、AVR内EEPROMのアドレス0x0000〜0x01FFに対して
 書き込みを行います。


○コマンド0x05:FORMAT
 P6→SD6031 0x05 ドライブ番号

  指定のドライブをフォーマットします。具体的には、データの部分を 0xFF で埋めます。このコマンドは通常の1D/1DD(2D)フォーマットのイメージファイルのみに使用してください。
  拡張子は、D88、DSK、P31 のみ有効です。それ以外はエラーを返します。



2)読み出しコマンド群

○コマンド0x02:read data
 P6→SD6031 0x02 セクタ数 ドライブ番号 トラック番号 セクタ番号

○コマンド0x85:expand read data
 P6→SD6031 0x85 セクタ数 ドライブ番号 トラック番号上位 下位 セクタ番号

○コマンド0x03:send data
 P6→SD6031 0x03
 SD6031→P6 読み出しデータ…読み出しデータ

○コマンド0x12:high speed send data
 P6→SD6031 0x12
 SD6031→P6 読み出しデータ…読み出しデータ

○コマンド0x88:double high speed send data
 P6→SD6031 0x88
 SD6031→P6 読み出しデータ…読み出しデータ

  書き込みコマンドと同じく、読み出しコマンドも指定方法により複数存在します。

  read data系で、ディスクからバッファにデータを読み出し、send data系でそのデータをP6側に転送します。


  また書き込みと同じく、ドライブ番号を 0x81 にした場合、EEPROMから読み出しが出来ます。


 例:
 P6→SD6031 0x02 0x02 0x81 0x00 0x01
 P6→SD6031 0x12
 SD6031→P6 data受信...

  0x02(読み出しコマンド) 0x02(セクタ数) 0x81(ドライブ番号)
  0x00(トラック番号) 0x01(セクタ番号)
  0x12(高速センド)

  の順なので、AVR内EEPROMのアドレス0x0000〜0x01FFの読み出しを行います。読み出しの際は、2バイト転送で行います。



3)ドライブの設定、状態の読み出し

○コマンド0x00:INITIALIZE
 P6→SD6031 0x00

  初期化コマンドです、SD6031/SD6031WIF ではエラーのクリアのみ行っています。


○コマンド0x06:COMMAND STATUS
 P6→SD6031 0x06
 SD6031→P6 STATUS情報(下記)

  STATUS情報は以下の通りです(1バイトのデータ)。
  bit7:常に1
  bit6: read data系を実行した後に1、send data系を実行した後に0
  bit5-1:常に0
  bit0:直前のコマンドがエラー時に1、エラーがなければ0


○コマンド0x07:DRIVE STATUS
 P6→SD6031:0x07
 SD6031→P6:STATUS情報(下記)

  STATUS情報は以下の通りです(1バイトのデータ)。
  bit7:常に0
  bit6:常に0
  bit5:常に1(ドライブ#1使用を示す)
  bit4:常に1(ドライブ#0使用を示す)
  bit3-0-1:常に1


○コマンド0x09:send memory
 P6→SD6031 0x09 開始アドレス上位 下位 終了アドレス上位 下位
 SD6031→P6 メモリ情報・・・メモリ情報

○コマンド0x0b:send memory 2
 P6→SD6031 0x0b アドレス上位 下位 バイト数上位 下位
 SD6031→P6 メモリ情報・・・メモリ情報

  フロッピードライブのROMの内容を読み出す命令です。
  BASIC-ROM から読み出される場合があるため、SD6031/SD6031WIF では、特定のアドレスを読み出した時に特定の値を返すようにしています。


○コマンド0x14:send device status
 P6→SD6031 0x14 ドライブ番号
 SD6031→P6 ST3

  メディアのステータス情報を返します。
  返す内容は以下の通り。

  bit7:常に0
  bit6:ライトプロテクト時1
  bit5:常に0
  bit4:常に0
  bit3:SDカード挿入時1
  bit2:常に0
  bit1-0:ドライブ番号(00 または 01)


○コマンド0x17:set surface mode
 P6→SD6031 0x17 設定情報

  1D/1DD(2D) の設定の変更を行います。
  bit7-2:未使用
  bit1:ドライブ#1の設定(0で1D、1で1DD/2D)
  bit0:ドライブ#0の設定(0で1D、1で1DD/2D)

  リセット直後は、すべてのドライブで1Dモードです。


○コマンド0x18:send surface mode
 P6→SD6031 0x18
 SD6031→P6 設定情報

  コマンド0x17 で設定した情報を読み出すコマンドです。


4)イメージファイル関連

○コマンド0x82:report disk image length
 P6→SD6031 0x82 ドライブ番号
 SD6031→P6 イメージファイル長×4(最上位から送信される)

  現在選択しているイメージファイルの長さを読み出します。メディアとして使用できる部分ではなく、実際のファイル長を読み出します。

  普通のP31フォーマット:0x000a0000
  普通のD88フォーマット:0x000552a0

  を返します。


○コマンド0xFD:get image file
 P6→SD6031 0xFD ドライブ番号
 SD6031→P6 

  0x01、ファイル#1のファイル名1バイト目…8バイト目、
  0x01、ファイル#2のファイル名1バイト目…8バイト目、
   :
  0x01、ファイル#nのファイル名1バイト目…8バイト目、
  0x00


  SDカードに格納されているイメージファイルで、現在指定している拡張子のファイルの一覧を取得します。イメージファイルの数分だけ、0x01+ファイル名(8バイト)の9バイトを順番に送信してきます。最後に0x00が送信されます。返してくるバイト数は、9×ファイル数+1 になります。P6側では、0x00 が受信されるまで読み出す必要があります。
  ファイル名は、拡張子を除いた8文字です。ファイル名が8文字未満の場合は、空白(0x20)で埋められます。


○コマンド0xFE:set image file
 P6→SD6031 0xFE ドライブ番号 ファイル名1バイト目…8バイト目

  指定したドライブ番号のイメージファイルを指定するファイルにします。ファイル名などは、get image file と同じです。


posted by えすび at 22:58| Comment(0) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。