Inilah situasi saya:
Sebagai proyek pribadi, saya ingin menulis emulator untuk Sega Megadrive (Sega Genesis) yang berjalan pada AVR. Jadi saya telah mencari Micro-controller yang memiliki karakteristik yang mirip dengan Motorola 68k yang dikirimkan dengan MegaDrive. Namun, saya perhatikan bahwa spesifikasi untuk 68k dibandingkan dengan kebanyakan hobbyist micros. Saya memilih AVR sebagai lawan ARM karena saya suka arsitekturnya, dan saya pikir itu akan menjadi tantangan yang bagus.
M68K:
32-bit CPU
16-bit data bus
Up to 20 MHz
16 MB RAM
No I/O ports
Berikut ini spesifikasi untuk 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
Ini tampaknya cukup khas untuk mikron modern ujung bawah. Saya tidak pernah melihat domba jantan banyak masuk ke mbs.
Sekarang, saya yakin SRAM modern hampir tidak sama dengan apa pun yang dimiliki 68k, tetapi apakah mungkin bagi saya untuk mendapatkan mikro AVR yang cocok dengan kekuatan 68k, apakah saya melihat masalah ini salah? Apakah saya perlu mengubah desain saya untuk mengakomodasi micros modern?
Saya tidak tahu apakah beberapa sumber memori eksternal akan cukup cepat.
Jawaban:
Meskipun Motorola 68000 dan Sega Genesis sudah cukup tua (awal 1980-an), Anda tidak akan menemukan AVR low-end (yaitu 8-bit) yang dapat meniru seluruh mesin game.
Sega Genesis berlari pada 7,61 MHz dan memiliki 72KB RAM (ditambah 64KB tambahan RAM video). Akan tetapi, program-program game ada dalam ROM, jadi Anda akan membutuhkan RAM tambahan untuk menahannya (kecuali jika Anda berencana untuk memasukkan kartrid yang asli entah bagaimana). Sebagian besar kartrid gim berada di bawah 4 MB, tetapi setidaknya ada satu gim (Pier Solar, dirilis pada 2010) yang memiliki ROM 8 MB.
Selain itu, sistem pasti harus menyertakan ROM sistem yang bertindak sebagai semacam eksekutif dan juga akan menyediakan perpustakaan I / O umum untuk kartrid (saya tidak dapat menemukan referensi seberapa besar ini). Anda harus menemukan ROM (atau gambar ROM) untuk itu dan menyalinnya juga ke RAM Anda (atau menambahkan bagian ROM ke sistem Anda).
IMO Anda akan ingin menggunakan mikrokontroler 32-bit. Jika Anda akan menggunakan kartrid asli plus ROM program, dan tidak perlu MB RAM, daripada Anda dapat menggunakan sebagian besar mikrokontroler 32-bit yang memiliki cukup ruang untuk emulator Anda. Jika Anda akan mengunduh kartrid dan gambar ROM sistem ke dalam RAM, maka untuk mendapatkan 8 MB atau lebih dari RAM, Anda akan memerlukan mikrokontroler yang memiliki bus memori eksternal (Anda tidak bisa mendapatkan 8 MB pada chip yang sama dengan mikrokontroler).
Mengingat Anda ingin tetap menggunakan AVR, saya sarankan prosesor seperti AT32UC3A3256 , yang memiliki 256 KB Flash, 128 KB RAM, dan berjalan pada 84 MHz. Gotcha adalah bahwa itu adalah perangkat pemasangan 144 pin permukaan, yang akan sulit untuk disolder.
Namun , ada kit evaluasi untuk prosesor ini dari Elemen 14 hanya $ 31,25. Jadi Anda tidak perlu khawatir tentang penyolderan. Plus, board memiliki 8 MB RAM eksternal, sehingga Anda dapat memuat kartrid ke dalam RAM.
Sebagai catatan , saya masih berpikir Anda harus mempertimbangkan Raspberry Pi , berjalan pada 700 MHz dengan RAM 512 MB untuk sedikit kurang dari biaya papan pengembangan di atas. Berjalan pada kecepatan itu, Anda tidak akan memiliki masalah dengan meniru kode 68000 dan melakukan I / O pada kecepatan yang benar.
Baik Anda menggunakan rute AVR atau Raspberry Pi, selain 68000, Sega Genesis juga menyertakan Zilog Z80 dan beberapa chip tujuan khusus, termasuk Yamaha YM2612 dan Texas Instruments SN76489A. Z80 digunakan untuk mengontrol suara dan juga memberikan kompatibilitas dengan Sistem Master Sega sebelumnya. Chip Yamaha adalah synthesizer suara FM dan chip TI adalah Programmable Sound Generator (mesin ini memiliki banyak pilihan suara). Ada juga Virtual Display Processor (VDP). Anda mungkin dapat melewatkan suara (yang berarti Anda tidak perlu khawatir tentang Z80 atau chip Yamaha atau TI) tetapi Anda harus meniru perangkat keras grafisnya.
Beberapa sumber daya:
EASy68K - Editor / Assembler / Simulator untuk 68000. Sumber terbuka sehingga Anda harus dapat menggali kode simulasi 68K
Cyclone 68000 - emulator untuk mikroprosesor 68000, ditulis dalam unit ARM 32-bit. Hanya berguna jika Anda memutuskan untuk menggunakan Raspberry Pi
Terakhir, jika Anda belum terbiasa dengan set instruksi 68000, rencanakan untuk menghabiskan berminggu-minggu (atau lebih) untuk menjadi seorang ahli. Banyak proses debug Anda akan turun pada level emulator, mencoba mencari tahu mengapa bagian dari 68000 kode dalam cartridge game tidak dieksekusi dengan benar. (Yang berarti Anda mungkin ingin dapat mengatur fasilitas breakpoint virtual dalam kode kartrid.) Anda juga akan memerlukan pembongkar, sehingga Anda tidak perlu berurusan dengan kode mesin; inilah sumbernya .
sumber
Tidak akan terjadi.
Mikrokontroler terbesar di jalur ATmega dengan dukungan memori eksternal adalah ATmega1284, tetapi ini hanya yang memiliki SRAM internal 8 KB, dan dapat mengatasi memori eksternal hingga 64 KB. Ini tidak akan cukup untuk meniru Kejadian, yang memiliki 72 KB RAM dan 64 KB memori video. Mungkin dimungkinkan untuk menerapkan akses ke memori tambahan melalui transfer bank, tetapi ini akan membuat mengakses memori dari AVR menjadi sangat mahal.
Ada beberapa bagian dalam jajaran ATmega dengan SRAM yang lebih internal, seperti ATmega1284 (16 KB), tetapi ini tidak mendukung memori eksternal sama sekali. Ceritanya panjang, pendek, menangani lebih dari 64 KB RAM dari ATmega agak sulit.
(Saya tidak yakin dari mana Anda mendapatkan angka 16 MB. 68000 tidak memiliki memori internal sama sekali, selain register; jumlah memori pada sistem 68000 dapat bervariasi secara dramatis.)
Selain itu, CPU 68000 dalam Genesis berjalan pada 7,6 MHz. Meniru ini pada AVR 16 MHz tidak akan mungkin - sementara laju clock AVR diakui sedikit lebih tinggi, 68000 adalah CPU 32-bit, sehingga meniru salah satu instruksinya akan sering membutuhkan lebih dari satu instruksi pada AVR. (Bahkan penambahan sederhana mungkin membutuhkan beberapa lusin instruksi.)
Jika Anda ingin meniru Kejadian, saya sarankan Anda melihat mikrokontroler ARM.
sumber
Apakah ada Mikrokontroler dengan Ram 16MB?
Iya. Satu-satunya yang saya ketahui, adalah di keluarga SuperHes Renesas, dan tidak termasuk ROM - jadi Anda harus memiliki flash eksternal, tetapi memiliki 16MBytes SRAM onboard.
Tidak ada mikrokontroler SRAM 16MByte dalam keluarga Atmel AVR. Atau di mana saja di lini produk Atmel.
Namun, beberapa perangkat di jajaran Atmel AVR memiliki Antarmuka Bus Eksternal yang akan memungkinkan Anda untuk menghubungkan memori tambahan. Secara khusus, ATxmega128A1U dapat mendukung hingga 16MBytes SRAM eksternal.
...
Ah, ini masalahnya.
Prosesor 68k (yaitu, Motorola 68000) BUKAN mikrokontroler dan TIDAK memiliki SRAM internal 16MB.
Sementara prosesor 32 bit secara internal, karena keterbatasan pin itu hanya dapat menangani hingga 16MB memori eksternal, termasuk flash, sram, dan perangkat yang dipetakan memori.
Anda tidak memerlukan mikrokontroler dengan 16MB SRAM internal untuk meniru prosesor 68k.
Apakah ada mikrokontroler Atmel AVR 8-bit yang dapat meniru prosesor Motorolla 68000?
Aku pikir begitu. ATxmega128A1U memiliki bus memori eksternal sebesar bus prosesor 68k, dan memiliki banyak flash dan RAM yang memungkinkannya menjalankan versi mikrokode dari prosesor 68k.
Ini dapat berjalan hingga 32MHz, dan banyak instruksi mengambil satu siklus, tetapi bahkan kasus terburuk membutuhkan 5 siklus dalam memori internal. Antarmuka eksternal lebih lambat, tetapi jika Anda memilih memori cepat itu masih akan jauh lebih cepat daripada 68k.
Prosesor 68k tidak hanya berjalan 4 kali lebih lambat, tetapi operasi tercepat yang dibutuhkan setidaknya 4 siklus jam, dan banyak yang memakan waktu 2-4 kali lebih lama, terutama akses memori.
Jadi dengan SRAM yang bahkan lambat (menurut standar saat ini) (katakanlah, bagian 70nS 8MByte untuk di bawah $ 10) Anda dapat menggunakan status tunggu 0 pada prosesor 32MHz dan menjalankan lingkaran di sekitar 68k yang berjalan di 7MHz. Misalnya, instruksi langkah sederhana pada 68k yang akan mengambil 4 siklus pada 7,61 MHz membutuhkan 525 nS. Instruksi langkah sederhana yang serupa pada ATxmega128A1U yang berjalan pada 32MHz membutuhkan 31nS. Jadi AVR dapat melakukan 16 gerakan pada saat 68K dilakukan dengan satu. 68k membutuhkan 50 siklus untuk beberapa tipe interupsi, sementara AVR melompat ke interupsi dalam 3 siklus - sehingga AVR dapat menangani beberapa interupsi dalam waktu yang dibutuhkan 68k untuk hanya melompat menjadi satu.
Saya berharap Anda bisa menjalankannya dengan siklus akurat dengan upaya hati-hati jika Anda menerima beberapa jitter, meskipun Anda mungkin bisa membuatnya berjalan dengan sempurna siklus akurat tanpa jitter jika Anda teliti. Prosesor AVR berjalan dengan baik dengan overclocking moderat, sehingga Anda mungkin dapat menjalankannya pada 38,35MHz dan memiliki 5 siklus AVR per siklus clock 68k.
Ini bukan untuk mengatakan itu akan mudah, dan mungkin ada beberapa instruksi yang sangat rumit yang akan memakan waktu lebih lama pada AVR daripada yang lain - tetapi bahkan ini dapat dipertanggungjawabkan dengan desain yang cermat.
Bisakah saya meniru Sega Genesis dengan Atmel 8 bit AVR?
Tidak. The Sega Genesis memiliki, pada intinya, prosesor 68k, tetapi juga memiliki prosesor suara (Z80) dan prosesor video yang Anda perlukan sumber daya yang jauh lebih besar untuk ditiru. Pada diagram di bawah ini, Anda akan menemukan prosesor 68k di kiri atas - perhatikan bahwa itu adalah sebagian kecil dari semua yang diperlukan untuk meniru sistem Sega Genesis penuh.
Jadi, sementara Anda bisa dengan mudah meniru inti 68k dari Sega Genesis, Anda tidak akan dapat menjalankan game yang dibuat untuk Genesis hanya dengan satu mikrokontroler AVR. Meniru 68k sendirian pada satu chip akan cukup sulit - bahkan jika Anda menyederhanakan hal-hal saya ragu Anda bisa memasukkan ketiga prosesor ke dalam chip AVR 32MHz tunggal.
Namun, Anda mungkin bisa meniru kedua chip tersebut dengan dua AVR lagi. Jika Anda menargetkan LCD grafis sederhana yang tidak memerlukan pengaturan waktu dan generasi NTSC yang aneh, Anda mungkin dapat menyederhanakan hal-hal sedikit, dan mungkin bahkan dapat menempatkan kedua fungsi ke dalam satu chip terpisah.
Ini adalah proyek besar, tentu saja, bukan proyek akhir pekan. Jika Anda berada pada tahap di mana Anda hanya merasa nyaman dengan papan pengembangan Arduino, maka mungkin menarik untuk membuat emulator prosesor 68k sederhana dan menghubungkan sedikit ROM eksternal dan RAM untuk akses memori. Arduino ATMega tidak memiliki antarmuka memori eksternal, tetapi Anda dapat mengubah jalur I / O dan mengemulasi itu juga. Jika Anda cukup jauh dalam proyek di mana Anda dapat meniru program 68k sederhana, maka mungkin layak membuang arduino, menggunakan lingkungan pengembangan Atmel, dan chip AVR yang lebih baik dengan antarmuka bus eksternal, dan Anda dapat mulai membaca dan mengeksekusi kartrid. Anda bahkan mungkin dapat menyalurkan data video dan suara ke komputer dan menafsirkannya dalam pemrosesan - itu '
Pastikan rutinitas emulasi Anda portabel dan Anda dapat dengan mudah beralih ke prosesor yang lebih baik sehingga Anda tidak akan terjebak.
Jika proyek Arduino Mega yang sederhana tidak pernah berjalan terlalu jauh, Anda belum membuang banyak sumber daya untuk proyek ini. Jika Anda merasa terdorong untuk menyelesaikannya, pindah ke chip Atmel yang lebih mampu tidak akan terlalu berlebihan.
Saya katakan mencobanya. Beberapa dari apa yang saya katakan dan yang lain katakan mungkin tampak seperti ini tidak dapat diatasi, tetapi jangan biarkan kami menghalangi jalan Anda. Terus ajukan pertanyaan setiap kali Anda mengalami hambatan dan Anda akan menemukan bahwa sebagian besar insinyur menikmati tantangan dan akan memberi Anda pemahaman dan bantuan yang Anda butuhkan untuk menempuh jalan ini.
Emulasi sangat menyenangkan.
sumber
Tidak ada jawaban lain yang menyebutkan bahwa Anda hanya bisa mendapatkan chip yang menjalankan set instruksi m86k secara native: seri Coldfire . Sejumlah instruksi telah dihapus; jika mereka tidak terlalu sering digunakan mereka dapat ditiru dengan menjebak interupsi "instruksi tidak valid".
Namun, Anda masih harus meniru prosesor video Yamaha YM7101 dan prosesor suara Yamaha YM2612. Anda bisa mencoba membangun emulasi perangkat lunak dalam DSP yang jauh lebih cepat, atau membangun versi FPGA mereka. Mungkin berdasarkan pada emulasi FPGA dari Megadrive.
sumber
Saya cukup yakin tidak ada prosesor dengan 16 MB RAM on-chip.
"16 MB RAM" yang disebutkan dalam beberapa deskripsi dari 68000 menyinggung bus alamat eksternal 24-bit yang, secara teori, dapat mengatasi maksimum hingga 2 ^ 24 byte = 16 MB RAM eksternal. Pemahaman saya adalah bahwa sebagian besar sistem yang menggunakan 68000 menghubungkan jauh lebih sedikit dari 16 MB RAM eksternal.
Secara khusus, Sega Mega Drive (alias Sega Genesis) memiliki 72kB RAM dan 64 kB video RAM. Itu adalah RAM eksternal . Baik Motorola 68000 atau Zilog Z80 memiliki RAM on-chip atau tembolok.
Saya sarankan Anda membuat pertanyaan independen kedua dengan judul yang menggambarkan apa yang benar-benar ingin Anda ketahui, tetapi tinggalkan pertanyaan ini sebagai pertanyaan kanonik tentang mikrokontroler RAM untuk membantu banyak orang yang menyesatkan "16 MB RAM" yang berarti teoretis. DRAM eksternal maksimum pada beberapa prosesor, sementara "2.5 KB RAM" berarti SRAM on-chip fisik aktual yang termasuk dalam prosesor lainnya.
(*) Beberapa prosesor yang sangat canggih yang diproduksi setelah 2006 memiliki 16 MB atau lebih memori cache on-chip, tetapi prosesor tersebut membutuhkan lebih banyak RAM eksternal - jadi jika Anda benar-benar membutuhkan 16 MB RAM, Anda akan membutuhkan 16 MB RAM eksternal dengan satu atau lain cara.
sumber
Anda dapat MENGGUNAKAN CORTEX -M4 dari papan STMF432 ... sangat kuat dengan banyak MB RAM dan periferal lainnya
sumber