32Pスロット拡張基板の第5作目です(ついに最終版?)
| 拡張コネクタベース基板 |
| 32Pコネクタ拡張基板 |
| 拡張コネクタベース基板 |
| 32Pコネクタ拡張基板 |
2019年10月26日の「FM-7でPC用のフロッピードライブを使う」で紹介しました、PC用の2DDドライブをFM-7等で使うための、FDDに直接装着するタイプのアダプタをプリント基板化しました。
簡単なものですのであえて基板化する必要もないのですが、他の基板を発注する際に、ついでにということで製作してみたものです。
製作したアダプタは下画像のようです。
| アダプタのFDD側 |
| アダプタのFDC側 |
回路は簡単すぎて、回路図を示すほどのものではありませんが、FDCからのドライブセレクト信号(0あるいは1)をピン12に入れる切り替えスイッチと、ダイオード1個によるReady信号生成回路からなっています。このダイオード1個によるReady信号生成回路は前回同様に、てきとーに。さんの「FM77AV20/40以降のFDD修理というか交換」中のダイオード1個による簡便な変換回路を使わせていただいています。感謝いたします。
![]() |
| FDD ADAPTER |
| FDDに装着した様子 |
| FDDを2台制御できます |
| 製作した基板 |
2020年7月29日の「2DDドライブ用ステップ2倍化回路のその後」で紹介しましたステップ2倍化回路ですが、ドライブ毎にそれぞれ2倍化基板が必要となるのは煩雑なので、1枚の基板でドライブ2台を制御できるように改良しました。
最初は単純に2回路を1枚の基板に収めたものを製作して使用してみましたが、これは如何にも大きすぎて、扱いにくいものでした。
| 左:従来のもの 右:最初に製作した2回路版 |
そもそも、よく考えてみるとATtiny85が2個も必要なわけではありませんでした。ということで、回路を見直した結果、現在の基板と同じサイズに収めることができました。
その回路を示します。
![]() |
| FDD2台用回路 |
| 次に製作した2台用基板 |
下画像はGOTEKをドライブ0に、PC用FDDをドライブ1に指定して、自作のFDCカードに接続した様子です。
| 使用中の様子 |
長いケーブルを使用したので、結構ゴチャゴチャに見えますね...
でも従来の基板と同じサイズのもので2台のFDDが制御できるようになったので、目的は達成できました。
【9月20日訂正】末尾に訂正が一個所あります。
発注しているプリント基板ができあがるまでハードいじりは措いておいて、いつかは直そうと思っていたソフトの修正に取り掛かりました。
まずは6809用のクロスアセンブラですが、以前、「必要に迫られて自作したアセンブラ等のツールソフトの紹介(2021年9月1日)」で紹介したもので、ASSIST09のソースをアセンブルする際にはそのままではアセンブルできず、ソースを修正する必要がありました。
例えばASSIST09のソースの1684行は
FCB 'H,$01,'H,$01,'H,$00,',,$00 --> $48,$01,$48,$01,$48,$00,$2C,$00 になって欲しい
となっていますが、この中の「',」が$2Cとならずに区切り記号と解釈されてしまうのです。ですので、アセンブルする際には「',」を$2Cと置き換えてアセンブルしていました。
ちなみに、使用者が多いと思われるアークピットさんのX6809でもこれは正常にアセンブルされません。アセンブル結果は次のようになります。
$48,$2C,$24,$30,$31,$2C,$00,$01,$48,$2C,$24,$30,$30,$2C,$00,$00
これは、X6809では1文字は「'」で囲んで「','」にしなければならないという仕様になっているからです。
私の自作アセンブラ(6809用、6800用)でも、最初はそのような仕様にしていたのですが、ASSIST09だけではなく他のソースでも後ろの「'」のない書き方が多いようなので、どちらの書き方にも対応するように変更した結果、「',,」が正常に変換されないというバグが発生していました。
もう一つの不具合も FCB疑似命令に関するもので、負数がちゃんと変換されないというもので、FCBのオペランド中での負数の処理にバグがありました。そのため、やはりアセンブル前にソースのFCBのオペランド中の-1を$FF,-2を$FEのように書き換えていました。
上記の2つの不具合はいずれもFCBのオペランド文字列の解釈に関するものでしたので、それを修正したVer1.92を作成しました。これによって「',」でも「','」のどちらでも正しく変換できるようになりました。
| Ver1.92でのアセンブル結果 |
| WARNINGが出ている |
以上で自作クロスアセンブラでASSIST09をアセンブルできるようになったのですが、実はソースそのものを何箇所か変更する必要があります。
私が以前から使用していたものは、書籍「MC6809-MC6809Eマイクロプロセッサ プログラミング マニュアル」中のソースではなくバイナリを手入力したもので、必要な個所を直接書き換えて使用していました。当時はアセンブラを所有していなかったので、ソースをアセンブルできなかったのです。
その後、ネットからソースを入手しましたが、そのソースが書籍のものと何箇所か異なっていることに気づいてはいましたが、ちゃんとソースを読んでいませんでした。
最近、ソースをアセンブルしてバイナリを得る必要があったので、書籍と見比べた結果、やはり書籍版を使用することにして、書籍版に合わせてネット版ソースを変更しました。
(私は今まで書籍版のバイナリを使い続けており、ネット版をそのままアセンブルしたものを使用したことがありませんので、動作にどんな違いがあるのかは分かりません。)
変更したのは下記の4箇所です。
1.825行からのCIDTAルーチン
2.870行からのCODTAOルーチン
3.1085行のCPX命令は6800の命令なのでCMPXに変更
4.1619行のCBKADDルーチンのDECBを変更
以前は、Direct命令に変更できる場合は常に変更したコードを生成するようにしていたのですが、これではまずい場合がありましたので現在のような仕様にしているのですが、元のソースを書き換える必要があるのは嬉しくないので、変更するかしないかを選択できるようにしたVer1.93を作成しました。プログラムソースをかなり書き換えたので、正常に動作するかどうかをテスト中です。
以前、ASSIST09に関するブログを書いた際には、もう既に移植済みのASSIST09にコマンドを追加したという内容でした。
「ASSIST09に追加したLoad, Saveコマンドを改良しました」(2018年6月27日)
「ASSIST09にLoad, Saveコマンドを追加」(2018年5月26日)
今さらとは思いますが、マイコンなどへの移植はネットでもいくつか見ますが(私も昔から自作マイコンで使用しています)、FM-7への移植はあまり見たことがないので、ここでFM-7へのASSIST09の移植の手順について書いてみたいと思います。
なお、以下の移植の手順についてはインターフェース誌1982年4月号の「ASSIST09の詳細とFM-8への移植(高橋豊)」をほとんどそのままFM-7に適用したものです。高橋豊さんに感謝いたします。
[1]最も簡単な移植(入出力にACIAを使用、領域圧縮なし、拡張ROMなし、アドレス$F800からに配置)
アセンブラが使用できればソースを変更してバイナリを生成できますので、ソースの24行、25行のACIAとPTMのアドレスを変更し、配置するアドレスを20行に書いてアセンブルするだけです。PTMが実装されていない場合はアドレスに$0000を書いておきます。
しかし、これでは2KBのASSIST09の他に6KBもの使われないエリアが生じて無駄が多くなりますし、そもそも、FM-7のようなパソコンの$F800からには移植できません...
[2]簡単な移植(入出力にACIAを使用、領域圧縮なし、拡張ROMなし、任意のアドレスに配置)
任意のアドレスに配置する場合には、20行目のROMBEG(スタートアドレス)を書き換えます。さらに[1]の設定に加えて、SWIやNMIのベクターアドレスをASSIST09用に再設定する必要があります。ベクターアドレスについては直接設定することになります。
[3]未使用領域を圧縮して移植(拡張ROMあり、他は[2]と同様)
拡張ROMを使用する場合は、それを用いて必要な再設定をすることができます。図のFM-7への配置例で示したものでは、$6800~$6FFFにASSIST09を配置し、その下に$100バイトの拡張ROMを置き、その下からがスタック/ワークエリアとしています。ソースの変更箇所はROMBEG(スタートアドレス)とRAMOFS(拡張ROMのオフセット)のみで、他は拡張ROM中で設定できます。
![]() |
| ASSIST09の配置例 |
ASSIST09は拡張を容易にするために、自身のアドレスから2KB下に$20,$FE(BRA *)があると、拡張ROMがあるとみなし、ASSIST09の起動前に$20,$FEの次のアドレスにサブルーチンジャンプすることで、ユーザの初期化プログラムなどを実行することができます。図では、2KB下ではなく$100バイト下に設定しています。
この初期化プログラム中で必要な処理を書くわけですが、最小限必要な処理は以下の2つです。
・1文字入力ルーチン、1文字出力ルーチンをFM-7のそれに置き換える。
・SWI、NMIルーチンをASSIST09用に置き換える。
SWIはASSIST09の内部でサブルーチンコールなどのために使用しています。NMIはBREAKキーでF-BASICに戻るために使います。
その他、コマンドの拡張もここで行うことができます。
拡張ROMの例を下に示します。まず最小限のものです。
私の常用機は富士通のESPRIMO D583/HXです。使い始めてもう7,8年になりますが、これを選んだのはビジネスユーザ向けということで、余計なソフトが入っていないことと、ある程度仕様を選択できることからでした。
今までに、Windows8.1を10に、メモリを4GB->8GB->12GB->16GBと増設し、500GBのHDDを500GBのSSDに交換してきましたが、いよいよディスクが窮屈になってきていました。
ちなみに、ファイルの保存等には4TBと2TBの2台のLANDISKを使用しているのですが、プログラミング時などのWorkエリアとしてSSDの200GBをDドライブとして使っていたので、Cドライブが残り少なくなってしまったということです。
そこで、現用のSSDを全てCドライブにして、Workエリア等としては、以前購入したままにしてあった3TBのHDDを使用することを考えました。
ところが何と、D583/HXのマザーボードにはSATAコネクタが2個しかないのです。これではSSDとDVDドライブの2台でおしまいです。筐体を開けてマザーボードを見ると、SATA1というパターンはありますが、コネクタが実装されていません。。。
(サブ機はHP製で、これには十分な数のSATAコネクタが実装されていたので、HDDの増設が簡単にできたのに...)
ということで、始めは画像のようなHDDスタンドを購入して使用していました。これによって、確かに簡単にHDDを増設できたのですが、使用しているとUSB3と言えども遅いのですね。(このスタンドのせいではなく、本体がUSB3.0なので仕方がないのですが...)HDDのフォルダを最初に選択した時には、最悪数秒待たされるのです。その後はまあまあ普通にアクセスできるので良いのですが、今までSSDの速度に慣れてしまっていたためか我慢ができません。
| 当初使用していたUSB3のHDDスタンド |
そんな時に、マザーボードに直接SATAコネクタを増設したという蓼科電研さんのブログを見つけました。
正に目からうろこで、これならHDDも内蔵できるし速度も上がるだろうという事で、早速部品集めにかかりました。しかし、こんなことをする人はあまりいないようで、まずSATAコネクタが見つかりません... aitendoでは扱っているようですが品切れですし、DigikeyではMolex製を扱っていますが、両端の固定ピンが平行で、マザーボードのパターンとは合っていません。また、直流カットコンデンサも蓼科電研さんのブログではパターンが小さいので、容量が22nFでサイズが1005が良いと書かれていましたが、これも手に入りにくい... 結局、何とかなるという甘い考えでMolexのコネクタ2種と、サイズ1608の22nFのコンデンサを入手しました。
左下部にSATAコネクタが2個ありますが
| D583/HXのマザーボード |
| Cも未実装 |
まずはパターンのハンダ除去作業から取り掛かります。
私のハンダ吸い取り器は十年ほど前にヤフオクで入手したHOZANのHS-800というとても古いもので、入手時から真空ポンプの吸引力が弱っていましたが、消耗部品もストックしてあるので使い続けています。(さすがに今回のマザーボードは手強かった。)
| ハンダ吸い取り器 |
両端にある固定ピン用や信号用の穴はすぐにハンダが吸い取れましたが、GND用の3つの穴のハンダはなかなか抜けず、何度も試みているうちにすぐ隣の信号用の穴がふさがってしまったりで、結局30分ほどもかかってしまいましたが、何とか吸い取ることができました。
| ハンダ吸い取り前 |
| ハンダ吸い取り後 |
| SATAコネクタを実装 |
SATAコネクタは片側の固定ピンを無理矢理曲げることで、何とか取り付けることができましたが、問題は直流カットの4個のコンデンサの取り付けでした。
基板のパターンはやはり1005用らしくてとても小さく、サイズ1608のコンデンサはとにかく大きすぎました。何とかハンダ付けしてみましたが、隣と接触してショートしてしまうのです。ということで、結局直接の取り付けは諦めて、0.32mmのポリウレタン線を10~15mmぐらいに切って1608のコンデンサにハンダ付けして、その先を基板にハンダ付けしました。画像はとても見苦しいですが、カプトンテープで絶縁してあります。
| Cを4個取り付けたが... |
以上で、無事に3つ目のSATAコネクタが使えるようになりましたので、SATA0にSSD、SATA1にHDD、SATA4にDVDを装着して、SSDを取り付けてあった位置にHDDを取り付けました。SSDはとりあえずですが、画像のようにライザーカードに空いている穴の一つを利用してねじ止めして、あとはテープで固定してみました。
(ちなみに、本来のライザーカードはPCIスロットが2個のものでしたが、当初はSATA拡張カードを利用することを考えていたのでPCIeスロットのものを入手して交換してあります。結局今回は使うことがありませんでしたが...)
| SSD取り付けの様子 |
以上ですが、マザーボードを加工してSATAコネクタを増設するという報告があまり見当たらないようですので、私の試みを紹介させていただきました。
と言いましても、何も新しいことはありませんで、殆どが蓼科電研さんのブログの後追いにすぎません。蓼科電研さんに心より感謝いたします。
強調しておきたい事は、ハンダ吸い取り器がないとマザーボードのハンダの吸い取りは絶対に無理だという事、直流カットコンデンサのハンダ付けはサイズ1005のコンデンサが必須で、しかも細いコテ先のハンダごてが必要だという事の2つです。SATAコネクタについては固定ピンがパターンと合っていないものでも、無理矢理ですがピンを曲げることで何とか取り付けることはできるようです。
万が一、同様な試みを実行してみようという方がおられましたら、最悪の場合はマザーボードを破壊してしまう可能性がある事をご承知ください。私の場合はたまたまうまく行っただけかも知れませんので。
以前、秋月電子のFT245モジュールが品切れだった時期があり、それならという事で代わりにFT245RLチップを使ったカードを試作してみたことがあります。
それについては4月2日のブログ「FT245高速通信カードの改造の試み」で紹介しましたが、その試作機は秋月のFT245モジュールの回路をそのままそっくりプリント基板に実装したものでした。しかし、USBから電源を取る必要はないなど、不要なパーツを省くことで回路を簡単化できそうでした。
製作してみると、スペースに結構余裕ができましたので、これならさらに回路を追加することができるのではないかということで、表面実装のSRAMを用いればRAMディスクの回路を入れることができるのではと思いつきました。
それまではFM-7の32PスロットにはFDCカード、FT245通信カードの2枚が刺さっていましたので、RAMディスクカードを使う際には自作の32Pスロット拡張基板を使用していました。しかしFT245通信カードと512KBのRAMディスクカードを一枚に合体させれば、FM-7本体だけで収まることになり使い勝手が向上します。
ということで製作したものが下画像のカードです。今までのFT245カードや512KB RAMディスクと同様、TTL ICには74LSを使用しています。
| 試作第1作(74LS使用) |
回路はどちらも実績があるものですので、配置に多少手間を掛けただけで完成しました。回路的には74LSだけでなく74HCも使用できるので、バッテリバックアップ機能の向上を期待して、全てのTTL ICを74HCにしたものも製作してみました。
USBコネクタとしてminiとmicroの両方を実装したのはどちらの接続ケーブルも使用できるようにするためです。上部に見えるスライドスイッチはFM-7からWindowsへの転送時にTXEフラグを読むか読まないかを切り替えるものです。(ソフトでの対応が必要です。)
実装としては、USB microコネクタの取り付けに最も苦労しました。0.65mmピッチのFT245RLチップはそれほど大変ではありませんでしたが、それよりも1.27mmピッチのHM628512の方が大変でした。ハンダの乗りがチップによって異なるようです。
| 74HCでの製作品 |
| 裏面 |
ドライブソフトはFT245通信カード用、RAMディスクカード用のそれぞれがもちろん使用できますが、両カードの開発者の「思い付きハードでソフトに七転八倒」さんが統合したものを制作されています。
「FPGAで6809を作ってOS9を動かす」というサイトを見て、同じFPGAボードを入手してNitros9を走らせようとしてみました。
目的は2つありまして、一つはOS-9互換と言われていますが、本当なのかどうかを所有しているOS-9Level1(FM-7用)とLevel2(FM77AV40用)と比較して確認してみたいことと、もう一つは普段使用している自作の6809/6802DualボードでNitros9を走らせたいので、その前準備のためということです。
入手したFPGAボードは下画像のものです。ALTERAのCyclone IIのEP2C5が載っています。他に購入したのは3.3Vで動作するSRAMのみで、あとは全て手持ちの部品で済ませました。
| 購入したFPGAカード |
| その裏面 |
基板も使いまわしなので余計な穴が開いていたりします...
3.3Vの512KB SRAMが載っていますが、もう一個載せられるようにスペースを空けてあります。
| 製作したボード |
まず最初の試みとして慣れているFLEX9を動作させる方が簡単かと思って、同じ著者の「FPGAで6809を作ってFLEXを動かすぞ」という記事の通りにインストールしてみることにしましたが、うまくいきませんでした。
コンパイルはエラー無く終了し、書き込みも一瞬で無事に終了します。コンフィグROMへの書き込みもできましたが、RAMでもROMでも動作しないのです。
FPGAに書き込んだ6809がまず動作してメッセージが表示され、続いてSDカードに書き込んだFLEX9が読み込まれて走るはずですが、画面には何も表示されません。SDカードを読みに行く気配がないので、それ以前のFPGAに書き込んだプログラムの動作がダメなようです。
一部Verilogで書かれているので、VHDLならともかくVerilogの細かいところは良く分かりません。
これはあかんということで、FLEX9ではなくOS-9の方も試みたのですが、やはり画面には何も表示されず、SDカードを読みにいく以前の段階に問題があるという状態でした。
何しろ回路が手配線なのでハードのミスがあるかもしれず、悪いのは回路なのかFPGAデータなのか、それともSDカードに書き込んだファイルなのかが全く分からず、途方に暮れるばかりでした。
そんな時に「Multicomp Cyclone II-CでCP/Mが動いた」という記事を見つけました。これも同じFPGAボードを使用しており、かつSDカードに書き込むイメージファイルも既に用意されていましたので、FPGA用のプログラムをそのままコンパイルして書き込み、さらに用意されているイメージファイルをSDカードにそのまま書き込むことで、あっさりとCP/Mが動作しました。
| Z80書き込み中 |
| CP/M3.0起動直後 |
| CP/M3.0動作中 |
この結果、ハードには問題がないことが確認できましたので、あとはFPGAに書き込むプログラムとSDカードに書き込むイメージファイルの作成という事に注力することができます。
FLEXとOS-9を走らせる記事は、こうすればできますよという手順を詳細に解説したというものではなく、分かっている人には分かるという書き方ですので、私のような素人には引っかかる個所が多すぎます。
ということで、あちこちを修正しながらコンパイルして実行することを繰り返しましたが、やはりSDカードを読みに行く前段階の、FPGAに書き込んだプログラムが動作しない状態から脱却できません...(VHDファイルのセット、コンパイル、実行の手順を数百回も繰り返したおかげで、操作手順だけは目を瞑っていても出来るぐらいになってしまいました...)
結局、ブログ中のファイルを諦めて、元々のファイルから始めることにしてGithubにある「nealcrook/multicomp6809」をダウンロードし、その中のMicrocomputerPCBフォルダ中のMicrocomputer.vhdから作成することにしました。これについても色々と試行錯誤をしましたが、何とか6809を立ち上げることができました。
これはシリアル出力に設定してコンパイルした場合の出力画面です。まずCamelForthが立ち上がり、Enterー>OK表示ー>NITROS9入力でNitros9が立ち上がり、日付の入力の後、dir /d0でドライブ0の内容が表示されています。
| シリアル出力の場合 |
こちらはビデオ出力に設定してコンパイルした場合で、PS/2キーボードから操作できます。
| ビデオ出力の場合 |
なお、シリアル出力とビデオ出力の切り替えですが、VHDファイルの該当部分を有効・無効化するだけではダメで、シリアル出力に設定した場合はブログの著者による数か所の変更が必要なようです。(元のmulticomp6809中のVHDファイルと比較すると変更部が分かります。)
SDカードに書き込むデータファイルですが、ブログに書かれていますようにLinux環境で行いましたが、書かれていますようにbin\create_sd_imageをそのまま実行してもエラーで止まってしまいますので、実行行を一行ずつ手作業で修正しながら行いました。どうも、著者はLinuxかMac環境のようで(ファイルの改行コードが0x0D,0x0Aでなく0x0Aになっていた)、それもあって私のWindows環境では難しかったのかもしれません。
蛇足ですが、FPGAは便利なものですね。コンパイルに1分程度かかりますが、その手間をかけるだけで同じボードがZ80や6809に変身するのですから。また、ROMに書き込めば電源スイッチONで即起動しますし。
しかし、一ヶ月以上の試行錯誤の結果として何とか動作したので良かったのですが、つくづく自分の知識の無さを痛感しました。未だに理解しきれていない部分が多いですし、おまけに、何故かQuartus IIの13.0sp1をLinuxにインストールできない状態が続いています。
この後は、まず手持ちのOS-9L1, L2とどの位の互換性があるのかを確認してみたいと思います。その次には、いよいよ自作のボードマイコンへのNitros9の移植に挑戦したいです。
以前からSDカードに興味がありましたが、難しそうで手を出せずにいました。昨年ですがSPIモードでセンサを読み書きしてみたところ、I2Cよりもかなり簡単だという印象を持ちました。
「6821PIAからアセンブラによるSPI通信でセンサーを制御する(2021年11月3日)」
その経験からSPIモードでのSDカードの読み書きなら割と簡単にできるのではないかと試してみることにしました。
参考にしたのは、いつもお世話になっている中日電工の菱田さんのブログの「[新連載]マイコン独立大作戦「SDカードインターフェースの製作」第1回~第32回」です。いつも貴重な情報をありがとうございます。
ということで、回路はブログ第8回の5V-3.3V変換部をそのまま使わせてもらい、元記事は82C55でコントロールしているのですが、私は6809/6802Dualマイコンに搭載している68B21を使用しました。
画像左に立ててあるのが6809/6802Dualボードで68B21からフラットケーブルで実験回路に接続しています。
| 実験回路 |
![]() |
| ブロック図 |
68B21のポートAは出力モードのままで入力もできる便利な機能を持っているので、ポートAのみで入出力を行なっています。クロックSCKは1ビット出力のCA2を利用しています。このCA2によるクロックの周波数は私のプログラムではおよそ30.7KHzでした。
5V-3.3Vインターフェースはインバータひとつで構成しているために信号が反転してしまいますのでプログラムの方で考慮します。
秋月電子のSDカードモジュールは5V電源から3.3Vを生成するようになっていますので、インターフェース回路にその3.3Vも供給しています。
プログラム作成ですが、Windows上で行いました。
Windows上のエディタ(私はEmEditorを使っています)でソースを作成し、それをWindows上で動作する自作の6809クロスアセンブラでアセンブルして、できたmotファイルを6809/6802DualボードのモニタのLコマンドで読み込んで実行します。
その手順を画像で紹介します。
エディタでプログラムリストを作成します。
| エディタで作成中 |
できたプログラムをアセンブラに放り込んでアセンブルします。
| アセンブル中 |
実行画面でLコマンドを用いてロードします。通常、このロードプログラムの画面は最初に起動するだけで操作する必要はありませんので閉じておきます。
| ロードプログラム動作中 |
実行画面です。Lコマンドで読み込み、Gコマンドで実行します。
| ロードして実行中 |
プログラムに修正の必要があれば、上記の手順を繰り返します。
実際にSDカードを読み書きできるようになるまでには結構はまってしまう個所もあり、中日電工さんのブログの他に、「えるむ by ChaN」さん、「SDカード」さんや「SDカードの操作」さんのブログなども参考にさせていただきました。ありがとうございます。
とりあえず完成したプログラムですが、SDカードとSDHCカードの両方が読み書きできるものとSDカードのみを読み書きするものの2本立てとしました。
目的としている6809/6802DualボードのFlex9に組み込むためには少しでも短いほうが良いので、SD専用とする予定ですが、折角ですのでSDHCカードも読み書きできることを確かめたという事です。
ここではSD、SDHCカード両用のプログラムのリストを紹介します。SDカード専用版との違いは初期化ルーチンとRead/Writeルーチンのセクタ番号の指定方法の違いのみで、特に初期化ルーチンはSD専用版に比べてかなり複雑です。