[DCMOTO] Demande de nouvelle fonctionnalité
Modérateurs : Papy.G, fneck, Carl
[DCMOTO] Demande de nouvelle fonctionnalité
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 ?
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 ?
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
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.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
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.
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
L'obstacle augmente mon ardeur.
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [DCMOTO] Demande de nouvelle fonctionnalité
On peut aussi ajouter que DCMoto sait déprotéger les programmes basic-protégés. 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:
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 musiqueCode : 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
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
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.
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
Voici un exemple avec La Geste d'Artillac.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [DCMOTO] Demande de nouvelle fonctionnalité
Merci beaucoup Daniel.
Reste à trouver le moyen de convertir un wav en notes de musiques, ChatGpt saura peut-être le faire un jour ?
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 ?
Reste à trouver le moyen de convertir un wav en notes de musiques, ChatGpt saura peut-être le faire un jour ?
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 ?
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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).
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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...
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
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.
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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.
Tiens ce matin il y a eu un pic sur downdetector Mais bon là DCMoto.free.fr fonctionne chez moi..
Ca ne dure pas longtemps, mais c'est répétitif.
Tiens ce matin il y a eu un pic sur downdetector 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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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 ?
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
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [DCMOTO] Demande de nouvelle fonctionnalité
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos