Lannée prochaine, je vais enseigner une classe de microprocesseurs de 2 semestres à des étudiants de troisième année en EE. inscrivez-vous à la classe, les étudiants doivent avoir suivi des cours de programmation et de systèmes numériques.

Afin de motiver les étudiants avec une application réelle des concepts enseignés en classe, jenvisage la possibilité de confier des tâches les étudiants ont créé un émulateur pour un système plus ancien à partir de zéro, en tant que projet de groupe à compléter jusquà la fin du cours (qui dure, comme indiqué, 2 semestres).

Jessaye de choisir un bon système cible pour ce projet, lobjectif principal étant quil soit assez simple à émuler. Moins il y a de périphériques à émuler, mieux cest. Moins il y a de bizarreries et de bogues à répliquer, mieux cest. Je cherche à exposer les étudiants aux concepts importants du langage dassemblage, de lencodage des instructions, des modes dadressage, des registres CPU, des registres matériels mappés en mémoire, etc., et pas nécessairement à la supercherie nécessaire pour rendre les sprites assez rapidement pour créer un jeu vidéo intéressant avec la technologie des semi-conducteurs qui était disponible dans les années 80 à un coût acceptable. Je comprends que cela était nécessaire à lépoque; Jessaie juste de trouver un système qui nabuse pas trop de ces astuces. Idéalement, le système en question ne devrait pas « t nécessitent une émulation précise du cycle ou des astuces comme la poursuite de la ligne de balayage.

Une deuxième exigence concerne les performances. Les étudiants ne sont certainement pas familiers avec les techniques doptimisation logicielle, donc essayer dimiter même la première Playstation ou la Nintendo 64 se heurtera probablement à des problèmes de performances (peut-être même la SNES et la Genesis). À ce stade, les étudiants doivent seulement sinquiéter avec limplémentation de lémulateur correctement, pas efficacement. Lémulation du processeur sera certainement implémentée par un interpréteur, pas par un traducteur / recompilateur.

Enfin, je ne pense pas que les étudiants trouveraient lémulateur intéressant si, disons, juste affiché les valeurs de registre après lexécution dun programme jouet (bien que cela rende le projet beaucoup plus simple). Jaimerais choisir un système pour lequel les jeux ont été créés, même si ledit système nétait pas une console de jeux vidéo dédiée. Je pense que pouvoir exécuter des jeux sur lémulateur serait très motivant pour les étudiants.

Par exemple, en ce moment, je regarde la NES , mais cela semble encore un peu compliqué, en particulier le PPU. Existe-t-il des options plus simples?

Commentaires

  • Question intéressante. peut être important dajouter un plaidoyer pour que les réponses restent en dehors des combats habituels sur le meilleur système / cpu / vdu / etc. et se concentrer sur la partie didactique.
  • Il y a une contradiction apparente dans la question. dun point, lauteur veut se concentrer sur lémulation du CPU, de lautre point, il veut avoir aussi des images et du son émis par lensemble du système émulé. Si la demande de ce dernier est compréhensible, elle conduit à un travail tout aussi difficile sur émuler les périphériques, afficher des images et jouer des tâches sonores.
  • Ressource peut-être utile en supposant qu’il s’agisse d’une machine Z80 plutôt que d’un 6502: z80.info/decoding.htm sur le décodage algorithmique des instructions Z80 (sous réserve de quelques cas particuliers, mais il y en a). Exiger un émulateur de décoder réellement par algorithme plutôt que par recherche restreindrait la capacité des étudiants à copier et coller, tout en étant pertinent pour un cours sur les microprocesseurs?
  • Ce nest peut-être pas ce que vous recherchez, mais peut-être plutôt que décrire un émulateur (que je ‘ m en supposant quils fonctionneront sur leur PC), ils pourront peut-être démontrer les mêmes connaissances conceptuelles en travaillant avec du matériel réel. Demandez-leur de se procurer une carte de développement basée sur ARM Cortex M4, apprenez à travailler avec du métal nu.
  • Peut-être TI-83 …?

Réponse

Je « mets CHIP-8 vers lavant.

Ce système est essentiellement une machine virtuelle développée pour une raison quelconque. Il existe des jeux écrits pour le CHIP-8. Il a quelques opcodes, une pile, quelques minuteries et un affichage bitmap à basse résolution, mais cest assez simple pour que les premiers les émulateurs tiennent dans quelques kilo-octets sur les premiers ordinateurs 8 bits.

Il y a plus que quelques implémentations de référence que vous pourriez utiliser.

Il y a des jeux et ainsi de suite qui sont publics domaine déjà, comme ici pour que vous nayez pas besoin de fournir vos propres jeux.

Commentaires

  • Ayy pour Chip 8. Il ‘ est facile à trouver des implémentations dans de nombreuses langues et larchitecture est simple.
  • CHIP-8 est un excellent idée dintroduction à lémeu lation en raison de sa simplicité.Ayant déjà écrit un émulateur NES, je peux vous dire que lécriture du processeur était extrêmement longue et fastidieuse – et le 6502 est simple en ce qui concerne les processeurs. En revanche, CHIP-8 na que 35 instructions très simples. De plus, de nombreux systèmes reposaient sur des comportements de synchronisation précis entre le CPU et le reste du matériel, alors que CHIP-8 na pas une telle exigence.
  • Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
  • Je ‘ suis un programmeur expérimenté, mais Je nai jamais écrit démulateur. Après cette réponse, jai pensé:  » Hé, cette puce8 semble assez facile, je ‘ y passerai peut-être quelques heures « . Trois semaines plus tard, ‘ jessaie toujours de comprendre pourquoi les programmes continuent de sauter hors de lespace mémoire. Beaucoup de plaisir, aussi beaucoup de  » que diable « .
  • Je me demande sil y en aurait eu un obstacle à la suppression de lattente vblank de la routine plot-sprite et à lajout dune instruction vblank-wait explicite? Le CDP1802 nest pas ‘ un démon de vitesse, mais il pourrait presque certainement dessiner plus dun sprite par image en labsence de lattente vblank.

Réponse

Oh. Bonne question. Jessaierai de donner quelques indices, mais je considérerais que la question est trop large pour être résolue ici au lieu dune conversation plus significative. Néanmoins:


[…] charger les élèves de créer un émulateur pour un système plus ancien

Assez cool.

à partir de zéro,

Si cest censé être vraiment à partir de zéro et dans le logiciel, ce ne serait pas vraiment considérez que cest une tâche qui convient aux étudiants de première année dans un temps aussi limité. À moins quil ny ait un moyen de supprimer les exigences en temps réel (qui sont encore plus pertinentes pour les jeux), je préférerais être prudent.

En fait, puisquil sagit d EE, pourquoi ne pas faire de matériel réel? Il est toujours facile d obtenir (certains) processeurs classiques et les périphériques associés. Combiné avec un écran LCD moderne, leffort matériel est tout à fait faisable en quelques semaines avec beaucoup de détails.

en tant que projet de groupe à compléter jusquà la fin de la classe (qui, comme indiqué, dure 2 semestres).

Quelle pourrait être la condition la plus stricte.

Jessaye de choisir un bon système cible pour ce projet, le but principal étant quil soit assez simple à émuler. Moins il y a de périphériques à émuler, mieux cest. Le moins de bizarreries et de bogues à répliquer, mieux cest.

Cela semble être une bonne tentative. Et plus important encore, cela supprime certains systèmes apparemment simples (comme singleboarders) de la liste, car ils reposent sur une gestion complexe des périphériques dE / S (comme laccès en temps réel aux ports pour piloter des segments de LED de manière apparemment continue).

Je cherche à exposer les élèves aux concepts importants de lassemb langue, encodage dinstructions, modes dadressage, registres CPU, registres matériels mappés en mémoire, etc.,

Quelque chose qui peut être fait avec un matériel réel comme ainsi quune émulation, nest-ce pas?

Idéalement, le système en question ne devrait pas nécessiter une émulation de cycle précis ou des astuces comme la poursuite de la ligne de balayage.

Avec lexigence implicite dune sortie vidéo, cela nécessite une simple logique bitmap non accélérée.

Une deuxième exigence concerne les performances. Les étudiants ne sont certainement pas familiers avec les techniques doptimisation logicielle, donc essayer démuler même la première Playstation ou la Nintendo 64 se heurtera probablement à des problèmes de performances (peut-être même la SNES et la Genesis).

Je ne craindrais pas grand chose ici, car le matériel informatique réel est assez rapide. Les vrais problèmes ici ne sont pas la vitesse démulation, mais les aspects en temps réel – la synchronisation de diverses parties démulation – qui nécessitent une conception logicielle très soignée et affinée. Pas à prévoir ici. Tout à fait la partie « emballer le faisceau » que vous avez mentionnée.

À ce stade, les étudiants doivent seulement se soucier de limplémentation correcte de lémulateur, pas efficacement. Lémulation du processeur sera certainement implémentée par un interpréteur, pas un traducteur / recompilateur.

Pourtant, même pour les plus primitifs, la synchronisation en temps réel est nécessaire pour jouer à un jeu. Au moins une synchronisation de retracement décran est un must – pas du moins pour accélérer la simulation elle-même.

Le besoin inhérent des jeux dutiliser des effets de synchronisation – et de manipuler lécran synchronisé à un niveau plus fin que les images – est quelque chose qui rendra difficile lexécution de nimporte quel jeu du monde réel sur lémulateur proposé.

Je voudrais choisir un système pour lequel les jeux ont été créés, même si ledit système n’était pas une console de jeux vidéo dédiée. Je pense que pouvoir exécuter des jeux sur lémulateur serait très motivant pour les élèves.

Je suis tout à fait daccord ici. Une grande partie du succès des systèmes d’expérience et d’apprentissage d Andre LaMothe « repose sur la capacité de faire des jeux.

Par exemple, en ce moment, je regarde la NES, mais cela me semble encore un peu compliqué, en particulier le PPU. Existe-t-il des options plus simples?

Cela devient difficile car les exigences de base se contredisent. Seules les consoles / ordinateurs à succès ont un grand choix de jeux, mais ceux-ci ont également une structure matérielle plus complexe permettant de grands jeux.

Vérifions quelques systèmes bien connus. Je voudrais les séparer en Systèmes « simples » et « complexes » selon la complexité de leur logique vidéo (* 1)

Systèmes simples

Dans la première itération, ce sont tous des systèmes sans VDC / CRTC dédié.

  • Atari VCS – finalement le système ultime à utiliser pour apprendre lassembleur, travailler à un niveau de base extrême sans entre les deux et pas grand-chose à prendre en charge. « est lhomonyme du terme » course à la poutre « .

    Cela dit, cela peut encore être un système à rechercher, car les parties dépendantes de la synchronisation sont bien définies et (par rapport à toute autre vidéo) extrêmement simple et facile à émuler – sauf que ce ne sont pas des trucs de première année. De plus, il est extrêmement bien documenté sur les sources générales disponibles.

  • Commodore PET – Un système plutôt simple, spécialement depuis toute la partie vidéo peut être émulée de manière assez abstraite, mais les VIA doivent être, au moins en partie, émulés. Le plus important, il ne contient que deux sources de synchronisation (à côté de lhorloge).

    Un grand plus pour le PET (et les suivis) est la bonne documentation (également en raison de sa simplicité). De plus, bien quil comporte un CRTC, presque aucun jeu (ou autre logiciel) na utilisé de reprogrammation du tout, ce qui rend possible une émulation simple et incomplète (abstraite).

    À larrière, il y a seulement un nombre assez petit de jeux et la plupart dentre eux sont écrits en BASIC, ce qui peut nécessiter des recherches pour trouver la quantité dabstraction par rapport aux détails dans lémulation.

  • Apple II – Encore une fois, un système incroyable bien documenté avec beaucoup de logiciels. Une grande partie est basée sur lAssemblée. Bien que le matériel soit entièrement documenté et construit uniquement à partir de TTL, son fonctionnement nest pas vraiment simple et comme certains jeux dépendent fortement des bizarreries et du comptage des boucles pour un timing exact, lémulation peut devenir beaucoup plus compliquée que supposée à première vue.

    Un plus pour vous pourrait être que lApple II était assez populaire au Brésil (bien à lépoque).

  • TRS-80 – Ici aussi la logique vidéo est construit à partir de TTL mais bien plus simple que sur Apple. Dautres E / S similaires sont assez simples. Du côté négatif, il y a encore un nombre assez petit de jeux.

Jusquà présent, les vrais anciens, mais aussi certains systèmes plus récents peuvent être classés comme simples:

  • Sinclair Spectrum – Bien que la logique offre quelques astuces, les cloches & sifflent, cest une conception de bitmap en mosaïque simple. Jusquà présent, les chances sont bonnes pour une émulation, sauf que, comme dhabitude, les jeux reposaient beaucoup sur le timing, ce qui compliquait à nouveau lémulation.

    De même quavec lApple II, il y avait pas mal de clones au Brésil .

  • Un cas similaire peut être fait pour la famille ORIC

  • Atari ST – Cela peut être une surprise de nos jours de vue, mais lAtari ST ne comportait aucun matériel vidéo sophistiqué. Seulement 3 résolutions graphiques et un CLUT 9 bits pour jusquà 16 couleurs simultanées. Quelques points de synchronisation et une seule minuterie. Plus un processeur plus moderne et une puce audio dédiée. On dirait un match fait au paradis, si, enfin, si ce ne serait plus pour les programmeurs de jeux. Ici aussi, les logiciels impliquaient toute une pléthore de trucs pour créer des jeux géniaux (* 2).

Une première conclusion pour les systèmes « simples » est que si le matériel est peut-être moins complexe, le logiciel a fait un grand effort pour surmonter ce problème. En conséquence, il peut il faut dire que les systèmes moins complexes ne rendent pas nécessairement une émulation moins complexe, car il ny a pas plus de matériel différent à émuler, mais le matériel simple doit être suivi de très près en termes de timing pour faire fonctionner le code de jeu existant.

Systèmes complexes

Ce sont en général tous les systèmes avec un VDC sophistiqué

  • 9918 ff .- Il ne sagit pas tant dun seul système, mais finalement du VDC le plus couramment utilisé (TI la appelé VDP). Bien que conçu pour la TI 99/4, TI la vendu à quiconque était intéressé. Cela a abouti à la majorité de tous les systèmes (* 3) utilisant un 9918 ou lun de ses modèles suivants (9928/38/58 / …).

    Consoles de jeu comme Coleco Vision , Sega SG-1000 jusquau Master System un ainsi que des ordinateurs de TI 99/4 ou Memotech MTX jusquau tout le monde des machines MSX a utilisé cette famille.

    Sonne bien, nest-ce pas? Eh bien, bien sûr, il y a beaucoup de jeux à utiliser. De plus, un tel VDP aide à simplifier lémulation car il offre une séparation claire entre le processeur et laffichage et limite les «astuces» quun jeu peut utiliser à ce que propose le VDP, qui à son tour est clairement défini. Et encore une fois, cest le logiciel existant qui rend lémulation difficile, car, encore une fois, bien sûr, les programmeurs ont utilisé des astuces de chronométrage pour manipuler lécran au bon moment. Quelquun a-t-il mentionné « Racing the Beam »?

  • Commodore VC20, C64, C16, etc. – La même chose est vraie pour tous les ordinateurs domestiques Commodores. Bien quils diffèrent en complexité en ayant des sprites ou non, offrant des minuteries ou non et du son ou non, la base Le problème est le même que celui de la famille 9918: des logiciels utilisant certaines situations de chronométrage pour créer des effets de jeu.

  • Systèmes 6847 – Tandy CoCo, Matra Alice et autres présentent le même problème.

Je pourrais continuer avec des systèmes de jeu comme NES ou MegaDrive, mais je terminerai cette liste ici, car le principe devrait être clair maintenant: alors que certains systèmes peuvent sembler plus complexe à émuler, le vrai problème nest pas la complexité du matériel vidéo, mais à chaque fois quun programmeur «améliore» ce qui peut être fait par une programmation intelligente (* 4). Donc le vrai problème pour votre projet nest pas (tellement) le matériel (* 5), car cest le logiciel, en particulier les astuces et les outils utilisés dans les vrais jeux existants .

Cest particulièrement mauvais, car vous voulez utiliser (tel que je le lis) des jeux existants comme motivation. Il ny en aura pas beaucoup en cours dexécution une émulation en temps réel moins difficile.

Réduire cette dépendance réduira le nombre de jeux qui fonctionnent correctement. Le réduire à un niveau qui lui permet dêtre manipulé dans un cours limité dans le temps, rendra presque impossible de trouver des jeux appropriés.

Conclusion: Trouver le le bon compromis est un moyen, mais qui demandera des recherches considérables tout en limitant la convivialité.


Maintenant, il est peut-être possible dattaquer ceci sous un angle légèrement différent. Essayons quelques-uns:

  • Utilisation de lancien matériel existant:

    Bien que cela soit prouvé (* 6) pour fonctionner, offre la plus grande compatibilité et la plus grande facilité dutilisation grâce à des environnements de développement ouverts, il peut manquer lattrait de « construction » pour les étudiants en EE.

  • Utilisez des systèmes de jeux éducatifs existants:

    Des systèmes comme Andre Les LaMothe « s XGS sont dexcellents outils pour plonger dans la construction et la programmation détaillées du matériel. Bien sûr, certaines soudures sont nécessaires (il existe une version prête à lemploi), ce sont des systèmes définis par logiciel presque complets, entièrement documentés et offrent une énorme bibliothèque de jeux. Sans parler de ses livres sur la programmation de jeux.

    Un avantage appréciable est que les étudiants peuvent ramener le système à la maison et jouer même après la fin du cours.

  • Construisez votre propre système simple:

    Prenons un CPU classique (6502 par exemple), un peu de RAM, FLASH et un VIA plus un FPGA pour implémenter un CRTC très basique et cest fait. Les étudiants le souderont, pourront en apprendre davantage sur les composants et leur interaction, y compris lutilisation du FPGA (qui pourrait être un must de toute façon aujourdhui), puis exécuter leur logiciel sur du matériel réel. Même avec de petits nombres, il devrait être possible de produire une telle planche autour de 50 euros ou moins. Comme lidée XGS, cela « fonctionnera après la fin du cours – y compris le sentiment dappartenance en tant que leur système.

    Bien sûr, les étudiants devront écrire leurs propres jeux, mais des jeux simples peuvent être faits en un temps assez court – sans compter que les cours de suivi peuvent aussi bien utiliser les jeux que la classe précédente a écrits.

  • Faites une émulation de « votre propre » système

    Un peu comme avant, sauf que tout est virtuel. Il a lavantage dêtre un puits système défini et ferme, en particulier celui où il ny a pas de limitations dues à une émulation moins « parfaite » – lémulation est parfaite par définition et toutes ses bizarreries sont celles du système. Linconvénient est encore une fois la partie logicielle.

  • Utiliser du matériel « logiciel »:

    Il y a un projet de Neil Franklin créant un certain nombre de composants système généralisés tout comme les ordinateurs classiques, mais en utilisant des micro-contrôleurs au lieu de puces dédiées. Il combine lémulation avec du matériel réel. Bien que les composants soient encore développés en tant quémulation, ceux-ci sont destinés à fonctionner dans un microcontrôleur et à être utilisés comme des puces «réelles». Un système peut être mis en place en utilisant un module SoftCPU émulant par exemple un 6502 avec un peu de RAM et de ROM, combiné avec un SoftVGA fournissant un terminal comme une interface vidéo et un SoftPS2 émulant un clavier et une souris. Tous sont connectés via un bus parallèle ou série (SPI) permettant lajout dautres composants qui peuvent également être présentés à lémulation.

    En plus dêtre tout au sujet de lémulation, il comporte une quantité limitée de matériel qui peut être fait sur une maquette (cependant, il nest jamais trop tôt pour commencer à souder), cela montre également une tâche assez typique de lingénierie daujourdhui – remplacer la logique traditionnelle par des micro-contrôleurs – en utilisation pratique.

    Le Le résultat est un système offrant le toucher et la sensation dun vrai (ancien) ordinateur tout en étant construit avec du matériel moderne exécutant des émulations parallèles.

  • Utilisation dun émulateur configurable:

    Non, il ne sagit pas de MAME ou similaire, mais dun framework démulateur écrit en JavaScript, qui gère les parties génériques (y compris le timing), où vos élèves ajouteront leurs émulations (ce qui était un objectif, nétait-ce pas?) pour former un système complet. Puisque JS est livré en source, même le Framework lui-même peut être modifié.

    En fonction de la qualité de chaque émulation, cela peut être utilisable pour tout, dun simple système de démonstration à une reconstitution complète des années 1980 ordinateur.

Alors, peut-être que certaines des variantes ci-dessus peuvent être un bon début?


* 1 – Je me concentrerai uniquement sur la vidéo (et CPU) pour rester simple. De plus, la vidéo seule fonctionnera déjà bien pour éliminer les systèmes complets. Le son ajoutera une autre dimension et peut le compliquer bien au-delà de la portée de ceci.

* 2 – Jetez un œil à Xenon. Un défilement vertical révolutionnaire avec plusieurs couches de décalage de nombreux objets animés, tous fonctionnant très bien dans le logiciel. En fait, il était si bien réglé que son portage sur lAmiga (généralement) plus performant (graphiquement) a pris un certain temps et a abouti à un jeu un peu moindre.

* 3 – Des systèmes conçus pas nécessaires unités vendues. Là encore, certaines consoles de jeux ont plus que du succès, donc elles peuvent même obtenir la majorité en nombre.

* 4 – Les articles de blog du développeur principal du Glide64 pour les émulateurs N64 a écrit une série en plusieurs parties ( Intro , P .1 , P.2 , P.3 ) darticles de blog sur les obstacles quil a dû surmonter pour faire fonctionner la partie démulation vidéo – tous ne concernent pas la complexité de lémulation du matériel, mais toutes les manières dont le processeur a modifié et peaufiné la sortie à côté de la logique vidéo. Cest dautant plus remarquable que le N64 est déjà un système plutôt absract et fermé.

* 5 – En fait, je considérerais un matériel vidéo plus complexe comme une excellente leçon pour les étudiants en EE, car cela montre bien ce que peut être fait avec quelques portes au lieu de piles de logiciels – dautant plus quils sont sur le point de faire du matériel plus tard, nest-ce pas?

* 6 – Stefan Höltgen à FU Berlin par exemple utilise de vieux systèmes de jeu dans ses classes pour initier les étudiants (non-EE) au matériel réel et à la programmation réelle et à leur implication pour les tâches quotidiennes (et les jeux).

Commentaires

  • @Tommy Eh bien, jaimerais éviter cela, car il ny a pas de réponse facile. Le plus important ici pourrait être que, bien que le Z80 soit quelque peu  » excentrique « , le 68k est tout sauf simple. Avec tous les mots dextension (jusquà CPU32), une seule instruction peut avoir jusquà 11 mots (22 octets) et les décoder est un désordre sérieux. Là encore, tout dépend de la façon dont lémulateur est constitué. Le Z80 est un 8080 avant plutôt droit, facile à émuler, avec quelques modificateurs, qui peuvent être facilement manipulés. Pour le 68k, même seulement loriginal, ce sera beaucoup plus de travail.
  •  » tâche adaptée aux étudiants de première année dans un temps aussi limité.  » Il a dit que ce sont des étudiants de 3e année, pas des étudiants de première année, et quils ‘ ont déjà rempli plusieurs conditions préalables.
  • @ wizzwizz4 Eh bien, quelle que soit notre opinion personnelle, JS est lhéritier légal de BASIC. Sérieux et à tous points de vue! Pensez-y.Non seulement il exécute n à côté de chaque ordinateur réel, il ‘ est même installé par défaut, et il ny a pratiquement aucun moyen de sen débarrasser sans perdre beaucoup de fonctionnalités. Encore plus, pensez à combien de logiciels lents et incroyables sont écrits dans JS – la preuve parfaite, nest-ce pas ‘?
  • @Raffzahn It ‘ s complètement différent Dune part, BASIC avait plusieurs implemen incompatibles … Ohhh! Il est le successeur de BASIC!
  • Ils ‘ ne sont toujours pas des étudiants de première année, qui sont des étudiants de première année. Et je pense que vous devriez donner au PO le bénéfice du doute quil ne ‘ attribuer le projet si les étudiants ‘ larrière-plan requis.

Réponse

Il y a quelques bonnes idées jusquà présent.

Mais quelque chose à considérer.

Si vous faites quelque chose comme une machine CP / M, ils « sont vraiment assez basiques et simples, dautant plus que tout est isolé non seulement par le BIOS, mais aussi par la nature IN / OUT de la famille 8080 / Z80.

Il ne me semble pas gênant davoir une machine CP / M comme objectif du premier semestre. (Je ne connais pas votre programme)

Mais, par exemple, une machine CP / M de base na pas besoin de précision de cycle, elle na pas besoin dinterruptions, la chose la plus compliquée à faire est dinterroger le clavier pour voir si une touche a été enfoncée. (Contrairement à la surveillance du keydown et du keyup ou autre.)

Ensuite, au deuxième semestre, vous pouvez ajouter les exigences telles que linterfaçage à une puce graphique. Linstance ci-dessus du SG-1000 pourrait facilement être une machine CP / M au premier semestre, puis facilement transformée en SG-1000 au deuxième (puisque vous avez terminé la partie Z80 au premier semestre) .

Enfin, je pense quil incombe à votre classe davoir un programme dacceptation que les élèves peuvent exécuter pour vérifier leur CPU. Peu de choses plus excitantes que de déboguer un mauvais CPU, en particulier avec le langage machine que vous ne connaissez peut-être pas .

La communauté 6502 a des programmes de test qui peuvent vérifier quun CPU exécute correctement toutes les instructions, je ne sais pas ce qui est disponible pour les autres CPU.

Et si cest une consolation à la portée, jai écrit à la fois un simulateur et un assembleur associé pendant 2 semaines de vacances de Noël, si cela vous aide sur lampleur des projets réels. Les processeurs de base sont assez simples.

Commentaires

  • Sur le Z80, FUSE fournit des tests bien que tous ne soient pas génériques ou nécessairement corrects quant au cycle exact Horaire; ils ‘ sont également au format texte ad hoc mais je ‘ les ai transcrits en JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… – utilisez tests.in.json pour définir les états initiaux et découvrir comment longtemps vous devriez courir, puis tests.expected.json pour vérifier les résultats. Il y a ‘ s aussi zexall et zexdoc, à lorigine des fichiers CP / M mais largement adaptés et très lents. Passer le premier nécessite un tas de choses non documentées pour être correct, le second ne ‘ t.
  • … et la seule chose que je ‘ que jai jamais trouvé pour le 6809, en supposant que quelquun pense à suggérer un Vectrex ou Coco / Dragon, est contenu dans une suite de tests de machine darcade Williams plus large à seanriddle.com/wetsold.html . Pour le 6502, je suis tout à fait daccord avec les tests de Klaus Dormann, Wolfgang Lorenz et AllSuiteA, qui semblent tous être beaucoup plus importants que les tests Z80 ou 6809.
  • @Tommy En ce qui concerne Je ‘ m conscient, que chacun des tests de Fuse ‘ est précis au cycle. Veuillez signaler les bogues sils ‘ ne sont pas 🙂
  • @PhilipKendall voir mon courriel du 29/5/2017 à fuse-emulator-devel re: DJNZ et si le décalage est lu lors dune dernière itération. Conclusion dAlan Cox sur le fait que le comportement testé de FUSE ‘ est correct était quil ‘  » ouvert à linterprétation  » en fonction des sources disponibles. Jai donc pensé que  » pas nécessairement correct  » était juste. Jaurais probablement dû être clair cependant: je nai trouvé quune poignée décarts dans linterprétation des preuves de votre équipe ‘ et la mienne. Toutes mes excuses pour la mauvaise forme à ce sujet.
  • @Tommy –  » Conclusion dAlan Cox sur le fait que FUSE ‘ est testé le comportement est correct était quil ‘ s  » ouvert à linterprétation  » en fonction des sources  » …même si jai beaucoup de respect pour ce que fait Alan, il ‘ est assez facile de vérifier si le comportement testé est le même que celui dun processeur Z80 réel (en particulier pour les versions CMOS qui peut être exécuté sur une maquette avec des fréquences dhorloge faibles afin de mettre en place des tests détaillés très simplement), donc cest certainement un cas où sil pense quil y a quelque chose de mal à ‘, il devrait être capable de le démontrer très facilement.

Réponse

Puis-je suggérer le SG-1000 ?

Le système nest guère plus quun regroupement de trois puces standard – le Z80, le TMS9928A pour les graphiques et le SN76489 pour le son, avec les contrôleurs comme des groupes stupides de commutateurs NO (normalement ouverts).

Dans le logiciel ou le matériel, vous pouvez simuler ou émuler nimporte quelle partie de cela de manière isolée ou tous ensemble pour produire le système complet.

Le Le système utilise des ROM simples non commutées par banque pour ses jeux, et elles y ne comptez pas sur des astuces telles que les interruptions au milieu de lécran ou le comptage de cycles pour produire leurs effets. Juste une seule carte de tuiles et un certain nombre de sprites sur le dessus. Je suggère que cest beaucoup plus simple quun système contenant de nombreux composants internes en interaction et des cartouches intelligentes comme la NES.

Vous devez fournir vos propres jeux à émuler plutôt que de les distribuer sans licence matériel sous copyright bien sûr.

Commentaires

  • … et, pour mémoire, ColecoVision est exactement la même collection de composants, avec des connexions différentes manettes logiques et très légèrement plus compliquées. Ainsi, un émulateur SG-1000 est généralement facile à étendre pour prendre en charge les deux.
  • Il convient également de noter que le 9918 est une puce complexe, avec des sprites, des modi complexes et des données, comme il ne la fait ‘ Je ne veux pas utiliser. Nest-ce pas ‘ T-il?

Réponse

Un simple, Un ordinateur simple comme le ZX Spectrum semble raisonnable – Mais il y a tout simplement trop de bons émulateurs pour en faire une option utile. Je pense aussi que le 6502 est plus facile à émuler.

Donc, une option possible pourrait être les systèmes Oric-1 ou Atmos by Tangerine , qui utilisait une mémoire 6502, non mise en banque, pas de puces personnalisées sauf une simple vidéo et un tampon dimage relativement simple. Il est également de loin moins connu que le Spectrum, mais il existe des logiciels (jeux) disponibles pour apporter quelques tests de compatibilité simples (je pense quun certain « sentiment daccomplissement » est extrêmement important pour les étudiants). Il existe un certain nombre démulateurs déjà disponibles pour lAtmos (trois, à ma connaissance), mais leur nombre est limité, ce qui permet de savoir facilement si quelquun a triché et copié simplement du code.

Aucun des Les jeux Oric étaient si sophistiqués à ma connaissance que vous auriez besoin dune émulation 100% exacte du cycle pour exécuter les jeux,

Commentaires

  • I ‘ d soutient que larchitecture Oric décourage les courses raster en nayant pas de canal latéral de registres de contrôle vidéo et en nétant pas configurée de manière à ce que la course puisse éventuellement augmenter votre résolution de couleur (par opposition à un spectre). Sil ny avait que deux tampons HIRES, je ‘ d le déclarer avec plus de confiance. Seriez-vous daccord avec cela?
  • @Tommy Je ‘ ne suis pas trop familier avec les circuits vidéo Oric. Ce que je dirais en tout cas, cest que lOric avait une durée de vie si courte et une base dutilisateurs si limitée que des techniques sophistiquées pour peaufiner la vidéo comme nous le savons du ZX Spectrum nétaient pas ‘ t développé (du moins pas pendant la vie active de lordinateur, il y a ‘ un certain nombre de démos intéressantes ici demozoo.org/platforms/ 49 )
  • Oh, alors je ‘ Je fournirai un meilleur raisonnement: la puce vidéo Oric a un état modal, y compris le mode texte ou graphique, mais non registres exposés. Tout est défini par des octets de contrôle dans le flux vidéo, y compris les attributs de premier plan et darrière-plan. Les gens ont tendance à se plaindre de cela parce que cela signifie que si vous voulez des graphiques sans interruption, vous ‘ êtes limité à quatre couleurs par ligne, deux d’entre elles étant les compléments au niveau du bit des deux autres. Certains des jeux modernes ont toujours lair vraiment bien – par exemple. Stormlord youtube.com/watch?v=QSDy-BC580M
  • @Tommy Les attributs de série rendent la programmation un peu plus délicate, je ‘ d suppose, mais la quantité de conflit dattributs est encore meilleure que sur le ZX Spectrum, je pense.
  • Xenon 1 a besoin dun cycle exact, sinon il se bloque lorsque le vaisseau explose (avertissement: jai écrit un émulateur oric pour lamiga appelé amoric et je suis tombé sur ce problème, mais uniquement sur ce jeu même)

Réponse

En fonction de vos critères et de la nécessité de garder le projet intéressant pour vos élèves, je « vous recommande considérant sérieusement le système darcade Vectrex , qui a été vendu par Milton Bradley au début des années 1980.

entrez la description de limage ici

Parce que le Vectrex est unique en utilisant un affichage vectoriel, plutôt quun affichage raster, il ne le fait pas nécessite lémulation de tout matériel vidéo compliqué. Laffichage est géré par le processeur, et laffichage lui-même est simple à émuler sur un système moderne et avec de bonnes performances.

Outre lémulation de laffichage vectoriel, le processeur ( Motorola 6809), et la puce E / S (MOS 6522), ne représentent pas trop de muc Cest un défi car ce sont de simples parties 8 bits qui sont très bien documentées.

Le modèle de mémoire est également très simple sans aucun schéma bancaire que je connaisse. Il existe une puce sonore PSG commune dans le Vectrex, mais lémuler pourrait être considéré comme un « crédit supplémentaire ».

Contrairement à dautres consoles de jeu simples du début des années 1980, les jeux Vectrex ont plutôt bien résisté, étant donné sa capacité à restituer des graphiques monochromes lisses, y compris le fil de fer 3D. Ceci est davantage mis en évidence par la popularité du développement moderne « home brew », dans lequel les développeurs continuent de créer de nouveaux jeux Vectrex.

Un dernier avantage pour le Vectrex est que la ROM système dorigine est librement distribuable.

Commentaires

  • Sauf, le vectrex repère également bien le ‘ Racing the Beam ‘ cathegory, ‘ t-il?
  • @Raffzahn, si je comprends bien, le processeur Vectrex contrôle le faisceau délectrons – exactement le contraire dune situation  » faisant la course avec le faisceau  » où le logiciel doit effectuer des changements détat précis suivre un affichage de balayage raster chronométré en externe.
  • @Mark It ‘ est la même chose avec le VCS. Ici aussi, le faisceau est contrôlé par le CPU. Sans que le processeur accède à WSYNC à chaque ligne et avant que la ligne ne soit terminée, lécran faiblira. Et pour autant que je sache le PO, il ‘ est exactement sur le point de ne pas recréer un système avec des exigences de synchronisation strictes – qui sont essentielles pour le Vectrex.
  • @Raffzahn: Le CPU dans le VCS contrôle la verticale, mais il ne contrôle pas lhorizontale. Il ‘ nest pas inhabituel pour un jeu de produire des dizaines, voire des centaines de lignes de balayage sans un WSYNC intervenant. En labsence de WSYNC, le faisceau sera à la même position horizontale tous les 76e cycle. Le stockage de WSYNC est souvent le moyen le plus simple dattendre que le faisceau atteigne le côté droit de la région affichée, mais ce ‘ est loin dêtre le seul. Un programmeur si enclin pourrait exploiter les détails complexes du mouvement et des comportements des sprites pour écrire un jeu qui na jamais utilisé WSYNC du tout.
  • Euh, les amis, nous parlons ici dun émulateur. Il ny aura pas de problème avec la décoloration des phosphores alors que le processeur émulé prend trop de temps pour dessiner limage suivante. Il ny a pas de  » faisceau  » et il ny a certainement aucune raison pour laquelle lémulateur aurait besoin de  » race  » car laffichage de lémulateur restera assez statique aussi longtemps que nécessaire entre les images.

Réponse

Créer un émulateur à partir de zéro est une tâche relativement énorme, en particulier pour les étudiants inexpérimentés et peut savérer problématique. Vous devez donc vraiment faire attention à la plate-forme à émuler et aux informations à partager / utiliser. Pour moi, le meilleur choix est une plate-forme ZX 48K car je grandissais dessus et je suis familier avec son fonctionnement interne donc la réponse sera biaisé par cela … Mais nous devons garder à lesprit que de nos jours, les étudiants ne le voyaient pas / ne lutilisaient pas / ne le savaient généralement pas autant que nous … Ce que vous devez faire est:

  1. émulation correcte des isets du processeur

    même sil existe des tonnes de documents sur les jeux dinstructions Il faut faire attention car par exemple sur le Z80 les 99,99% dentre eux contiennent des erreurs. Vous devriez donc choisir un ensemble de références testé pour eux, vous êtes maintenant correct (ou au moins fondamentalement fonctionnel).

    Par exemple, voici mon iset Z80 passant ZEXAL avec 100% de succès:

    La plate-forme Z80 a un avantage majeur et cest quil existe de nombreux testeurs pour cela, comme ZEXALL Exerciseur qui peut beaucoup aider à déboguer lémulateur.

    Je pense quil y a aussi des versions pour i8080 mais je ne connais pas de tels testeurs pour famille de processeurs différente.

  2. Timing

    bien pour lémulation de base la méthode des tics dhorloge (ou throttling) suffit ce qui est bien connu et utilisé … je ne vois aucun problème ici. De nos jours, les ordinateurs ont une résolution relativement bonne pour le timing (sur PC: RDTSC, sur Windows PerformanceCounter, …).

    Lémulateur de base peut ignorer la CONTENTION de la plate-forme émulée mais attention certains OS / jeux / applications pourraient être rendu inutilisable sil nest pas correctement émulé. Cela ne vaut pas seulement pour les démos. Le timing habituel sur les vieux ordinateurs était dérivé dune interruption (généralement une actualisation vidéo) et dun nombre limité de cycles où il était possible de sexécuter avant. Mais avec contention, le nombre dinstructions exécutées pendant le même temps peut être très différent et certains programmes peuvent déborder et les endommager ou se figer. La CONTENTION est la chose la plus difficile à implémenter avec des tics dhorloge donc vous devriez léviter à tout prix … Dun autre côté, avec les timings de niveau MC, cest vraiment facile et juste quelques lignes de code.

  3. Son

    il sagit dun problème dépendant de la plate-forme et vous devez choisir lAPI utilisée pour son entrée / sortie correctement. Par exemple sur Windows, la seule option utilisable est WAvEIN / WAVEOUT en raison de sa faible latence et de sa facilité dutilisation. DirectX est inutilisable (du moins au moment où jessayais de lutiliser pour une telle tâche) en raison de latences élevées et des rappels ne fonctionnant pas.

    Jutiliserais une approche tamponnée au lieu de la conduite directe du haut-parleur pour que votre émulation puisse exploser le temps dexécution au lieu de exécution correcte au niveau MC (ce que je fais de toute façon mais je doute que les étudiants puissent le faire dans le temps imparti).

  4. Vidéo

    Celle-ci dépend également de la plate-forme. .. et vous devez utiliser lAPI que vos étudiants connaissent. Même le traçage de faisceau est relativement facile à mettre en œuvre avec une simple image bitmap … Sur des ordinateurs comme ZX, lordre Scanline a une signification particulière et peut être très gênant pour les codeurs débutants, il est donc préférable dutiliser des tables de traduction LUT convertissant entre ladresse et la coordonnée y en arrière et en avant.

    La plupart des anciennes plates-formes utilisaient un taux de rafraîchissement de 50 Hz / 60 Hz et une résolution relativement petite, de sorte que de nos jours, même avec une émulation pas bien optimisée, ils devraient encore être assez rapides pour cela. Sinon, sauter des images est également une option …

  5. autres matériels et périphériques

    Le minimum absolu est la mémoire RAM / ROM et le clavier. La mémoire est généralement très simple, juste un tableau statique et / ou des éléments de changement de page … Le clavier peut être émulé en réglant les E / S en fonction des touches enfoncées. Les E / S peuvent également être mappées en mémoire sur une matrice, tout comme la mémoire. Le piégeage de la routine ISR est également une option, mais cela rend le clavier inutilisable pour les gestionnaires de touches personnalisés.

    Je ne me soucierais pas des périphériques FDC, AY, etc., car lémulateur doit être aussi simple que possible. Mais si vous avez de la chance, certains étudiants auront peut-être une longueur d’avance sur d’autres avec ce projet. Pour ceux que vous pourriez suggérer d’implémenter des fonctionnalités intéressantes telles que FDC, DMA, même un vrai son de carte son (pour de vraies bandes ou des lecteurs audio) qui permet de nombreuses fonctionnalités intéressantes, par exemple voir:

  6. Fichiers

    Je choisirais les formats de fichier Z80 / SNA à Utiliser TAP / TZX est bien mais dès le départ, lémulateur serait assez bogué, donc les routines de chargement peuvent ne pas fonctionner correctement, ce qui rend lutilisation et le débogage très difficiles.

  7. ROM

    cest la partie la plus problématique car de nombreuses ROM de plate-forme ne sont toujours pas gratuites et en les extrayant / les téléchargeant / les utilisant pour émulation, vous pourriez risquer des problèmes juridiques.

    Daprès certains commentaires ici, il semble que les ROM ZX sont maintenant du domaine public … et il y a aussi des ROM commentées pri nts là-bas, ce qui facilite beaucoup le débogage des premières étapes de lémulateur (lorsque rien ne fonctionne encore).

    Mais vous devriez toujours considérer Émulation et trucs juridiques surtout si les émulateurs seront placés quelque part sur Internet

Voici quelques liens de contrôle qualité associés à moi:

Réponse

Cherchez-vous un système qui na pas été beaucoup émulé? Je suggère de rester dans les ordinateurs 8 bits (ou les premiers simples 16/32 bits), ZX Spectrum 48k est un système relativement simple – très bien documenté, pas de sprites, pas de puce audio, non Banques de RAM, E / S simples, si graphiques multiples (bien quavec une disposition étrange), aucune émulation parfaite de cycle requise, CPU bien connu, manipulation facile de cassette (pourrait être rendue encore plus facile par des pièges ROM). Il existe des tonnes de jeux, dont beaucoup avec des licences permissives.

Linconvénient: il y a une énorme quantité démulateurs disponibles, beaucoup eux-mêmes de la catégorie rétro, et beaucoup avec du code source disponible, donc le danger de tricher et de copier un autre code est élevé.

Et bien sûr, travailler sur un émulateur dun système précédemment non émulé offrirait un avantage supplémentaire du sentiment daccomplissement.

Commentaires

  • Javais le même instinct, mais je prolongerais en suggérant que SNA et Z80 et des formats de snapshot suffisamment bien définis dont vous avez besoin ‘ t même vous soucier de lémulation de bande. Et, que ‘ s soyons honnêtes, TZX est un peu un miasme à ce stade.
  • Je crois que la ROM Spectrum est maintenant dans le domaine public, ce qui peut aider (ou rendre les choses trop faciles)
  • Le ZX Spectrum est un excellent exemple de matériel simple, mais aussi une programmation assez complexe de comptage de cycles (Racing the Beam) pour obtenir des effets de jeu utilisables.
  • @Tommy Oh, je ne suggérerais jamais le ZX80 / 81 pour la même raison. Et bien que ce ne soit pas un vrai buff du spectre, jai vu du bon code dépendant du timing pour cela. La plupart des manipulations décran prominet après que cette partie a été affichée, mais avant quelle ne sexécute une fois. Cest ‘ un problème très simple rencontré sur un grand nombre de systèmes. Pas de gros problème, mais dépend du moment. Par exemple, des schémas démulation simples qui limitent uniquement la vitesse au niveau dune trame produiront de la merde sur des hôtes démulation plus rapides … et ainsi de suite.
  • @Stormcloud La ROM Spectrum nest pas dans le domaine public, bien que lautorisation ait été autorisé à le distribuer pour une utilisation avec des émulateurs. Les ROM ZX80 et ZX81 ont été publiées sous GPL.

Réponse

Puis-je suggérer de jeter un œil à quelques premiers jeux darcade? Plus précisément, ces deux plates-formes 8080 / Z80:

  • Midway 8080 – Développé en 1975 et alimente Space Invaders . Utilise un tampon de trame noir et blanc de 256x224x1 bits dans la RAM.

  • VIC Dual – Sega / Gremlin « s plate-forme conçue en 1977 – le jeu le plus connu est Carnival . La vidéo est un tableau de 32 x 28 de 8 x 8 caractères (tous en RAM) et peut prendre en charge un simple palette de couleurs, mappée sur une PROM.

Celles-ci sont très simples à émuler une fois que lémulation du Z80 fonctionne. Il ny a pas dastuces de scanline amusantes ou détats dattente bizarres du processeur. Joueur les contrôles sont disponibles via des ports dE / S bitmap.

Vous pouvez jouer avec ces plates-formes de manière interactive sur http://8bitworkshop.com/ (Divulgation complète: je dirige ce site et je suis lauteur des livres liés sur le site qui décrivent ces plates-formes)

The Apple] [est également un bon choix pour une plate-forme basée sur 6502, bien que le sous-système vidéo soit plus compliqué que dans les deux plates-formes darcade.

Commentaires

  • Pour quoi il ‘ s vaut, je pense que Space Invaders est une suggestion inspirée. Si la mémoire le permet ‘ s juste un 8080 avec un écran bitmap de 1bpp, quelques ports IO pour les contrôles, aucune tentative de course du raster, audio qui est juste de la forme  » déclencher le bruit X maintenant « , des exigences de précision très détendues, et cela produit un jeu quils essaient encore parfois de vendre maintenant. Cest ‘ que le problème de légalité qui pourrait donner une pause, bien que je ‘ soit toujours flou sur les exceptions académiques.
  • Que ‘ est à peu près correct, il y a ‘ également une puce externe qui aide avec le 8080 ‘ s absence de levier de vitesses à barillet. Il ne devrait y avoir ‘ aucun problème de légalité émulant le matériel (il ny a ‘ aucun BIOS ou autre code sous copyright) et ‘ est assez facile à écrire votre propre jeu, par exemple: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c

Answer

PET ou TRS80 peut fonctionner bien. Matériel simple avec du texte à lécran pour quils puissent être émulés avec une sortie de texte simple, ajoutant initialement du code pour leurs jeux de caractères impairs plus tard et peu susceptibles de contenir beaucoup de code de comptage de cycle exact.

Idée bonus après si vous opter pour un PET en ajoutant le support C64 donnerait des graphiques.

Le 6502 est probablement plus simple à imiter.

La dernière pensée pourrait être lOhio Scientific Superboard II ou dans son incarnation britannique le UK101 car je ne pense pas quil dispose de matériel vidéo reprogrammable.

Commentaires

  • Oui, les trois (PET, TRS, Superboard (jai totalement oublié à propos du dernier)) sont dexcellentes machines simples et idéales pour les émulations. Mais il manque également une bonne sélection de jeux prêts à lemploi. Sans parler de la couleur et de ce que les gens peuvent sattendre aujourdhui.

Réponse

Le PDP-8 numérique est très architecture simple pour laquelle il peut être facile décrire un émulateur. Voici quelques raisons à cela:

  • Seulement 8 instructions de base
  • Aucune interface vidéo, etc. à émuler, uniquement des E / S de terminal
  • Pas besoin de précision du cycle, la série réelle de machines elles-mêmes ne garantissait pas le même comportement dans les différentes implémentations
  • Peut commencer par une configuration simple (par exemple une machine 4Kword exécutant FOCAL-69), et progressivement rendre lémulateur plus complexe (par exemple une machine 32Kword avec arithmétique étendue, exécutant OS / 8 à partir dun disque RK05)
  • Beaucoup de manuels disponibles en ligne
  • Les diagnostics MAINDEC et leurs instructions sont disponibles en ligne, qui peuvent être utilisé pour tester que lémulation fonctionne correctement

Cela peut ne pas couvrir toutes vos exigences, par exemple les E / S mappées en mémoire, mais cela inclut certainement des choses comme le décodage dinstructions et les modes dadressage. de la documentation va jusquau niveau matériel de base qui pourrait être approprié pour un cours dEE.

Commentaires

  • Un point intéressant est que la plupart des systèmes mentionnés ci-dessus ont des processeurs Z80 ou 6502, qui manquent tous les deux en termes de modes dadressage pris en charge. Si la couverture des modes dadressage est importante, le PDP-8 en a une bien meilleure sélection à démontrer.
  • Pour le jeu  »  » aspect de la question, je crois que Adventure est toujours maintenu / ressuscité pour les architectures PDP (mais vérifiez que – je me trompe peut-être).
  • @TobySpeight You ‘ a raison, il est maintenu ou ressuscité, mais pour le PDP-10 , qui est totalement incompatible avec le PDP-8.

Réponse

Loption ZX Spectrum a déjà été indiquée: sa force est le matériel IO tout à fait simpliste et le fait que de nombreux jeux existants ne nécessitent PAS de cycle précis -émulation correcte de toutes les bizarreries à la seule exception du son (rien de proche du son correct sans émulation exacte du cycle du CPU et sous-échantillonnage correct du flux sonore intermédiaire 1 bit produit par le CPU).

Toute autre option de matériel de jeu comme NES, G Enesis et toutes les machines similaires basées sur des sprites ne sont évidemment pas une option, car il faut beaucoup de temps pour apprendre le matériel complexe, développer des moyens de lémuler, contourner les lacunes de lémulation, etc. Par exemple, même Super Mario « simple » jeu sur NES ne fonctionnera pas à moins que le bit de collision de sprite dans PPU ne soit correctement émulé.

Les options restantes à mon humble avis sont les suivantes:

  1. IBM PC basé sur le mode texte précoce
  2. nimporte laquelle des machines CP / M existantes
  3. (sans compter les « grosses » machines avant lère « micro »)

Le point clé voici laffichage en mode texte, qui nest pas si difficile à émuler et beaucoup plus simple à afficher sur la machine hôte (même pas besoin dafficher des graphiques pixellisés, travaillez avec le système de fenêtrage / SDL / etc.!).

Cependant, des recherches sont encore nécessaires pour collecter les programmes appropriés avec lesquels travailler, y compris les jeux. Il existe quelques jeux en mode texte dans CP / M, et il devrait en être de même pour IBM PC.

Commentaires

  • Avec un avantage potentiel dun La machine CP / M étant quil y a ‘ s lié à au moins une pour laquelle une simple émulation 8080 fera laffaire?
  • Bien, mais là encore, il y a pas beaucoup de jeux pour IBM en mode texte, nest-ce pas?
  • @Raffzahn – il ne doit y en avoir quun .
  • @Jules Hehehe … ouais, daccord. Mais alors je ‘ d dire quun minimum de 8080 fera laffaire

Réponse

Un système avec le moins de puces personnalisées serait probablement une cible plus propre à émuler.

Un Apple II est lun des systèmes les plus simples (pas de LSI à lexception du processeur 6502) pour lequel de grandes quantités de jeux (facilement disponibles) ont été écrits.

Il y a aussi eu des tonnes de livres (anciens) et darticles publiés sur larchitecture système de lApple II et du processeur 6502. Ainsi, le système a été assez bien documenté par plusieurs sources (pouvant être citées).

Les émulateurs pour un Apple II peuvent être de lordre de 10K lignes de code C, peut-être légèrement moins, ce qui pourrait tenir dans votre la durée du cours.

Commentaires

  • Le processeur peut être simple, mais émuler des périphériques (affichage, etc.) serait probablement encore une tâche considérable

Réponse

En supposant que ce soit une contribution, ce sont mes notes directes sur les machines pour lesquelles jai écrit des émulateurs, dans lordre chronologique de lancement approximatif, avec un peu de chance pour offrir de la couleur sur les formats de fichiers, etc:

Atari 2600

La caractéristique distinctive de lAtari 2600 est la synergie entre le processeur et la sortie graphique; jeux sont implémentées une fonction en temps réel qui fournit des composants graphiques à la sortie vidéo pendant lexécution du raster. Je pense donc que cest un mauvais choix pour le but énoncé – le vrai travail difficile décrire un émulateur 2600 est la synchronisation et linteraction en dehors du microprocesseur.

Apple II

Matériel relativement simple, mais très nuancé, avec plusieurs modes graphiques, et vous devez vous rapprocher de lenseignement de la vidéo NTSC pour pouvoir décoder sa sortie couleur. Lémulation du disque II est également à peu près indispensable, mais cest « un peu une quête en soi car les formats de fichiers les plus courants attendent de vous que vous fournissiez un encodeur Apple GCR.

ZX80 / 81

Egalement probablement trop compliqué pour le but déclaré, la conception centrale est de réorienter le cycle de rafraîchissement du CPU et un sous-ensemble dinstructions récupère afin de scanner la vidéo. Si vous choisissez de ne pas réimplémenter ce mécanisme comme loriginal, vous vous retrouverez avec uniquement le mode texte par défaut de la ROM.

Commodore Vic-20

Il sagit dune simple machine bitmap avec un processeur simple dans le 6502 et une quantité décente de jeux, dont certains ont été fournis sur cartouche, vous évitant davoir à émuler une bande ou un lecteur de disque. La seule mouche dans la pommade est ses 6522; ce sont une combinaison minuterie / Shifter / Input / Output chips avec tout un tas de bizarreries. Mais un avantage intéressant du Vic-20 est quil démarrera aussi loin que linvite BASIC sans fonctionner 6522s, et BASIC lui-même fonctionnera avec seulement les minuteries du 6522 implémentées , même inexactement.

Son peu de temps en tant que leader du marché avant larrivée du C64 limite également le nombre de titres qui utilisent de manière avancée le matériel – il existe des exemples contemporains de courses raster comme les titres Imagic , mais ils « sont minoritaires.

Les formats de fichiers dans lesquels les données sont conservées sont en désordre , mais en vous limitant au support de la cartouche et en prenant soin de nutiliser que les titres fournis sur la cartouche, cela devrait éviter ce problème.

ZX Spectrum

Couvert ailleurs; Je pense que cest un bon choix. Surtout si vous vous en tenez aux formats de fichiers instantanés.

Oric 1 / Atmos

Couvert ailleurs; un choix décent, mais il y a un autre de ces 6522 embêtants là-dedans. La plupart des jeux sont disponibles sur bande, vous devrez prendre en charge tout cela.

Acorn Electron

Bitmap, un 6502 plus une logique externe relativement simple, mais six modes graphiques et une synchronisation différents seraient un problème – le coût de chaque cycle est fonction de la zone à laquelle vous accédez (ROM contre RAM), du mode graphique (40 colonnes contre 80 colonnes modes) et éventuellement létat actuel de la sortie graphique (les modes à 80 colonnes bloquent les accès à la RAM pendant la zone de pixels; les modes à 40 colonnes ne le font pas). Mais vous pouvez simplement le modéliser comme une machine 1Mhz pour la plupart des jeux, et surtout vous en sortir avec une version centrée sur les lignes de la sortie graphique.

Il existe un nombre limité de jeux disponibles sur ROM mais heureusement, le matériel de la bande permettra surtout une émulation de très mauvaise qualité: cest du genre qui soulève un interrompre à la réception de loctet, avec seulement deux titres que je peux penser à faire une introspection plus profonde que cela.

Amstrad CPC

Probablement un à éviter pour le but déclaré – il a un CRTC 6845, ce qui permet une sortie graphique très configurable et donc beaucoup de titres qui courent le raster. Lutilisation du disque était également assez répandue, mais son contrôleur de disque 8272 est un tout autre niveau de maux de tête par rapport au WD1770 que vous verrez souvent ailleurs.

MSX et / ou ColecoVision / SG1000

Différentes puces sonores, même processeur et même vidéo.Je pense en fait que vous pouvez aller assez loin en ignorant linteraction de synchronisation parce que la puce vidéo garde sa propre RAM à bout de bras. Mais ce sont des tuiles et des sprites, et quatre modes graphiques différents, pour probablement une entreprise trop importante pour un cours de microprocesseur.

Master System

Techniquement un SG1000 amélioré, représentant tout ce que fait la machine plus un mode graphique supplémentaire, mais le mode graphique supplémentaire est tellement meilleur que les autres quun seul titre utilise quoi que ce soit autre. Donc, en fait, cela simplifie quelque peu les choses si vous « êtes heureux dans le domaine de la plupart du temps ignorant le timing.

Mais vous parlez toujours de la prise en compte des priorités des sprites, de la vérification des collisions par pixel, etc. Probablement trop .

Note de bas de page: tricher avec laccès à la bande

Pour un certain nombre dordinateurs domestiques mentionnés ci-dessus, vous pouvez en fait ignorer lémulation de bande pour tout ce qui est encodé au format ROM par défaut en insérant simplement une interruption appropriée dans la ROM système et une mise en file dattente à partir du fichier source. De nombreux titres, mais pas tous, reposent entièrement sur la ROM intégrée pour les entrées-sorties sur bande, ce qui permet de charger de nombreux titres sans véritable tentative de matériel.

Dans tous les cas, cest « un bidouillage, mais cela fera laffaire si ce côté de lémulation nest pas important pour vous – vous préférez simplement le supprimer de léquation et ignorer ce qui ne fonctionne pas.

Plus précisément:

Vic-20:

  • si le compteur du programme atteint 0xf7b2, copiez le suivant en-tête de bande à lemplacement indiqué par b3: b2, réinitialisez 0x90 et 0x93, et continuez à partir de 0xf7b5 (car vous « évitez un JSR);
  • piège 0xf90b, vérifiez X = 0xe, si oui, alors obtenir le corps de données de bande suivant et écrire dans la mémoire émulée à partir de c2: c1 mais pas plus loin que af: ae quelle que soit la taille du corps, puis définir le bit 6 à 0x90, effacer les indicateurs de report et dinterruption, et continuer à partir de 0xfccf.

Oric:

Pour la ROM 1.0, piègez le PC à ladresse 0xe630. Pour 1.1, surveillez ladresse 0xe6c9.

Après avoir capturé cela, chargez A avec loctet suivant de la bande et définissez lindicateur zéro en fonction de sa valeur.

Ensuite, RTS.

Il y a aussi un drapeau à 0x67 sur la ROM originale, ou 0x24d qui discerne entre les encodages de bande rapides et lents de la machine, mais le format de fichier de bande habituel a juste les octets décodés donc pour un rapide et émulation sale ne vous inquiétez pas.

Electron:

Installer NOP à 0xf4e5, 0xf6de, 0xf6fa et 0xfa51 pour désactiver les branches de bande. Le système dexploitation essaiera maintenant de charger les données de bande comme sil sagissait dune ROM série.

Mettez le PC en 0xf0a8 et vérifiez que le X register est égal à 14 et la valeur à ladresse 0x247 est égale à zéro. Vous saurez alors que la ROM tente de récupérer loctet suivant de la bande.

Mettez loctet suivant dans Y, définissez A sur 0 et RTS.

Le format de fichier de bande primaire vous permet principalement de spouler des octets directement à partir du fichier (après quelques morceaux triviaux navi gation, et via ZLib ou un autre décompresseur GZ, bien que vous puissiez simplement gunzip à lavance).

ZX Spectrum:

(Celui-ci est transcrit à partir de notes très anciennes; cela pourrait valoir la peine de confirmer le désassemblage de la ROM)

Piège le PC atteignant 0x056c dans la ROM de 48 ko. Prenez le bloc suivant de la bande (si vous utilisez un fichier TAP, vous le recevrez directement; je dirais que vous ne devriez pas vous donner la peine dessayer de supporter TZX dans ce type de projet).

Si sa longueur est inférieure à la valeur de DE, réinitialisez le report et le retour.

Comparez le premier octet du bloc à la valeur de B. Sils ne correspondent pas, réinitialisez le report et le retour.

Sinon, spoolez les premiers octets DE que vous avez obtenus à ladresse pointée par IX et définissez le bit bas de C et définissez le report.

Ensuite, effectuez directement un RET ou sautez simplement le PC avant 0x05e2, qui est le RET qui termine normalement le chargement de la bande.

Les machines de 128 ko se connectent dans la ROM de 48 ko pour le chargement de la bande donc le même hack sapplique sous réserve de vérifier ce qui est paginé.

Commentaires

  • Belle rédaction. Je suis daccord avec tout ce qui a été dit – peut-être avec deux petits addons pour Apple II. Sil est vrai que le matériel vidéo a besoin de beaucoup de réflexion, sa finesse peut être complètement ignorée dans lémulation, car léquivalence de certains modèles de bits doit être traduite en couleur – voire pas du tout, en tant que A2 où fonctionne assez souvent avec un écran monochrome, avec lequel il pourrait être émulé en tant que bitmap simple sans plus de détails. Deuxièmement, tant que les Gemes à jouer sont basés sur ProDOS, aucune émulation détaillée de Disk II nest nécessaire, car elle fonctionne avec un matériel très différent.
  • @Raffzahn quelle serait la forme la plus simple dune table de recherche pour sortie couleur être?En revenant de NTSC et en traitant tout comme décomposable en double haute résolution, je peux imaginer une table indexée par un compteur à trois bits représentant la phase plus un registre à décalage de cinq bits de la sortie vidéo pour obtenir un demi-cycle de couleur avec un point central. Donc une table de 256 entrées. Mais ce raisonnement très naïf de ‘; les gens ont-ils fait mieux?
  • @Tommy: Une approche simple consiste simplement à utiliser une séquence répétitive de quatre couleurs (je pense (rouge, jaune foncé, vert, bleu) pour les pixels double haute résolution et le flou lécran. Cela finira par laisser des franges de couleur sur les choses, mais les vrais moniteurs avaient tendance à le faire de toute façon. Puisque lApple] [la vidéo est hors spécifications, il ny a ‘ une  » right  » façon de lafficher, et les vrais moniteurs auront tendance à afficher les choses légèrement différemment.

Réponse

Je pense que lutilisation de jeux graphiques comme cible peut pousser trop loin vos élèves. Exécuter un jeu nécessite généralement une bonne émulation non seulement du la majorité des fonctions du processeur mais aussi beaucoup de matériel, notamment les circuits vidéo (qui sont souvent assez complexes et, dans de nombreux cas, introduisent de nombreux problèmes de synchronisation délicats). Si quelque chose ne fonctionne pas tout à fait correctement, les résultats sont susceptible dêtre très dis nomination. Je suggérerais de commencer par une cible plus simple.

Je viserais un système qui a une interface en mode texte, plutôt que graphique, parce que ces interfaces sont généralement beaucoup plus simples et peuvent ne pas avoir dexigences de synchronisation particulières qui doivent être satisfaites (cest-à-dire quils fonctionnent souvent entièrement en parallèle avec laccès du processeur à la mémoire sans affecter le processeur du tout). Je recommanderais également un système qui a un programme intégré de surveillance au niveau de la machine, car cela aidera les programmes de débogage fonctionnant sur la machine sans avoir besoin dimplémenter un débogueur au niveau de lémulation.

Une suggestion basée sur mon projet de recherche personnel actuel est lordinateur Nascom 2. Il sagit dune machine basée sur Z80 relativement simple avec du matériel en mode texte qui ninteragit pas avec le processeur (en cas de conflit, il est résolu en faveur du processeur, ce qui signifie que théoriquement une poignée de pixels dans chaque image peut ne pas être affichée si l’écran est accédé en même temps que l’actualisation est se produisant, mais e nest pas susceptible dêtre particulièrement perceptible ou même fréquent, donc donne un résultat utilisable avec un matériel très simple). Une synchronisation précise nest donc pas susceptible dêtre particulièrement difficile ou importante pour cette machine. Le matériel de la machine est à la fois simple et bien documenté. Les périphériques intégrés sont un UART (qui peut être utilisé soit pour un terminal / imprimante à distance, soit pour le chargement et la sauvegarde de cassette …. ce qui signifie quil nest pas nécessaire démuler réellement la gestion de la cassette au niveau audio, économisant ainsi beaucoup de temps de mise en œuvre) et un module IO parallèle. Les outils disponibles encouragent également lexpérimentation en langage dassemblage, ce qui, jimagine, est un objectif souhaitable pour votre cours.

Une chose intéressante à propos de cette machine est quil y a une lacune dans les options démulation disponibles: le la page Web la plus connue sur la machine a demandé un émulateur javascript quils peuvent intégrer à la page, mais personne nen a encore fourni un.

Réponse

Jai fait deux et un peu démulations à partir de zéro pour le Mac en utilisant Swift. Ce sont mes observations personnelles basées sur mon expérience.

Aucune de mes émulations nest complètement précise, ce qui pose quelques problèmes.

Commodore PET

Cétait la première émulation que jai écrite. Vous avez besoin au minimum dune émulation 6502, dune émulation PIA, dune émulation VIA et dune émulation vidéo.

Le 6502 est vraiment simple et un excellent processeur pour commencer. Il est également assez bien documenté. Le site Visual6502 a été inestimable pour déterminer le comportement exact des instructions là où la documentation était ambiguë. En passant, jai écrit une émulation dun processeur légèrement plus récent (joublie lequel) qui remplissait certains des les lacunes dans le jeu dinstructions. Cela a rendu lécriture du code de test 6502 beaucoup plus facile (même simplement PHX et PHY simplifier certaines choses. Activé dautre part, tout logiciel qui utilisait les « instructions non documentées » du 6502 original se cassera sur mon émulation.

Le PIA et le VIA sont des puces IO relativement simples à émuler. Le pilote vidéo peut être aussi simple que lire la RAM de lécran, traduire en ASCII ou une approximation proche et dessiner le texte résultant dans une fenêtre. Finalement, jai créé un ensemble de bitmaps qui étaient des copies exactes du jeu de caractères PET.

Ma principale ressource pour le PET était « Programming the PET / CBM » par Raeto West. Jai une copie originale, mais il y a PDF ver sions en ligne. La disponibilité des ROM BASIC et KERNAL est également importante.Vous ne voulez pas réécrire le système d’exploitation.

L’émulation du lecteur de bande était un PITA. La version de mon logiciel était moins fiable que la vraie, ce que les propriétaires de PET savent que dit vraiment quelque chose. Le principal Le problème, je pensais, est quil repose sur des impulsions de synchronisation précises et, bien que mon émulateur compte les impulsions dhorloge, il na pas nécessairement invoqué linterruption de la minuterie exactement au bon moment.

Jai eu plus de succès à écrire une émulation des deux disques durs. Cela nécessitait également une émulation IEEE 488 robuste, mais lémulation du lecteur de disque était assez facile. Ce nest pas une émulation matérielle, il prend juste les commandes envoyées par le PET et les exécute en utilisant des fichiers plats sur le disque dur du Mac.

En fin de compte, jai écrit un code qui arrêterait le émulateur, injectez directement un fichier programme dans la mémoire, puis redémarrez lémulateur. Cela sest avéré être tellement plus pratique que démuler des disques ou des bandes que jai arrêté de travailler dessus.

Mon émulateur fonctionne assez bien avec la plupart du code PET. Malheureusement, il y a un problème avec PET Space Invaders – probablement causé par le code du clavier – donc il ne reconnaît pas correctement les pressions sur les touches. De plus, je nai pas essayé de traiter la génération de sons.

Sinclair ZX Spectrum

Dune certaine manière, cest encore plus facile que le PET. Vous devez écrire un émulateur Z80 qui est plus complexe que le 6502 mais il existe une suite de tests CPM que vous pouvez utiliser pour vérifier une grande partie de ses fonctionnalités, il vous suffit démuler le sous-programme de sortie de caractères de CPM pour le rendre fonctionnel.

Les seules autres puces que vous devez émuler sont lULA et vous navez pas besoin de faire beaucoup de cela si vous êtes prêt à renoncer à un lecteur de bande. Aussi, le générateur vidéo, qui est un peu bizarre dans la façon dont il traite la RAM de lécran.

Ce qui est vraiment sympa avec le Spectrum est que lécran est toujours en mode bitmap et que le système dexploitation crée des caractères directement écrire les motifs de pixels décriture. Vous navez pas à vous soucier dun jeu de caractères car il est là comme par magie lorsque vous démarrez lémulateur avec les ROM Spectrum chargées.

Jai eu le spectre au point où je pourrais charger et exécuter Manic Miner et cétait jouable, bien que sans son. Cela prenait environ trois mois à travailler peut-être huit heures par semaine du début à la fin.

Commodore 64

Cest un travail en cours. Évidemment, javais déjà un 6502, que jai modifié pour me donner le port IO du 6510. Jusquà présent, il fait la banque commutation correctement, une partie de la fonctionnalité CIA est implémentée et suffisamment de fonctionnalités VIC II sont émulées pour me donner un équivalent PET, cest-à-dire que le mode texte normal fonctionne. De plus, la mémoire de couleur des bordures et des caractères fonctionne.

Je continue avoir les modes graphiques les plus compliqués à émuler et les sprites et je devrais être capable de faire quelque chose avec le son parce que cest une puce séparée, je ne suis pas dépendant de la synchronisation précise du processeur.

TL; DR

Lémulation la plus simple, à part le CPU, était le spectre. Je commencerais probablement par cela, même si un vieil ordinateur basé sur CP / M 8080 pourrait être encore plus facile si vous pouvez obtenir CP / M.

Autres observations

Vous aurez probablement besoin dun bon assembleur croisé pour votre plate-forme cible. Il obtient un code dassemblage manuel très fastidieux pour les tests unitaires.

De plus, un désassembleur sera utile. Je nai pas eu à démonter les ROM Commodore BASIC car les démontages sont disponibles gratuitement sur Internet. Mais lorsque jessayais de faire fonctionner Space Invaders, cela ne fonctionnait pas au début et le désassembleur était inestimable pour le dépannage.

Pour cette raison, la suite cc65 est un argument solide pour démarrer avec une machine basée sur 6502. Il a un bon assembleur et un excellent désassembleur inclus. La situation Z80 nétait pas si bonne, mais jai trouvé un assembleur raisonnable à la fin appelé z80asm. Je pense que jai dû le compiler à partir des sources.

De plus, vous aurez besoin dune bonne documentation solide. Encore une fois, la documentation 6502 est en ligne est pratiquement sans précédent. Les documents sont moins à venir pour le Spectrum, mais cest si simple, vous pouvez vous en tirer avec une émulation ULA assez médiocre.

Réponse

Avec toutes les autres bonnes suggestions, comme une alternative à Z-80 et CP / M, vous pouvez envisager un système générique Motorola 6809 pour exécuter FLEX ou éventuellement OS-9 , tous deux inspirés dUnix. En tant que système basé sur la CLI, il n’est pas nécessaire d’obtenir un timing précis.

De plus, si vous construisez le simulateur, c’est un peu comme construire le matériel; le portage du système d’exploitation était un tâche réelle – ce que jai fait dans les années 1980 – par opposition à une tâche de clonage-quelque chose-pour-léducation. »Est-ce quil démarre le système dexploitation et exécute les programmes? » est une cible très réaliste.

Comme il exécute un système dexploitation portable fonctionnant sur du matériel de nombreux fabricants différents, cela signifie que les étudiants nont pas quune seule façon de le faire. Lélève A pourrait construire un affichage bitmap; létudiant B peut créer un UART et avoir une interface série. Certains peuvent essayer de faire en sorte que chaque cycle soit correct; certains peuvent simplement essayer de corriger chaque opération. Par conséquent, au lieu dessayer simplement de copier quelque chose sans nécessairement comprendre loriginal contraintes de conception, les étudiants sont engagés dans une véritable question dingénierie: quelle est la bonne façon de faire cela?

CPU

  • Le 6809 était unique à lépoque en ce quil était possible décrire du code entièrement indépendant de la position, qui fonctionnerait de manière identique partout où il se trouvait en mémoire.
  • Le jeu dinstructions était presque entièrement orthogonal
  • En tant que CPU 8 bits avec bus dadresse 16 bits, cest assez simple
  • Le mécanisme dexception et efficace -la manipulation des adresses ressemble beaucoup aux processeurs modernes
  • En tant que conception Motorola, il avait des E / S mappées en mémoire plutôt que des instructions E / S spéciales
  • Plus facile à faire que le Z-80 (beaucoup moins dinstructions ) ou 6502 (moins de cas particuliers)
  • Matériel via https://en.wikipedia.org/wiki/Motorola_6809

FLEX a été conçu comme un système inspiré dUnix pour les processeurs 8 bits

  • Il a été spécialement conçu pour la portabilité, et pour le faire démarrer, il a fallu très peu dappels système à implémenter – je pense que juste des caractères en lecture / écriture, un bloc de disquette en lecture / écriture et une sorte de démarrage (lire le secteur et sauter
  • Indépendant du matériel pour ces fonctions de base, ce qui rend la simulation beaucoup plus facile
  • Il est exaltant d’écrire quelques fonctions et de démarrer tout un système d’exploitation
  • Aucun graphique à craindre (ce qui est positif ou négatif selon votre point de vue)
  • Beaucoup de matériel disponible, f ind via https://en.wikipedia.org/wiki/FLEX_(operating_system)

OS-9 dintention similaire

  • Plus de type Unix que FLEX, légèrement plus difficile à porter, pour autant que je me souvienne
  • Porté plus tard sur 68000
  • Beaucoup de matériel disponible, recherchez via https://en.wikipedia.org/wiki/OS-9

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *