Voici ma situation:
En tant que projet personnel, je cherche à écrire un émulateur pour le Sega Megadrive (Sega Genesis) qui fonctionne sur AVR. Je cherchais donc un micro-contrôleur ayant des caractéristiques similaires au Motorola 68k livré avec le MegaDrive. Cependant, j'ai remarqué que les spécifications du 68k par rapport à la plupart des micros amateurs. Je choisis AVR par opposition à ARM parce que j'aime l'architecture et j'ai pensé que ce serait un bon défi.
M68K:
32-bit CPU
16-bit data bus
Up to 20 MHz
16 MB RAM
No I/O ports
Voici les spécifications d'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
Cela semble assez typique pour les micros modernes bas de gamme. Je ne vois jamais le bélier entrer beaucoup dans les mbs.
Maintenant, je suis sûr que la SRAM moderne n'est pas presque la même que celle du 68k, mais est-il possible pour moi d'obtenir un micro AVR qui correspond à la puissance d'un 68k, est-ce que je regarde mal ce problème? Dois-je changer ma conception pour s'adapter aux micros modernes?
Je ne sais pas si une source de mémoire externe sera assez rapide.
Réponses:
Même si le Motorola 68000 et le Sega Genesis sont assez anciens (début des années 1980), vous ne trouverez pas un AVR bas de gamme (c'est-à-dire 8 bits) qui puisse émuler la machine de jeu entière.
La Sega Genesis fonctionnait à 7,61 MHz et avait 72 Ko de RAM (plus 64 Ko de RAM vidéo supplémentaires). Cependant, les programmes de jeu résidaient dans la ROM, vous aurez donc besoin de RAM supplémentaire pour les contenir (sauf si vous prévoyez de pouvoir brancher les cartouches d'origine d'une manière ou d'une autre). La plupart des cartouches de jeu avaient moins de 4 Mo, mais il y a au moins un jeu (Pier Solar, sorti en 2010) qui a une ROM de 8 Mo.
En outre, le système doit certainement avoir inclus une ROM système qui a agi comme une sorte de cadre et aurait également fourni une bibliothèque d'E / S commune pour les cartouches (je ne trouve aucune référence à sa taille). Vous devrez trouver la ROM (ou les images ROM) pour celles-ci et les copier également dans votre RAM (ou ajouter une section de ROM à votre système).
IMO, vous allez vouloir utiliser un microcontrôleur 32 bits. Si vous allez utiliser les cartouches d'origine plus une ROM de programme, et n'avez pas besoin de Mo de RAM, vous pouvez utiliser la plupart des microcontrôleurs 32 bits qui ont suffisamment d'espace pour votre émulateur. Si vous allez télécharger les cartouches et l'image ROM du système dans la RAM, alors pour obtenir 8 Mo ou plus de RAM, vous allez avoir besoin d'un microcontrôleur doté d'un bus de mémoire externe (vous ne pouvez pas obtenir 8 Mo sur la même puce que le microcontrôleur).
Étant donné que vous souhaitez vous en tenir à AVR, je suggère un processeur comme l' AT32UC3A3256 , qui a 256 Ko de Flash, 128 Ko de RAM et fonctionne à 84 MHz. Le problème est qu'il s'agit d'un dispositif de montage en surface à 144 broches, qui sera difficile à souder.
Cependant , il existe un kit d'évaluation pour ce processeur d'Element 14 pour seulement 31,25 $. Vous n'avez donc pas à vous soucier de la soudure. De plus, la carte dispose de 8 Mo de RAM externe, vous pouvez donc charger une cartouche dans la RAM.
Juste pour mémoire , je pense toujours que vous devriez considérer le Raspberry Pi , fonctionnant à 700 MHz avec 512 Mo de RAM pour un peu moins que le coût de la carte de développement ci-dessus. En cours d'exécution à cette vitesse, vous n'auriez aucun problème à émuler le code 68000 et à effectuer des E / S à la bonne vitesse.
Que vous optiez pour la route AVR ou Raspberry Pi, en plus du 68000, la Sega Genesis comprenait également un Zilog Z80 et plusieurs puces à usage spécial, dont le Yamaha YM2612 et le Texas Instruments SN76489A. Le Z80 a été utilisé pour contrôler le son et fournir également une compatibilité descendante avec le système Sega Master antérieur. La puce Yamaha était un synthétiseur de son FM et la puce TI était un générateur de son programmable (cette machine avait beaucoup d'options sonores). Il y avait également un processeur d'affichage virtuel (VDP). Vous pouvez probablement ignorer le son (ce qui signifie que vous n'avez pas à vous soucier du Z80 ou des puces Yamaha ou TI) mais vous devrez émuler le matériel graphique.
Quelques ressources:
EASy68K - Editeur / Assembleur / Simulateur pour le 68000. Open source pour que vous puissiez être en mesure de creuser le code de simulation 68K
Cyclone 68000 - émulateur pour le microprocesseur 68000, écrit en assemblage ARM 32 bits. Utile uniquement si vous décidez d'utiliser le Raspberry Pi
Enfin, si vous n'êtes pas déjà familier avec le jeu d'instructions 68000, prévoyez de passer des semaines (ou plus) pour devenir un expert. Une grande partie de votre débogage se fera au niveau de l'émulateur, essayant de comprendre pourquoi une section de code 68000 dans la cartouche de jeu ne s'exécute pas correctement. (Ce qui signifie que vous voudrez probablement être en mesure de configurer une fonction de point d'arrêt virtuel dans le code de la cartouche.) Vous aurez également besoin d'un démonteur, vous n'aurez donc pas à vous occuper du code machine; voici la source pour un .
la source
Ça n'arrivera pas.
Le plus grand microcontrôleur de la gamme ATmega prenant en charge la mémoire externe est l'ATmega1284, mais celui-ci ne dispose que de 8 Ko de mémoire SRAM interne et peut traiter jusqu'à 64 Ko de mémoire externe. Cela ne suffira pas à émuler la Genesis, qui avait 72 Ko de RAM et 64 Ko de mémoire vidéo. Il pourrait être possible d'implémenter l'accès à de la mémoire supplémentaire par le biais d'un changement de banque, mais cela rendrait l'accès à la mémoire à partir de l'AVR très coûteux.
La gamme ATmega comporte certaines parties avec davantage de mémoire SRAM interne, comme l'ATmega1284 (16 Ko), mais celles-ci ne prennent pas du tout en charge la mémoire externe. En résumé, adresser plus de 64 Ko de RAM à partir d'un ATmega est plutôt difficile.
(Je ne sais pas d'où vous avez obtenu le chiffre de 16 Mo. Le 68000 n'a pas de mémoire interne du tout, à part les registres; la quantité de mémoire sur un système 68000 peut varier considérablement.)
De plus, le processeur 68000 de la Genesis fonctionne à 7,6 MHz. Émuler cela sur un AVR 16 MHz ne sera pas possible - alors que la fréquence d'horloge de l'AVR est certes un peu plus élevée, le 68000 est un processeur 32 bits, donc émuler une de ses instructions nécessitera souvent plus d'une instruction sur l'AVR. (Même un simple ajout nécessitera probablement quelques dizaines d'instructions.)
Si vous souhaitez émuler la Genesis, je vous recommande de regarder plutôt les microcontrôleurs ARM.
la source
Existe-t-il un microcontrôleur avec 16 Mo de RAM?
Oui. Le seul que je connaisse, cependant, est dans la famille Renesas SuperH, et n'inclut pas la ROM - vous devez donc avoir un flash externe, mais il a 16 Mo de SRAM intégré.
Il n'y a pas de microcontrôleurs SRAM 16 Mo octets dans la famille Atmel AVR. Ou n'importe où dans la gamme de produits Atmel.
Cependant, plusieurs appareils de la gamme Atmel AVR ont une interface de bus externe qui vous permettra de connecter de la mémoire supplémentaire. Plus précisément, l'ATxmega128A1U peut prendre en charge jusqu'à 16 Mo de SRAM externe.
...
Ah, voici le problème que vous rencontrez.
Le processeur 68k (c.-à-d. Motorola 68000) N'EST PAS un microcontrôleur et N'A PAS 16 Mo de SRAM interne.
Bien que le processeur soit 32 bits en interne, en raison des limitations de broches, il ne peut traiter que jusqu'à 16 Mo de mémoire externe, y compris le flash, le sram et tout périphérique mappé en mémoire.
Vous n'avez pas besoin d'un microcontrôleur avec 16 Mo de SRAM interne pour émuler le processeur 68k.
Existe-t-il un microcontrôleur Atmel AVR 8 bits qui peut émuler le processeur Motorolla 68000?
Je le pense. L'ATxmega128A1U possède un bus de mémoire externe aussi gros que le bus du processeur 68k, et a beaucoup de flash et de RAM qui lui permettraient d'exécuter une version microcode du processeur 68k.
Il peut fonctionner jusqu'à 32 MHz et de nombreuses instructions prennent un cycle, mais même le pire des cas prend 5 cycles dans la mémoire interne. L'interface externe est plus lente, mais si vous choisissez une mémoire rapide, elle sera toujours beaucoup plus rapide que le 68k.
Le processeur 68k fonctionne non seulement 4 fois plus lentement, mais les opérations les plus rapides qu'il a nécessitent au moins 4 cycles d'horloge, et beaucoup prennent 2 à 4 fois plus longtemps, en particulier les accès à la mémoire.
Ainsi, avec une SRAM encore lente (selon les normes d'aujourd'hui) (disons, une partie de 70 nS à 8 Mo pour moins de 10 $), vous pouvez utiliser 0 état d'attente sur le processeur à 32 MHz et exécuter des cercles autour du 68k à 7 MHz. Par exemple, une simple instruction de déplacement sur le 68k qui prendrait 4 cycles à 7,61 MHz prend 525 nS. Une instruction de déplacement simple similaire sur l'ATxmega128A1U fonctionnant à 32 MHz prend 31 nS. L'AVR pouvait donc exécuter 16 coups au moment où le 68K en avait terminé un. Le 68k prend 50 cycles pour certains types d'interruption, tandis que l'AVR passe à l'interruption en 3 cycles - de sorte que l'AVR pourrait gérer une poignée d'interruptions dans le temps qu'il faut au 68k pour simplement sauter en un.
Je m'attends à ce que vous puissiez l'exécuter avec un cycle précis avec un effort minutieux si vous acceptez une gigue, bien que vous puissiez l'obtenir pour fonctionner parfaitement avec un cycle précis sans gigue si vous étiez méticuleux. Les processeurs AVR fonctionnent bien avec un overclocking modéré, vous pouvez donc probablement le faire fonctionner à 38,35 MHz et avoir 5 cycles AVR par cycle d'horloge de 68k.
Cela ne veut pas dire que ce serait facile, et il peut y avoir quelques instructions très délicates qui prendraient plus de temps sur l'AVR qu'autrement - mais même celles-ci peuvent être prises en compte avec une conception soignée.
Puis-je émuler une Sega Genesis avec un AVR Atmel 8 bits?
Non. Le Sega Genesis a, en son cœur, un processeur 68k, mais il a aussi un processeur de son (Z80) et un processeur vidéo dont vous auriez besoin de beaucoup plus de ressources pour émuler. Dans le diagramme ci-dessous, vous trouverez le processeur 68k dans le coin supérieur gauche - notez qu'il s'agit d'une petite partie de tout ce qui est nécessaire pour émuler un système Sega Genesis complet.
Ainsi, bien que vous puissiez facilement émuler le noyau 68k de la Sega Genesis, vous ne pourriez pas exécuter des jeux conçus pour la Genesis avec le seul microcontrôleur AVR. Émuler le 68k seul sur une puce serait déjà assez difficile - même si vous simplifiez les choses, je doute que vous puissiez intégrer les trois processeurs dans une seule puce AVR 32 MHz.
Cependant, vous pourriez probablement émuler ces deux puces avec deux autres AVR. Si vous visiez un écran LCD graphique plus simple qui ne nécessitait pas de synchronisation et de génération NTSC étranges, vous pourriez peut-être simplifier un peu les choses, et peut-être même mettre les deux fonctions sur une puce distincte.
C'est un énorme projet, cependant, certainement pas un projet de week-end. Si vous êtes au stade où vous n'êtes à l'aise qu'avec les cartes de développement Arduino, il peut être intéressant de créer un émulateur de processeur 68k simple et de connecter un peu de ROM et de RAM externes pour les accès à la mémoire. L'Arduino ATMega n'a pas d'interface de mémoire externe, mais vous pouvez également manipuler les lignes d'E / S et émuler cela. Si vous allez assez loin dans le projet pour émuler de simples programmes 68k, alors il vaut peut-être la peine d'abandonner Arduino, d'utiliser l'environnement de développement Atmel et une meilleure puce AVR avec une interface de bus externe, et vous pouvez commencer à lire et à exécuter cartouches. Vous pourriez même être en mesure de transférer des données vidéo et audio vers l'ordinateur et de les interpréter lors du traitement - c'est ''
Assurez-vous que vos routines d'émulation sont portables et vous pourrez passer à un meilleur processeur assez facilement pour ne pas être coincé.
Si le simple projet Arduino Mega ne va jamais très loin, vous n'avez pas gaspillé beaucoup de ressources sur ce projet. Si vous vous retrouvez déterminé à le terminer, passer à une puce Atmel plus performante ne sera pas si écrasant.
Je dis de l'essayer. Certains de ce que j'ai dit et d'autres l'ont dit peuvent sembler insurmontables, mais ne nous laissons pas vous gêner. Continuez à poser des questions chaque fois que vous rencontrez un obstacle et vous constaterez que la plupart des ingénieurs aiment relever un défi et vous donneront la compréhension et l'aide dont vous avez besoin pour aller loin dans cette voie.
L'émulation est très amusante.
la source
Aucune des autres réponses n'a mentionné que vous pourriez simplement obtenir une puce qui exécute le jeu d'instructions m86k en mode natif: la série Coldfire . Un certain nombre d'instructions ont été supprimées; s'ils ne sont pas trop fréquemment utilisés, ils pourraient être émulés en interceptant l'interruption "instruction invalide".
Cependant, vous devez toujours émuler le processeur vidéo Yamaha YM7101 et le processeur audio Yamaha YM2612. Vous pouvez soit essayer de créer des émulations logicielles dans un DSP beaucoup plus rapide, soit en créer une version FPGA. Peut-être basé sur les émulations FPGA existantes du Megadrive.
la source
Je suis sûr qu'il n'y a pas de processeurs avec 16 Mo de RAM sur puce.
Les "16 Mo de RAM" mentionnés dans certaines descriptions du 68000 font allusion au bus d'adresse externe 24 bits qui pourrait, en théorie, adresser un maximum de 2 ^ 24 octets = 16 Mo de RAM externe. Ma compréhension est que la grande majorité des systèmes qui utilisent le 68000 connectent beaucoup moins de 16 Mo de RAM externe.
En particulier, le Sega Mega Drive (alias le Sega Genesis) a 72 Ko de RAM et 64 Ko de RAM vidéo. C'est de la RAM externe . Ni son Motorola 68000 ni son Zilog Z80 n'ont de RAM ou de cache sur puce.
Je vous suggère de créer une deuxième question indépendante avec un titre qui décrit ce que vous voulez vraiment savoir, mais laissez cette question comme une question canonique sur la RAM du microcontrôleur pour aider les nombreuses personnes qui sont trompées par "16 Mo de RAM", ce qui signifie théorique DRAM externe maximale dans certains processeurs, tandis que "2,5 Ko de RAM" signifie SRAM physique réelle sur puce incluse dans d'autres processeurs.
(*) Quelques processeurs très haut de gamme produits après 2006 ont 16 Mo ou plus de mémoire cache sur puce, mais ces processeurs nécessitent encore plus de RAM externe - donc si vous avez vraiment besoin de 16 Mo de RAM, vous allez besoin de 16 Mo de RAM externe d'une manière ou d'une autre.
la source
Vous pouvez UTILISER un CORTEX -M4 à partir de la carte STMF432 ... très puissant avec beaucoup de mégaoctets de RAM et de périphériques
la source