はるか昔からいつかは作ろうと、RAMとLS670だけは確保してあったマッパRAM。部品が揃うと安心してしまって今まで放置状態だったのだが、暇ができたので作ってみた。
FS-A1ST(MSXturboR)のカートリッジ・スロット1に接続した状態。本体にはバッファを兼ねたI/Fカートリッジを挿し、15cmほどすだれケーブルを延ばして、その先にユニバーサル基板で構築。典型的なスパゲティなのは気にしない。
奥に見える大小2つのICは別回路のもので関係ない。カートリッジ・スロット2にはROMカートリッジエミュレータが挿さっている。
マッパRAMとは、MSXのメモリマッパシステム(MSX-MMS、MSX-MemoryMapperSystem)という独自MMUに接続されたメモリのこと。
MSXでは、Z80の64KBメモリ空間を4分割し、16KBを1ページとしてスロット機構(これもメモリ空間を広げる別の仕様)で管理している。その上に16KBバンクで64ページ分、計4MBまで搭載するのがこのシステム。
I/O空間のFCH~FFHにマッパレジスタと呼ぶ8bitラッチ(フルスペック時)を付け、それぞれをページ0(0000H~3FFFH)~ページ3(C000H~FFFFH)に対応させて、ラッチ出力をA14~A21としてメモリに与える仕様。
回路図は右記の通り。
4Mbitの疑似SRAM(PSRAM、PseudoStaticRAM)、および1MbitのSRAMで動作確認した。/CExを分配し、他をパラレルに接続することで、メモリIC4個まで、2MBまで拡張可能。
628128などSRAMで作る場合には、下部の「for PSRAM only」部分は不要。各コントロール信号のタイミングも縛りがないので、回路は簡易になる。
658512などPSRAMの場合は、リフレッシュの関係で/OE_RFSHのタイミングがシビアになる。実機では/SLTSLより/RDが早く出るようで、SRAMの回路(相当)のままでは正常に動作しなかった。/OE_RFSH生成に/SLTSLを追加してみたが、74139と74HCT02×2とのレーシングになり、動作が不安定。仕方がないのでCR遅延を追加した。
遅延量は、現状でタイミングが微妙というところから、ゲートひとつ分程度、20~30ns程を最小値の目安とする。リード~リフレッシュのタイミングから最大値は100ns程度になるが、インアクティブを遅延させなければこの縛りはほとんどなくなるので、ダイオードで回避する。この場合、出力にキャパシタが直結状態になるので、CMOS ICの許容値、500pFが最大となる。実際には、容量が大きければ大きいほど遅延してしまうので、これより十分小さく、しかし意味ある容量とするため入力容量(数pF)よりは十分大きく見積もる。HCTタイプのVTHを1.0~1.5Vとすると遅延時間は0.23CR~0.33CRとなる。1.5kΩ+100pFで35~50nsと計算できるのでこの値とする。
ちなみに74LS02などTTLを使う場合は、入力電流の関係から、抵抗値は最大でも750Ω程度にする必要があり、必然的にキャパシタは大きくなる。CMOSと共通のパラメータにはできないので、ここはHCT02、VHCT02、ACT02などTTLインターフェースCMOSを指定しておく。
ちなみに体力の限界、気力も無くなり、実際に製作はしてないが、FP-DRAM版も設計してみた。こちらは、4MbitファストページDRAM、424400などを2個組で4組まで、4MBフルスペックまで拡張可能。
バッファカートリッジをデータバスだけバッファリングしたのは、これを作ることを想定していたこともある。
since 2007.8 by K-ichi
0 件のコメント:
コメントを投稿
.