[EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

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

Modérateurs : Papy.G, fneck, Carl

Dmanu78
Messages : 232
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

@sam : tu tiens certainement l’explication. J’échantillonne à 62,5 kHz. Certaines démos sonores exploitent cette possibilité pour générer des sample plus réaliste. Il se peut qu’il y ait un repliement de spectre comme tu l’indiques. Après c’est trop technique pour moi. J’ai vu que ça coince à haute fréquence dans mon outil de test du PSG (dispo sur l’émulateur) où je peux générer un son carré sur toute la plage de fréquence autorisé (quelques Hz ou 56/kHz je crois). En deçà de la valeur 5 du registre R0 du PSG (soit autours de 20 kHz, le son redevient plus grave, ce qui n’est pas logique du tout…

@seb : le problème de lecture des fichiers disquette vient certainement du fait que je ne gère pas les protections mais il y a peut être d’autres causes. Je regarderai. L’émulation du FDC reste encore très partielle.

@ Zebulon : pour druid, le cdt est complètement atypique. Il contient plus de 65535 blocs là où un fichier normal en contient 200 max. :shock: Ca explose la mémoire, c’est bien le mot…

Bon, ben j’ai du boulot. Merci messieurs… :)
Dmanu78
Messages : 232
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Me revoilà après quelques jours d'investigations. Il me semble avoir compris l'origine des sifflements dans les aigus. Dans les cas en question, le AY est programmé pour jouer un son sur une fréquence normalement inaudible (31.25 ou 62.50 kHz) et c'est juste la variation rapide du volume de la voie qui créé la mélodie. Le son aigu vient de la fréquence "porteuse" à plus de 20kHz qui est mal rendue (en échantillonnant qu'à 62,5 kHz, il doit y avoir un repliement de spectre...). J'ai supprimé ce son aigu en "trichant" un peu. A plus de 20 kHz, je considère que le son est inaudible et que le signal porteur est un signal de volume constant. cela me permet de neutraliser les sifflements parasites dans les aigus sans dénaturer le rendu sonore au final.
A toi de me dire Zebulon si le rendu sonore est plus conforme à ce que tu attends. :wink:

Concernant "Druid", j'ai du réécrire en parti le module de conversion d'un fichier CDT au format WAV (car j'ai besoin de faire cette conversion pour lire l'enregistrement natif comme sur une vraie cassette). Auparavant j'allouais une zone en mémoire par bloc d'enregistrements lu. Désormais la conversion se fait en direct sans passer par la création de buffers en mémoire. La conversion est plus rapide et plus de soucis de fuite de mémoire. ça fonctionne beaucoup mieux maintenant.

c'est tout pour aujourd'hui. :)
Je vous laisse tester cette nouvelle version qui porte désormais le numéro v0.429b...en première page de ce post.
Dernière modification par Dmanu78 le 09 sept. 2021 14:07, modifié 1 fois.
Zebulon
Messages : 1905
Inscription : 02 nov. 2020 14:03

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Zebulon »

Super merci beaucoup pour cette version. Je teste ça et je te reviens mais on sent bien que tu maîtrises ton code et les arcanes du CPC. :P
Zebulon
Messages : 1905
Inscription : 02 nov. 2020 14:03

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Zebulon »

Hello. J'ai commencé mes tests sur la dernière version et les sifflements ont bien disparu, la musique est impeccable. Je suis en train de charger Druid sur cassette avec la musique, émulation impeccable (je me suis toujours demandé comment c'était possible de faire les deux en même temps). Encore bravo ! :D
Dmanu78
Messages : 232
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Super. Merci pour tes retours Zebulon. Je pense que l’émulation sonore est quasiment au point maintenant. :)
N’hésite pas si tu constates d’autres anomalies. L’émulation ne pourra que s’améliorer... :)

Effectivement c’est impressionnant de pouvoir jouer de la musique durant le chargement d’un jeux sur cassette car contrairement à une disquette, il n’y a pas de possibilité de relire l’enregistrement à la volée en cas d’erreur de lecture. Et les timing de lecture sont très serrés. C’est pour cela que les interruptions sont normalement bloquées durant une lecture cassette.

Ce qui est amusant, c’est que le son qui sort du haut parleur du CPC 464 durant le chargement d’une cassette ne provient absolument pas du AY mais est provoqué par une interférence dû au design même de la carte mère du CPC. La piste qui transmet les informations du lecteur de cassette est juste à côté de celle qui transmet le son vers le haut parleur et la parasite. Il semblerait qu’il y ait un défaut d’isolation de la masse mais ce n’est pas si surprenant, le design du CPC est assez ´low cost’. Les concepteurs du CPC ont du trouver ça intéressant et n’ont pas cherché à corriger le design.. Le son est produit naturellement sans consommer aucune ressource.

https://www.cpcwiki.eu/forum/amstrad-c ... he-cpc-464

Je vais désormais m’atteler à un autre chantier qui va me prendre un peu de temps : améliorer l’émulation du FDC afin de pouvoir charger les disquettes protégées…ce sera pour de prochaines versions :D
Avatar de l’utilisateur
ThomasR
Messages : 15
Inscription : 16 janv. 2019 09:02

DSK for big formats? (Vortex, Dobbertin)

Message par ThomasR »

Dmanu78 a écrit : 08 juin 2021 14:29...
En vérité j’aimerai bien me replonger avant dans l’émulation du Lecteur de disquette car je m’aperçois que je n’arrive pas à lire les fichiers dsk au format non standard ou protégé. ...
Großartige Arbeit! Ich habe es jetzt zufällig gefunden und den ganzen Verlauf gelesen.

Werden Sie bei der FDC-Emulation auch die großen Formate bedienen? Vortex, Dobbertin und das Format des Klons aus der DDR? Es hat 80 Spuren, aber im Emulator kann man noch mehr Spuren einrichten.
KCcompact.png
KCcompact.png (19.95 Kio) Consulté 4294 fois
__sam__
Messages : 6799
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: DSK for big formats? (Vortex, Dobbertin)

Message par __sam__ »

ThomasR a écrit : 22 sept. 2021 17:00 Großartige Arbeit! Ich habe es jetzt zufällig gefunden und den ganzen Verlauf gelesen.

Werden Sie bei der FDC-Emulation auch die großen Formate bedienen? Vortex, Dobbertin und das Format des Klons aus der DDR? Es hat 80 Spuren, aber im Emulator kann man noch mehr Spuren einrichten.KCcompact.png
Hmm.. après un petit passage dans www.deepl.com....
Auf Französisch a écrit :Excellent travail ! Je l'ai trouvé par hasard maintenant et j'ai lu tout le processus.

Allez-vous également proposer les grands formats pour l'émulation FDC ? Vortex, Dobbertin et le format du clone de la RDA ? Il possède 80 pistes, mais dans l'émulateur, vous pouvez configurer encore plus de pistes.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Zebulon
Messages : 1905
Inscription : 02 nov. 2020 14:03

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Zebulon »

Dmanu78 a écrit : 12 sept. 2021 14:15 Super. Merci pour tes retours Zebulon. Je pense que l’émulation sonore est quasiment au point maintenant. :)
N’hésite pas si tu constates d’autres anomalies. L’émulation ne pourra que s’améliorer... :)
De rien et j'en profite pour restaurer le titre du fil de discussion...
Avatar de l’utilisateur
ThomasR
Messages : 15
Inscription : 16 janv. 2019 09:02

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par ThomasR »

__sam__ a écrit : 22 sept. 2021 17:21
Hmm.. après un petit passage dans www.deepl.com....
Excusez-moi ! Je m'étais appuyé sur la fonction de traduction du forum pour le transférer.
Dmanu78
Messages : 232
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

@ThomasR, merci pour le compliment. :)

oh oui, c'est faisable. L'objectif à terme est que l'émulateur puisse lire à minima tous les fichiers DSK. Il arrive déjà à lire des fichiers DSK formatés en double face et 80 pistes.

C'est plus compliqué avec les pistes protégées (protections GAP ...) mais j'y travaille :)

Je suis notamment tombé sur ce super site qui explique en détail les protections disques utilisées sur CPC...ça me permet de télécharger sans trop d'efforts de recherche les fichiers DSK contenant une protection spécifique et d'améliorer petit à petit l'émulation du FDC...J'arrive depuis peu à lire certains disques protégés par la protection KBI et GAP, mais pas encore sur toutes les variantes de la protection.

https://www.cpc-power.com/cpcarchives/i ... es&num=180

ça avance lentement mais surement :)
Lone
Messages : 16
Inscription : 26 nov. 2020 09:53

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Lone »

Hello,

Je n'étais pas venu depuis un moment, mais je vois que tout ça avance sacrément bien !
Bon courage pour le FDC... Si tu veux mon expérience, la bonne approche n'est pas de comprendre chaque protection (même si c'est aussi intéressant et formateur), mais plutôt la manière dont marche le FDC.

Spoil : Simuler une piste MFM qui tourne, c'est une solution qui permet de supporter toutes les protections sans réfléchir trop sur chacune !
Le vrai problème venant ensuite du format supporté : Le passage de DSK/EDSK a MFM est... Assez difficile (mais possible !).
Les formats HFE et CTRAW sont de bon candidats, sinon, le format étant directement MFM.

Si tu as besoin d'aide ou d'un retour d'expérience (je n'ai pas l'impression que tu ais besoin de beaucoup d'aide :) ), n'hésite pas !

Thomas
Dmanu78
Messages : 232
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Hello Lone,
Content de te relire.
Je te remercie pour ces pistes. Effectivement pour l’émulation du FDC, j’ai pris le parti de convertir en mémoire le fichier DSK au format MFM. Intellectuellement c’est plus satisfaisant puisque je reproduis ‘logiciellement’ le vrai fonctionnement d’un FDC. Je simule une rotation du disque en lisant chaque octet tous les 29 microsecondes et en rebouclant après lecture de x octets afin de faire un tour de piste 5 fois par seconde.
J’ai noté quelques bizarreries dans la conversion puisque dans la littérature il est indiqué qu’une piste occupe environ 6250 octets (200 ms par piste / 32 microsecondes par octet) mais après conversion de certains DSK j’arrive à plus de 7.000 octets par piste…il semblerait que la taille de la GAP3 indiquée dans le DSK soit erronée ou que la lecture soit plus rapide que les 32 micros indiquées. J’ai pris une valeur de 29 micros qui semble un bon compromis.
Mais je suis d’accord avec toi, en passant par la conversion MFM, les protections type GAP par exemple notamment se lisent tout naturellement sans aucun autre artifice…
En vérité, mon principal problème semble venir de la conversion DSK-> MFM dans certaines situations. J’ai l’impression qu’il me manque des informations sur le format DSK non standard.
Les rares doc disponibles sont assez laconiques au niveau de la description de la structure du fichier DSK et notamment lorsque le champs ‘data length d’un secteur est different de la valeur déclarée (très fréquent sur les pistes protégées). Je ne sais pas encore bien retranscrire cette information. (La longueur de la data contient elle les octets du CRC, les donnees GAP3..?)..
De même, les ´weak’ sector restent un peu mystérieux pour moi.

Mais avec un peu de temps et en expérimentant un peu, je trouverai bien une solution satisfaisante :wink:
TotO
Messages : 99
Inscription : 17 avr. 2015 23:31

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par TotO »

Bonsoir !

Peut-être que les épisodes consacrés au FDC peuvent apporter des informations précieuses pour ton émulateur :
https://64nops.wordpress.com
Lone
Messages : 16
Inscription : 26 nov. 2020 09:53

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Lone »

Ah je vois que tu reparcours tout le chemin que j'ai tant arpenté !

Quelques points qui peuvent t'aider sur les dsk et les disquettes :

La totalité des dumps de disquettes que j'ai pu avoir contiennent 100 000 bits MFM par piste. A 2-3% près, au max. Même les dsk qui semblent contenir 7000 bytes (donc, 112000 bits MFM) peuvent tenir dans ces fameux 100k bits. Pour que ça marche, les points à vérifier :
- La taille de certain GAP peuvent être réduite.
- Les secteurs dumpés dans les DSK peuvent se chevaucher (on a parfois un secteur taille 6 - qui n'en fait en réalité que beaucoup moins - suivi de plein de secteurs, dumpé eux aussi, qui donnent l'illusion d'une taille plus grande. Parfois, un secteur va en fait "boucler" autours du trou d'index, et contenir, dans le dsk, des données du début de la piste.)

En gros, j'ai donc construit un algo qui va chercher les débuts de secteurs logique, et tenter de rabouter entre eux les différents secteurs. Attention, piège ! Le DSK ne donne qu'un bit sur deux (MFM), le bit qu'il pense être le bit de data. Sauf qu'en passant sur un GAP, c'est pas obligé, et on peut basculer sur les bits de clock. Il faut vérifier les deux cas.

La bonne nouvelle, c'est que c'est quelque chose qui est déterministe : Une fois l'algo fonctionnel, l'intégralité des DSK a ma disposition (l'intégralité des dsk sans bricolage qui peuvent rendre le dump foireux !) a généré une piste MFM correcte (c'est à dire fonctinnelle, et dans la limite des ~100k bits). La mauvaise, c'est qu'il faut gérer pas mal de cas un peu tordu, à cause d'une génération de dsk aléatoire.

Si tu galère, si tu as besoin d'inspiration, mes recherches sont dispo sur github : https://github.com/Tom1975/CPCCore
Spécifiquement, la méthode FormatTypeEDSK::FillTrackMfm du fichier https://github.com/Tom1975/CPCCore/blob ... peEDSK.cpp

Problème suivant, les weak bits. La encore mon idée était d'analyser les multiples révolutions dispo (classique du DSK/CTRAW) et déterminer les bits qui changent, sachant que tous les weaks bits ne sont pas toujours présents à chaque révolution (ça serait trop simple, sinon).
La encore, fonction void IDisk::CreateTrackFromMultiRevolutions(), fichier CPCCoreEmu/IDisk.cpp

Bon courage (parce qu'on va pas se mentir, ça a été un sacré casse tête !!)
Dmanu78
Messages : 232
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Merci pour ces nombreuses tips :D
Impressionnant. Tu as poussé très loin l’émulation du FDC en prenant en compte les bits d’impulsion MFM.
Je me contente juste de traiter un cran en dessous de toi, au niveau de l’octet et non du bit. Ça doit être suffisant, quoique à te lire, j’en doute maintenant …
J’ai regardé rapidement ton code source qui est déjà bien complexe. Chapeau bas. J’apprécie l’exploit à sa juste valeur.

Bon, il reste du taff. Mon but n’est pas de reprendre ton source justement mais bien de comprendre en profondeur les rouages du fonctionnement du FDC afin d’en recréer ma propre émulation…Vaste chantier.
Je vais donc travailler laborieusement de mon côté pour l’apprivoiser…mais tu as raison ça va prendre un peu de temps. La prochaine release majeure de l’émulateur attendra encore un peu :D et si je bloque je te glisserai un mot… :D

PS: @tot0, Les articles de « Roudoudou » :D sur le fonctionnement du FDC sont très intéressants. Merci pour le lien.
Répondre