60

En effet, j'ai reçu la NGCD de Kuk il y a quelques jours et j'ai pu constater la même chose (j'aurais pu déjà le voir sur la photo de la CM sur son site, mais y'avait pas l'autre face).
Le LC89515 passe par NEO-MGA pour mettre les données en RAM avant de les distribuer en DRAM. Il n'a rien à voir avec la lecture audio, j'ai dit des conneries.
Il me semble aussi que c'est par NEO-MGA que toute la console passe ses commandes pour récupérer tel ou tel truc sur le CD, vu où vont les pistes de CN4. Je ne sais pas trop de quel type est ce composant, je me suis toujours demandé si "GA" ça voulait pas dire simplement "Gate Array".
Avant d'inventer trop de bêtises, j'ai commencé à fouiller dans la source de NeoCD, qui donne tout ce dont on a besoin: l'espèce de "hack" de Fabrice Martinez est bien pensé je trouve.
Dans l'émulateur, il patche le BIOS (neocd.bin) pour que les appels vers les fonctions de lecture du CD pointent sur des instructions 68K illégales. Il a ensuite rajouté ces fausses instructions dans l'émulateur 68K et remplace le tout par des fonctions en C, qui imitent ce que ferait le BIOS sans avoir à émuler complètement le lecteur CD. Je ferais une page là dessus, si j'ai son accord.

Progfr, t'avais donné la source des macros PlayAudio et StopAudio, qui montrait qu'elles ne faisaient que mettre un argument dans D0 et appelaient 0xC0056A. C'est justement une adresse que patche NeoCD:

*((short*)(neogeo_rom_memory+0x56A)) = 0xFAC3;

Il remplace donc le JMP #$C0B6DE qu'on trouve à $00056A dans le BIOS, par l'opcode $FAC3, qui n'est pas valide.
Dans la source de l'ému 68K, on a le "trap" justement sur cet opcode, qui nous mène vers la fonction intéressante:

OP_fac3:
call neogeo_cdda_control

La fonction neogeo_cdda_control (dans neocd.cp) récupère le contenu du registre D0 et sépare ses deux octets bas en commande et argument, pour les passer à neogeo_do_cdda. C'est cette fonction qui imite le comportement du BIOS, pour faire croire au jeu que c'est un lecteur CD tout à fait normal qui fait le travail.

Si on compare ce que fait cette fonction avec la même dans le BIOS, désassemblée depuis $C0B6DE (qui correspond à l'appel vers $C0056A comme je l'ai écrit ci-dessus), on s'aperçoit qu'elles font à peu près la même chose. Je vous épargne la comparaison asm/C, sauf si ça intéresse quelqu'un. La seule différence c'est que le BIOS va parler à NEO-MGA par le biais de $FF0127 (numéro de la piste), $FF0105 (toujours #4) et $FF0147 (numéro de la piste également), alors que l'ému s'en occupe même pas et va juste lire le fichier wav correspondant. Par contre il y a des mises à 0 dans la mémoire du Z80 si je comprend bien (à partir de $E00000), mais j'en vois pas (encore) l'utilité.

Exemple avec Viewpoint (j'adore la musique, j'arrive pas à me lasser de la piste 12):
Arrêt de la lecture CDDA avec la commande 06, piste 00:
move.l #$00000600,d0
jsr #$C0056A

Lecture CDDA avec une table, le numéro de l'entrée est dans D0:
andi.l #$000000FF,d0
movea.l #$00012A60,a2
add d0,d0
move 0(a2,d0),d0
jsr #$C0056A

Avec à $012A60, des données du genre "dc.w #$0402", ce qui enverrait la commande 04, piste 02. Je ne sais pas pourquoi VP utilise une table avec des paires commande/piste au lieu de les passer directement dans D0.
Pour résumer, c'est bien $C0056A qu'il faut appeler pour lire une piste, avec dans D0, la commande et la piste. Les commandes 2 et 6 arrêtent la lecture, et les 0,1,3,4,5,7 démarrent la lecture. Toutes les autres sont ignorées. Les macros de Neodev mettent le bit 7 de $10FD80 à 1 avant de balancer la commande, mais je ne sais pas à quoi ça sert.
J'ai à peine commencé à écrire un petit programme de bricolage à graver, avec possibilité de faire des peek/poke dans la mémoire et de (si j'y arrive), uploader des programmes depuis le port joystick. Sans débugger sur les émus et avec un nombre limité de CD-R, ça va être un peu chaud ;p
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

61

Alors là tu me bluff carrement car moi j ais pas avance au tant que ça, vue que la tu as été vraiment dans dans le hardware pour trouver tous sa smile FRANCHEMENT BRAVO vivement la suite smile

je devrais finalise mon schémat bientot

62

Thanks Progfr smile, tiens si par le plus grand des hasards tu survoles ce message, est-ce que tu pourrais me dire où tu avais trouvé la routine PlayAudio ?
J'ai l'air un peu idiot parce que j'ai essayé tout ce que je pensais, et pas moyen de lancer la lecture d'une piste... Visiblement y'a autre chose que l'appel à $C0056A (bien que ça marche très bien sur ému, la console elle veut rien savoir et fait même pas bouger la tête de lecture).
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

63

voila cela arrive alors s est ici http://frogfeast.rastersoft.net/NeoGeoCDSrc.html

download the source code

le fichier est routine.s ligne 646

voila smile

64

Sa avance avec furrtek on pense avoir trouver comment fonctionne la lecture des pistes audio smile

65

cool

ça va en faire des articles interessants
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

66

Schéma de Progfr avec quelques modifications et passé dans openoffice:

neogeocd2.png

Il devrait pas y'avoir trop d'erreurs, et si il y en a, c'est surement des flèches manquantes.
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

67

picol grin

68

Gros mise a jour du site de furrtek bien intéressante

69

ah oui ça commence vraiment a prendre forme
Bravo Furrtek
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

70

claire il y a eu pas mal de travail

71

Salut les Amis ... je salut egalement le gros travail de mise a jour (en faite depuis la RGC 2010) de notre ami Furrtek
CIAO et bon Week-End

PS:
Si cela interesse Furrtek pour sa section Y2610 - FM, j'ai reussi a dechiffrer le Format des Fichiers INStruments de MVStracker ... Pour cela j'ai parcouru le Net et j'ai decouvers par exemple ou Jeff KURTZ (neobitz) etait aller pecher les Voices (FM librairie) pour son tracker : c'est ici http://park14.wakwak.com/~valsound/fm_lib.html le site du musicos Pro /Japonais Takeshi Abo ... cool non ?

Bye a tous

72

c'est encore Moi, durant mes recherches j'avais trouvé ce petit FM keyboard /Editeur de Voices (en fait celles de VALSOUND et MVStracker) voici le lien qui pourrait aider les musicos du Dimanche a créer de nouveaux instrument pour nous ...


http://mmltalks.appspot.com/labo/voiceeditor.html Script Java je suppose ...tres sympa

Bye

Fred/FRONT

tromb Fichier joint : UZ83 (Fm Keyboard.PNG)


Update : J' ai réussi a trouver le programme FLASH de cet Editeur :
cliquer droit sur le fichier *.swf et selectionner votre Navigateur Web (Internet explorer par exemple)

tromb Fichier joint : voiceeditor Flash.zip

73

voila ce que je fais de nouveau

test.JPG

cela n est pas simple pour arrivé a ce résultat contrairement à furrtek, je code en C avec neodev mais j avoue que le sdk est assez mal documenté et lève parfois plus de souci. Mais cela avance, ce que je montre n est nulement un jeux mais un résultat d apprentissage un peu dur dur.

74

Sur les trames de gris ?
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

75

non kuk s est un simple fond sans rien s étais pour faire mes tests de scroll

76

grin
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

77

s étais pour faire voir meme si je ne donne pas signe de vie je suis toujours actif helas neodev n est pas très simple, mais on y arrive

78

cool
Moi je voudrais pleins de jeux et de Démo sur NeoGeo CD pour 2011 love
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

79

tien une bonne nouvelle ma neogeo CDZ est arrivé ce matin smile smile

80

kuk (./78) :
cool
Moi je voudrais pleins de jeux et de Démo sur NeoGeo CD pour 2011 love


je pense que furrtek à pas mal d'avance smile j ais vue quelque screen cela à l air prometteur

81

oui une fois qu'il auront les graphs ça sera bien sympa
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

82

Et allez, pendant que j'y suis, encore quelque chose qui risque de finir à l'abandon d'ici deux ou trois mois: http://fr.neogeodev.wikia.com/wiki/Wiki_NeoGeo_Development
Par contre, je jure sur l'honneur que je le tiendrais à jour si il y a au moins un contributeur étranger qui apparaît et fait une page tongue

Au fait, merci FRONT smile Il faudra que tu viennes personnellement me péter les dents pour le temps que je met à répondre à tes mails. Le dernier que j'ai eu portait sur les cartes mémoire AES... Faudra que j'ajoute les infos sur le wiki.
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

83

furrtek (./82) :
Par contre, je jure sur l'honneur que je le tiendrais à jour si il y a au moins un contributeur étranger qui apparaît et fait une page tongue.gif

• Zerosquare appelle un pote belge tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

84

Moi et ma grande gueule ! mad

(A quoi reconnait-on un forum de nerds ? Poster à 5 du matin, recevoir une réponse dans la minute)
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

85

N'est-ce pas hehe
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

86

Salut a tous
en Bonne année a tous, encore une fois

FTK, pas de probleme pour tous les Emails que je t'ai envoyé et qui sont resté sans réponse ... Pour moi ce qui compte, c'est que tu continues a mettre a jour ta section NEOGEO qui deviendra j'en suis sur, la BIBLE du developpeur pour la NEOGEO ( une fois finalisée ---> penses qd meme a nos amis anglophones ... mais attention, par la suite tu risques d'etre assailli de question via Email !!!! wink))

tiens j'en profite que tu passes plus regulierement pas ce Forum ... une petite incoherence entre le Code Source de C. DOTY
et tes essais sur le CDDA
* void PlayAudio(DWORD Track); Remarque : On passe par l'ASM pour la version CD !pour Jouer un TRACK d'un CD Audio --- ON N'UTILISE PAS LA COMMANDE 'send_sound_command(Track + SOUND_ADPCM_PT_5182)'
* Only supports tracks 0-9
PlayAudio:
.set _ARGS, 4

* Get track
move.l _ARGS(a7), d0 ; d0 CONTIENT LE NUMERO DE PISTE A JOUER

bset #7, 0x10FD80
jsr 0xC0056A

rts

* void StopAudio();
StopAudio:
move.w #0x0400, d0

bset #7, 0x10FD80
jsr 0xC0056A

rts
--------------------------------------------------
http://furrtek.free.fr/index.php?p=crea&a=neogeo&ng=5 Chapitre 'BIOS AES/MVS'

Lecture CD Audio:

0,1,4,5: Play
6,2: Pause
3,7: Resume


le code 4 ca STOP a ca JOUE ?

Bye
FRED /FRONT

87

Salut,
Oui je suis sincèrement désolé pour les mails, je les lis bien sûr toujours et j'ajoute les infos à mes pages, mais après la flemme et la procrastination prennent place... Je sais que c'est très égoïste et impoli de ma part.

En effet, j'avais pas remarqué cette incohérence. Je n'ai pas précisé que ces infos venaient d'une vieille source de l'émulateur NeoCD.
Pour lui, les commandes 0,1,3,4,5,7 démarrent ou reprennent la lecture d'une piste. Les commandes 2 et 6 la mettent en pause.
Top Hunter utilise la commande 2 pour arrêter la lecture par exemple. Mais pour la lancer, je ne sais pas sad

Mais sur la vraie console, c'est toujours pas ça... J'ai eu beau décompiler quelques jeux et deux BIOS, j'ai toujours beaucoup de mal à comprendre comment c'est censé marcher.
Dans certains cas il y a des échanges avec le Z80, d'autres non. Dans le BIOS (CD et CDZ confondus), il y a au moins 2 routines traitant de la lecture CDDA.

Sinon pour les anglophones, j'ai commencé à faire un wiki sur Wikia. C'est ouvert à tous et je suis en train d'adapter les pages de mon site vers les articles. En espérant que ça soit un peu plus accessibles et facile à suivre.
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

88

Salut

C'est a propos de la créations de nouvelles fonctions pour le Kit SDK NeoDev , et de pouvoir mixer du Code C et ASM
pour rappel il s'agissait d'un Message du 05/12/2009 de ce Forum

topics/127038-moved-le-sdk-neodev Poste du 05/12/2009
>FTK
Pour le bout de source pour la lecture CD, je comprend pas ce qu'ils font
avec _ARGS(*). Je sais pas si c'est un tableau ou quoi... mais vu le nom,
c'est peut être un pointeur vers le début des arguments nécessaires à
l'appel d'une procédure du BIOS.

Je crois me rappellé t'avoir donné un semblant de reponse en te disant que '.set _ARGS, 4' que c'etait comme une sorte de :
ARGS EQU 4 ... je pense que je n'avais pas totalement tord, mais ce n'etait pas tout a fait la reponse a donner

Exemple Arguments :
LoadPalette:
.set _ARGS, 4
move.l _ARGS(a7), a1
move.l _ARGS+4(a7), a0
move.l _ARGS+8(a7), d0

* Backup data registers
movem.l d0/a0-a1, -(sp)

* Each pal = 16 words so palette number = d0 >> 5
asr.w #5, d0

------------------------------------------
Code 68000 désassemblé :
EXT_0031:
movea.l 4(a7),a1 ;0374C: 226F0004
movea.l 8(a7),a0 ;03750: 206F0008
move.l 12(a7),d0 ;03754: 202F000C
movem.l d0/a0-a1,-(a7) ;03758: 48E780C0
asr #5,d0 ;0375C: EA40

J'ai donc effectué des recherches en je pense avoir trouvé des REPONSES donné par des PRO , vous les reconnaitrez peut-etre

http://gendev.spritesmind.net/forum/viewtopic.php?t=211&sid=634708aec94ceafd89b93f62cb53d38b
ici Pacal BOSQUET cherche a mixer du Code C avec de l'ASM , et Charles DOTY lui donne une reponse
-------------------------
>De P. BOSQUET
It looks like the compiler is reserving 4 bytes on the stack for each parameter, even when it's only using the low word.

>De C. DOTY :
Yep. It's 4 bytes regardless of parameter size.
To align the code use:
.align x
where x is the byte to align to. For example, .align 4 creates DWORD alignment

RQ : DWORD (4 Byte) or WORD (2 Byte) data format
-------------------------

j'ai trouvé autre chose ici , encore plus complet
http://gendev.spritesmind.net/forum/viewtopic.php?t=703
-------------------------------------
The only things that need changing are the directives, which you can find here.
http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops
The ABI gcc uses for the 680x0 is as follows:

The return address is pointed to by the stack pointer, with all arguments following it as LONGs from left to right.

0(sp) = return address
4(sp) = first (leftmost) arg
8(sp) = second arg
etc.

You need to save and restore any register you use other than d0, d1, a0, and a1
-------------------------------------

Au passage vous remarquerez que ce thread parle de la librairie 'aPLib' DECRUNCHER tournant entre autre sur le Proc 68K ... pourrais peut-etre utile pour la NEOGEO CD ...
>http://www.ibsensoftware.com/products_aPLib.html Homepage

>>>> tu en pense quoi FTK, ou vous les autres ?


Bye
Fred/FRONT

PS: donc en un mot c'est lié au Stack Pointer qui contient les DATAs des Registres d'Adresse et de Données qui constituent les parametres du style PALETTE , SPRITE dans les fonctions ou macro que l'on utilise.

89

Oui pour le m68k tout les arguments d'une fonction C sont pusher sur la stack.

Par contre y'a quelque technique pour optimiser tout ca, je m'explique :

Prenons memcpy par exemple, son prototype c'est void * memcpy(void *dst, const void *src, size_t len);

Donc en asm m68k pour recuperer les parametres faudrais faire un truc du genre :
[source=plain]move.l 4(sp), a0
move.l 8(sp), a1
move.l 12(sp), d0[/source]

Ce qui peut se simplifier en :
[source=plain]movem.l 4(sp), a0-a1
move.l 12(sp), d0[/source]

Mais si on change l'ordre des paramettres (cad les adresses en derniers), on peut faire :
[source=plain]movem.l 4(sp), d0/a0-a1
[/source]
Notre prototype serais par contre : void * memcpy(size_t len, void *dst, const void *src);

Meme si ce n'est pas conseiller pour des fonctions de la libc standard, pour des fonctions perso c'est ce que je fait (et ce que je conseil).

La raison pour laquelle on ne peut pas garder le meme prototype pour cet exemple est que l'instruction movem accede d'abord au registres de donnee puis au registre d'adresse.


Apres ce petit apparte, j'en profite pour dire que j'ai commencer cette nuit le dev neogeo (mvs/aes d'abord) et un de-assemblage du bios (pour l'instant pas mal commenter, je dirais a 30cheeky.
Le but est de faire comme pour ma lib de dev megadrive, cad code en asm pour la lib (acces a la memoire video, joystick etc ...) mais prevu pour coder en C par dessus.
Des que cela un peu plus mature je posterais tout ca ici.
Peace Unity Love et Having Fun!!!

90

On peut égaler passer les arguments dans des registres au lieu d'utiliser la pile. Mais je ne sais pas si tous les compilateurs C permettent ce genre de choses.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo