VG5000: emulation changement de ROM

Couvre tous les domaines de l'émulation logicielle ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

VG5000: emulation changement de ROM

Message par joaopa »

Suite à ce qu'a dit Daniel sur la possibilité de changer facilement la rom sur VG5000, je souhaite faire une rom custom en ajoutant le mode 80 colonnes à la rom du vg5000. Pour éviter d’utiliser 1000 eeproms, est-il possible d'ajouter une option home-made rom pour dcvg5k, grâce à laquelle on pourrait charger une rom que l'on a écrite soi-même.

Merci d'avance.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: VG5000: emulation changement de ROM

Message par Carl »

Cool, un peut être un Basic avec des commandes circles, plot, draw.... ;-)
Xavier

Re: VG5000: emulation changement de ROM

Message par Xavier »

à première vue, il sera facile de ...
L'analyse de la structure de l'émulateur en ma possession ne le permet pas.
Contrairement à toi, je suis pas au courant des avancées futures au point de vu développement sur ce logiciel.

Pour modifier la ROM de lancement, il aurait fallu extérioriser la rom (en ressource encapsulée actuellement), avec la lecture d'un fichier ad hoc, mais le programme charge les deux roms Basic en mémoire aux chargements de l'exécutable.
Donc, la solution d'écraser telle ou telle fichier lu au démarrage est impossible.

Deuxième solution, patcher un fichier rmx, qui contient la rom.
Mais cette seconde solution est plus qu'improbable, car la mémoire sera effectivement modifiée, mais les pointeurs processeurs seront aux mauvais endroits pour le PC, les piles et les différents flags processeur utilisés pourront poser problème (cf clavier).
Donc, ça bloque aussi de ce coté.

Seule solution, demander à Daniel d'ajouter une troisième option aux BASIC1.0 et BASIC1.1 existants, et d'y ajouter une option "ROM ALTERNATIVE", qui ira charger la nouvelle ROM, en lieu et place de la ROM du fabriquant, en lisant un fichier "ALTERNAT.ROM" (dans le répertoire DCVG5K) à chaque démarrage de la machine avec cette configuration.
Il est d'ailleurs possible d'indiquer l'option (ou l'activer) seulement si ce fichier est présent dans le répertoire à son lancement ou à l'ouverture du menu de configuration.

Hormis cette modification logiciel, point de possibilité de charger une ROM Home-made.
Toutefois, il se peut que la version du logiciel que j'utilise soit obsolète (v4.13), donc une solution a peut-être été trouvée entre temps...

Et il est possible qu'une option en ligne de commande soit disponible (???), et qu'en lançant "dcvg5k -ROM:ALTERNAT.ROM", le logiciel fasse le travaille, mais aucunes mentions n'est faite sur cette utilisation de telles commandes "secrètes".
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: VG5000: emulation changement de ROM

Message par joaopa »

Xavier a écrit :Seule solution, demander à Daniel d'ajouter une troisième option aux BASIC1.0 et BASIC1.1 existants, et d'y ajouter une option "ROM ALTERNATIVE", qui ira charger la nouvelle ROM, en lieu et place de la ROM du fabriquant, en lisant un fichier "ALTERNAT.ROM" (dans le répertoire DCVG5K) à chaque démarrage de la machine avec cette configuration.
Je pensais à ça.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: VG5000: emulation changement de ROM

Message par Daniel »

Charger une autre ROM semble simple, mais en fait il y a une grosse difficulté : l'émulateur modifie quelques instructions et teste quelques adresses pour les opérations d'entrées/sorties : écriture cassette, test vitesse k7, lecture octet cassette, fin cassette Basicode, signaux de synchro.

Avec une ROM modifiée, il serait facile de faire les mêmes modifications en adaptant les adresses :

Code : Tout sélectionner

void Patchrom()
{
 rom[0x3aa9] = 0xed; rom[0x3aaa] = 0xfe;    //ecriture cassette
 rom[0x3af3] = 0xed; rom[0x3af4] = 0xfe;    //test vitesse k7
 rom[0x3b48] = 0xed; rom[0x3b49] = 0xfe;    //lecture octet cassette
 rom[0x1e00] = 0xaf; rom[0x1e01] = 0x1f;    //fin cassette Basicode
 rom[0x3a81] = 0xc9;                        //signaux de synchro
}
Par contre le test des adresses fait partie intégrante du programme. Il faudrait les fournir en paramètres pour adapter cette fonction à la nouvelle ROM. C'est un peu compliqué et source d'erreurs.

Code : Tout sélectionner

void PatchZ80(register Z80 *R)
{
 extern void Writeoctetk7(), Testvitessek7(), Readoctetk7();
 if(R->PC.W == 0x3aab) Writeoctetk7();  //ecriture cassette
 if(R->PC.W == 0x3af5) Testvitessek7(); //test vitesse k7
 if(R->PC.W == 0x3b4a) Readoctetk7();   //lecture cassette
}
Une autre solution serait de donner comme contrainte de ne pas déplacer ni modifier les cinq routines d'entrées/sorties patchées par la première fonction ci-dessus. Dans ce cas il suffirait de charger la nouvelle ROM sans la modifier, à la place de la ROM officielle. Notez que ces cinq routines sont déjà aux mêmes adresses entre le BASIC 1.0 et le BASIC 1.1, on pourrait en faire une règle générale pour toutes les nouvelles ROM.

Si cette dernière solution est retenue la modification de dcvg5k est très facile : il existe déjà la fonction "Charger un fichier" dans l'outil de mise au point. Actuellement cette fonction permet de modifier uniquement la RAM il suffirait de l'accepter aussi pour la ROM.

On peut aussi ajouter une option "dcvg5k.rom" (après ROM 1.0 et ROM 1.1) pour charger la ROM à partir du fichier dcvg5k.rom, c'est encore plus simple. Voir ci-dessous dcvg5k_20160823 :
dcvg5k_20160823.zip
(200.97 Kio) Téléchargé 171 fois
Daniel
L'obstacle augmente mon ardeur.
Xavier

Re: VG5000: emulation changement de ROM

Message par Xavier »

:shock:
Emulation partielle ?
:oops:
Là c'est cuit pour une ROM qui gère les roms exotiques.

En deux mots, Daniel surveille soit le PC processeur, soit des oppcodes illégaux introduit dans le binaire de la ROM ou au lancement du logiciel!
C'est (était) une solution adoptée par les émulateurs d'ancienne génération pour éviter certaines routines gourmandes en ressources.
Cette méthode est aussi utilisée pour "strapper" une routine interne afin de remplir directement la mémoire... sans passer par les IO externes (K7 en chargement rapide).

On prend donc l'exemple d'un chargement de K7, en faisant "LOAD", l'émulateur prend la main à l'offset d'entrée en ROM de la routine, et bloque l'émulateur à cet endroit...
Il se charge de compter les blocs K7 directement en binaire, de le charger en mémoire, puis redonne la main à la fin supposée de la routine de chargement, pour mettre à jour les variables systèmes.
C'est pour cela que les fichiers WAS ne sont pas directement lu par l'émulateur, car il faudrait lire en temps réel le fichier son, pour y décoder les informations par le biais de la routine complète de la rom.
Mais, émuler complètement la machine (sans ces "rustines"), ralentissait considérablement les PCs d'antan.

Il est toujours possible de les retirer, mais cela implique un travail de codage qui rendrait l'utilisation de l'émulateur plus rigide, et demanderai une refonte complète des codes!
... lecture de fichiers audios, conversion des fichiers K7 en audio, puis chargement en temps réel... traitement de l'affichage avec une gestion des scan-lines inutiles...
Les utilisateurs ne sont pas forcement prêt à voir "régresser" cet émulateur, car avec un chargement trop lent, une imprimante indisponible...

Donc, le travail est énorme pour l'auteur de l'émulateur, même si ses limites sont encore inconnues à ce jour, il est préférable qu'il passe sont temps à travail sur autre chose, car ces modifications sont ma foi, peu utiles car ponctuelles (même si l'aventure semble séduisante et ambitieuse!)

Donc, à priori il serait (dans un premier temps) possible de créer une matrice de ROM avec un masquage d'adresses réservées!
Il suffit que tu demandes à Daniel la liste des pointeurs ROM pour les accès réservés sur l'émulateur! (adresses en nop appelées pour les actions particulières)...

Mais, là encore, il s'agira d'une ROM spécialement crée pour l'émulateur, car dans la vraie vie, le VG5000 exécute la ROM dans sont entièreté et non en "oubliant" des codes.

Pour certains émulateurs, ces raccourcis posent parfois des problèmes de compatibilité, au niveau des routines faisant appel aux codes ignorés... car l'émulateur ne traite pas forcement toutes les informations espérées.

C'est pour cela que le problème de Daniel est problématique.
Et que son (h)ardeur est quelque-peu émoussée !
:(
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: VG5000: emulation changement de ROM

Message par Daniel »

Ne vous laissez pas embrouiller par Xavier :wink:
La contrainte est beaucoup plus simple : vous pouvez écrire la nouvelle ROM comme bon vous semble, il suffit de laisser les cinq routines détournées par l'émulateur aux mêmes adresses : 3aa9h, 3af3h,3b48h, 1e00h et 3a81h. Ainsi la nouvelle ROM fonctionnera à la fois avec dcvg5k_20160823 et avec la vraie machine.
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: VG5000: emulation changement de ROM

Message par joaopa »

Merci Daniel,

sais-tu si sur un vrai VG5000, on peut faire une rom de taille supirieure à 4000H, si on en place une partie à une adresse haute (style 7000H)
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: VG5000: emulation changement de ROM

Message par Carl »

Image1.jpg
Image1.jpg (252.09 Kio) Consulté 5347 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: VG5000: emulation changement de ROM

Message par Daniel »

On doit aussi pouvoir mettre une ROM externe (cartouche) entre les adresses 8000h et ffffh

Il y a des informations dans ce document :
external-eprom-rom.zip
(180.57 Kio) Téléchargé 178 fois
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: VG5000: emulation changement de ROM

Message par 6502man »

Je viens d'essayer cette version avec une rom Basic 1.1 mais la commande K7 CLOAD ne fonctionne pas :(
J'ai pourtant utilisé la ROM 1.1 d'origine juste renommé en DCVG5K.ROM :?:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: VG5000: emulation changement de ROM

Message par Daniel »

Le Basic n'est probablement pas translatable, il ne doit pas pouvoir s'exécuter à une adresse différente.
Pour faire fonctionner une cartouche en 8000h il faut que le programme qu'elle contient soit prévu pour cette adresse.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: VG5000: emulation changement de ROM

Message par Mokona »

Il n'est pas translatable, c'est certain. Ne serait-ce qu'à cause de l'utilisation de l'instruction RST et le mode d'interruption qui attend du code a des adresses précises.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: VG5000: emulation changement de ROM

Message par Papy.G »

Et avec quelques straps pour l'exécuter dans sa plage d'adresses originale?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: VG5000: emulation changement de ROM

Message par 6502man »

Non je ne le translate pas, j'utilise le fichier DCVG5K.ROM qui remplace la ROM interne ou j'ai pas compris :oops: :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Répondre