EPOCH Cassette Vision
-
Salut tous le monde,
Après beaucoup de temps passé à étudier le fonctionnement de la puce NEC uPD777 (le processeur présent dans chaque cartouche), je pense maintenant la connaître suffisamment bien pour pouvoir commencer le développement d'une deuxième version du prototype d'émulateur pour la EPOCH Cassette Vision.
Ça inclut aussi la puce uPD778, la différence étant vraiment minime avec les puces uPD777.
J'ai élucidé beaucoup de mystères depuis mon premier prototype (pour la V1 il y avait beaucoup de choses inconnues, incorrectes ou mal comprises).Je connais maintenant très bien toute la partie timing et les signaux qui en découlent (horloges interne, horizontale et verticale).
Je connais maintenant le "jeu d'instruction" complet de la machine, y compris les instructions qui n'ont jamais été utilisées dans les jeux, celles qui sont en double (même effet que des codes déjà connus) ou qui n'ont pas de sens (effets incohérents, contradictoires ou simplement pas prévus d'être utilisés, mais potentiellement utilisable... Ça sent le détournement et la DemoScene!).
Ça pourra peut-être servir pour de futurs homebrews.Je connais aussi maintenant le PLA (Programmable Logic Array) présent dans chaque puce et qui pilote quels sont les Sprites avec répétition et quels Sprites sont "obliques".
Je sais aussi comment fonctionne précisément la pile d'adresse à trois niveaux, comment elle réagirait en cas de débordement et en cas de sur-dépilement.
Les entrées pour les boutons, le sélecteur, les potard, le lightgun, etc.
Il y a encore quelques zones d'ombre au niveau de l'affichage que le nouveau prototype devrait permettre de lever.
Dans les nouvelles infos à confirmer avec le prototype V2, il y a entres autres: les interruptions (liées à l'affichage), le fonctionnement précis de la pile H->NRM et ses effets (dépilement sur interruption), le mécanisme de décalage des lignes pour obtenir des pixels non rectangulaires avec des côtés obliques et le mécanisme de répétition automatique des Sprites.
La suite au prochain épisode.
@++
EPOCH84 (^_^)/ -
Hello World!
La partie horloges externe Φ, internes Φ1 Φ2 Φ3 Φ4, horizontale HC et verticale VC du prototype V2 est faite, ainsi que tous les signaux qui en découlent dont la synchro ligne et trame pour la video.
J'ai donc théoriquement un signal vidéo valide mais pour le moment avec un écran noir.Ca me permet déjà de me repérer dans l'image et au passage de confirmer quelques points qui n'étaient pas très clair.
On est donc sur un signal vidéo NTSC, 525 lignes, 60Hz.
La partie visible de l'image est grosso modo de 75x60 coordonnées possibles pour l'affichage des sprites, sur un total de 90x60 possibles mais il y a une bande de 15 coordonnées de large à gauche de l'image qui n'est pas visible et les sprites du haut et du bas de l'écran sont partiellement masqués (plus en bas qu'en haut).
La CV (Cassette Vision) ne faisant rien comme les autres c'est un peu plus compliqué que ça parce qu'il y a un système de décalage vertical des sprites de 0 à 7 lignes, tous les sprites ne font pas la même taille (6x7 et 7x7), certains sprites sont répétés et d'autres ont des côtés en oblique.A ce point je sais déjà que certaines pins du processeur ne seront pas implémentées dans l'émulateur final (CH1, CH2, CH3, CH4 et CH6) parce qu'elles n'ont pas d'autre utilité que de permettre le dump de la ROM programme, de la ROM patterns et de la RAM.
Initialement ces pins étaient prévues à des fins de contrôle pour la production en usine et c'est ce qui nous a permis d'extraire les ROMs de toutes les cartouches.Je ne conserverai probablement pas la partie synchro vidéo dans l'émulateur final mais j'en ai besoin pour mon retro-engineering.
Je vous met le schéma de la puce en entourant en vert les parties que je viens d'intégrer au proto.
IC: Horloges internes
HC: Horloge horizontale
VC: Horloge verticale
Timing: chronogramme des signaux de synchro vidéo
Comme vous le voyez il y a encore un peu de boulot...
Allez! J'attaque la partie compteur de programme et sélection des commandes en fonction du code de l'instruction en cours.
@+ pour la suite.
EPOCH84 ^^ -
J'adore lire tes messages et je suis admiratif devant tes compétences !
Continue à décrire tes avancées, perso je trouve ça super.
En plus tu arrives à rendre ça compréhensible pour le néophyte que je suis, et ça c'est fort
-
Hello World!
Ca faisait un moment que je n'ai rien posté, aussi je déterre le sujet de la Cassette Vision sur lequel je me remet proactivement.
J'avais un peu trop de projets en cours et ça partait dans tous les sens avec trop peu de temps libre pour arriver à avancer sur tout à la fois. Je met donc tout mes projets à plat pour arriver à m'organiser et prioriser les choses.Je mets donc en standby les projets suivants:
-
EPOCH Super Cassette Vision: mon projet autour de ma console de coeur (ma 2ème console perso).
J'ai les consoles FR et JP et le fullset.
Mon émulateur EmuSCV est déjà fonctionnel et embarqué dans plusieurs systèmes dont Recalbox, Batocera et RetroArch. Il a encore des bugs et est encore très perfectible (c'est pour ça qu'il n'est pas encore en v1.0).
Mon assembleur RASM78001 est presque fini, il manque encore des options pour la gestion des banques ROM et d'autres fioritures pour la gestion des données. J'ai déjà pu compiler du code homebrew avec et le tester sur EmuSCV.
J'ai aussi modifié du code de jeux existants et testé avec succès sur les vraies consoles.
Les PCB des cartouches sont déjà créés sur Kicad (Bon! Il faut juste que je remette la main dessus... oui j'ai beaucoup de bordel sur mon ordi ).
Le moulage Epoxy des cartouches physiques n'est pas encore satisfaisant mais je pense que je vais finir par y arriver (ça devrait être mieux fini et plus rapide qu'en impression 3D). -
Consoles 1ère génération: mon projet RB1G de simulateur de consoles 1ère génération, Pong Like, General Instrument AY-3-8xxx, etc. (alias "projet Fight Club" pour @Bkg2k ). Pour info ma première console perso était une Saft-Leclenché TV8 Sports, j'étais tout petit.
J'ai presque le fullset des puces AY-3-8xxx dont certaines extrêmement rares, une Texas instrument (je ne sais plus laquelle) et la EPOCH SYSTEM 10 avec le lightgun. Il y a trop de consoles "clones" pour chaque puce pour espérer les avoir toutes mais heureusement il y a Internet (pong-story.com, Youtube, etc.) et quelques passionnés prêts à m'aider.
Le projet est déjà bien avancé. Le plus long ça n'est pas le développement des simulateurs pour les différentes puces (oui ce ne sont pas des émulateurs au sens propre du terme), le plus long c'est bien le développement de l'interface façon Recalbox qui doit pouvoir gérer les milliers de clones existants pour seulement quelques puces. -
EPOCH Barcode Battler: J'ai le Barcode Battler français (idem Barcode Battler II japonais) avec l'adaptateur pour la SNES. J'ai déjà collecté pas mal d'infos mais le projet est à peine commencé. C'est original et rigolo 5 minutes mais il faudra que je fasse un truc un peu plus fun que l'écran LCD qui affiche des chiffres...
Et enfin le projet sur lequel je vais me concentrer:
- EPOCH Cassette Vision: ce projet d'émulateur (EmuCV?) me tient vraiment à coeur car à ma connaissance il n'y en a aucun émulateur existant à ce jour pour cette console.
J'ai les deux modèles de consoles, la normale et la Junior, avec le lightgun et le fullset.
Nous sommes 4 à avoir travaillé sur le projet: Tetsuji OGUCHI (l'ingénieur qui a développé les puces NEC de cette console), Sean RIDDLE (un fou d'arcade et de retro-gaming qui décape et bidouille les puces), James BROLLY (lié au projet MAME) et moi-même (pièce rapportée au projet RECALBOX).
Sean a extrait le contenu des ROMS de tous les jeux existants (programme et graphimes).
Avec l'aide inestimable de Tetsuji, nous avons fait le rétro-engineering des puces. Enfin c'est surtout Testsuji qui a fait les recherches au début et moi qui ais validé et recoupé toutes ses informations en mettant le doigt à chaque fois là où il y avait des trous dans la raquette ou des incohérences... le pauvre, il doit me détester ^^.
Ceci-dit, à force de travailler sur le sujet je suis maintenant capable de lire tout seul les schémas des puces et j'ai découvert un bug que Tetsuji ne connaissait pas, bug qu'il a confirmé et dont il a retrouvé l'origine (introduit par l'ingénieur chargé des tests et on sait maintenant pourquoi).
J'ai déjà fait un premier prototype d'émulateur pour pouvoir valider les informations.J'ai commencé le développement d'un second prototype qui sera basé sur tout ce que je sais maintenant sur la Cassette Vision.
Ca va demander un peu de temps mais je mettrai ici tous les vendredi des news sur l'avancement du développement. Ca fera de la lecture pour ceux que ça intéresse et moi ça m'obligera à me concentrer sur le projet. Ca avait bien fonctionné pour le développement d'EmuSCV.Quand le prototype V2 sera suffisamment avancé, je pourrai recoder tout ça en C/C++ pour avoir quelque chose d'exploitable.
Je donnerai ensuite les sources à James pour qu'il puisse porter ça dans MAME.Voili, voilou.
@++
EPOCH84 (aka MaaaX ^^) -
-
Hello!
Petites news du projet.
J'ai mis en place une bonne partie des fenêtres du prototype V2.
Dans le prototype V1 pratiquement tout était dans une unique fenêtre avec 3 onglets, ce qui faisait beaucoup d'infos affichées.
J'ai réparti les informations en plusieurs fenêtres. Tout n'est pas encore fonctionnel mais récupéré pas mal de choses de la V1 qu'il faudra que je corrige et que complète.Fenêtre splash à l'ouverture:
Fenêtre principale:
Fenêtre d'ouverture de fichier:
Fenêtre des commandes de "l'émulateur" (c'est pas encore vraiment un émulateur mais bon...):
Fenêtre du code de la ROM Programme:
Fenêtre des graphismes de la ROM Pattern:
Fenêtre du PLA (Programmable Logic Array):
Fenêtre des registres et de la pile A:
Fenêtre de la mémoire (RAM):
Fenêtre des 2 piles NRM:
Fenêtre des contrôles de la console:
Fenêtre de la liste des instructions existantes:
La suite au prochain épisode.
Bon week-end à tous et à toutes.
@++
EPOCH84 (aka MaaaX ^^)Fenêtre de la liste des adresses valides (décimales, binaires et polynomiales):
-
Hello!
Petite news de fin de semaine sur l'avancée du prototype V2:
- J'ai refait les parties Palette et Timing (horloges et signaux verticaux et horizontaux).
- J'ai amélioré un peu l'IHM.
- Je suis en train de "finaliser" le chargement de fichiers (.CART, .ROM, .BIN...) qui était partiellement faits en V1.
La suite au prochain épisode.
@++
EPOCH84 (aka MaaaX^^)
-
Hello World!
Petites news du vendredi:
-
J'ai fini le chargement des fichiers ROM .CART (format ROM propriétaire de EmuCV), des fichiers ROM .BIN "program" et "packed pattern" (tous les bits de données sont à la suite et pas alignés sur des octets).
Pour les programme je détecte s'il s'agit d'un jeu sorti à l'époque (EPOCH ) et j'applique le 6BJ/PLA correspondant.
Il me reste à faire le chargement des fichiers ROM .BIN "unpacked pattern" (données alignées sur des octets) et ROM .TXT Pattern mais on verra ça plus tard. -
L'ID de la cartouche et le nom du programme sont maintenant affichés dans la fenêtre du programme et sont modifiables.
-
J'ai avancé sur l'affichage de la fenêtre pattern où il manquait pas de choses sur le proto V1.
Les pattern inclinés sont maintenant bien gérés et les répétitions X, Y et XY le sont partiellement mais j'y travaille. -
Dans la fenêtre 6BJ/PLA "Progammable Logic Array", les valeurs sont maintenant modifiables et influe sur les autres fenêtres (modif PLA=>affichage pattern / modif 6BJ => impact sur le code).
Je continue de travailler sur la fenêtre des patterns...
@++
A la semaine prochaine.
EPOCH 84 (aka MaaaX^^) -
-
Petite news du vendredi:
- J'ai fini la fenêtre des Patterns (ROM des graphismes). Il est maintenant possible d'y éditer les Patterns. Avec la fenêtre PLA qui est aussi éditable, la partie source graphique est terminée. J'ai pensé à un petit outil pour superposer des patterns (dans plusieurs jeux existants des sprites sont composés de plusieurs patterns supersposés)... mais on verra ça plus tard, c'est pas la priorité.
- J'ai fait quelques améliorations sur la fenêtre du programme (ROM du programme). Le code n'est pas encore modifiable mais je m'en occuperai plus tard.
- Je travaille maintenant à reprendre tous les opcodes pour prendre en charge ceux qui manquaient en V1.
A suivre...
EPOCH84 (aka MaaaX ^^) -
Un peu de retard dans le journal de projet cette semaine because semaine mouvementée et pas beaucoup de temps libre (j'habite en Ardèche, pluie diluviennes, écoles et garderies fermées, tout ça tout ça...)
Je travaille toujours sur la mise à jour de la description du jeu d'instructions (ce qui apparaît dans la fenêtre Programme et dans la fenêtre Liste des Opcodes).
Pour mémoire je sais maintenant ce que font tous les Opcodes, y compris l'Opcode buggé et les Opcodes en dehors du jeu d'instructions "officiel" que Tetsuji publie sur son site.
C'est très laborieux et long à faire mais ça avance bien.Après les descriptions il faudra que je m'occupe de l'implémentation proprement dite des instructions.
La suite au prochain épisode.
@++
EPOCH 84 (aka MaaaX^^) -
merci pour tes interventions c'est ma série préféré
-
Bonjour,
Voici les news de la semaine dernière que je n'ai pas eu le temps d'envoyer:
- Je suis toujours sur la mise à jour des descriptions pour tous les opcodes et je continue.
- J'ai déjà traité les descriptions pour les opcodes de 0x000 (0) à 0x1ff (511), ce qui comprends l'opcode 0x2a8 buggué
A suivre...
-
Petite coquille:
@MaaaX said in EPOCH Cassette Vision:- J'ai déjà traité les descriptions pour les opcodes de 0x000 (0) à 0x1ff (511), ce qui comprends l'opcode 0x2a8 buggué
En fait j'ai traité les opcodes 0x000 (0) à 0x2ff (767). J'ai donc traité les 768 premiers opcodes.
- J'ai déjà traité les descriptions pour les opcodes de 0x000 (0) à 0x1ff (511), ce qui comprends l'opcode 0x2a8 buggué
-
Hello World!
Pas beaucoup d'avancée cette semaine étant donné ma charge de travail et que mon boulot a pas mal (pour ne pas dire beaucoup) débordé sur mon temps libre .
J'avais déjà traité les opcodes de 0x000 (0) à 0x2ff (767) ça c'est bon!
Je viens de traiter aussi les opcodes 0x800 (2048) à 0xfff (4095), qui correspondent à des instructions de saut JP et JS. Ce qui représentent une bonne partie des opcodes et qui ne m'a pas demandé trop de travail. Ca c'est bon!
Là je continue de travailler sur les libellés des opcodes 0x300 (768) à 0x3ff (1023) et je me suis rendu compte que l'ancien code qui fonctionnait pour la V1 ne pouvait pas fonctionner pour les nouveaux opcodes (ceux qui n'étaient pas connus/gérés en V1).
Il faut donc que je change de paradigme et que je traite tout ou partie des libellés d'opcode comme je le ferai dans le traitement des opcodes à proprement dit...C'est pas clair? C'est normal.
Pour essayer de faire un peu plus clair : certains opcodes font en réalité plus de choses que ce qu'indique leur libellé. Dans les libellés on ignore simplement tout ce qui est fait mais qui n'a pas d'incidence.
Donc pour les libellés je triche un peu et je ne me base que sur des groupes d'opcodes afin de simplifier le code et de gagner en performance au démarrage de l'application.
Par exemple: je connais les opcodes des instructions qui ne font rien de significatif => je met "NOP" (No OPeration) en face sans regarder ce qu'elles font dans le détail vu que ce qu'elles font n'a aucune incidence sur l'état actuel ou futur de la machine (exemple d'action sans incidence: brancher la sortie du registre A1 sur la ligne (1) et brancher la ligne (1) sur l'entrée du registre A1 => ça donne l'opération A1=>A1, bref ça fait quelque chose mais qui ne change rien).Pour les opcodes 0x300 (768) à 0x3ff (1023) ça ne marche plus en V2 parce que les anciens tests "succincts" de la V1 sont maintenant invalides et sortent n'importe quoi pour les nouveaux opcodes.
Pour ce groupe c'est tellement compliqué qu'il faut que teste plus dans le détail ce qu'elles font. Donc nouveaux tests plus détaillés. Donc nouveau code.Je n'ai pas trop de le temps maintenant d'expliquer comment ça fonctionne dans le détail mais si ça vous intéresse dites le moi et prendrai un peu plus de temps.
@++
MaaaX ^^ (alias EPOCH84) -
@MaaaX
Juste un petit message pour te souhaiter bon courage.
Comme tu t'en doutes même si on en comunique pas beaucoup ici, on suit ça d'un oeil. -
Salut MaaX avec 2 A
Merci! C'est sympa!
La R&D c'est un peu long mais on va y arriver.
Je ne suis pas trop présent sur le Discord Beta mais je discute de temps en temps avec BK.@++
MaaaX avec 3 A ^^ (aka EPOCH84). -
EHLO,
Ca avance. Je n'ai pas encore fini les opcodes de 0x300 à0x3ff mais c'est en bonne voie.
BYE