FM-TOWNSのメモリカードスロット
- FM-TOWNSに標準搭載のメモリカードスロットは、実はPCMCIAのカードスロットです。一般的なコントローラを介さず、すごく簡単な方法でアクセスできます。
- ただしリセット信号を制御できないので、リセットが必要なデバイス(Kが使用している4in1タイプのメモリカードアダプタなど)は、制御できません。
- ついでにいうと電源も切れないので省エネじゃない・・・TOWNSそのものが省エネじゃないから、これは問題じゃないかも。
- しかし世の中にはリセットが不要な4in1アダプタもあります(あのCF1へ変換するCF4IN1がそうです:詳しくは→CardAdapter)。
- 動作確認:HRと初代Freshにて、以下の方法でCompactFlashのアクセスに成功(OSASK/TOWNS ver.3.9)。その後CF4IN1での、メモリースティックDuoやSDカードのアクセスにも成功。
- そのほかの動作報告(OSASK/TOWNS ver.3.9にてCompactFlashのアクセスに成功した機種):SA(=MAの教育機関向け)、FreshES。
初代モデル1~80H
- 規格が古すぎて、属性メモリ空間にはアクセスできません。コモンメモリ空間のみアクセスできます。
- 物理アドレス0xc0000000~0xc0ffffffの16MBにコモンメモリ空間がマップされています。
- おそらく当時の規格ではコモンメモリ空間しかなくて、しかもそれは最大で16MBだったのでしょう。
- I/Oアドレス0x48aは8bitレジスタで、ここをリードするとメモリカードのステータスが読めます。
- bit0:ライトプロテクト:1でライトプロテクトがかかっていることを示す。
- bit1-2:カードディテクト
- 0:カードあり
- 1:接続不良
- 2:接続不良
- 3:カードなし
- bit3:(READY):EEPROMのメモリカード以外関係なし
- bit4:Yellow:1=バックアップ電池の要交換
- bit5:Red:1=バックアップ電池が死んでいる
- bit6:不定
- bit7:Change
- カードの抜き差しをすると1になる。1を読み出すと自動的に0クリアされる。
- ライトは禁止です。
CX10以降の非386SX機
- JEIDA ver.4に対応。
- 属性メモリ空間にアクセス可能になりました。
- アドレス空間も64MBに拡張されました。
- I/Oアドレス0x490は8bitレジスタで、ここで物理アドレス0xc1000000~0xc1ffffffの16MBのアドレス空間のバンク切り替えをします(旧空間の物理アドレス0xc0000000~0xc0ffffffの16MBは切り替わりません)。
- bit5-4が有効で、ここに0~3の値を書いてバンク切り替えをします。
- 0: 0-16MB
- 1:16-32MB
- 2:32-48MB
- 3:48-64MB
- 他のビットはリードでは不定、ライトでは0固定です。
- I/Oアドレス0x491は8bitレジスタで、ここで属性メモリ空間・コモンメモリ空間の切り替えを指定します。
- bit0がその指定ビットで、0のときはコモンメモリ、1のときは属性メモリです。
- bit7は接続されているカードがJEIDA ver.4以降の規格に対応している場合に、0になります。対応していない場合は1になります。
- このbitはリード専用で、ライト時には0を書き込んでください。
- 他のbitはリード時不定、ライト時は0にしてください。
- I/Oアドレスに関する設定がないので、I/OアドレスにカードI/Oのレジスタを割り振ることは多分できないでしょう。
386SX機
- JEIDA ver.4に対応。
- しかし386SX機の制限のために、アクセスのためのウィンドウが1MBに縮小されて、さらに0xd00000~0xdfffffに移動しました。
- このため0x490のバンク切り替えレジスタが拡張されています。
- bit5-0が有効で、ここに0~63の値を書いてバンク切り替えをします。
- この他についてはCX10以降と同じです。
こめんと欄
- CX以前と以降というと、TOWNSとTOWNS IIですね。なるほど。 -- I.Tak.? 2003-07-25 (金) 12:06:42
- ひょっとしたらモデル1~80Hでもアクセスできちゃうかもしれません。CFへの設定ができないだけで、アクセスに必要なコモンメモリ空間へのアクセスはできるからです。設定しなくてもデフォルトでCFがメモリマップトモードになっていれば・・・。うちには各種のCFはあれど該当TOWNSがないので試せていません。 -- K 2003-07-25 (金) 15:51:36
- SNやMaRTyはJEIDA4.1対応だかでモデムカードやらが使えるらしいのですがこの規格はどうなんでしょう? -- I.Tak.? 2003-09-19 (金) 21:14:19
- OSASKのソースを見ると、CFは属性メモリをいじらなくてもメモリマップトI/Oでアクセスできているようですね。楽だけどTOWNSで起動デバイスにはならないなあ。せっかく読みに行ってくれるのに、残念だ。 -- I.Tak.? 2003-09-19 (金) 21:34:14
- TOWNSのBIOSを書き換えるしかないんでしょうねえ。ROM交換?でもKHBIOS/TOWNSを経由してもいいなら、CFブートもできますよ。 -- K 2003-09-19 (金) 21:52:28
- JEIDA4.1!・・・これは最強です。16bit-PCカードの全部の機能が使えるということです。きっと電源制御やリセットもできちゃいますし、I/Oモードも使えちゃいます。すばらしい! -- K 2003-09-19 (金) 21:55:40
- 16bit仕様なので, 32bitアクセスするとCPUの外で二回に分けてアクセスされると思われます。CompactFlashで実験したところ, 0x400からのデータレジスタに対して rep movsd することが可能なようです。メインメモリのアクセス回数が半分になっていいかも。 -- I.Tak.? 2003-11-10 (月) 10:11:57
- そんなことができるのか・・・。pcctol0g(開発中バージョン)で実験してみよう。一瞬、AT機でもできるかな、と思ったんだけど、ATはいろいろ回路が略される傾向があるからだめかもしれない。あるマシンでうまくいっても他のマシンでうまくいく保証がないもんなあ。・・・movsdを使わなくても、EAXで0x400を読むだけでOKではないかと想像しています。 -- K 2003-11-10 (月) 11:10:40
- それはそうですが、ストリング命令の方が速いし小さいからお勧めということで (486で13+3n, Pentiumで12+nクロック。nはコピー回数。ここ参考)。セグメント間コピーをmovでやるとプリフィックスが色々ついてしまって遅くなりがちですし。 -- I.Tak.? 2003-11-11 (火) 10:53:43
- rep movsとrep stosは、他のストリング命令とは違って速いのか・・・。 -- K 2003-11-12 (水) 12:50:03
- あのーKさん, TOWNSでもCISタプル読めてます? out 0x491,1 して[0xc0000000]を読んでもATAレジスタしか見えないんですが…… -- I.Tak.? 2004-04-05 (月) 13:50:29
- 上のはCFの話です。 -- I.Tak.? 2004-04-05 (月) 14:53:54
- ありゃりゃ・・・。実はTOWNSでタプルを読むテストはしていません。読めていない可能性はあります。また、もしかしたらFresh系はその辺の使わない回路が省略されたとか、そういう可能性もあります。DOSで動く簡単な実験プログラムを作ってもらえたら、実験してみましょうか?(HR20) -- K 2004-04-05 (月) 15:16:56
- 遅くなりましたが (忙殺されてたので……) EXPで作ってみました。実験よろしくお願いします。 -- I.Tak.? 2004-04-10 (土) 20:14:32
- ページに添付しましたが、使い方を書き忘れました(^_^; 単純に実行すると標準出力にバイナリをダンプします。TOWNSシェルからオーバーレイはできません。 -- I.Tak.? 2004-04-10 (土) 21:18:27
- お返事が遅くなってすみません。この添付ファイルダウンロードできますか?僕は9バイトしか受け取れません。 -- K 2004-04-13 (火) 14:38:56
- うまくいかないようなので、http://user.ecc.u-tokyo.ac.jp/~g240845/towns/ におきました。 -- I.Tak.? 2004-04-15 (木) 09:55:02
- ためしました。I.Tak.さんのいうとおり、CISは読めませんでした。が、ここで僕はひどい誤植に気がつきました。CX以降ではメモリカードスロットのウィンドウが2枚あって、ページを切り替えられるのは2枚目のほうなのです。ベースアドレスが0xc100_0000になります。詳しいことは上記説明を見てください(修正しました)。I.Tak.さんのバイナリをバイナリエディタで書き換えてテストしたら、うちのHR20ではちゃんとCISが読めました。ぜひお試しください。 -- K 2004-04-17 (土) 01:13:52
- CFアダブタ改造してアドレス結線変えるとかで、無理やりメモリマップトI/OでIO系カード使うとかって不可能ですかねえ? -- 2004-05-16 (日) 11:51:43
- そういうアダプタを作ることはできると思います。ただアドレス結線を変える程度のアダプタだけで十分かどうかは分かりませんが。できたらちょっといいですよねえ・・・。 -- K 2004-05-16 (日) 12:42:54
|