data port の分離準備

CD-DA と CD-ROM の fifo の統合は試してみたところ、 CD-DA 再生中に制御コマンドで読み込む data に CD-ROM fifo を使っているので簡単に統合できないということが判明しました. 各 command の制御を自分のファームウェア(C)のソースコードをみながらここに書くのでそれをみて対策を考えていきます.

CD-ROM2 -> 6280 の scsi data port のみの記載で seek などの disc 操作は問題に関係ないので無視します.

command 0x00, 0x0d8, 0xd9, 0xda

  • ack_wait_out() で status 1 byte 転送

command 0x03, 0xdd, 0xde

  • command 受付後, datasend_nointerrupt() で data x byte 転送
    • command 0x03 -> 10 bytes
    • command 0xdd -> 10 bytes
    • command 0xde -> command buffer offset 1 の内容で data size がかわる. 0 -> 2 bytes, 1 -> 3 bytes, 2-> 4 bytes
  • datasend_nointerrupt() 内部の ack_wait_out() 呼び出しで status 1 byte 転送

command 0x08

  • command 受付後, ハードウェアにより fifo へ書き込み.
  • 準備完了後 data 転送開始. ACK 端子のハードウェア自動制御で高速転送
  • 転送完了後 ack_wait_out() で status 1 byte 転送

各 command status 送信後共通

  • ack_wait_out() で message 1 byte を送信
  • datafifo_empty_wait(); があるけどこれいるんだっけ?
  • ack_wait_out() で 応答後 scsi bus 解放

追記分: 対応完了

  • 該当のデータは入力源はすべて単なるレジスタとして実装しなおし、これらは MCU 側でソフトウェアで ACK を見張って handshake で data を渡すことにしました.
  • これいるんだっけ?と書いた部分は ACK の同期の代わりになっていましたが潜在的なバグだったのでちゃんと ACK の同期としました.
  • この問題をなおしたら fifo の統合ができました.