投稿

ラベル(H8)が付いた投稿を表示しています

FDDエミュレーターのCRCエラーが直った

イメージ
FDDエミュレーターのCRCエラーが直った。バッファへ書き込んでから書き込み位置を更新しなきゃならないところを、書き込む前に更新していたという単純な間違いだった。 これでどこのセクタを読んでも正常に読めるようになった。 X1実機でFDDエミュレーターのイメージファイルからBASICを起動しようとすると、「RUN"Start up.Bas"」の表示まで進むようになったけど、ここで止まる。 以前は「IPL is loading ~」までしか進まなかったんだけど、イメージファイルを独自形式にしてシークが少し速くなって本物のFDDに少し近づいたようです。

H8S 2144 20MHz で SDカードのリード速度

試作FDDエミュレーター の動作を早くする為に、SDカードのアクセスに H8S 内蔵のシリアルインターフェース (SCI) を使いたくてマニュアルを良く読んだんだけど、H8S 2144 の SCI のクロック同期モードはタイミングの変更ができないのと、内部クロックでは 1バイトごとの受信ができないので、SDカードのSPIモードでのアクセスには使用できないみたい。 I/Oポート (GPIO) をソフトウェアで操作したシリアル通信でSDカードから 10240 バイト読みだした場合の速度はこんな感じ。 mount time : 22 ms 10240 byte read    1 byte block : 352 ms   29 kbyte/s  512 byte block : 107 ms   95 kbyte/s 1024 byte block : 106 ms   96 kbyte/s 2048 byte block : 103 ms   99 kbyte/s close : 0 ms 2HD のフロッピーディスクの転送速度は、クロックピットを入れると 1000kbps = 125kbyte/s なので、H8S でもハードウェアのシリアルI/Fが使えればバッファに蓄えずSDカードからデータを読んで直接 FD の READ DATA 信号を送出しても間に合いそうな感じ。 だいたい動きそうな様子になってきたので、SPIが使えるマイコンで作り直そうと思う。 その前に、使用するイメージファイルを D88 から独自形式に変更してから、なぜだか 2HD は読めるのに 2D が読めなくなってしまったので原因を調べなきゃ。

SDカードを使ったFDDエミュレーターを試作

イメージ
フロッピーディスクドライブの信号 を見てみて、フロッピーディスクドライブの互換品を自分で作れそうな気がしたので、MMC / SDカードを使ったフロッピーディスクドライブのエミュレーターを作ってみました。 回路図  H8S FDD EMULATOR20141022.pdf ソースコード  2144_FD_EMULATOR20141020.zip マイコンは H8S/2144 で、開発環境はルネサスのHEW無償版です。回路図、ソースコードはどのような用途にでも自由にお使いください。 作成途中ですが、MFMエンコードや CRCの計算は正しく動いていて、X1 turbo の OS LSX-Dodgers 上で 2D と 2HD 形式のファイルの読み取りが正常に動作しました。シークが遅いせいか IPLからの起動はまだできません。書き込みもできません。 フロッピーディスクのCRC計算や、MFMエンコードの資料はなかなか見つからないので、そのサンプル程度には役に立つんじゃないでしょうか。 今のところ、古いパソコンのエミュレータでよく使われている、D88形式のイメージファイルを使っていて、STEP信号が来るたびに D88ファイルからトラックのデータを読んで、CRCを計算して、MFMでエンコードしてバッファに書き込むという動作をしているのでシークに時間がかかっています。 クロックビットの分イメージファイルのサイズが 2倍になってしまいますが、CRCの計算とMFMのエンコードをあらかじめ済ませておいた、独自形式のイメージファイルを使って速くしたらいいんじゃないかなと考え中です。 はじめ、READ DATA 信号の生成は、タイマーで 1ビット期間 (クロックビットを入れると 2HD では 1Mbps) づつ割り込みをかけて、IOポートをソフトウェアで操作して行ってみたのですが、H8Sではまったく間に合わなかったので、SCI のクロック同期モードを使うようにしました。 クロックビットを含めると 1トラック分のバッファに 25Kバイトも必要になるので、外付けRAMのあるジャンクのマイコン基板を使ったのですが、秋月で 1個 360円の PIC32MX が SRAM を 32Kバイト内蔵しているので、これを使えば外付け部品無しで作れるかも。 ま...