Aquí está mi situación:
Como proyecto personal, estoy buscando escribir un emulador para Sega Megadrive (Sega Genesis) que se ejecuta en AVR. Así que he estado buscando un microcontrolador que tenga características similares al Motorola 68k que se envió con el MegaDrive. Sin embargo, he notado que las especificaciones para el 68k en comparación con la mayoría de los micros de aficionados. Elijo AVR en lugar de ARM porque me gusta la arquitectura y pensé que sería un buen desafío.
M68K:
32-bit CPU
16-bit data bus
Up to 20 MHz
16 MB RAM
No I/O ports
Aquí están las especificaciones para un 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
Esto parece bastante típico para los micros modernos de gama baja. Nunca veo que el carnero se meta mucho en los mbs.
Ahora, estoy seguro de que la SRAM moderna no es casi la misma que la que tenía el 68k, pero ¿es posible que obtenga un micro AVR que coincida con la potencia de un 68k? ¿Estoy mirando mal este problema? ¿Necesito cambiar mi diseño para acomodar micros modernos?
No sé si alguna fuente externa de memoria será lo suficientemente rápida.
Respuestas:
Aunque el Motorola 68000 y el Sega Genesis son bastante antiguos (principios de la década de 1980), no encontrará un AVR de gama baja (es decir, 8 bits) que pueda emular toda la máquina de juego.
El Sega Genesis corrió a 7,61 MHz y tenía 72 KB de RAM (más 64 KB adicionales de RAM de video). Sin embargo, los programas de juego residían en ROM, por lo que necesitará RAM adicional para mantenerlos (a menos que planee poder conectar los cartuchos originales de alguna manera). La mayoría de los cartuchos de juegos tenían menos de 4 MB, pero hay al menos un juego (Pier Solar, lanzado en 2010) que tiene una ROM de 8 MB.
Además, el sistema ciertamente debe haber incluido una ROM del sistema que actuó como algún tipo de ejecutivo y también habría proporcionado una biblioteca de E / S común para los cartuchos (no puedo encontrar ninguna referencia a qué tan grande era). Tendrá que encontrar las ROM (o imágenes de ROM) para esas y copiarlas en su RAM también (o agregar una sección de ROM a su sistema).
En mi opinión, querrás usar un microcontrolador de 32 bits. Si va a usar los cartuchos originales más una ROM de programa, y no necesita MB de RAM, puede usar la mayoría de los microcontroladores de 32 bits que tengan suficiente espacio para su emulador. Si va a descargar los cartuchos y la imagen de ROM del sistema en la RAM, para obtener 8 MB o más de RAM, necesitará un microcontrolador que tenga un bus de memoria externo (no puede obtener 8 MB en el mismo chip que el microcontrolador).
Dado que desea seguir con AVR, le sugiero un procesador como el AT32UC3A3256 , que tiene 256 KB de Flash, 128 KB de RAM y funciona a 84 MHz. El problema es que es un dispositivo de montaje en superficie de 144 pines, que será difícil de soldar.
Sin embargo , hay un kit de evaluación para este procesador de Element 14 por solo $ 31.25. Para que no tenga que preocuparse por soldar. Además, la placa tiene 8 MB de RAM externa, por lo que puede cargar un cartucho en la RAM.
Solo para el registro , sigo pensando que debería considerar la Raspberry Pi , que funciona a 700 MHz con 512 MB de RAM por un poco menos que el costo de la placa de desarrollo anterior. Al ejecutar a esa velocidad, no tendría problemas para emular el código 68000 y realizar E / S a la velocidad correcta.
Ya sea que vaya a la ruta AVR o Raspberry Pi, además del 68000, el Sega Genesis también incluyó un Zilog Z80 y varios chips de propósito especial, incluidos Yamaha YM2612 y Texas Instruments SN76489A. El Z80 se usó para controlar el sonido y también proporciona compatibilidad con el anterior Sega Master System. El chip Yamaha era un sintetizador de sonido FM y el chip TI era un generador de sonido programable (esta máquina tenía muchas opciones de sonido). También había un procesador de pantalla virtual (VDP). Probablemente pueda omitir el sonido (lo que significa que no necesita preocuparse por los chips Z80 o Yamaha o TI) pero tendrá que emular el hardware de gráficos.
Un par de recursos:
EASy68K - Editor / Ensamblador / Simulador para el 68000. Código abierto para que pueda desenterrar el código de simulación del 68K
Cyclone 68000 - emulador para el microprocesador 68000, escrito en ensamblaje ARM de 32 bits. Solo es útil si decides usar Raspberry Pi
Finalmente, si aún no está familiarizado con el conjunto de instrucciones 68000, planee pasar semanas (o más) para convertirse en un experto. Gran parte de su depuración se reducirá al nivel del emulador, tratando de descubrir por qué una sección del código 68000 en el cartucho del juego no se ejecuta correctamente. (Lo que significa que probablemente querrá poder configurar un punto de interrupción virtual en el código del cartucho). También necesitará un desensamblador, por lo que no tendrá que lidiar con el código de la máquina; Aquí está la fuente de uno .
fuente
No va a pasar.
El microcontrolador más grande en la línea ATmega con soporte para memoria externa es el ATmega1284, pero este solo tiene 8 KB de SRAM interna y puede direccionar hasta 64 KB de memoria externa. Esto no será suficiente para emular el Genesis, que tenía 72 KB de RAM y otros 64 KB de memoria de video. Es posible implementar el acceso a memoria adicional a través de la conmutación de bancos, pero esto haría que el acceso a la memoria desde el AVR sea muy costoso.
Hay algunas partes en la línea ATmega con más SRAM interna, como el ATmega1284 (16 KB), pero estas no admiten memoria externa en absoluto. Larga historia, corta, abordar más de 64 KB de RAM de un ATmega es bastante difícil.
(No estoy seguro de dónde obtuviste la cifra de 16 MB. El 68000 no tiene memoria interna, además de registros; la cantidad de memoria en un sistema 68000 puede variar dramáticamente).
Además, la CPU 68000 en el Genesis funciona a 7.6 MHz. Emular esto en un AVR de 16 MHz no será posible, aunque la velocidad del reloj del AVR es un poco más alta, el 68000 es una CPU de 32 bits, por lo que emular una de sus instrucciones con frecuencia requerirá mucho más que una instrucción en El AVR. (Incluso una simple adición probablemente requerirá unas pocas docenas de instrucciones).
Si desea emular el Genesis, le recomiendo que busque en su lugar los microcontroladores ARM.
fuente
¿Hay un microcontrolador con 16 MB de RAM?
Si. Sin embargo, el único que conozco es en la familia Renesas SuperH, y no incluye ROM, por lo que debe tener una memoria flash externa, pero tiene 16 MBytes de SRAM integrada.
No hay microcontroladores SRAM de 16 MByte en la familia Atmel AVR. O en cualquier lugar de la línea de productos Atmel.
Sin embargo, varios dispositivos en la línea Atmel AVR tienen una interfaz de bus externo que le permitirá conectar memoria adicional. Específicamente, el ATxmega128A1U puede admitir hasta 16MBytes de SRAM externa.
...
Ah, aquí está el problema que tienes.
El procesador 68k (es decir, Motorola 68000) NO es un microcontrolador y NO tiene 16 MBytes de SRAM interna.
Si bien el procesador tiene 32 bits internamente, debido a las limitaciones de los pines, solo puede direccionar hasta 16 MB de memoria externa, incluidos flash, sram y cualquier dispositivo mapeado de memoria.
No necesita un microcontrolador con 16 MBytes de SRAM interno para emular el procesador 68k.
¿Existe un microcontrolador Atmel AVR de 8 bits que pueda emular el procesador Motorolla 68000?
Creo que sí. El ATxmega128A1U tiene un bus de memoria externo tan grande como el bus del procesador 68k, y tiene suficiente memoria flash y RAM que le permitirían ejecutar una versión de microcódigo del procesador 68k.
Puede correr hasta 32MHz, y muchas instrucciones toman un ciclo, pero incluso el peor de los casos toma 5 ciclos en la memoria interna. La interfaz externa es más lenta, pero si elige una memoria rápida, seguirá siendo mucho más rápida que la 68k.
El procesador 68k no solo funciona 4 veces más lento, sino que las operaciones más rápidas que realiza requieren al menos 4 ciclos de reloj, y muchas demoran entre 2 y 4 veces más, en particular los accesos a la memoria.
Entonces, incluso con SRAM lento (según los estándares actuales) (digamos, una parte de 70 MB de 8 MB por menos de $ 10) puede usar 0 estados de espera en el procesador de 32 MHz y ejecutar círculos alrededor de los 68k que se ejecutan a 7 MHz. Por ejemplo, una simple instrucción de movimiento en el 68k que tomaría 4 ciclos a 7.61 MHz toma 525 nS. Una instrucción de movimiento simple similar en el ATxmega128A1U que se ejecuta a 32MHz toma 31nS. Por lo tanto, el AVR podría ejecutar 16 movimientos para cuando el 68K se hiciera con uno. El 68k toma 50 ciclos para algunos tipos de interrupciones, mientras que el AVR salta a la interrupción en 3 ciclos, por lo que el AVR podría manejar un puñado de interrupciones en el tiempo que le toma al 68k simplemente saltar a uno.
Espero que pueda ejecutar el ciclo con precisión con un esfuerzo cuidadoso si acepta alguna fluctuación, aunque es posible que pueda ejecutarlo con precisión de ciclo sin fluctuación si fuera meticuloso. Los procesadores AVR funcionan bien con overclocking moderado, por lo que probablemente podría ejecutarlo a 38.35MHz y tener 5 ciclos AVR por ciclo de reloj de 68k.
Esto no quiere decir que sea fácil, y puede haber algunas instrucciones muy complicadas que tomarían más tiempo en el AVR que de otra manera, pero incluso estas pueden explicarse con un diseño cuidadoso.
¿Puedo emular un Sega Genesis con un Atmel AVR de 8 bits?
No. El Sega Genesis tiene, en esencia, un procesador de 68k, pero también tiene un procesador de sonido (Z80) y un procesador de video que necesitaría significativamente más recursos para emular. En el diagrama a continuación, encontrará el procesador 68k en la esquina superior izquierda; tenga en cuenta que es una pequeña porción de todo lo necesario para emular un sistema Sega Genesis completo.
Entonces, si bien podría emular fácilmente el núcleo de 68k del Sega Genesis, no podría ejecutar juegos hechos para el Genesis con solo un microcontrolador AVR. Emular el 68k solo en un chip sería bastante difícil, incluso si simplificaste las cosas, dudo que puedas colocar los tres procesadores en un solo chip AVR de 32MHz.
Sin embargo, probablemente podría emular esos dos chips con dos AVR más. Si apuntaste a una pantalla LCD gráfica más simple que no requiriera tiempos y generación de NTSC extraños, podrías simplificar un poco las cosas e incluso podrías poner ambas funciones en un chip separado.
Sin embargo, este es un gran proyecto, ciertamente no es un proyecto de fin de semana. Si se encuentra en una etapa en la que solo se siente cómodo con las placas de desarrollo Arduino, puede ser interesante crear un simple emulador de procesador 68k y conectar un poco de ROM externa y RAM para acceder a la memoria. El Arduino ATMega no tiene una interfaz de memoria externa, pero puede cambiar las líneas de E / S y emular eso también. Si avanza lo suficiente en el proyecto donde puede emular programas simples de 68k, entonces podría valer la pena deshacerse de Arduino, usar el entorno de desarrollo Atmel y un mejor chip AVR con una interfaz de bus externa, y puede comenzar a leer y ejecutar cartuchos Incluso puede canalizar datos de video y sonido a la computadora e interpretarlos en el procesamiento:
Asegúrese de que sus rutinas de emulación sean portátiles y podrá cambiar a un mejor procesador con la suficiente facilidad como para no quedarse atascado.
Si el simple proyecto Arduino Mega nunca llega muy lejos, no ha desperdiciado muchos recursos en este proyecto. Si te ves obligado a completarlo, pasar a un chip Atmel más capaz no será tan abrumador.
Yo digo que trates. Algo de lo que he dicho y otros han dicho puede parecer que esto es insuperable, pero no dejes que nos interpongamos en tu camino. Siga haciendo preguntas cada vez que se encuentre con un obstáculo y encontrará que la mayoría de los ingenieros disfrutan de un desafío y le brindarán la comprensión y la ayuda que necesita para avanzar por este camino.
La emulación es muy divertida.
fuente
Ninguna de las otras respuestas ha mencionado que podría obtener un chip que ejecuta el conjunto de instrucciones m86k de forma nativa: la serie Coldfire . Se han eliminado varias instrucciones; si no se usan con demasiada frecuencia, podrían emularse atrapando la interrupción de "instrucción no válida".
Sin embargo, aún necesitaría emular el procesador de video Yamaha YM7101 y el procesador de sonido Yamaha YM2612. Puede intentar crear emulaciones de software en un DSP mucho más rápido o crear una versión FPGA de ellas. Posiblemente basado en emulaciones FPGA existentes de Megadrive.
fuente
Estoy bastante seguro de que no hay procesadores con 16 MB de RAM en chip.
El "16 MB de RAM" mencionado en algunas descripciones del 68000 alude al bus de direcciones externo de 24 bits que, en teoría, podría abordar un máximo de hasta 2 ^ 24 bytes = 16 MB de RAM externo. Tengo entendido que la gran mayoría de los sistemas que utilizan el 68000 se conectan con menos de 16 MB de RAM externa.
En particular, el Sega Mega Drive (también conocido como Sega Genesis) tiene 72kB de RAM y 64 kB de video RAM. Eso es RAM externa . Ni su Motorola 68000 ni su Zilog Z80 tienen RAM o caché en el chip.
Le sugiero que cree una segunda pregunta independiente con un título que describa lo que realmente quiere saber, pero deje esta pregunta como una pregunta canónica sobre la RAM del microcontrolador para ayudar a las muchas, muchas personas engañadas por "16 MB de RAM" que significa teórico DRAM externa máxima en algunos procesadores, mientras que "2.5 KB RAM" significa SRAM física en chip real incluida en otros procesadores.
(*) Algunos procesadores de muy alta gama producidos después de 2006 tienen 16 MB o más de memoria caché en chip, pero esos procesadores requieren aún más RAM externa, por lo que si realmente necesita 16 MB de RAM, va a necesita 16 MB de RAM externa de una forma u otra.
fuente
Puede USAR un CORTEX -M4 de la placa STMF432 ... muy potente con muchas megas de RAM y periféricos
fuente