2015年10月06日

ファイルシステム化

X68000版ではSDカードをSASI HDDに見えるようにコーディングしています。
PC-88版ではSDカードは一切使いません。
どちらもFDDは実FDD(AT用3.5"を想定)を使用します。
ですが、FDDをそのままDE0やDE0-CVに接続することは出来ないので
40pinコネクタからFDDケーブルに変換する作業が必要になります。
(正確にはFDD信号はオープンコレクタなのでプルアップ抵抗も必要)
変換自体は至極簡単な結線なので蛇の目のユニバーサル基板でも出来ます
(僕もユニバーサル基板です)が、それも面倒くさい人もいるでしょうし、
今更FDDも持ってない、FDメディアですら入手困難、USB-FDDではDITTが使えない
等、FDDを使わなくても良い方法も考えなくてはなりません。

えすび さんの所のP6つくろうブログ
ではSDカード上にファイルで保存されたディスクイメージをドライブ等にエミュレーションする
ようで、それをFPGA内の別のZ80で処理しているようですが、同じように
やってみたいと前から考えていました。
ですが、ファイルシステムを扱おうとするとアセンブラでファイルシステムを
書ける自信が無いのでCで書かれたFatFs 汎用FATファイルシステム モジュールとかを使おうとすると
少しZ80では荷が重そう。というよりコンパイラ自体が無いし、有ったとしても
どうやってリロケータブルにしたら良いかも良く分からないので、別のコアで何とか、
と考えていました。が、良く考えたらAlteraにはNios IIが有ります。メインCPUが
Z80で表に見えない縁の下の力持ちを32bit RISCコアにやらせるというのも少し
ちぐはぐな気もしますが、使用するリソースも少ないようなので少し勉強したいと
思います。
DE0版PC-88ではもう殆ど空きリソースが無いのでDE0-CV版PC-88と、
DE0-CV版X68000なら空きリソース的には入りそうな気がします。
SDカードスロットは1個しかないのでX68000のSASI HDDもディスクイメージ化する
事になるでしょうか。
問題は画面とキーボードで、ディスクイメージ選択に必要になると思いますが
PC-88版は以前に書いた通りテキスト画面周りは別に設計した物に
コンバータで変換してフォーマットを合わせるエミュレーション方式をとっており、
8801側から制御されるVRAMとNiosII側から制御されるVRAMの2組のVRAMを切り替えれば
簡単に選択画面は対応できると思います。
問題はX68000版で、まずキャラクタベースのテキスト画面を持っていないので
キャラクタベースのテキスト画面を用意しなくてはなりません。フォントも
boot用Flash/SDRAMにしかありませんので専用に準備が必要です。
同期信号等のタイミング生成回路だけ共有して全く別のキャラクタテキスト画面を
別に作って切り替えるのが手っ取り早いでしょうか。
キーボードはPC-88版はIOポートに見えるように変換回路内にキーボードI/Fが
組み込まれており、X68000版は受信した信号をテーブルで置き換えて
MFPのUARTアドレスの所で読み書きできるようにしていますがどちらもキーボード関連
回路の一部としてPS/2インターフェイスが組み込まれてしまっており、それを
本体CPU側とNios側で切り替えて使うというのは一筋縄にはいかないと思います。
手っ取り早い方法はキーボードを使わず、ボード上のプッシュスイッチで
ポチポチ選択する方法ですが操作性は悪そうです。
posted by プー at 20:31| Comment(4) | SDカード | 更新情報をチェックする

2015年09月15日

SDカードのブロックサイズ-2

前回、手持ちの2GB SDカードのCSDレジスタを読み出して、1024Bブロックで
アクセスするしかないかな、と考えていたところだったのですが、アクセス回路を
書いていく中で、何故かブロックサイズを1024Bに変更出来ないことが分かりました。
READ_BLK_LENとWRITE_BLK_LEN、共に0x0aですので1024Bが最大値の筈ですが、
CMD16で引数に1024を指定すると、引数異常で失敗します。
仕方がないので標準的な512でCMD16を実行すると特に問題なさそうです。
WRITE_BLK_PARTIALは0なのですが、とりあえずこの状態で512Bの書き込みを
行うと、正常に書き込まれているようです。
なんだか、良く分かりませんがブロックサイズは512B、SASI HDDのセクタサイズは
256Bのようですので同じデータを2Byteずつ書いてSASI I/Fから見ると256B/sectorだが
SDカード内は512B/blockで扱うようにし、何とかSASI HDDとして使用できる状態に
なっています。
posted by プー at 20:27| Comment(0) | SDカード | 更新情報をチェックする

2015年08月27日

SDカードのブロックサイズ

SDカードがSASIドライブに見えるように現在コーディングを始めたところです。
(X68000では?)SASI HDDのセクタサイズは256Byteのようです。
一方、SDカードのブロックサイズは512Bが標準だとインターネット上の
情報から得ていました。ただ、CMD16で自由にブロックサイズを変えられる
らしいので、CMD16で256Bに変えて、SASI HDDとセクタサイズを合わせておけば
コマンド変換のみで行けるだろうとたかをくくっていました。

ですが、メーカのSD/MMCカードのデータシート等を見ると、読み書きのブロックサイズを
CMD16で変更できるものと、出来ないものが有るようです。特に、書き込みブロックサイズは
固定な物も多いようです。
試しにSDカードのCSDレジスタを読み出す回路を作成し、読みだしてみたところ
手持の2GB MicroSDは2枚とも(同じメーカの同じ型番だったかもしれないが)
bit21 WRITE_BLK_PARTIALが'0'であり、書き込みブロックサイズは変更が
出来ないようです。bit79のREAD_BLK_PARTIALは'1'でしたので読み出しブロックサイズは
自由に変えられるようです。
同時に、bit80-83のREAD_BLK_LENとbit22-25のWRITE_BLK_LENが10(x"a")になっていることも
確認しました。つまり、ブロックサイズは512Bではなく1024Bということです。
最近、SDSC(スタンダード容量)のSDカードは殆ど目にすることが無く、SDHCばかりに
なってきており、なんとか入手できるSDSCカードも2GBの物が唯一になりつつありますが
このカードがブロックサイズ変更不可(READだけで来ても、WRITEが出来なければ意味が無い)
でブロックサイズ1024B固定となると、かなり使い方を考えさせられます。

例えば、1024Bのキャッシュを持っておいて、Read modify Writeするか、思い切って
先頭の256Bしか使わない、4Bごと同じデータを書いて1024B埋める、等。
容量はSASI HDDの時代とは比べ物にならないですので気にすることはないと思いますが
速度がもったいない気がします。
posted by プー at 12:46| Comment(4) | SDカード | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。