MMUハード | 発表年月 | Task 数 |
Block Size |
アドレス 空間 |
最大搭載 メモリ |
System/ User Mode |
速度 | OS-9 Level2 |
備考 |
MC6829/68A29/68B29 | 1979年? | 4 | 2KB | 2MB | -- | あり | 1〜2MHz | ○ | 8ケまでカスケード接続により 32Task切り替え |
MC6829搭載機 | |||||||||
Positron 9000 | 1982年10月 | 4 (32) |
2KB | 512KB | 512KB | あり | 1MHz (2.0MHz) |
○ | SC67476(MC68B29)を最大8個搭載 |
独自MMU搭載機 | |||||||||
FM-77 (+400Line Set) FM-77L4 |
1984年5月 | 4 | 4KB | 256KB | 256KB | なし | 1.6MHz | ○ | MB8149-45(4x1Kwordメモリ)x2 |
FM77AV FM77AV20 |
1985年10月 | 4 | 4KB | 256KB | 192KB | なし | 1.6MHz | ○ | MB8149-45(4x1Kwordメモリ)x2 |
FM77AV20EX | 1987年11月 | 8 | 4KB | 256KB | 192KB | なし | 2.0MHz | ○ | MB8149-45(4x1Kwordメモリ)x2 |
FM77AV40 FM77AV40EX FM77AV40SX |
1986年10月 | 8 | 4KB | 1MB | 960KB | なし | 1.6MHz (2.0MHz) |
○ | MB8149-45(4x1Kwordメモリ)x2 |
FM-11 6809CPUカード | 1982年11月 | 16 | 4KB | 1MB | 1MB | なし | 2MHz | ○ | MB8149-45(4x1Kwordメモリ)x2、 SRAMと兼用 |
MB-S1 | 1984年5月 | 1 | 4KB | 1MB | 560KB | あり | 2MHz | × | 74S189(4x16wordメモリ)x2 |
MB-S1 (+OS-9カード) | 1985年3月 | 64 | 4KB | 1MB | 560KB | あり | 2MHz | ○ | HM6148HP-45(4x1Kwordメモリ)x2 |
Tandy Color Computer 3 | 1986年7月 | 2 | 8KB | 512KB | 512KB | なし | 1.78MHz | ○ | ACVC(GIME) LSI内部 |
Dragon Beta(128) | 1984年頃(未発売) | 16 | 4KB | 1MB | 768KB | なし | 2MHz | ○ | SRAM |
GIMIX 6809 CPU III | 1983年? | 8 | 2KB | 1MB | 1MB | あり | 2MHz | ○ | 4x1Kwordメモリ x3 Write Protect, Unallocated Trap |
# こうして見ると、完璧なのはひとつもありません。(笑) # MC6829 は Task切り替え数少ないし。供給が少なく価格も高い。 # FM-77系は論外として、FM-11はTask数が今の倍あって、System/User # の切り替えがあればベストでしたね。 # MB-S1は最大搭載メモリとのバランスが悪い。何よりハード的なタスク # 切り替え機構が実装されていないため、素のままではOS-9 Level2を # 動かすことができず、ハード改造が必要な点がNGです。 # CoCo 3 は Block Size 8KB でよく頑張ってたと思います。 # OS-9 Level2的には、タスク切り替えが2つというのが最低ラインだったようです。
MC6829の接続イメージ図(一部簡略化しています) Task 切り替え +--------+----------------+ | | | | V | | +-------+ +------+ | | |Address|->| | | | | Decode|->| |--/-> PA20 +----+ +-------+ | |--/-> PA19 | |-----BS----->| |--/-> PA18 | |-----BA----->| |--/-> PA17 | | |MC6829|--/-> PA16 | |-----A15---->| |--/-> PA15 |6809|-----A14---->| |--/-> PA14 | |-----A13---->| |--/-> PA13 | |-----A12---->| |--/-> PA12 | |-----A11---->| |--/-> PA11 +----+ +------+ # アドレス空間2MBなのでPA20まであります。アプリケーションノートに、 # このPA20信号を各ブロック毎の書き込み許可信号に使う例が出ています。 # (その場合はアドレス空間は1MB) レジスタマップ (ベースアドレスは一例で、物理アドレス上の最上位ブロック のどこかに配置します。) 76543210 1FF800 ** PA20-19 for Block 0($0000-$07FF) 1FF801 ******** PA18-11 for Block 0($0000-$07FF) 1FF802 ** PA20-19 for Block 1($0800-$0FFF) 1FF803 ******** PA18-11 for Block 1($0800-$0FFF) 1FF804 ** PA20-19 for Block 2($1000-$17FF) 1FF805 ******** PA18-11 for Block 2($1000-$17FF) -- -- -- -- 1FF83E ** PA20-19 for Block 31($F800-$FFFF) 1FF83F ******** PA18-11 for Block 31($F800-$FFFF) 1FF840 *** Key Value Register for MMU0 1FF841 *** Key Value Register for MMU1 1FF842 *** Key Value Register for MMU2 -- -- -- -- 1FF847 *** Key Value Register for MMU7 1FF848 * System/User Flag (Read Only) 1FF849 *** Fuse Register 1FF84A ***** Access Key 1FF84B ***** Operate Key (Current Task) 1FF84C Reserved -- -- -- -- 1FF87F Reserved # この通り、貴重なI/O空間をなんと128バイトも占めてしまいます。 # ただし、カスケードして8個接続しても128バイトで済むような設計に # なっています。そんな工夫するより、MC6829 1個で32タスクまで管理 # できるようにしろや、と言いたくなりますが。 # リセット時にはすべての論理ブロックが最上位ブロックを指します。 # 従ってリセットベクタもこの最上位ブロック内を指すようにします。 # これらのレジスタはSystemモードでしか書き換えることができません。 # MC6829からはS/U信号は出力されていないので、デバッグは大変であった # と予想されます。その点MB-S1は基板上に出てるので安心です。 # Task0 がSystem Taskに、Task1 がDMA Taskに予約されています。 # 従って、どれか1つのMMUの Key Value が0になっている必要があります。 # MMU1個だと、ユーザータスクは2個までって事ですね。 # MC6829があまり流行らなかったのは、上記のような使いにくさも理由 # だったと思われます。(PC各社が自前で組んだのも頷けます。) システムモード、ユーザーモード 接続イメージ図の通り、MC6829は BA, BS信号を監視しており、CPUが 何らかのVector Fetchを行うと、システムモードに遷移します。 リセット解除後はもちろんシステムモードです。 Fuseレジスタにカウントダウン値を設定し、0になったらユーザーモード へ遷移します。 ちなみに、6809の BA, BS信号は次のような意味を持っています。 BA=0 BS=0 通常サイクル BA=0 BS=1 ベクターフェッチ BA=1 BS=0 SYNC命令(割り込み待機中) BA=1 BS=1 HALTまたはBUS GRANT System/User遷移タイミングチャート ______ _____________ ______ ... _________________________ BA:BS __00__X_____01______X__00__ ... ____00___________________ ______ ______ ______ ______ ... _ ______ ______ ______ __ Address ______X_FFF4_X_FFF5_X______ ... _X______X______X______X__ ____________________ ... _______________ S/U ___U__X S S X___U_____ ___________________________ ... _ ______ ______ _________ Fuse ___0_______________________ ... _X___2__X___1__X___0_____ ______ ____________________ ... _______________ _________ Task(内部信号)__02__X__00________________ ... ____00_________X__02_____ ___________________________ ... _________________________ Operating Key _________02________________ ... ____02___________________ 参考文献:6809ハンドブック 1981年6月30日第1版第3刷発行 ISBN4-87148-250-2 C3055 \2800E 出版元:アスキー出版 <リンク集> データシート: しばらくリンク切れだったのですが復活したようです。 MC6829 Data Sheet MC6829 Data Sheet MC6829の入手について: eBayでは SC67476 という名称で出品されているようです。 MC68B29は一般売りされず特定顧客のみに販売された、というのは この型番から察するに事実のようです。 裏面にちゃんと 6829 と印字されているようですが、未確認。 日本から買われてみた方もいらっしゃいます。 →はせりんも買ってみました! 世間には、この SC67476(MC68B29) を 65C02 のMMUとして使用してみた 人がいます。世間は広いです。 ここを参照 この他、MC6829に関する記事を見つけましたので、備忘録として載せておきます。 インターフェース 1982年8月号(CQ出版)、「最大2Mバイトまでメモリ空間を拡張できるMC6829の概要とMMU付きCPUボードの試作」
英国Positron Computers Limited社 Positron 9000 MC6829 搭載の市販システムが見つかりました! Mike Miller @mikem_pg さんに教えていただきました。どうもありがとうございました。 こちらのページに写真がたくさん掲載されてますので参照願います。 さてこのマシン、SC67476(MC68B29)を1〜8個搭載可能というすごいマシンです。 出荷時期としてはFM-11よりちょい早い程度。(1982年10月) CPUはMC6809の1MHz(Optionで2MHz)。 最大RAM搭載容量は512KB、ROMは最大で128KB位まで搭載可能で、 出荷時は何と OS-9 Level II を5個のROM(計40KB)に搭載、ということらしいです。 SC67476 はカスタム品のため、どこかにこれを使った製品があるはずだ、と気になっていたのですが、 これでようやく全てがつながりました。 私が購入したSC67476は英国のSellerさんでしたが、このPositron 9000用に在庫がたくさんあったのでしょうね。
FM77AVのMMU(MMR) イメージ図(実際の回路はもっと複雑です) MB8149 x2ケ Task MMR 切り替え 設定 +-------+---------+ | | | | V V | +-----+ +------+ | |MB113|->| | +-----+ | | T603|->| |--| |-> PA17 +----+ +-----+ |MB8149|--|LS367|-> PA16 | |----A15--->| x2 |--| |-> PA15 |6809|----A14--->| |--| |-> PA14 | |----A13--->| |--| |-> PA13 | |----A12--->| |--| |-> PA12 +----+ +------+ +-----+ # MB8149のアドレス入力は10本ありますがそのうち6本しか使われていません。 # フルに使えば64タスクまで切り替え可能な潜在能力なのにもったいないです。 # FM-77(L4または400ラインセット)の場合は、上記のゲートアレイ(MB113T603) # の部分が汎用ゲートになっているだけで機能的には同じです。 レジスタマップ (FMシリーズではI/O空間は論理アドレス上の$FD00〜$FDxxに配置 され、すべてのタスクからアクセス可能です。便利な反面危険です。) FM77AV,FM77AV20,FM77AV20EXでほぼ共通です。(AV20EXのみセグメント数を8に増加 させたりMMR使用時に速度が落ちない設定が可能。) 76543210 FD80 ****** PA17-12 for Block 0($0000-$0FFF) FD81 ****** PA17-12 for Block 1($1000-$1FFF) FD82 ****** PA17-12 for Block 2($2000-$2FFF) -- -- -- -- FD8F ****** PA17-12 for Block 15($F000-$FBFF) FD90 o** Memory Segment Register (Current Task) 20EXのみ拡張MMR Enable時3bit有効 FD93 * MMR Enable FD94 o 拡張MMR Enable (これが 0 の時はFM77AVと同じ) 20EXのみ FD95 o MMR高速モード (これが 1 の時はMMRでスピードダウンしない) 20EXのみ FM77AV40/EXでは若干追加されます。 Task MMR 切り替え 設定 +-------+---------+ | | | | V V | +-----+ +------+ +-----+ | | |->| |--| |-> PA19 | |不明 |->| |--| |-> PA18 | | |->| |--| |-> PA17 +----+ +-----+ |MB8149|--|LS367|-> PA16 | |----A15--->| x2 |--| |-> PA15 |6809|----A14--->| |--| |-> PA14 | |----A13--->| |--| |-> PA13 | |----A12--->| |--| |-> PA12 +----+ +------+ +-----+ 76543210 FD80 ******** PA19-12 for Block 0($0000-$0FFF) FD81 ******** PA19-12 for Block 1($1000-$1FFF) FD82 ******** PA19-12 for Block 2($2000-$2FFF) -- -- -- -- FD8F ******** PA19-12 for Block 15($F000-$FBFF) FD90 *** Memory Segment Register (Current Task) FD93 * MMR Enable FD94 * 拡張MMR Enable (これが 0 の時はFM77AVと同じ) FD95 o MMR高速モード (これが 1 の時はMMRでスピードダウンしない) 40EXのみ
FM-11のMMU(MMR) イメージ図(実際の回路はもっと複雑です) MB8149 x2ケ Task MMR 切り替え 設定 +-------+---------+ | | | | V V | +-----+ +------+ | | |->| | +-----+ | |LS173|->| |--| |-> PA19 | | |->| |--| |-> PA18 | | |->| |--| |-> PA17 +----+ +-----+ |MB8149|--|LS244|-> PA16 | |----A15--->| x2 |--| |-> PA15 |6809|----A14--->| |--| |-> PA14 | |----A13--->| |--| |-> PA13 | |----A12--->| |--| |-> PA12 +----+ +------+ +-----+ | ↑ +----------------┘ SRAMとしてアクセス # 10本あるMB8149のアドレス入力のうち、MMR用としては8本しか使われていません。 # しかしFM-11の6809CPUカードは非常に巧妙な設計となっており、残りの2本を使って # $FC00〜$FC7F, $FE00〜$FFFDまでのRAMとして使っているのです。 # MB8149のアドレスマップ # $000+--------------+ # | SRAM | $FC00〜$FC7F # $080+--------------+ # | あき | # $100+--------------+ # | MMR | 16x16=256バイト # $200+--------------+ # | SRAM | $FE00〜$FFFD # $3FD+--------------+ レジスタマップ (FMシリーズではI/O空間は論理アドレス上の$FD00〜$FDxxに配置 され、すべてのタスクからアクセス可能です。便利な反面危険です。) 76543210 FD80 ******** PA19-12 for Block 0($0000-$0FFF) FD81 ******** PA19-12 for Block 1($1000-$1FFF) FD82 ******** PA19-12 for Block 2($2000-$2FFF) -- -- -- -- FD8F ******** PA19-12 for Block 15($F000-$FBFF) FD90 **** Memory Segment Register (Current Task) FD93 * MMR Enable
MB-S1のMMU(Address Mapper) イメージ図(実際の回路はもっと複雑です) 74S189 x2ケ Address System/ Mapper User 設定 切り替え +-----------------+--------+ | | | | V V | +------+ +-----+ | | |--| |-> PA19 | | |--| |-> PA18 | | |--| |-> PA17 +----+ |74S189|--|LS257|-> PA16 | |----A15--->| x2 |--| x2 |-> PA15 |6809|----A14--->| |--| |-> PA14 | |----A13--->| |--| |-> PA13 | |----A12--->| |--| |-> PA12 +----+ +------+ +-----+ # MB-S1の解説記事ではアドレスマップがたくさんあるように書いて # ありますが、上図の通り1タスク分しかメモリマップがありません # ので、切り替えの際にひたすら書き換えているようです。 OS-9カード装着時のMMU(Address Mapper) イメージ図(実際の回路はもっと複雑です) HM6148HP-45 x2ケ Address System/ Task Mapper User 切り替え 設定 切り替え +-------+---------+--------+ | | | | | V V | | +-----+ +------+ | | | |->| | | | | |->| | V | | |->| | +-----+ | |LS174|->| |--| |-> PA19 | | |->| |--| |-> PA18 | | |->| |--| |-> PA17 +----+ +-----+ |HM6148|--|LS257|-> PA16 | |----A15--->| x2 |--| x2 |-> PA15 |6809|----A14--->| |--| |-> PA14 | |----A13--->| |--| |-> PA13 | |----A12--->| |--| |-> PA12 +----+ +------+ +-----+ # OS-9カード装着の際は、74S189を引っこ抜いてケーブルでHM6148と # 接続するという「荒業」を使っています。(MB-S1 model30/40/45 では # 74S189はソケット実装されてるので「荒業」とは言えないのかもしれま # せんが、model10/15/20/10AVでは基板に直付けのため日立のサービスマン # の方が文字通り74S189を引っこ抜いてソケット実装に変更してくれた、 # との事です。) レジスタマップ (物理アドレスの$EFブロック、$FFブロックに配置されて います。) 76543210 EFE00 ******** PA19-12 for Block 0($0000-$0FFF) EFE01 ******** PA19-12 for Block 1($1000-$1FFF) EFE02 ******** PA19-12 for Block 2($2000-$2FFF) -- -- -- -- EFE0F ******** PA19-12 for Block 15($F000-$FFFF) EFE10 **** Fuse Register (EFE11 ****** Segment Register (Current Task) ) ... OS-9カード実装時 FFFEB * System/User Flag (Read Only) # $EFE00〜$EFE11のレジスタは、システムモードでしかアクセスできません。 # System/Userの遷移タイミングチャートはMC6829とほぼ同じだと思います。 # 他の機種とは異なり、MMUを殺すことはできません。(厳密には、Level 3 # モードでは MMUは殺されていますが...) システムモードでは、Block14 と Block15 は固定のマップになります。 Block 14($E000-$EFFF) = $84 (RAM) Block 15($F000-$FFFF) = $EF (ROM, I/O) リセット直後は各マップレジスタは不定のため、Block 14, 15以外は使用 できません。まずは Block 15 に配置されたROM内ルーチンでマップ レジスタを初期化する必要があり、そのためシステムモードのマップ が一部固定になっているのだと思われます。 # MB-S1の OS-9 Level2 は、ユーザーモードで64KBフルに使える事を売り # にしていましたが、システムモードでは $EFブロックが OS-9と関係ない # ROMとI/Oで占められるためRAMは60KBちょっとしか使えないことになります。 # ちなみに S1-BASIC はフルタイムでシステムモードで動作しています。 # 素のままでは OS-9 Level2 が走らない S1で、果たしてユーザーモードを # 使うソフトウェアが存在したのか、興味のあるところです。 参考文献:S1活用研究 昭和60年10月25日初版発行 雑誌61473-68 \2500 出版元:工学社 参考文献:MB-S1シリーズ OS-9操作手引書 1985年発行 発行元:日立製作所 参考文献:プロセッサ 1988年4月号 記事:P.107〜111 S1蘇生術「RAM512K搭載 OS-9ボードの製作」 著者:MITSさん 出版元:技術評論社
米国Tandy Radio Shack社 Color Computer 3のMMU(Address Mapper) イメージ図(実際の回路はもっと複雑です) GIMEチップ +-------------------------+ | +------+ | | | |-|-> RAS | +-----+ | |-|-> CAS | | |--PA18--| |-|-> Z8 | | |--PA17--| |-|-> Z7 +----+ | | MMU |--PA16--|DRAM |-|-> Z6 | |----A15--->|-| |--PA15--|Cont- |-|-> Z5 |6809|----A14--->|-| |--PA14--|roller|-|-> Z4 | |----A13--->|-| |--PA13--| |-|-> Z3 | | | +-----+ | |-|-> Z2 | |---A0-12-->|----------------| |-|-> Z1 +----+ | | |-|-> Z0 |GIME +------+ | +-------------------------+ # 物理アドレスはGIMEチップの内部信号となっており、外部にはDRAMアクセス # 用のRAS、CASに時分割された信号が出ています。 レジスタマップ (CoCoシリーズではI/O空間は論理アドレス上の$FF00〜$FFxxに配置 され、すべてのタスクからアクセス可能です。便利な反面危険です。) 76543210 FF90 * MMU Enable FF91 * MMU Task Register FFA0 ****** PA18-13 for Task0, Block 0($0000-$1FFF) FFA1 ****** PA18-13 for Task0, Block 1($2000-$3FFF) FFA2 ****** PA18-13 for Task0, Block 2($4000-$5FFF) -- -- -- -- FFA7 ****** PA18-13 for Task0, Block 7($E000-$FEFF) FFA8 ****** PA18-13 for Task1, Block 0($0000-$1FFF) -- -- -- -- FFAF ****** PA18-13 for Task1, Block 7($E000-$FEFF) # アメリカ人が作ると、何でこんなにシンプルになるんだろう、っていう見本です。 # CoCo-3 の元である CoCo はさらにシンプルな作りで驚きますから。
米国GIMIX社 6809 CPU III Board のMMU(Address Mapper) イメージ図(実際の回路はもっと複雑です) MB8149(相当品) x3ケ Task MMR 切り替え 設定 +-------+---------+ | | | | | V | | +------+ +-----+ | V | |--| |-> UAM (UnAllocated Memory Trap) | +-----+ | |--| |-> WPT (Write Protection Trap) | | |->| |--| |-> SST (Single Step Trap) | | ??? |->| |--| |-> PA19 | | |->| |--| |-> PA18 | +-----+ |MB8149|--| |-> PA17 +----+ |(相当)|--| ??? |-> PA16 | |----A15--->| x3 |--| |-> PA15 |6809|----A14--->| |--| |-> PA14 | |----A13--->| |--| |-> PA13 | |----A12--->| |--| |-> PA12 | |----A11--->| |--| |-> PA11 +----+ +------+ +-----+ この製品はパソコンではなく、SS-50という規格のボード製品です。 このページで紹介している中では、一番まともなMMUかもしれません。 MC6829の不完全な部分をロジックゲートで補ったというか、安く再構成 したような感じです。メモリブロックのサイズは2KBで細かく管理できますが、 今となっては小さすぎてオーバーヘッドが大きいような気がします。 UAM (UnAllocated Memory Trap) メモリが実装されていないことにするフラグです。 この領域をアクセスするとTrapが発生します。 WPT (Write Protection Trap) 書き込み禁止にするフラグです。 この領域にライトアクセスするとTrapが発生します。 SST (Single Step Trap) この領域で命令を実行すると、1命令毎にTrapが発生します。 レジスタマップ (物理アドレスの$FEブロック、$FFブロックに配置されて います。システムモードのみアクセス可能です。) 76543210 FE280 *** *** UAM/WPT/SST Enable, Task Regsiter FF800 *** * UAM,WPT,SST,,,,PA19 for Task 0, Block 0($0000-$07FF) FF801 ******** PA18-11 for Task 0, Block 0($0000-$07FF) FF802 *** * UAM,WPT,SST,,,,PA19 for Task 0, Block 1($0800-$0FFF) FF803 ******** PA18-11 for Task 0, Block 1($0800-$0FFF) -- -- -- -- FF83E *** * UAM,WPT,SST,,,,PA19 for Task 0, Block 31($F800-$FFFF) FF83F ******** PA18-11 for Task 0, Block 31($F800-$FFFF) -- -- -- -- FF9FE *** * UAM,WPT,SST,,,,PA19 for Task 7, Block 31($F800-$FFFF) FF9FF ******** PA18-11 for Task 7, Block 31($F800-$FFFF) FFB00 *** Fuse Register # なんとも贅沢なMMUです。$FF800から始まっているのはMC6829に合わせて # いるのかもしれませんが、512バイト以上もアドレス空間を占めるなんて。 # ネットで拾ったユーザーマニュアルには、回路図はおろかプリント基板の # パターン図まで掲載されています。この時代は大らかで良かった...
英国Dragon Data社 Dragon Beta のMMU(Address Mapper) Tandy社のCoCoクローンを作っていたDragon Data社が、独自に発展させたマシンです。 MC68B09Eを2個使うなど意欲的なマシンで、OS-9 Level 2も移植されていたようですが、 完成前に会社が倒産してしまい、陽の目を見なかったようです。合掌。 このマシンのMMUについては詳細情報収集中です。 FM-11並みのSPECを持ってはいるようです。 製品化されていたら良きライバルだったかも。(MB-S1がアレなので) レジスタマップ (Dragon BetaではI/O空間は論理アドレス上の$FC00〜$FEFFに配置 され、すべてのタスクからアクセス可能です。便利な反面危険です。) 76543210 FCC0 **** Task Register (Current Task) FE00 ******** PA19-12 for Block 0($0000-$0FFF) FE01 ******** PA19-12 for Block 1($1000-$1FFF) FE02 ******** PA19-12 for Block 2($2000-$2FFF) -- -- -- -- FE0F ******** PA19-12 for Block 15($F000-$FBFF, $FF00-$FFFF) MMU以外にも、中々特徴的な仕様を持ったマシンです。 ・2つのCPUは、バスを共有している。すなわちメモリやIOとか すべてトランスペアレント。サイクルスチールしてるのか どうかは未確認。 ・一方のCPUは、DMACとしてのみ動作。68B44を使えばもっと スマートにできるはずですが。 (将来的には他の事をやらせる計画だったのかもしれませんが) ・ブートROMも共通なので、途中までは同じコードを走る。 特定のIOレジスタのリード値に従い、メインCPUは本来のブート 動作、DMA用CPUはスタック設定後にNMI待ちになる。 ・DMAはFDCとのやりとりのみに使われており、FM-77の1MBフロッピー コントロールカード使用時のように、SYNC命令を使っている。
Copyright (C) 2019 by Haserin