Une fonction "Snaps...
 
Notifications
Clear all

Une fonction "Snapshot" sur Oric ?


JihemB
(@jihemb)
Active Member Adhérent
Inscription: Il y a 1 an
Posts: 6
Topic starter  

Hello Jérôme, hello à tous.

Je reviens sur cette fonctionnalité "snapshot" dont j'ai parlé à la "Visu online" et je développe mon propos :

Vous êtes sur votre Oric et vous êtes en plein milieu d'une partie de "Zorgon's Revenge". Vous avez réussi à passer 2 tableaux sur 4 sans perdre une seule vie (ce qui n'est déjà pas si mal) et vous vous dîtes que, cette fois, ça y est vous allez finir les 4 tableaux...
Et là un événement imprévu vient gâcher la fin de votre partie et votre rêve de réussite : une coupure de courant, une urgence vous obligeant à arrêter votre Oric... Bref adieu votre avancement.

Ce que j'écris ci-dessus est valable pour un grand nombre de jeux (surtout sur micros 8 bits) qui ne proposaient pas de sauvegarde en cours de partie.

Dans les années 80 sont nées des cartes d'extensions pour micros et consoles : les "Action Replay". Le but de ces cartes était de proposer plusieurs fonctionnalités (cela dépendait du modèle) mais généralement on retrouvait
 - le "freeze" qui, comme son nom l'indique gelait la machine dans son état, permettant de faire une pause et de reprendre le jeu là où on s'était arrêté
 - le "snapshot" qui permettant de sauvegarder l'état de la RAM et de la ROM sur cassette ou disquette pour recharger le tout plus tard et  reprendre le jeu là où on s'était arrêté

Accessoirement les cartes proposaient d'autres fonctions comme le "poke" qui permettait de modifier certaines valeurs en RAM dans certains jeux pour avoir des vies infinies par exemple.
Un très bon exemple de ce type de carte est la "Multiface" de Romantic Robot ([url= ]exemple sur un ZX Spectrum[/url]).
Une fonctionnalité non officielle de ce type de carte est qu'elle permettait un nouveau type de piratage : Les gens pouvaient s'échanger des snapshots de leurs jeux, contournant ainsi le système de protection...

Faisons un saut dans le temps et revenons au présent : De nos jours un certain nombre d'émulateurs prennent en charge le format snapshot d'autrefois, mais aussi du hard, équipé de lecteur de cartes SD qui permettent de restaurer un snapshot ... en un claquement de doigts (mauvais jeu de mot) ! C'est par exemple le cas de la carte "[url= https://www.bytedelight.com/?page_id=2553 ]DivMMC Enjoy ![/url]" pour ZX Spectrum qui propose les fonctions "Snapshot/Restore" (en plus de l'émulation du lecteur de K7 façon ERABUS mais à vitesse démultipliée) et d'ailleurs le "[url= https://www.specnext.com/about/ ]ZX Spectrum Next[/url]" peut lui aussi charger des .SNA à partir de la carte SD sur laquelle est stocké son système d'exploitation.
Personnellement j'ai fait des snapshots de quasiment toutes mes K7 ZX Spectrum (surtout celles pour lesquelles je n'ai pas trouvé d'image .Z80 ou .TZX) avant de les remiser à la cave.
Il existe depuis quelques années une carte appelée M4 Board pour Amstrad CPC qui (outre sa fonction native permettant de dialoguer en WIFI avec son Amstrad en lui faisant démarrer un jeu à distance depuis son PC en sélectionnant un .DSK) propose dans sa dernière version un nouveau bouton "Hack" qui reprends les fonctions Snapshot/Restore de la "Multiface 2", preuve que cette fonction est (très ?) demandée.

Je pense que si les utilisateurs de ZX Spectrum et Amstrad appréciaient (et apprécient encore) la fonctionnalité "Snapshot", il devrait en être de même pour les Oriciens permettant ainsi de faire des sauvegardes de jeux après chaque tableau réussi ou conserver un "high score", où de reprendre un jeu d'aventure (Docteur Génius) là où on s'est arrêté  (revoir aussi mon exemple avec "Zorgon's Revenge" pour un cas pratique).
Double effet KissCool du snapshot: Sauvegarde du jeu "en l'état" et rechargement "turbo" d'un jeu, plus vite que la musique et que EREBUS 🙂

JihemB


Quote
JihemB
(@jihemb)
Active Member Adhérent
Inscription: Il y a 1 an
Posts: 6
Topic starter  

Jede a répondu :

Est ce techniquement possible de faire un dump mémoire : Oui "facilement" avec la twilighte board, car au niveau hardware, c'est possible. Soit en faisant une ROM basic qui va faire un "hook" une touche au clavier pour dumper et/ou jumper sur une ROM, soit il faut faire un "hook hardware" avec un reset + appui sur une touche qui va forcer le switch sur une ROM particulière pour dumper la RAM.

En revanche, je ne sais s'il y a beaucoup de personnes qui l'utiliserait. Par exemple, la twilighte board permet de charger les softs Oric avec la rom basic et jouer avec les joysticks. Je ne suis pas trop la cible pour ce genre de fonctionnalité, car je ne joue pas sur oric. C'est plus sur la partie technique d'avoir une ROM basic permettant de jouer avec des joysticks sans patch qui me fait plaisir le plus. En revanche, je l'utilise beaucoup mes devs et debug hardware.

Enfin, il serait possible aussi de faire un menu flottant, sauf que la ROM basic est pas mal blindée, et il faudrait rajouter une surcouche dans une autre ROM pour le gérer. Cela pourrait aussi fonctionner pour le soft disquette aussi

Est ce que c'est faisable facilement : à mon avis oui.

Est ce que cela prendrait du temps : à mon avis, un peu, le hardware est là mais il faut faire un peu de code. Mais pas sûr que je me lance

Si quelqu'un veut s'y coller, il y a des docs pour le dev, et l'émulation de la carte dans Oricutron (mais il y a pas mal de manques par rapport au hardware réel, mais cela ne devrait pas empêcher ce genre de dev). Et je peux aider aussi.

This post was modified Il y a 4 mois by JihemB

RépondreQuote
JihemB
(@jihemb)
Active Member Adhérent
Inscription: Il y a 1 an
Posts: 6
Topic starter  

Christian a répondu :

Le principe de ces cartouches et de générer une interruption non masquable, NMI, et de basculer sur une rom spécifique qui va prendre en charge la sauvegarde ou la restauration de la mémoire et de l'état du processeur.

Pour pouvoir faire cela avec un Oric/Atmos, il faut faire une petite intervention au niveau de la carte mère pour amener le signal NMI vers le port d'extension, ou au moins le rendre accessible à une cartouche "replay".
Cette opération est nécessaire afin que ce signal passe sous contrôle de la cartouche.
Actuellement, ce signal n'est câblé que vers le bouton situé sous le clavier.

D'autre part, le Spectrum ou les Amstrad utilisent un processeur Z80 dont le fonctionnement est différent de celui du 6502.

Il y a deux types de cartouches, celles qui ne font que ce que je viens d'écrire, et celles, plus évoluées, qui sauvegardent également l'état des périphériques.
Les premières sont les plus simples à faire mais, dans le cas d'un Amstrad par exemple, elles ne remettrons pas l'affichage dans la bonne configuration (palette de couleurs, mode d'affichage,...).
Les secondes "écoutent" en permanence tout ce qui se passe sur le bus d'adresses et mémorisent chaque changement destiné à un périphérique quel qu'il soit.

Concernant un Oric/Atmos, les seuls périphériques "normaux" dont il faut conserver l'état sont l'écran et le VIA 6522.

Pour l'écran, tant qu'on utilise une rom basic on peut savoir si on est en mode TEXT ou HIRES en examinant l'octet en $02F1.
Mais si un programme change le mode d'affichage sans utiliser les routines de la rom on ne saura pas dans quel état est l'affichage.
La conséquence est que si on sauvegarde un programme qui est en mode HIRES et qu'on fait une restauration alors que l'Oric est en mode TEXT, l'affichage ne sera pas correct (la cas contraire est moins problématique).

Pour le VIA, on peut récupérer l'état de certains registres mais on ne peut pas garantir de pouvoir le remettre exactement dans le même état, notamment en ce qui concerne les timers, mais ce n'est peut-être pas très gênant.

J'ai bricolé rapidement un petit programme de test pour la sauvegarde et la restauration d'un snapshot sur une carte sd.
Le test avec Oricutron fonctionne, il faut que je le vérifie en réel.
Ça ne permet que de valider, ou non, le principe de la sauvegarde/restauration de l'état de l'Oric dans la mesure où mon programme "snapshot" est chargé en ram en non en rom (mais activé quand même par le bouton "reset" de l'Oric).

Pour aller plus loin il faudrait que je le fasse rentrer dans la rom basic, au moins la partie sauvegarde, ce qui est loin d'être gagné, ou voir pour une extension matérielle qui pose d'autres problèmes dont la bascule retour vers la rom basic qui à mon avis nécessite un autre signal du 6502 non routé vers le port d'extension.

Dans tous les cas, il faudra une modif de l'Oric pour que ça fonctionne, à moins de pouvoir mettre la partie sauvegarde dans la rom basic mais je n'y crois pas trop.
Il faut également connecter une carte d'extension qui prenne en charge un périphérique de stockage, comme la twilghte par exemple.


RépondreQuote
JihemB
(@jihemb)
Active Member Adhérent
Inscription: Il y a 1 an
Posts: 6
Topic starter  

Hello.

Merci de votre intérêt pour ma demande et pour les quelques explications que vous avez fournies.

Certes l'ORIC utilise un 6502 et les Spectrum/Amstrad un Z80 ce qui peut expliquer que le type de processeur peut aider ou pas pour ce type d'opérations.
Le Commodore 64 équipé d'un 6510 avait aussi ses cartes Action Replay mais peut-être que tout ça commence, comme tu l'expliques, par la présence du NMI sur le port d'extension. Question de design de la machine ?

Je ne suis pas très favorable pour modifier la machine mais s'il faut en passer par là ...


RépondreQuote
JihemB
(@jihemb)
Active Member Adhérent
Inscription: Il y a 1 an
Posts: 6
Topic starter  

Christian a répondu : 

Salut,

Concernant le C64, effectivement le signal NMI est disponible sur le port d'extension.

D'autre part, le 6510 possède deux autres particularités qui peuvent simplifier les choses: un signal AEC et un port de 6 bits (un comme si il avait un petit morceau de 6522 intégré, ou un peu comme comme le "port" I/O du Z80).
Le port en question peut gérer les accès aux différentes parties de la ram/rom/entrées-sorties ce qui peut simplifier la bascule entre différentes banques, je ne sais pas si c'est utilisé par les programmes des cartouches Replay.

Le signal AEC permet d'isoler complètement le processeur du reste de la machine, ce signal couplé au signal RDY (qui existe sur le 6502) peut permettre à un autre processeur de prendre le contrôle du C64.
C'est utilisé en interne par le processeur vidéo pour accéder directement à la ram par exemple.

Les signaux RDY et AEC sont également utilisables par le port d'extension.

Il faudrait que je trouve un schéma d'une cartouche Action Replay pour le C64 pour voir exactement comment elle fonctionne et dans quelle catégorie elle rentre.

L'intervention sur l'Oric pour récupérer le signal NMI n'est pas destructrice et est totalement reversible, il suffit simplement de souder un fil au niveau du bouton de "reset" qui est sous l'Oric.


RépondreQuote
JihemB
(@jihemb)
Active Member Adhérent
Inscription: Il y a 1 an
Posts: 6
Topic starter  

Jede a répondu :

Bonjour,

Il y a plusieurs solutions, il y en une qui marcherait sans modifications (sans sortir un fil de l'oric donc) mais qui ne marcherait pas avec tous les jeux.

Il y a l'autre solution avec le NMI (donc fil qui sort de l'oric).

La 1ère peut se faire par exemple avec la twilighte board avec du code et ne marcherait pas pour tout (principalement tous les jeux n'appelant pas la ROM) avec un delta sur les timers du via. Mais dans l'état actuel de la carte, c'est du code à faire.

La 2ème pourrait se faire aussi avec la carte, mais cela implique une mise à jour du firmware pour gérer le signal et de tirer le signal NMI sur la carte.

La solution proposée par Christian qui serait de sauver tout ce qui passe sur le bus est faisable aussi avec la carte modulo le fait qu'il faudrait le gérer dans le firmware (en gros un flag dans un registre permettrait de dire à la carte d'écrire sur sa RAM interne tout ce qui passe sur le bus). Ce n'est pas spécialement compliqué à faire sur le firmware. D'ailleurs, cette technique, je l'ai prévu pour quelque chose Mais j'ai tendance à garder secret les trucs avant de le montrer réellement.

Enfin, il y a le temps à y consacrer : de mon coté, l'aspect Proof of Concept me plait en forme de "C'est faisable" mais j'ai tellement d'autres trucs à faire sur Orix et la carte que je ne me vois pas le faire (même si j'aime bien les défis Enfin, il se pose la question (posée dans mon autre mail), quelle est l'audience.

Par exemple, la twilighte board permet de jouer aux jeux Oric avec les joysticks sans aucuns patchs et de manière transparente. Il suffit de lancer le jeu, et tout se configure tout seul, je ne suis pas sûr que beaucoup de personnes jouent aux jeux sur réel avec les joysticks (alors que tout est déjà simplifié car il faut juste lancer le jeu par un menu et brancher un joystick).

Bref, j'ai la main sur la carte et "tout est faisable" :  j'essaie de montrer régulièrement que beaucoup de choses sont faisables avec la carte aux meetings (que j'essaie de faire universel et packagée) : on branche et on a tout. Même si techniquement cela m'intéresse de le faire, j'ai moyennement le temps en ce moment Donc, si quelqu'un veut faire des tests, l'émulation de la carte est dispo dans oricutron à partir de github (il manque bcp de trucs dedans), mais il y a suffisamment dans l'émulation pour faire la 1ère solution (software donc).


RépondreQuote
didier_v
(@didier_v)
Estimable Member Redacteur en Chef
Inscription: Il y a 2 ans
Posts: 172
 

Merci à JihemB d'avoir posté sur le forum le roman de l'année 2021. 

30 ans après mon action replay pour Amiga, aurais je un orix replay ?

Bon sincèrement, ce n'est pas moi qui pourrait donner vie à cette belle idée ; techniquement trop complexe pour moi. A garder en mémoire tant qu'un talentueux programmeur ne lui a pas donné vie.


RépondreQuote
Share: