質問: 16MBのRamを搭載したマイクロコントローラはありますか? これが私の状況です: 個人的なプロジェクトとして、私はAVRで動くSega Megadrive(Sega Genesis)のためのエミュレータを書くことを探しています。だから私はMegaDriveに同梱されているMotorola 68kと同様の特性を持つマイクロコントローラを探しています。しかし、私は68kのスペックがほとんどの趣味のミクロと比較されることに気づいた。私はアーキテクチャーが好きなのでARMとは対照的にAVRを選択しており、それは良い挑戦になると思いました。 ``` M68K: 32-bit CPU 16-bit data bus Up to 20 MHz 16 MB RAM No I/O ports ``` これがArduino Leonardoのスペックです。 ``` Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 20 PWM Channels 7 Analog Input Channels 12 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 32 KB (ATmega32u4) of which 4 KB used by bootloader SRAM 2.5 KB (ATmega32u4) EEPROM 1 KB (ATmega32u4) Clock Speed 16 MHz Length 68.6 mm Width 53.3 mm Weight 20g ``` これは現代のローエンドのマイクロではかなり典型的なようです。私はラムがmbsに多く入ってくるのを見たことがない。 今、私は現代のSRAMが68kが持っていたものとほとんど同じではないと確信しています、しかし私が68kの力と一致するAVRマイクロを得ることは可能です、私はこの問題を間違って見ていますか?現代のマイクロに対応するためにデザインを変更する必要がありますか? 外部メモリが十分に速いかどうかわかりません。
回答: ### 16MBのRamを搭載したマイクロコントローラはありますか? はい。私が知っている唯一のものは、ルネサスのSuperHファミリにあり、ROMは含まれていません - そのため、外部フラッシュが必要ですが、16MBのオンボードSRAMがあります。 > > AVR上で動作するSega Megadrive(Sega Genesis)用のエミュレータを書きたいと思っています。 > > > Atmel AVRファミリーには16MBのSRAMマイクロコントローラはありません。 Atmel製品ラインのどこかに。 けれどもAtmel AVR製品群のいくつかのデバイスは追加メモリを接続することを許す外部バス インターフェースを持ちます。特にATxmega128A1Uは最大16MBの外部SRAMを支援することができます。 > > だから私はMegaDriveに同梱されていたMotorola 68kに似た特性を持つマイクロコントローラーを探していた。 > > > ... > > > 現代のSRAMは68kのものとほとんど同じではないと確信していますが、68kの性能に合ったAVRマイクロを入手することは可能ですか?現代のマイクロに対応するためにデザインを変更する必要がありますか? > > > > 外部メモリが十分に速いかどうかわかりません。 > > > ああ、これがあなたが抱えている問題です。 68kプロセッサ(すなわちMotorola 68000)はマイクロコントローラではなく、16MBの内部SRAMも持っていません。 プロセッサの内部は32ビットですが、ピンの制限により、フラッシュ、Sram、およびメモリマップされたデバイスを含む最大16MBの外部メモリしかアドレス指定できません。 *68kプロセッサをエミュレートするために16MBの内蔵SRAMを搭載したマイクロコントローラは必要ありません。* ### Motorolla 68000プロセッサをエミュレートできるAtmel AVR 8ビットマイクロコントローラーはありますか? 私はそう思う。 ATxmega128A1Uは68kプロセッサのバスと同じ大きさの外部メモリバスを持ち、68kプロセッサのマイクロコードバージョンを実行することを可能にするたくさんのフラッシュとRAMを持っています。 最大32MHzで動作し、多くの命令で1サイクルかかりますが、最悪の場合でも内部メモリで5サイクルかかります。外部インターフェースは遅いですが、あなたが速いメモリを選択した場合、それはまだ68kよりずっと速いでしょう。 68kプロセッサの動作は4倍遅くなるだけでなく、最短でも4クロックサイクルかかり、特にメモリアクセスの場合は2〜4倍の時間がかかります。 したがって、(今日の標準では)さらに遅いSRAM(たとえば、10ドル未満で70ns 8MByte分)を使用すると、32MHzプロセッサで0待機状態を使用でき、7MHzで68kの周りを一周することができます。例えば、7.61 MHzで4サイクルかかる68kの単純な移動命令は、525 nSかかります。 32MHzで動作しているATxmega128A1Uでの同様の簡単な移動命令は31nsかかります。従ってAVRは68Kが1つで終わった時までに16の動きを実行することができました。 68kはいくつかの割り込み種別に対して50周期かかりますが、AVRは3周期で割り込みに飛びます - 従ってAVRは68kが1つに飛び込むのにかかる時間内に一握りの割り込みを扱うことができます。 ある程度のジッタを受け入れれば、慎重にサイクルを正確に実行できると思いますが、細心の注意を払っていれば、ジッタを発生させずにサイクルを正確に実行できる可能性があります。 AVRプロセッサは適度なオーバークロックで正常に動作するため、おそらく38.35MHzで動作させ、68kクロックサイクルあたり5回のAVRサイクルを使用することができます。 これはそれが簡単であると言うことではなく、AVRに他より長くかかるいくつかの非常に巧妙な命令があるかもしれません - しかしこれらさえ慎重な設計で説明することができます。 ### Atmel 8 bit AVRでSega Genesisをエミュレートできますか? いいえ。SegaGenesisの中心には68kプロセッサがありますが、サウンドプロセッサ(Z80)とビデオプロセッサもあります。エミュレートするには、さらに多くのリソースが必要です。以下の図では、左上に68kプロセッサがあります。これは、完全なSega Genesisシステムをエミュレートするために必要なすべてのうちのごく一部です。 !enter image description here ですから、Sega Genesisの68kコアを容易にエミュレートすることはできますが、1つのAVRマイクロコントローラだけでは、Genesis用に作られたゲームを実行することはできません。 1つのチップ上で68kを単独でエミュレートするのは十分難しいでしょう。たとえあなたが物事を単純化したとしても、3つすべてのプロセッサを1つの32MHz AVRチップに収めることができるとは思わない。 しかしながら、あなたはたぶんこれら2つのチップをさらに2つのAVRでエミュレートすることができます。奇妙なNTSCのタイミングと生成を必要としない、よりシンプルなグラフィックLCDをターゲットにした場合は、物事を少し簡単にすることができ、おそらく両方の機能を1つのチップに統合することさえできます。 これは巨大なプロジェクトですが、確かに週末のプロジェクトではありません。 Arduino開発ボードにしか慣れていない段階にある場合は、単純な68kプロセッサエミュレータを作成し、メモリアクセス用に小さな外部ROMとRAMを接続するのが面白いかもしれません。 Arduino ATMegaは外部メモリインターフェースを持っていませんが、I/Oラインをいじってそれをエミュレートすることもできます。単純な68kプログラムをエミュレートできるところまでプロジェクトを十分に理解していれば、Atmel開発環境と、外部バスインターフェースを備えたより優れたAVRチップを使用して、arduinoを捨てる価値があるかもしれません。カートリッジビデオとサウンドのデータをコンピュータにパイプ処理して処理中に解釈することさえ可能かもしれませんそれでもまだ遅すぎるでしょう(Arduinoメガはわずか16MHzです)が、それは少なくともあなたに十分な量の良い考えを与えるでしょうフルスピードのエミュレーションを実現するために必要な作業、そしてVDPとサウンドプロセッサをエミュレートするのにどれだけの労力を費やすのかということに慣れることができます。 あなたのエミュレーションルーチンが移植可能であり、あなたが動かなくならないほど十分に簡単により良いプロセッサに切り替えることができるでしょうことを確認してください。 単純なArduino Megaプロジェクトがそれほどうまく行かないのであれば、このプロジェクトに関する多くのリソースを無駄にしていません。あなたが自分でそれを完成させることに動機を感じているなら、もっと有能なAtmelチップへの移行はそれほど圧倒的ではないでしょう。 試してみるよ。私が言ったことや他の人が言ったことのいくつかはこれが乗り越えられないように見えるかもしれませんが、私たちはあなたの邪魔をしないでください。障害にぶつかるたびに質問し続けると、ほとんどのエンジニアが課題を克服し、理解を深め、この道を進むために必要な助けになることがわかります。 エミュレーションはとても楽しいです。