[DCMOTO] Demande de nouvelle fonctionnalité

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

kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

[DCMOTO] Demande de nouvelle fonctionnalité

Message par kirion »

Serait-il possible d'ajouter une fonction à DCMOTO ?

Un sorte de point d'arrêt sans un être un.
L'idée serait de pouvoir programmer un point d'arrêt sur une adresse en ROM Système.

$E81E en exécution
A chaque fois que l'émulateur exécute l'entrée $E81E, il enregistre dans un fichier an append (ajout à la suite) du contenu :
ACCU B (1 octet)
$6031-6032 (2 octets)
$6033-6034 (2 octets)
$6035 (1 octet)
$6036-6037 (2 octets)

Donc 9 octets enregistrés à chaque exécution en $E81E

Le but est d'extraire les musiques des jeux.

J'ai effectué le test avec la Geste d'Artillac sur quelques notes de la musique de la page d'intro, avec des points d'arrêt dans DCMOTO
cela permet d'extraire les notes à la main mais le but serait de tout enregistrer dans un fichier sous forme binaire.

J'ai effectué également le test avec la musique d'intro de Ok Cowboy qui utilise aussi $E81E. Et je suppose que beaucoup d'autres jeux le font également même si certains adressent directement le CNA.

Daniel, est-ce réalisable ?
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par __sam__ »

C'est super particulier comme demande. Le mieux serait d'exploiter le fichier dcmoto_trace.txt que le débuggeur peut produire. Il contient tout ce qu'il faut pour ce que tu veux faire.
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
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par Daniel »

Ce n'est pas la bonne méthode pour récupérer le son émis par dcmoto. Les paramètres du beep n'ont pas la même adresse pour tous les ordinateurs. L'adresse de la routine d'émission du beep dépend à la fois de l'ordinateur et du BASIC.

La plupart des jeux n'utilisent pas la fonction BEEP du système, ils modifient directement le buzzer dans un registre d'entrée/sortie. Le BEEP n'est pas le seul son émis par les jeux, il y a aussi le CNA, le synthétiseur de parole, les synthétiseurs SN76489 et YM2413. En résumé, à part pour un seul ordinateur et uniquement pour les jeux tout en BASIC utilisant uniquement la fonction PLAY, ta méthode ne te permettra pas de récupérer quoi que ce soit.

La bonne méthode est celle que j'utilise pour les tests : écrire un fichier .wav reproduisant exactement le son envoyé par dcmoto à la carte audio du PC. Aujourd'hui c'est un paramètre de compilation, je suis seul à pouvoir l'utiliser. Il suffirait de l'ajouter aux options pour que tous les utilisateurs y aient accès.
Daniel
L'obstacle augmente mon ardeur.
Zebulon
Messages : 2806
Inscription : 02 nov. 2020 14:03

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par Zebulon »

Je suppose que l'idée était de récupérer les données sources de la musique, comme dans un fichier midi et non la musique elle même, c'est à dire les ondes générées. Maintenant en effet si peu de jeux utilisent cette méthode ça ne sera pas très utile.

Si c'est un jeu en Basic j'imagine qu'on doit pouvoir localiser les datas qui servent à jouer la musique et si c'est en assembleur il faut désassembler, identifier où la musique est jouée et localiser les données sources.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par Daniel »

Il suffit de lister les programmes BASIC pour savoir ce qu'ils jouent. Les programmes en assembleur, au moins ceux que je connais, n'appellent pas la routine PLAY du moniteur système. Il s utilisent directement le vecteur d'entrée/sortie.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par __sam__ »

On peut aussi ajouter que DCMoto sait déprotéger les programmes basic-protégés.
Capture.PNG
Capture.PNG (5.27 Kio) Consulté 1653 fois
Bon par contre la geste d'artillac n'est pas en basic. En revanche il n'est pas compliqué de trouver la routine qui joue de la musique

Code : Tout sélectionner

B6F3 8601       LDA    #$01                2
B6F5 B76035     STA    $6035               5 TIMBRE
B6F8 CC000C     LDD    #$000C              3 
B6FB FD6031     STD    $6031               6 TEMPO=12
B6FE BEB777     LDX    $B777               6
B701 1CAF       ANDCC  #$AF                3
B703 A684       LDA    ,X                  4 Données = $FF => fin muisque
B705 81FF       CMPA   #$FF                2
B707 2608       BNE    $B711               3
B709 8EB000     LDX    #$B000              3 Debut données musique
B70C BFB777     STX    $B777               6 Pointeur données musique
B70F 20E2       BRA    $B6F3               3 rebouclage
B711 A684       LDA    ,X                  4 
B713 4D         TSTA                       2 Donnée = $00 ?
B714 2604       BNE    $B71A               3 
B716 3004       LEAX   $04,X               5 oui => on avance de 4 octets et on reboucle
B718 20F7       BRA    $B711               3
B71A BDE806     JSR    $E806               8 
B71D 5D         TSTB                       2 Test appui touche
B71E 262B       BNE    $B74B               3 oui => on sort
B720 CEB769     LDU    #$B769              3 table conversion durée
B723 4A         DECA                       2
B724 E6C6       LDB    A,U                 5
B726 4F         CLRA                       2
B727 FD6033     STD    $6033               6 écriture durée
B72A E601       LDB    $01,X               5 lecture donnée suivante
B72C 2703       BEQ    $B731               3 
B72E BDB74F     JSR    $B74F               8 si pas 0 => on joue note
B731 F66034     LDB    $6034               5 sinon division durée par 2
B734 54         LSRB                       2
B735 4F         CLRA                       2
B736 FD6033     STD    $6033               6
B739 E602       LDB    $02,X               5 donnée suivante
B73B 2703       BEQ    $B740               3 si 0 => saute
B73D BDB74F     JSR    $B74F               8 joue note "B"
B740 E603       LDB    $03,X               5 donnée suivante
B742 2703       BEQ    $B747               3 si 0 => saute
B744 BDB74F     JSR    $B74F               8 jour note
B747 3004       LEAX   $04,X               5 on passe au triplet suivant
B749 20B8       BRA    $B703               3
B74B BFB777     STX    $B777               6
B74E 39         RTS                        5

B74F 3404       PSHS   B                   6
B751 54         LSRB                       2
B752 54         LSRB                       2
B753 54         LSRB                       2
B754 54         LSRB                       2
B755 4F         CLRA                       2
B756 C1F0       CMPB   #$F0                2 Test complement idiot (toujours faux) vu qu'on a 4 LSRB pour commencer
B758 2602       BNE    $B75C               3
B75A C610       LDB    #$10                2
B75C FD6036     STD    $6036               6 OCTAVE 1
B75F 3504       PULS   B                   6
B761 C40F       ANDB   #$0F                2 partie basse de B
B763 CB30       ADDB   #$30                2 conversion en note
B765 BDE81E     JSR    $E81E               8 joue
B768 39         RTS                        5
On peut constater que le code est loin d'être optimisé.
Tout se joue avec le timbre 1 et le tempo à 12.

Le format des données est <drapeau> <note1> <note2> <note3>.
<drapeau> = 255 => fin du morceau
<drapeau> = 0 => on ignore le triplet de notes

Sinon la durée est déduite de <drapeau> via la table en $B769:
<drapeau> = 1 => durée = 6 (double croche)
<drapeau> = 2 => durée = 12 (croche)
<drapeau> = 3 => durée = 18 (croche pointée)
<drapeau> = 4 => durée = 24 (noire)
<drapeau> = 5 => durée = 30 (??? noire + double-croche)
<drapeau> = 6 => durée = 36 (noire pointée)
<drapeau> = 7 => durée = 42 (??? noire + croche)
<drapeau> = 8 => durée = 48 (blanche)
<drapeau> = 9 => durée = 54 (??? blanche + double-croche )
<drapeau> = 10 => durée = 60 (??? blanche + croche)
<drapeau> = 11 => durée = 66 (??? blanche + croche-pointée)
<drapeau> = 12 => durée = 72 (blanche pointée)

Une note à 0 n'est pas jouée. Une note sinon est de la forme $xy avec x=octave, et y=note.
La note1 est jouée avec la durée indiquée par le drapeau et les notes 2 et 3 sont 2 fois plus rapides.

Ce qui est tenté ici est de simuler 3 voix en jouant plusieurs notes rapidement (cf durée divisée par 2 pour les note2 et 3).

Liste des notes: Ben on lit tout de $B000 jusqu'à rencontrer $FF tous les 4 octets:

Code : Tout sélectionner

B000 02 4c 47 8c 01 00 47 8c 01 22 47 8c 01 23 47 8c 
B010 01 00 47 8c 02 4c 47 8c 01 23 47 8c 01 00 47 8c 
B020 01 25 47 8c 01 00 00 8c 01 22 47 8c 01 22 47 00 
B030 02 22 47 8b 02 4c 47 8c 01 00 47 8c 01 22 47 8c 
B040 01 23 47 8c 01 00 47 00 02 22 47 8a 01 23 48 88 
B050 01 00 48 88 01 25 48 88 01 00 00 00 04 27 4b 87 
B060 02 4c 47 8c 01 00 47 8c 01 22 47 8c 01 23 47 8c 
B070 01 00 47 8c 02 4c 47 8c 01 23 47 8c 01 00 47 8c 
B080 01 25 47 8c 01 00 00 8c 01 22 47 8c 01 22 47 00 
B090 02 22 47 8b 02 4c 47 8c 01 00 47 8c 01 22 47 8c 
B0A0 01 23 47 8c 01 00 47 00 02 22 47 8a 01 4c 00 88 
B0B0 01 22 00 88 01 23 00 88 01 25 00 00 04 27 4b 87 
B0C0 01 00 22 47 01 00 22 47 01 2a 22 47 01 00 00 00 
B0D0 01 25 22 4a 01 00 22 4a 02 27 22 4a 01 28 4c 45 
B0E0 01 00 4c 45 01 27 4c 45 01 25 00 00 01 23 4c 48 
B0F0 01 00 00 00 02 25 22 45 01 27 23 43 01 00 23 43 
B100 01 25 23 43 01 27 00 00 01 25 22 45 01 00 00 45 
B110 02 23 4c 45 01 22 47 87 01 00 47 87 01 22 47 87 
B120 01 00 00 00 01 4c 47 8c 01 00 47 8c 01 27 47 8c 
B130 01 28 47 8c 01 2a 47 8c 01 00 47 8c 01 28 47 8c 
B140 01 27 00 8c 01 25 4a 8c 01 23 4a 8c 01 25 4a 8c 
B150 01 27 4a 8c 01 28 4c 45 01 00 4c 45 01 27 4c 45 
B160 01 25 4c 00 01 23 00 88 01 22 00 88 01 23 00 88 
B170 01 25 00 88 01 27 23 43 01 00 23 43 01 25 23 43 
B180 01 27 23 00 01 28 23 85 01 27 23 85 01 25 23 85 
B190 01 23 23 85 01 22 47 87 01 4c 47 87 01 22 47 87 
B1A0 01 22 00 00 04 4c 47 8c 01 4c 47 8c 02 50 47 8c 
B1B0 ff 
Dernière modification par __sam__ le 14 févr. 2023 17:45, modifié 2 fois.
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
kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par kirion »

Merci beaucoup sam, c'est exactement ce que je cherchais à faire.

Non Daniel les jeux dont je parle sont en langage machine et non pas en basic.

Oui Zebulon l'idée est bien de récupérer les données de la musique pour les jeux en langage machine comme dans un fichier midi et non la musique elle-même (qui est l'idée de Daniel).

L'idée bien entendu est de pouvoir rejouer cette musique extraite sur le YM2413 et pouvoir voir la différence de rendu. Alors que si on récupère la musique elle-même, le rendu sera exactement pareil sur le YM2413.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par Daniel »

J'ai quand même ajouté la fonction d'enregistrement du son de dcmoto dans un fichier .wav (version de développement 2023.02.14).
Voici un exemple avec La Geste d'Artillac.
artillac.zip
(130.42 Kio) Téléchargé 54 fois
Daniel
L'obstacle augmente mon ardeur.
kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par kirion »

Merci beaucoup Daniel.
Reste à trouver le moyen de convertir un wav en notes de musiques, ChatGpt saura peut-être le faire un jour ? :wink:

Par contre à l'oreille je trouve que la musique est trop rapide par rapport à celle du jeu lui-même. Quelqu'un d'autre entend la même chose que moi ?
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par __sam__ »

Oui c'est trop rapide. L'émul ne devait pas être à vitesse 100%.

Pour la conversion Midi ceci à l'air de marcher (nonobstant la vitesse incorrecte): https://audiotoolset.com/fr/wav-to-midi

En fait on devrait pouvoir juste capturer l'audio de l'émul avec audacity et envoyer tout cela au site web. Je teste avec Sortilèges... c'est un peux faux pour les aigus, mais ca donne une idée (environnement bruité ici).
Pièces jointes
Sortilèges.zip
(85.61 Kio) Téléchargé 43 fois
Dernière modification par __sam__ le 14 févr. 2023 18:14, modifié 1 fois.
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 : 2806
Inscription : 02 nov. 2020 14:03

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par Zebulon »

Après tout il n'y a qu'une voix et si la plupart des notes sont bien identifiées on peut corriger les quelques qui déconnent dans un éditeur... :D
kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par kirion »

Je voulais télécharger Sortilèges pour ré-écouter la musique mais à nouveau dcmoto.free.fr ne répond plus.
Ca me l'a déjà fait hier soir et d'autres jours également.

Est-ce que vous savez si Free cherche à faire disparaître ses pages perso et laisse les serveurs dépérir d'eux-mêmes ?

P.S. je viens de tester d'autres sites perso chez free et c'est pareil, ça ne répond plus.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par __sam__ »

Chez moi Free déconne. J'ai souvent le PC qui dit "pas d'internet" alors que je suis bien connecté à la box. Parfois il y a internet, mais c'est usenet qui est down chez free (oui je fais parti des vieux qui font du nntp).

Ca ne dure pas longtemps, mais c'est répétitif. :twisted:

Tiens ce matin il y a eu un pic sur downdetector
Capture.PNG
Capture.PNG (46.63 Kio) Consulté 1578 fois
Mais bon là DCMoto.free.fr fonctionne chez moi..
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
kirion
Messages : 346
Inscription : 22 sept. 2022 03:29

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par kirion »

Merci pour le site sam, je suis impressionné. Je ne savais pas que ça existait.

J'ai pu convertir le fichier .wav de daniel, le résultat est trop rapide bien sûr mais ça fonctionne.

Y a t'il un player midi qui existe déjà pour le YM2413 sur TO8 ?
Pièces jointes
artillac.midi.7z
(5.27 Kio) Téléchargé 39 fois
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Demande de nouvelle fonctionnalité

Message par __sam__ »

Je sais pas, mais il faut utiliser les outils de composition de chiptunes. Ils ont probablement un import MIDI. (j'entends parler de Deflemask, mais je connais pas)
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
Répondre